From b8074831c3268cd0966e30923ba8c70cf2394c74 Mon Sep 17 00:00:00 2001 From: Nail Sharipov Date: Sat, 23 May 2026 16:13:12 +0300 Subject: [PATCH 1/9] draft new int api --- iTriangle/Cargo.toml | 8 +- iTriangle/src/advanced/centroid.rs | 49 +++--- iTriangle/src/advanced/convex.rs | 36 ++-- iTriangle/src/advanced/delaunay.rs | 74 ++++---- iTriangle/src/advanced/triangulation.rs | 15 +- iTriangle/src/float/centroid_net.rs | 10 +- iTriangle/src/float/circumcenter.rs | 13 +- iTriangle/src/float/convex.rs | 3 +- iTriangle/src/float/custom.rs | 96 ++++++---- iTriangle/src/float/delaunay.rs | 19 +- iTriangle/src/float/locator.rs | 22 ++- iTriangle/src/float/triangulatable.rs | 80 ++++++--- iTriangle/src/float/triangulation.rs | 33 ++-- iTriangle/src/float/triangulator.rs | 39 ++-- iTriangle/src/float/unchecked.rs | 80 ++++++--- iTriangle/src/geom/point.rs | 11 +- iTriangle/src/geom/triangle.rs | 29 +-- iTriangle/src/int/binder.rs | 49 +++--- iTriangle/src/int/custom.rs | 49 +++--- iTriangle/src/int/earcut/earcut_64.rs | 140 ++++++++------- iTriangle/src/int/earcut/flat.rs | 19 +- iTriangle/src/int/earcut/heap.rs | 40 +++-- iTriangle/src/int/earcut/net.rs | 15 +- iTriangle/src/int/earcut/util.rs | 64 +++---- iTriangle/src/int/locator.rs | 72 ++++---- iTriangle/src/int/meta.rs | 11 +- iTriangle/src/int/monotone/chain/builder.rs | 52 +++--- iTriangle/src/int/monotone/chain/vertex.rs | 19 +- iTriangle/src/int/monotone/flat/section.rs | 13 +- .../src/int/monotone/flat/triangulator.rs | 166 ++++++++++-------- iTriangle/src/int/monotone/net/section.rs | 37 ++-- .../src/int/monotone/net/triangulator.rs | 120 ++++++++----- iTriangle/src/int/monotone/triangulator.rs | 49 +++--- iTriangle/src/int/monotone/v_segment.rs | 27 +-- iTriangle/src/int/solver.rs | 90 ++++++---- iTriangle/src/int/triangulatable.rs | 27 +-- iTriangle/src/int/triangulation.rs | 112 +++++++----- iTriangle/src/int/triangulator.rs | 96 ++++++---- iTriangle/src/int/unchecked.rs | 39 ++-- iTriangle/src/int/validation.rs | 9 +- iTriangle/src/tessellation/circumcenter.rs | 78 ++++---- iTriangle/src/tessellation/split.rs | 78 ++++---- iTriangle/tests/doc_tests.rs | 19 +- iTriangle/tests/float_tests.rs | 20 +-- 44 files changed, 1239 insertions(+), 888 deletions(-) diff --git a/iTriangle/Cargo.toml b/iTriangle/Cargo.toml index 4b63c96..76b10d6 100644 --- a/iTriangle/Cargo.toml +++ b/iTriangle/Cargo.toml @@ -20,12 +20,12 @@ serde = ["dep:serde", "i_overlay/serde"] [dependencies] serde = { version = "^1.0", default-features = false, features = ["derive"], optional = true } -#i_overlay = { path = "../../iOverlay/iOverlay" } -#i_tree = { path = "../../iTree" } +i_overlay = { path = "../../iOverlay/iOverlay" } +i_tree = { path = "../../iTree" } #i_key_sort = { path = "../../iKeySort/iKeySort" } -i_overlay = "^6.0.0" -i_tree = "~0.18.0" +#i_overlay = "^6.0.0" +#i_tree = "~0.18.0" i_key_sort = "~0.10.3" diff --git a/iTriangle/src/advanced/centroid.rs b/iTriangle/src/advanced/centroid.rs index 60362ec..a2fbb09 100644 --- a/iTriangle/src/advanced/centroid.rs +++ b/iTriangle/src/advanced/centroid.rs @@ -2,11 +2,14 @@ use crate::advanced::delaunay::IntDelaunay; use crate::geom::triangle::IntTriangle; use alloc::vec; use alloc::vec::Vec; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::uint::UIntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::int::area::Area; use i_overlay::i_shape::int::shape::IntContour; -impl IntDelaunay { +impl IntDelaunay { /// Constructs a centroid-based polygonal net from the Delaunay triangulation. /// Each polygon surrounds a vertex using adjacent triangle centers and edge midpoints. /// @@ -17,7 +20,7 @@ impl IntDelaunay { /// /// # Returns /// A list of `IntContour` objects forming closed or convex polygonal regions. - pub fn centroid_net(&self, min_area: u64) -> Vec { + pub fn centroid_net(&self, min_area: I::WideUInt) -> Vec> { let two_area = min_area << 1; let n = self.triangles.len(); @@ -33,7 +36,7 @@ impl IntDelaunay { // go in counter-clockwise direction first - let mut contour = IntContour::with_capacity(16); + let mut contour = IntContour::::with_capacity(16); let mut t = &self.triangles[triangle_index]; let (mut next_index, mut mid) = t.left_neighbor_and_mid_edge(v.index); contour.push(t.center()); @@ -76,21 +79,21 @@ impl IntDelaunay { } } -trait SafeAdd { - fn add_area_check(&mut self, contour: IntContour, two_area: u64); +trait SafeAdd { + fn add_area_check(&mut self, contour: IntContour, two_area: I::WideUInt); } -impl SafeAdd for Vec { - fn add_area_check(&mut self, contour: IntContour, two_area: u64) { - if two_area == 0 || contour.area_two().unsigned_abs() > two_area { +impl SafeAdd for Vec> { + fn add_area_check(&mut self, contour: IntContour, two_area: I::WideUInt) { + if two_area == I::WideUInt::ZERO || contour.area_two().unsigned_abs() > two_area { self.push(contour); } } } -impl IntTriangle { +impl IntTriangle { #[inline] - fn right_neighbor_and_mid_edge(&self, vertex_index: usize) -> (usize, IntPoint) { + fn right_neighbor_and_mid_edge(&self, vertex_index: usize) -> (usize, IntPoint) { if self.vertices[0].index == vertex_index { let neighbor = self.neighbors[2]; let mid = middle(self.vertices[0].point, self.vertices[1].point); @@ -107,7 +110,7 @@ impl IntTriangle { } #[inline] - fn left_neighbor_and_mid_edge(&self, vertex_index: usize) -> (usize, IntPoint) { + fn left_neighbor_and_mid_edge(&self, vertex_index: usize) -> (usize, IntPoint) { if self.vertices[0].index == vertex_index { let neighbor = self.neighbors[1]; let mid = middle(self.vertices[0].point, self.vertices[2].point); @@ -124,23 +127,29 @@ impl IntTriangle { } #[inline] - fn center(&self) -> IntPoint { + fn center(&self) -> IntPoint { let a = self.vertices[0].point; let b = self.vertices[1].point; let c = self.vertices[2].point; - let x = a.x as i64 + b.x as i64 + c.x as i64; - let y = a.y as i64 + b.y as i64 + c.y as i64; + let x = a.x.wide() + b.x.wide() + c.x.wide(); + let y = a.y.wide() + b.y.wide() + c.y.wide(); - IntPoint::new((x / 3) as i32, (y / 3) as i32) + IntPoint::new( + I::from_wide(x / I::Wide::from_usize(3)), + I::from_wide(y / I::Wide::from_usize(3)), + ) } } #[inline] -fn middle(a: IntPoint, b: IntPoint) -> IntPoint { - let x = a.x as i64 + b.x as i64; - let y = a.y as i64 + b.y as i64; - IntPoint::new((x / 2) as i32, (y / 2) as i32) +fn middle(a: IntPoint, b: IntPoint) -> IntPoint { + let x = a.x.wide() + b.x.wide(); + let y = a.y.wide() + b.y.wide(); + IntPoint::new( + I::from_wide(x / I::Wide::TWO), + I::from_wide(y / I::Wide::TWO), + ) } #[cfg(test)] @@ -161,7 +170,7 @@ mod tests { let centroids = contour .triangulate_with_steiner_points(&[IntPoint::new(5, 5)]) .into_delaunay() - .centroid_net(0); + .centroid_net(0u64); assert_eq!(centroids.len(), 5); } } diff --git a/iTriangle/src/advanced/convex.rs b/iTriangle/src/advanced/convex.rs index 9d65133..1a5cafa 100644 --- a/iTriangle/src/advanced/convex.rs +++ b/iTriangle/src/advanced/convex.rs @@ -3,16 +3,18 @@ use crate::geom::triangle::IntTriangle; use crate::index::Index; use alloc::vec; use alloc::vec::Vec; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::int::shape::IntContour; use i_overlay::i_shape::int::simple::Simplify; #[derive(Debug, Clone, Copy)] -struct Node { +struct Node { next: usize, index: usize, prev: usize, - point: IntPoint, + point: IntPoint, } #[derive(Debug, Clone, Copy)] @@ -23,12 +25,12 @@ struct Edge { b: usize, } -struct ConvexPolygonBuilder { - nodes: Vec, +struct ConvexPolygonBuilder { + nodes: Vec>, edges: Vec, } -impl ConvexPolygonBuilder { +impl ConvexPolygonBuilder { fn new() -> Self { Self { nodes: Vec::with_capacity(16), @@ -36,7 +38,7 @@ impl ConvexPolygonBuilder { } } - fn to_contour(&self) -> IntContour { + fn to_contour(&self) -> IntContour { let count = self.nodes.len(); let mut contour = Vec::with_capacity(count); @@ -51,7 +53,7 @@ impl ConvexPolygonBuilder { contour } - fn start(&mut self, triangle_index: usize, triangle: &IntTriangle) { + fn start(&mut self, triangle_index: usize, triangle: &IntTriangle) { self.nodes.clear(); self.edges.clear(); @@ -110,7 +112,7 @@ impl ConvexPolygonBuilder { } } - fn add(&mut self, edge: Edge, triangle: &IntTriangle) -> bool { + fn add(&mut self, edge: Edge, triangle: &IntTriangle) -> bool { let v_index = triangle.opposite(edge.triangle_index); let v = triangle.vertices[v_index]; @@ -120,11 +122,11 @@ impl ConvexPolygonBuilder { let va0 = self.nodes[node_a1.prev].point; let va1 = node_a1.point; - let aa = va1.subtract(va0); - let ap = v.point.subtract(va1); + let aa = va1 - va0; + let ap = v.point - va1; let apa = aa.cross_product(ap); - if apa < 0 { + if apa < I::Wide::ZERO { return false; } @@ -134,11 +136,11 @@ impl ConvexPolygonBuilder { let vb0 = self.nodes[node_b1.next].point; let vb1 = node_b1.point; - let bb = vb0.subtract(vb1); - let bp = vb1.subtract(v.point); + let bb = vb0 - vb1; + let bp = vb1 - v.point; let bpb = bp.cross_product(bb); - if bpb < 0 { + if bpb < I::Wide::ZERO { return false; } @@ -185,7 +187,7 @@ impl ConvexPolygonBuilder { } } -impl IntDelaunay { +impl IntDelaunay { /// Groups adjacent triangles into convex polygons in counter-clockwise order. /// /// This method traverses the Delaunay triangulation and greedily merges @@ -209,7 +211,7 @@ impl IntDelaunay { /// let polygons = triangulation.to_convex_polygons(); /// assert!(!polygons.is_empty()); /// ``` - pub fn to_convex_polygons(&self) -> Vec { + pub fn to_convex_polygons(&self) -> Vec> { let mut result = Vec::new(); let n = self.triangles.len(); @@ -250,7 +252,7 @@ mod tests { use i_overlay::i_shape::int::area::Area; use i_overlay::i_shape::int::path::IntPath; - fn path(slice: &[[i32; 2]]) -> IntPath { + fn path(slice: &[[i32; 2]]) -> IntPath { slice.iter().map(|p| IntPoint::new(p[0], p[1])).collect() } diff --git a/iTriangle/src/advanced/delaunay.rs b/iTriangle/src/advanced/delaunay.rs index b0d7619..151e476 100644 --- a/iTriangle/src/advanced/delaunay.rs +++ b/iTriangle/src/advanced/delaunay.rs @@ -3,8 +3,11 @@ use crate::advanced::buffer::DelaunayBuffer; use crate::geom::triangle::IntTriangle; use crate::int::triangulation::RawIntTriangulation; use alloc::vec::Vec; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::product_uint::UIntProduct; +use i_overlay::i_float::int::number::uint::UIntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; use i_overlay::i_float::int::point::IntPoint; -use i_overlay::i_float::u128::UInt128; /// A 2D integer-based Delaunay triangulation. /// Each triangle satisfies the Delaunay condition. @@ -13,14 +16,14 @@ use i_overlay::i_float::u128::UInt128; /// - `triangles`: A list of `IntTriangle` elements (triangle vertex indices and neighbors) /// - `points`: A list of `IntPoint` elements (original and inserted points) /// -pub struct IntDelaunay { - pub triangles: Vec, - pub points: Vec, +pub struct IntDelaunay { + pub triangles: Vec>, + pub points: Vec>, } -impl IntDelaunay { +impl IntDelaunay { #[inline] - pub(crate) fn into_raw(self) -> RawIntTriangulation { + pub(crate) fn into_raw(self) -> RawIntTriangulation { RawIntTriangulation { triangles: self.triangles, points: self.points, @@ -28,7 +31,7 @@ impl IntDelaunay { } } -impl RawIntTriangulation { +impl RawIntTriangulation { /// Converts an int triangle mesh into a Delaunay triangulation by applying edge flips. /// /// The mesh is refined in-place by checking local angle conditions and @@ -37,7 +40,7 @@ impl RawIntTriangulation { /// # Returns /// A new [`IntDelaunay`] structure with updated triangle connectivity. #[inline] - pub fn into_delaunay(self) -> IntDelaunay { + pub fn into_delaunay(self) -> IntDelaunay { let mut buffer = DelaunayBuffer::new(); self.into_delaunay_with_buffer(&mut buffer) } @@ -49,7 +52,7 @@ impl RawIntTriangulation { /// # Returns /// A new [`IntDelaunay`] structure with updated triangle connectivity. #[inline] - pub fn into_delaunay_with_buffer(self, buffer: &mut DelaunayBuffer) -> IntDelaunay { + pub fn into_delaunay_with_buffer(self, buffer: &mut DelaunayBuffer) -> IntDelaunay { let mut delaunay = IntDelaunay { triangles: self.triangles, points: self.points, @@ -61,7 +64,7 @@ impl RawIntTriangulation { } } -pub trait DelaunayRefine { +pub trait DelaunayRefine { fn build(&mut self); fn build_with_buffer(&mut self, buffer: &mut DelaunayBuffer); fn fix_triangles(&mut self, buffer: &mut Vec, bitset: &mut IndexBitSet); @@ -70,7 +73,7 @@ pub trait DelaunayRefine { fn swap_triangles(&mut self, abc_index: usize, pcb_index: usize) -> bool; } -impl DelaunayRefine for [IntTriangle] { +impl DelaunayRefine for [IntTriangle] { #[inline] fn build(&mut self) { let mut buffer = DelaunayBuffer::new(); @@ -188,29 +191,34 @@ impl DelaunayCondition { // return true if triangle satisfied condition and do not need flip triangles // more detail explanation and demo https://ishape-rust.github.io/iShape-js/triangle/delaunay.html #[inline] - fn is_flip_not_required(p: IntPoint, a: IntPoint, b: IntPoint, c: IntPoint) -> bool { + fn is_flip_not_required( + p: IntPoint, + a: IntPoint, + b: IntPoint, + c: IntPoint, + ) -> bool { // x, y of all coordinates must be in range of i32 // p is a test point // b and c common points of triangle abc and pcb // alpha (A) is an angle of bpc // beta (B) is an angle of cab - let vbp = b.subtract(p); - let vcp = c.subtract(p); + let vbp = b - p; + let vcp = c - p; - let vba = b.subtract(a); - let vca = c.subtract(a); + let vba = b - a; + let vca = c - a; let cos_a = vbp.dot_product(vcp); let cos_b = vba.dot_product(vca); - if cos_a < 0 && cos_b < 0 { + if cos_a < I::Wide::ZERO && cos_b < I::Wide::ZERO { // A > 90 and B > 90 // A + B > 180 return false; } - if cos_a >= 0 && cos_b >= 0 { + if cos_a >= I::Wide::ZERO && cos_b >= I::Wide::ZERO { // A <= 90 and B <= 90 // A + B <= 180 return true; @@ -219,25 +227,27 @@ impl DelaunayCondition { let sn_a = vbp.cross_product(vcp).unsigned_abs(); // A <= 180 let sn_b = vba.cross_product(vca).unsigned_abs(); // B <= 180 - if cos_a < 0 { + if cos_a < I::Wide::ZERO { // cosA < 0 // cosB >= 0 - let sin_a_cos_b = UInt128::multiply(sn_a, cos_b as u64); // positive - let cos_a_sin_b = UInt128::multiply(cos_a.unsigned_abs(), sn_b); // negative + let sin_a_cos_b = ::Product::multiply(sn_a, cos_b.to_uint()); // positive + let cos_a_sin_b = + ::Product::multiply(cos_a.unsigned_abs(), sn_b); // negative sin_a_cos_b >= cos_a_sin_b } else { // cosA >= 0 // cosB < 0 - let sin_a_cos_b = UInt128::multiply(sn_a, cos_b.unsigned_abs()); // negative - let cos_a_sin_b = UInt128::multiply(cos_a as u64, sn_b); // positive + let sin_a_cos_b = + ::Product::multiply(sn_a, cos_b.unsigned_abs()); // negative + let cos_a_sin_b = ::Product::multiply(cos_a.to_uint(), sn_b); // positive cos_a_sin_b >= sin_a_cos_b } } } -impl IntTriangle { +impl IntTriangle { #[inline] fn update_neighbor(&mut self, old_index: usize, new_index: usize) { if self.neighbors[0] == old_index { @@ -252,7 +262,7 @@ impl IntTriangle { } #[cfg(test)] -impl IntDelaunay { +impl IntDelaunay { fn validate(&self) { use i_overlay::i_float::triangle::Triangle; @@ -260,8 +270,8 @@ impl IntDelaunay { let a = t.vertices[0].point; let b = t.vertices[1].point; let c = t.vertices[2].point; - let area = Triangle::area_two_point(a, b, c); - assert!(area <= 0); + let area = Triangle::area_two(a, b, c); + assert!(area <= I::Wide::ZERO); let n0 = t.neighbors[0]; let n1 = t.neighbors[1]; @@ -279,15 +289,15 @@ impl IntDelaunay { } } - fn area(&self) -> i64 { + fn area(&self) -> I::Wide { use i_overlay::i_float::triangle::Triangle; - let mut s = 0; + let mut s = I::Wide::ZERO; for t in self.triangles.iter() { let a = t.vertices[0].point; let b = t.vertices[1].point; let c = t.vertices[2].point; - s += Triangle::area_two_point(a, b, c); + s = s + Triangle::area_two(a, b, c); } s @@ -312,7 +322,7 @@ mod tests { use i_overlay::i_shape::int::path::IntPath; use rand::RngExt; - fn path(slice: &[[i32; 2]]) -> IntPath { + fn path(slice: &[[i32; 2]]) -> IntPath { slice.iter().map(|p| IntPoint::new(p[0], p[1])).collect() } @@ -504,7 +514,7 @@ mod tests { } } - fn random(radius: i32, n: usize) -> IntPath { + fn random(radius: i32, n: usize) -> IntPath { let a = radius / 2; let mut points = Vec::with_capacity(n); let mut rng = rand::rng(); diff --git a/iTriangle/src/advanced/triangulation.rs b/iTriangle/src/advanced/triangulation.rs index be665a6..69eb3e2 100644 --- a/iTriangle/src/advanced/triangulation.rs +++ b/iTriangle/src/advanced/triangulation.rs @@ -1,24 +1,25 @@ use crate::advanced::delaunay::IntDelaunay; use crate::int::triangulation::{IndexType, IntTriangulation}; use alloc::vec::Vec; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; -impl IntDelaunay { +impl IntDelaunay { /// Returns the vertex positions in the triangulation. #[inline] - pub fn points(&self) -> &Vec { + pub fn points(&self) -> &Vec> { &self.points } /// Returns indices forming counter-clockwise triangles. #[inline] - pub fn triangle_indices(&self) -> Vec { + pub fn triangle_indices(&self) -> Vec { let mut result = Vec::with_capacity(3 * self.triangles.len()); for t in &self.triangles { let v = &t.vertices; - let i0 = I::try_from(v[0].index).unwrap_or(I::ZERO); - let i1 = I::try_from(v[1].index).unwrap_or(I::ZERO); - let i2 = I::try_from(v[2].index).unwrap_or(I::ZERO); + let i0 = N::try_from(v[0].index).unwrap_or(N::ZERO); + let i1 = N::try_from(v[1].index).unwrap_or(N::ZERO); + let i2 = N::try_from(v[2].index).unwrap_or(N::ZERO); result.extend_from_slice(&[i0, i1, i2]); } @@ -35,7 +36,7 @@ impl IntDelaunay { } #[inline] - pub fn into_triangulation(self) -> IntTriangulation { + pub fn into_triangulation(self) -> IntTriangulation { IntTriangulation { indices: self.triangle_indices(), points: self.points, diff --git a/iTriangle/src/float/centroid_net.rs b/iTriangle/src/float/centroid_net.rs index 938348b..92c3191 100644 --- a/iTriangle/src/float/centroid_net.rs +++ b/iTriangle/src/float/centroid_net.rs @@ -1,13 +1,17 @@ use crate::float::delaunay::Delaunay; use alloc::vec::Vec; use i_overlay::i_float::float::compatible::FloatPointCompatible; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; use i_overlay::i_shape::base::data::Contour; use i_overlay::i_shape::float::adapter::ShapeToFloat; -impl Delaunay

{ +impl Delaunay { #[inline] pub fn to_centroid_net(&self, min_area: P::Scalar) -> Vec> { - let int_area = self.adapter.sqr_float_to_int(min_area); - self.delaunay.centroid_net(int_area).to_float(&self.adapter) + let int_area = self.adapter.round_sqr_len_to_int(min_area); + self.delaunay + .centroid_net(int_area.to_uint()) + .to_float(&self.adapter) } } diff --git a/iTriangle/src/float/circumcenter.rs b/iTriangle/src/float/circumcenter.rs index af98cce..ea62256 100644 --- a/iTriangle/src/float/circumcenter.rs +++ b/iTriangle/src/float/circumcenter.rs @@ -1,7 +1,9 @@ use crate::float::delaunay::Delaunay; use i_overlay::i_float::float::compatible::FloatPointCompatible; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; -impl Delaunay

{ +impl Delaunay { #[inline] pub fn refine_with_circumcenters(mut self, min_area: P::Scalar) -> Self { self.refine_with_circumcenters_mut(min_area); @@ -16,14 +18,15 @@ impl Delaunay

{ #[inline] pub fn refine_with_circumcenters_mut(&mut self, min_area: P::Scalar) { - let int_area = self.adapter.sqr_float_to_int(min_area); - self.delaunay.refine_with_circumcenters_mut(int_area); + let int_area = self.adapter.round_sqr_len_to_int(min_area); + self.delaunay + .refine_with_circumcenters_mut(int_area.to_uint()); } #[inline] pub fn refine_with_circumcenters_by_obtuse_angle_mut(&mut self, min_area: P::Scalar) { - let int_area = self.adapter.sqr_float_to_int(min_area); + let int_area = self.adapter.round_sqr_len_to_int(min_area); self.delaunay - .refine_with_circumcenters_by_obtuse_angle_mut(int_area); + .refine_with_circumcenters_by_obtuse_angle_mut(int_area.to_uint()); } } diff --git a/iTriangle/src/float/convex.rs b/iTriangle/src/float/convex.rs index e1cb7f2..4fd3ac1 100644 --- a/iTriangle/src/float/convex.rs +++ b/iTriangle/src/float/convex.rs @@ -1,10 +1,11 @@ use crate::float::delaunay::Delaunay; use alloc::vec::Vec; use i_overlay::i_float::float::compatible::FloatPointCompatible; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_shape::base::data::Contour; use i_overlay::i_shape::float::adapter::ShapeToFloat; -impl Delaunay

{ +impl Delaunay { /// Groups triangles into non-overlapping convex polygons in counter-clockwise order. /// /// Returns a list of float-based [`Contour

`]s. diff --git a/iTriangle/src/float/custom.rs b/iTriangle/src/float/custom.rs index 2e3b322..e204e46 100644 --- a/iTriangle/src/float/custom.rs +++ b/iTriangle/src/float/custom.rs @@ -2,49 +2,65 @@ use crate::float::triangulation::RawTriangulation; use crate::int::custom::IntCustomTriangulatable; use crate::int::triangulation::RawIntTriangulation; use crate::int::validation::Validation; +use i_key_sort::sort::key::SortKey; use i_overlay::i_float::adapter::FloatPointAdapter; use i_overlay::i_float::float::compatible::FloatPointCompatible; use i_overlay::i_float::float::rect::FloatRect; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_shape::base::data::{Contour, Shape}; use i_overlay::i_shape::float::adapter::{PathToInt, ShapeToInt, ShapesToInt}; use i_overlay::i_shape::float::rect::RectInit; +use i_tree::{Expiration, LayoutNumber}; /// A trait for triangulating float geometry with user-defined validation rules. /// /// Accepts a custom [`Validation`] object for tuning fill rule, min area, etc. pub trait CustomTriangulatable { /// Performs triangulation using the specified [`Validation`] settings. - fn custom_triangulate(&self, validation: Validation) -> RawTriangulation

; + fn custom_triangulate(&self, validation: Validation) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey; /// Performs triangulation with Steiner points and a custom [`Validation`] config. - fn custom_triangulate_with_steiner_points( + fn custom_triangulate_with_steiner_points( &self, points: &[P], - validation: Validation, - ) -> RawTriangulation

; + validation: Validation, + ) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey; } -impl CustomTriangulatable

for Contour

{ - fn custom_triangulate(&self, validation: Validation) -> RawTriangulation

{ +impl

CustomTriangulatable

for Contour

+where + P: FloatPointCompatible, +{ + fn custom_triangulate(&self, validation: Validation) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_path(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let raw = self.to_int(&adapter).custom_triangulate(validation); RawTriangulation { raw, adapter } } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } - fn custom_triangulate_with_steiner_points( + fn custom_triangulate_with_steiner_points( &self, points: &[P], - validation: Validation, - ) -> RawTriangulation

{ + validation: Validation, + ) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_path(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let float_points = points.to_int(&adapter); let raw = self .to_int(&adapter) @@ -53,33 +69,42 @@ impl CustomTriangulatable

for Contour

{ } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } } -impl CustomTriangulatable

for [Contour

] { - fn custom_triangulate(&self, validation: Validation) -> RawTriangulation

{ +impl

CustomTriangulatable

for [Contour

] +where + P: FloatPointCompatible, +{ + fn custom_triangulate(&self, validation: Validation) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let raw = self.to_int(&adapter).custom_triangulate(validation); RawTriangulation { raw, adapter } } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } - fn custom_triangulate_with_steiner_points( + fn custom_triangulate_with_steiner_points( &self, points: &[P], - validation: Validation, - ) -> RawTriangulation

{ + validation: Validation, + ) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let float_points = points.to_int(&adapter); let raw = self .to_int(&adapter) @@ -88,33 +113,42 @@ impl CustomTriangulatable

for [Contour

] { } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } } -impl CustomTriangulatable

for [Shape

] { - fn custom_triangulate(&self, validation: Validation) -> RawTriangulation

{ +impl

CustomTriangulatable

for [Shape

] +where + P: FloatPointCompatible, +{ + fn custom_triangulate(&self, validation: Validation) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_list_of_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let raw = self.to_int(&adapter).custom_triangulate(validation); RawTriangulation { raw, adapter } } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } - fn custom_triangulate_with_steiner_points( + fn custom_triangulate_with_steiner_points( &self, points: &[P], - validation: Validation, - ) -> RawTriangulation

{ + validation: Validation, + ) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_list_of_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let float_points = points.to_int(&adapter); let raw = self .to_int(&adapter) @@ -123,7 +157,7 @@ impl CustomTriangulatable

for [Shape

] { } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } diff --git a/iTriangle/src/float/delaunay.rs b/iTriangle/src/float/delaunay.rs index d1c7478..f43f021 100644 --- a/iTriangle/src/float/delaunay.rs +++ b/iTriangle/src/float/delaunay.rs @@ -5,26 +5,27 @@ use crate::int::triangulation::IndexType; use alloc::vec::Vec; use i_overlay::i_float::adapter::FloatPointAdapter; use i_overlay::i_float::float::compatible::FloatPointCompatible; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_shape::float::adapter::PathToFloat; /// A Delaunay-refined triangle mesh with float-mapped geometry. /// /// Produced from [`Triangulation::into_delaunay`] by applying edge flips /// to satisfy the Delaunay condition. -pub struct Delaunay { - pub(super) delaunay: IntDelaunay, - pub(super) adapter: FloatPointAdapter

, +pub struct Delaunay { + pub(super) delaunay: IntDelaunay, + pub(super) adapter: FloatPointAdapter, } -impl RawTriangulation

{ +impl RawTriangulation { #[inline] - pub fn into_delaunay(self) -> Delaunay

{ + pub fn into_delaunay(self) -> Delaunay { let mut buffer = DelaunayBuffer::new(); self.into_delaunay_with_buffer(&mut buffer) } #[inline] - pub fn into_delaunay_with_buffer(self, buffer: &mut DelaunayBuffer) -> Delaunay

{ + pub fn into_delaunay_with_buffer(self, buffer: &mut DelaunayBuffer) -> Delaunay { Delaunay { delaunay: self.raw.into_delaunay_with_buffer(buffer), adapter: self.adapter, @@ -32,7 +33,7 @@ impl RawTriangulation

{ } } -impl Delaunay

{ +impl Delaunay { /// Returns the float-mapped vertex positions in the triangulation. #[inline] pub fn points(&self) -> Vec

{ @@ -41,7 +42,7 @@ impl Delaunay

{ /// Returns indices forming counter-clockwise triangles. #[inline] - pub fn triangle_indices(&self) -> Vec { + pub fn triangle_indices(&self) -> Vec { self.delaunay.triangle_indices() } @@ -53,7 +54,7 @@ impl Delaunay

{ /// Converts this refined mesh into a flat float [`Triangulation`]. #[inline] - pub fn to_triangulation(&self) -> Triangulation { + pub fn to_triangulation(&self) -> Triangulation { Triangulation { indices: self.triangle_indices(), points: self.points(), diff --git a/iTriangle/src/float/locator.rs b/iTriangle/src/float/locator.rs index 254834f..2a20814 100644 --- a/iTriangle/src/float/locator.rs +++ b/iTriangle/src/float/locator.rs @@ -1,6 +1,8 @@ use alloc::vec::Vec; +use i_key_sort::sort::key::SortKey; use i_overlay::i_float::float::compatible::FloatPointCompatible; use i_overlay::i_float::float::number::FloatNumber; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::{i_float::adapter::FloatPointAdapter, i_shape::float::adapter::PathToInt}; use crate::int::locator::IntPointInTriangulationLocator; @@ -9,19 +11,23 @@ use crate::{ location::PointLocationInTriangulation, }; -pub trait PointInTriangulationLocator

{ +pub trait PointInTriangulationLocator { fn locate_points(&self, points: &[P]) -> Vec where P: FloatPointCompatible, + I: SortKey, T: FloatNumber; } -impl Triangulation { - pub fn locate_points(&self, points: &[P]) -> Vec +impl Triangulation { + pub fn locate_points( + &self, + points: &[P], + ) -> Vec where P: FloatPointCompatible, { - let adapter = FloatPointAdapter::with_iter(self.points.iter().chain(points.iter())); + let adapter = FloatPointAdapter::::with_iter(self.points.iter().chain(points.iter())); let int_points = points.to_int(&adapter); @@ -36,14 +42,16 @@ impl Triangulation { } } -impl PointInTriangulationLocator

for Triangulation { +impl PointInTriangulationLocator + for Triangulation +{ #[inline] fn locate_points(&self, points: &[P]) -> Vec where P: FloatPointCompatible, T: FloatNumber, { - Triangulation::locate_points::(self, points) + Triangulation::locate_points::(self, points) } } @@ -75,7 +83,7 @@ mod tests { [5.0, 1.0], ]; - let locations = triangulation.locate_points::(&points_to_locate); + let locations = triangulation.locate_points::(&points_to_locate); assert!(matches!( locations[0], diff --git a/iTriangle/src/float/triangulatable.rs b/iTriangle/src/float/triangulatable.rs index a57ff7a..87ebe92 100644 --- a/iTriangle/src/float/triangulatable.rs +++ b/iTriangle/src/float/triangulatable.rs @@ -1,12 +1,15 @@ use crate::float::triangulation::RawTriangulation; use crate::int::triangulatable::IntTriangulatable; use crate::int::triangulation::RawIntTriangulation; +use i_key_sort::sort::key::SortKey; use i_overlay::i_float::adapter::FloatPointAdapter; use i_overlay::i_float::float::compatible::FloatPointCompatible; use i_overlay::i_float::float::rect::FloatRect; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_shape::base::data::{Contour, Shape}; use i_overlay::i_shape::float::adapter::{PathToInt, ShapeToInt, ShapesToInt}; use i_overlay::i_shape::float::rect::RectInit; +use i_tree::{Expiration, LayoutNumber}; /// A trait for triangulating float-based geometry with default validation. /// @@ -21,31 +24,44 @@ pub trait Triangulatable { /// Triangulates the shape(s) using the default [`Triangulator`] configuration. /// /// Validation includes contour simplification, direction correction, and area filtering. - fn triangulate(&self) -> RawTriangulation

; + fn triangulate(&self) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey; /// Triangulates the shape(s) and inserts the given Steiner points. /// /// Points must lie strictly within the interior of the geometry. - fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation

; + fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey; } -impl Triangulatable

for [P] { - fn triangulate(&self) -> RawTriangulation

{ +impl

Triangulatable

for [P] +where + P: FloatPointCompatible, +{ + fn triangulate(&self) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_path(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let raw = self.to_int(&adapter).triangulate(); RawTriangulation { raw, adapter } } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } - fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation

{ + fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_path(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let float_points = points.to_int(&adapter); let raw = self .to_int(&adapter) @@ -54,29 +70,38 @@ impl Triangulatable

for [P] { } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } } -impl Triangulatable

for [Contour

] { - fn triangulate(&self) -> RawTriangulation

{ +impl

Triangulatable

for [Contour

] +where + P: FloatPointCompatible, +{ + fn triangulate(&self) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let raw = self.to_int(&adapter).triangulate(); RawTriangulation { raw, adapter } } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } - fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation

{ + fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let float_points = points.to_int(&adapter); let raw = self .to_int(&adapter) @@ -85,29 +110,38 @@ impl Triangulatable

for [Contour

] { } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } } -impl Triangulatable

for [Shape

] { - fn triangulate(&self) -> RawTriangulation

{ +impl

Triangulatable

for [Shape

] +where + P: FloatPointCompatible, +{ + fn triangulate(&self) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_list_of_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let raw = self.to_int(&adapter).triangulate(); RawTriangulation { raw, adapter } } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } - fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation

{ + fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + where + I: IntNumber + Expiration + LayoutNumber + SortKey, + { if let Some(rect) = FloatRect::with_list_of_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let float_points = points.to_int(&adapter); let raw = self .to_int(&adapter) @@ -116,7 +150,7 @@ impl Triangulatable

for [Shape

] { } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } diff --git a/iTriangle/src/float/triangulation.rs b/iTriangle/src/float/triangulation.rs index dad88e3..c491cbc 100644 --- a/iTriangle/src/float/triangulation.rs +++ b/iTriangle/src/float/triangulation.rs @@ -3,6 +3,7 @@ use alloc::vec::Vec; use i_overlay::i_float::adapter::FloatPointAdapter; use i_overlay::i_float::float::compatible::FloatPointCompatible; use i_overlay::i_float::float::number::FloatNumber; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_shape::float::adapter::PathToFloat; use i_overlay::i_shape::util::reserve::Reserve; @@ -13,9 +14,9 @@ use i_overlay::i_shape::util::reserve::Reserve; /// /// # Parameters /// - `P`: Float point type (e.g., `Vec2`, `[f32; 2]`, etc.) -pub struct RawTriangulation { - pub raw: RawIntTriangulation, - pub adapter: FloatPointAdapter

, +pub struct RawTriangulation { + pub raw: RawIntTriangulation, + pub adapter: FloatPointAdapter, } /// A flat triangulation result consisting of float points and triangle indices. @@ -28,7 +29,7 @@ pub struct Triangulation { pub indices: Vec, } -impl RawTriangulation

{ +impl RawTriangulation { /// Returns the float-mapped points used in the triangulation. /// /// The points are guaranteed to match the input shape geometry within adapter precision. @@ -39,13 +40,13 @@ impl RawTriangulation

{ /// Returns the triangle indices for the mesh, ordered counter-clockwise. #[inline] - pub fn triangle_indices(&self) -> Vec { + pub fn triangle_indices(&self) -> Vec { self.raw.triangle_indices() } /// Converts this flat triangulation into a flat [`Triangulation`] (points + indices). #[inline] - pub fn to_triangulation(&self) -> Triangulation { + pub fn to_triangulation(&self) -> Triangulation { Triangulation { indices: self.triangle_indices(), points: self.points(), @@ -53,7 +54,7 @@ impl RawTriangulation

{ } } -impl Triangulation { +impl Triangulation { #[inline] pub fn with_capacity(capacity: usize) -> Self { Self { @@ -63,10 +64,10 @@ impl Triangulation { } #[inline] - pub fn set_with_int( + pub fn set_with_int( &mut self, - triangulation: &IntTriangulation, - adapter: &FloatPointAdapter

, + triangulation: &IntTriangulation, + adapter: &FloatPointAdapter, ) where P: FloatPointCompatible, { @@ -81,12 +82,12 @@ impl Triangulation { } } -impl IntTriangulation { +impl IntTriangulation { #[inline] pub fn into_float( self, - adapter: &FloatPointAdapter

, - ) -> Triangulation { + adapter: &FloatPointAdapter, + ) -> Triangulation { let points = self .points .iter() @@ -101,8 +102,8 @@ impl IntTriangulation { #[inline] pub fn to_float( &self, - adapter: &FloatPointAdapter

, - ) -> Triangulation { + adapter: &FloatPointAdapter, + ) -> Triangulation { let points = self .points .iter() @@ -180,7 +181,7 @@ mod tests { fn test_0() { let rect = [[0.0, 0.0], [5.0, 0.0], [5.0, 8.0], [0.0, 8.0]]; - let triangulation = Triangulator::::default().triangulate(&rect); + let triangulation = Triangulator::::default().triangulate(&rect); assert_eq!(triangulation.points.len(), 4); assert_eq!(triangulation.indices.len(), 6); diff --git a/iTriangle/src/float/triangulator.rs b/iTriangle/src/float/triangulator.rs index 26112e5..fbd09dd 100644 --- a/iTriangle/src/float/triangulator.rs +++ b/iTriangle/src/float/triangulator.rs @@ -2,19 +2,26 @@ use crate::float::triangulation::Triangulation; use crate::int::triangulation::{IndexType, IntTriangulation}; use crate::int::triangulator::IntTriangulator; use crate::int::validation::Validation; +use i_key_sort::sort::key::SortKey; use i_overlay::core::solver::Solver; use i_overlay::i_float::float::compatible::FloatPointCompatible; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_shape::flat::buffer::FlatContoursBuffer; use i_overlay::i_shape::source::resource::ShapeResource; +use i_tree::{Expiration, LayoutNumber}; /// A reusable triangulator that converts float-based shapes into triangle meshes. -pub struct Triangulator { - flat_buffer: Option, - int_buffer: Option>, - int_triangulator: IntTriangulator, +pub struct Triangulator { + flat_buffer: Option>, + int_buffer: Option>, + int_triangulator: IntTriangulator, } -impl Triangulator { +impl Triangulator +where + I: IntNumber + Expiration + LayoutNumber + SortKey, + N: IndexType, +{ /// Enables or disables Delaunay refinement for triangulation. /// /// When enabled, the triangulator will attempt to generate a mesh that satisfies the @@ -52,7 +59,7 @@ impl Triangulator { /// /// Uses internal buffers to minimize allocations and speed up repeated calls. #[inline] - pub fn new(max_points_count: usize, validation: Validation, solver: Solver) -> Self { + pub fn new(max_points_count: usize, validation: Validation, solver: Solver) -> Self { Self { flat_buffer: Some(FlatContoursBuffer::with_capacity(max_points_count)), int_buffer: Some(IntTriangulation::with_capacity(max_points_count)), @@ -61,14 +68,22 @@ impl Triangulator { } } -impl Default for Triangulator { +impl Default for Triangulator +where + I: IntNumber + Expiration + LayoutNumber + SortKey, + N: IndexType, +{ #[inline] fn default() -> Self { Self::new(64, Default::default(), Default::default()) } } -impl Triangulator { +impl Triangulator +where + I: IntNumber + Expiration + LayoutNumber + SortKey, + N: IndexType, +{ /// Performs triangulation on the provided shape resource and returns a new `Triangulation`. /// /// - `resource`: A `ShapeResource` that define contours. @@ -79,7 +94,7 @@ impl Triangulator { /// /// Uses internal buffers to reduce allocations and preserve performance. #[inline] - pub fn triangulate(&mut self, resource: &R) -> Triangulation + pub fn triangulate(&mut self, resource: &R) -> Triangulation where R: ShapeResource

+ ?Sized, P: FloatPointCompatible, @@ -113,7 +128,7 @@ impl Triangulator { /// /// Uses internal buffers to reduce allocations and preserve performance. #[inline] - pub fn triangulate_into(&mut self, resource: &R, triangulation: &mut Triangulation) + pub fn triangulate_into(&mut self, resource: &R, triangulation: &mut Triangulation) where R: ShapeResource

+ ?Sized, P: FloatPointCompatible, @@ -145,7 +160,7 @@ impl Triangulator { /// /// Uses internal buffers to reduce allocations and preserve performance. #[inline] - pub fn uncheck_triangulate(&mut self, resource: &R) -> Triangulation + pub fn uncheck_triangulate(&mut self, resource: &R) -> Triangulation where R: ShapeResource

+ ?Sized, P: FloatPointCompatible, @@ -184,7 +199,7 @@ impl Triangulator { pub fn uncheck_triangulate_into( &mut self, resource: &R, - triangulation: &mut Triangulation, + triangulation: &mut Triangulation, ) where R: ShapeResource

+ ?Sized, P: FloatPointCompatible, diff --git a/iTriangle/src/float/unchecked.rs b/iTriangle/src/float/unchecked.rs index bf2074e..69be499 100644 --- a/iTriangle/src/float/unchecked.rs +++ b/iTriangle/src/float/unchecked.rs @@ -1,12 +1,15 @@ use crate::float::triangulation::RawTriangulation; use crate::int::triangulation::RawIntTriangulation; use crate::int::unchecked::IntUncheckedTriangulatable; +use i_key_sort::sort::key::SortKey; use i_overlay::i_float::adapter::FloatPointAdapter; use i_overlay::i_float::float::compatible::FloatPointCompatible; use i_overlay::i_float::float::rect::FloatRect; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_shape::base::data::{Contour, Shape}; use i_overlay::i_shape::float::adapter::{PathToInt, ShapeToInt, ShapesToInt}; use i_overlay::i_shape::float::rect::RectInit; +use i_tree::Expiration; /// A trait for triangulating already valid float-based geometry. /// @@ -18,28 +21,41 @@ use i_overlay::i_shape::float::rect::RectInit; /// - Steiner points must lie strictly within the shape pub trait UncheckedTriangulatable { /// Triangulates float geometry without validation or simplification. - fn unchecked_triangulate(&self) -> RawTriangulation

; + fn unchecked_triangulate(&self) -> RawTriangulation + where + I: IntNumber + Expiration + SortKey; /// Same as `unchecked_triangulate`, but inserts user-defined Steiner points. - fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation

; + fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + where + I: IntNumber + Expiration + SortKey; } -impl UncheckedTriangulatable

for [P] { - fn unchecked_triangulate(&self) -> RawTriangulation

{ +impl

UncheckedTriangulatable

for [P] +where + P: FloatPointCompatible, +{ + fn unchecked_triangulate(&self) -> RawTriangulation + where + I: IntNumber + Expiration + SortKey, + { if let Some(rect) = FloatRect::with_path(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let raw = self.to_int(&adapter).uncheck_triangulate(); RawTriangulation { raw, adapter } } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } - fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation

{ + fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + where + I: IntNumber + Expiration + SortKey, + { if let Some(rect) = FloatRect::with_path(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let float_points = points.to_int(&adapter); let raw = self .to_int(&adapter) @@ -48,29 +64,38 @@ impl UncheckedTriangulatable

for [P] { } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } } -impl UncheckedTriangulatable

for [Contour

] { - fn unchecked_triangulate(&self) -> RawTriangulation

{ +impl

UncheckedTriangulatable

for [Contour

] +where + P: FloatPointCompatible, +{ + fn unchecked_triangulate(&self) -> RawTriangulation + where + I: IntNumber + Expiration + SortKey, + { if let Some(rect) = FloatRect::with_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let raw = self.to_int(&adapter).uncheck_triangulate(); RawTriangulation { raw, adapter } } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } - fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation

{ + fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + where + I: IntNumber + Expiration + SortKey, + { if let Some(rect) = FloatRect::with_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let float_points = points.to_int(&adapter); let raw = self .to_int(&adapter) @@ -79,29 +104,38 @@ impl UncheckedTriangulatable

for [Contour

] { } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } } -impl UncheckedTriangulatable

for [Shape

] { - fn unchecked_triangulate(&self) -> RawTriangulation

{ +impl

UncheckedTriangulatable

for [Shape

] +where + P: FloatPointCompatible, +{ + fn unchecked_triangulate(&self) -> RawTriangulation + where + I: IntNumber + Expiration + SortKey, + { if let Some(rect) = FloatRect::with_list_of_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let raw = self.to_int(&adapter).uncheck_triangulate(); RawTriangulation { raw, adapter } } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } - fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation

{ + fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + where + I: IntNumber + Expiration + SortKey, + { if let Some(rect) = FloatRect::with_list_of_paths(self) { - let adapter = FloatPointAdapter::

::new(rect); + let adapter = FloatPointAdapter::::new(rect); let float_points = points.to_int(&adapter); let raw = self .to_int(&adapter) @@ -110,7 +144,7 @@ impl UncheckedTriangulatable

for [Shape

] { } else { RawTriangulation { raw: RawIntTriangulation::default(), - adapter: FloatPointAdapter::

::new(FloatRect::zero()), + adapter: FloatPointAdapter::::new(FloatRect::zero()), } } } diff --git a/iTriangle/src/geom/point.rs b/iTriangle/src/geom/point.rs index d08ed57..c94bed6 100644 --- a/iTriangle/src/geom/point.rs +++ b/iTriangle/src/geom/point.rs @@ -1,14 +1,15 @@ +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; #[derive(Debug, Clone, Copy)] -pub struct IndexPoint { +pub struct IndexPoint { pub index: usize, - pub point: IntPoint, + pub point: IntPoint, } -impl IndexPoint { +impl IndexPoint { #[inline] - pub fn new(index: usize, point: IntPoint) -> Self { + pub fn new(index: usize, point: IntPoint) -> Self { Self { index, point } } @@ -21,7 +22,7 @@ impl IndexPoint { } } -impl Default for IndexPoint { +impl Default for IndexPoint { #[inline] fn default() -> Self { IndexPoint::empty() diff --git a/iTriangle/src/geom/triangle.rs b/iTriangle/src/geom/triangle.rs index 3b64fa9..1599a94 100644 --- a/iTriangle/src/geom/triangle.rs +++ b/iTriangle/src/geom/triangle.rs @@ -1,28 +1,29 @@ use crate::geom::point::IndexPoint; +use i_overlay::i_float::int::number::int::IntNumber; #[derive(Debug, Clone)] -pub struct Abc { - pub v0: ABCVertex, - pub v1: ABCVertex, - pub v2: ABCVertex, +pub struct Abc { + pub v0: ABCVertex, + pub v1: ABCVertex, + pub v2: ABCVertex, } #[derive(Debug, Clone, Copy)] -pub struct ABCVertex { - pub vertex: IndexPoint, +pub struct ABCVertex { + pub vertex: IndexPoint, pub position: usize, pub neighbor: usize, } #[derive(Debug, Clone)] -pub struct IntTriangle { - pub vertices: [IndexPoint; 3], +pub struct IntTriangle { + pub vertices: [IndexPoint; 3], pub neighbors: [usize; 3], } -impl IntTriangle { +impl IntTriangle { #[inline] - pub fn abc(a: IndexPoint, b: IndexPoint, c: IndexPoint) -> Self { + pub fn abc(a: IndexPoint, b: IndexPoint, c: IndexPoint) -> Self { Self { vertices: [a, b, c], neighbors: [usize::MAX; 3], @@ -81,7 +82,7 @@ impl IntTriangle { } #[inline] - pub(crate) fn abc_by_neighbor(&self, neighbor: usize) -> Abc { + pub(crate) fn abc_by_neighbor(&self, neighbor: usize) -> Abc { if neighbor == self.neighbors[0] { self.abc_by_a() } else if neighbor == self.neighbors[1] { @@ -92,7 +93,7 @@ impl IntTriangle { } #[inline] - pub(crate) fn abc_by_a(&self) -> Abc { + pub(crate) fn abc_by_a(&self) -> Abc { let a = ABCVertex { vertex: self.vertices[0], position: 0, @@ -116,7 +117,7 @@ impl IntTriangle { } #[inline] - pub(crate) fn abc_by_b(&self) -> Abc { + pub(crate) fn abc_by_b(&self) -> Abc { let a = ABCVertex { vertex: self.vertices[1], position: 1, @@ -140,7 +141,7 @@ impl IntTriangle { } #[inline] - pub(crate) fn abc_by_c(&self) -> Abc { + pub(crate) fn abc_by_c(&self) -> Abc { let a = ABCVertex { vertex: self.vertices[2], position: 2, diff --git a/iTriangle/src/int/binder.rs b/iTriangle/src/int/binder.rs index 6e1fe36..8ad4a08 100644 --- a/iTriangle/src/int/binder.rs +++ b/iTriangle/src/int/binder.rs @@ -1,45 +1,46 @@ use crate::int::monotone::v_segment::VSegment; use alloc::vec; use alloc::vec::Vec; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_float::triangle::Triangle; use i_overlay::i_shape::int::shape::IntShape; use i_tree::key::exp::KeyExpCollection; use i_tree::key::tree::KeyExpTree; -use i_tree::ExpiredKey; +use i_tree::{Expiration, ExpiredKey}; #[derive(Debug, Clone, Copy)] -struct ShapeEdge { - a: IntPoint, - b: IntPoint, +struct ShapeEdge { + a: IntPoint, + b: IntPoint, shape_index: usize, } #[derive(Debug, Clone, Copy)] -struct VEdge { - min_y: i32, - max_y: i32, - x: i32, +struct VEdge { + min_y: I, + max_y: I, + x: I, } #[derive(Debug, Clone, Copy)] -struct TargetSegment { - edge: ShapeEdge, - v_segment: VSegment, +struct TargetSegment { + edge: ShapeEdge, + v_segment: VSegment, } -impl ExpiredKey for VSegment { - fn expiration(&self) -> i32 { +impl ExpiredKey for VSegment { + fn expiration(&self) -> I { self.b.x } } -pub(super) trait SteinerInference { - fn group_by_shapes(&self, points: &[IntPoint]) -> Vec>; +pub(super) trait SteinerInference { + fn group_by_shapes(&self, points: &[IntPoint]) -> Vec>>; } -impl SteinerInference for [IntShape] { - fn group_by_shapes(&self, points: &[IntPoint]) -> Vec> { +impl SteinerInference for [IntShape] { + fn group_by_shapes(&self, points: &[IntPoint]) -> Vec>> { if points.is_empty() { return vec![Vec::new(); self.len()]; } @@ -168,10 +169,10 @@ impl SteinerInference for [IntShape] { } } -impl ShapeEdge { +impl ShapeEdge { #[inline] - fn not_contains(&self, p: IntPoint) -> bool { - Triangle::is_not_line_point(self.a, p, self.b) + fn not_contains(&self, p: IntPoint) -> bool { + Triangle::is_not_line(self.a, p, self.b) } #[inline] @@ -180,9 +181,9 @@ impl ShapeEdge { } } -impl VEdge { +impl VEdge { #[inline] - fn new(a: IntPoint, b: IntPoint) -> Self { + fn new(a: IntPoint, b: IntPoint) -> Self { let (min_y, max_y) = if a.y < b.y { (a.y, b.y) } else { (b.y, a.y) }; Self { @@ -193,7 +194,7 @@ impl VEdge { } #[inline] - fn contains(&self, y: i32) -> bool { + fn contains(&self, y: I) -> bool { self.min_y <= y && y <= self.max_y } } @@ -205,7 +206,7 @@ mod tests { use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::int::path::IntPath; - fn path(slice: &[[i32; 2]]) -> IntPath { + fn path(slice: &[[i32; 2]]) -> IntPath { slice.iter().map(|p| IntPoint::new(p[0], p[1])).collect() } diff --git a/iTriangle/src/int/custom.rs b/iTriangle/src/int/custom.rs index b4b3384..3976467 100644 --- a/iTriangle/src/int/custom.rs +++ b/iTriangle/src/int/custom.rs @@ -2,8 +2,11 @@ use crate::int::solver::ShapesSolver; use crate::int::solver::{ContourSolver, ShapeSolver}; use crate::int::triangulation::RawIntTriangulation; use crate::int::validation::Validation; +use i_key_sort::sort::key::SortKey; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::int::shape::{IntContour, IntShape, IntShapes}; +use i_tree::{Expiration, LayoutNumber}; /// A trait for performing triangulation with custom validation settings. /// @@ -14,62 +17,68 @@ use i_overlay::i_shape::int::shape::{IntContour, IntShape, IntShapes}; /// - [`IntContour`] /// - [`IntShape`] /// - [`IntShapes`] -pub trait IntCustomTriangulatable { +pub trait IntCustomTriangulatable { /// Triangulates the shape(s) using the given [`Validation`] settings. - fn custom_triangulate(&self, validation: Validation) -> RawIntTriangulation; + fn custom_triangulate(&self, validation: Validation) -> RawIntTriangulation; /// Triangulates the shape(s), injecting Steiner points and using the specified [`Validation`] settings. fn custom_triangulate_with_steiner_points( &self, - points: &[IntPoint], - validation: Validation, - ) -> RawIntTriangulation; + points: &[IntPoint], + validation: Validation, + ) -> RawIntTriangulation; } -impl IntCustomTriangulatable for IntContour { +impl IntCustomTriangulatable + for IntContour +{ #[inline] - fn custom_triangulate(&self, validation: Validation) -> RawIntTriangulation { + fn custom_triangulate(&self, validation: Validation) -> RawIntTriangulation { ContourSolver::triangulate(validation, self) } #[inline] fn custom_triangulate_with_steiner_points( &self, - points: &[IntPoint], - validation: Validation, - ) -> RawIntTriangulation { + points: &[IntPoint], + validation: Validation, + ) -> RawIntTriangulation { ContourSolver::triangulate_with_steiner_points(validation, self, points) } } -impl IntCustomTriangulatable for IntShape { +impl IntCustomTriangulatable + for IntShape +{ #[inline] - fn custom_triangulate(&self, validation: Validation) -> RawIntTriangulation { + fn custom_triangulate(&self, validation: Validation) -> RawIntTriangulation { ShapeSolver::triangulate(validation, self) } #[inline] fn custom_triangulate_with_steiner_points( &self, - points: &[IntPoint], - validation: Validation, - ) -> RawIntTriangulation { + points: &[IntPoint], + validation: Validation, + ) -> RawIntTriangulation { ShapeSolver::triangulate_with_steiner_points(validation, self, points) } } -impl IntCustomTriangulatable for IntShapes { +impl IntCustomTriangulatable + for IntShapes +{ #[inline] - fn custom_triangulate(&self, validation: Validation) -> RawIntTriangulation { + fn custom_triangulate(&self, validation: Validation) -> RawIntTriangulation { ShapesSolver::triangulate(validation, self) } #[inline] fn custom_triangulate_with_steiner_points( &self, - points: &[IntPoint], - validation: Validation, - ) -> RawIntTriangulation { + points: &[IntPoint], + validation: Validation, + ) -> RawIntTriangulation { ShapesSolver::triangulate_with_steiner_points(validation, self, points) } } diff --git a/iTriangle/src/int/earcut/earcut_64.rs b/iTriangle/src/int/earcut/earcut_64.rs index 01abc4f..de03319 100644 --- a/iTriangle/src/int/earcut/earcut_64.rs +++ b/iTriangle/src/int/earcut/earcut_64.rs @@ -5,18 +5,23 @@ use crate::int::earcut::util::{ABCExcludeResult, Abc, AB}; use crate::int::meta::TrianglesCount; use crate::int::triangulation::{IndexType, IntTriangulation, RawIntTriangulation}; use core::cmp::Ordering; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_float::int::rect::IntRect; use i_overlay::i_shape::util::reserve::Reserve; -pub(super) trait EarcutStore { - fn collect_triangles(&mut self, contour: &[IntPoint], start: usize, bits: u64, count: u32); +pub(super) trait EarcutStore { + fn collect_triangles(&mut self, contour: &[IntPoint], start: usize, bits: u64, count: u32); } -pub trait Earcut64 { - fn earcut_flat_triangulate_into(&self, triangulation: &mut IntTriangulation); +pub trait Earcut64 { + fn earcut_flat_triangulate_into( + &self, + triangulation: &mut IntTriangulation, + ); - fn earcut_net_triangulate_into(&self, triangulation: &mut RawIntTriangulation); + fn earcut_net_triangulate_into(&self, triangulation: &mut RawIntTriangulation); } /// Implements ear clipping triangulation for contours (max 64 points) @@ -26,8 +31,11 @@ pub trait Earcut64 { /// 2. Validate ears against inner points /// 3. Clip valid ears and triangulate /// 4. Repeat until 3 points remain -impl Earcut64 for [IntPoint] { - fn earcut_flat_triangulate_into(&self, triangulation: &mut IntTriangulation) { +impl Earcut64 for [IntPoint] { + fn earcut_flat_triangulate_into( + &self, + triangulation: &mut IntTriangulation, + ) { debug_assert!(self.len() <= 64); triangulation @@ -41,7 +49,7 @@ impl Earcut64 for [IntPoint] { triangulation.points.extend_from_slice(self); } - fn earcut_net_triangulate_into(&self, triangulation: &mut RawIntTriangulation) { + fn earcut_net_triangulate_into(&self, triangulation: &mut RawIntTriangulation) { debug_assert!(self.len() <= 64); triangulation @@ -62,14 +70,14 @@ enum ConvexSearchResult { None, } -struct EarcutSolver<'a, S> { +struct EarcutSolver<'a, I: IntNumber, S> { store: S, - contour: &'a [IntPoint], + contour: &'a [IntPoint], available: u64, } -impl<'a, S: EarcutStore> EarcutSolver<'a, S> { - fn new(contour: &'a [IntPoint], store: S) -> Self { +impl<'a, I: IntNumber, S: EarcutStore> EarcutSolver<'a, I, S> { + fn new(contour: &'a [IntPoint], store: S) -> Self { Self { store, contour, @@ -78,7 +86,7 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { } #[inline(always)] - fn point(&self, index: usize) -> &IntPoint { + fn point(&self, index: usize) -> &IntPoint { unsafe { self.contour.get_unchecked(index) } } @@ -146,16 +154,16 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { let mut bi = self.available.next_wrapped_index(ai); let mut b = *self.point(bi); - let mut ab = b.subtract(a); + let mut ab = b - a; for _ in 0..max_count { let ci = self.available.next_wrapped_index(bi); let c = *self.point(ci); - let bc = c.subtract(b); + let bc = c - b; let cross = ab.cross_product(bc); - if cross > 0 { + if cross > I::Wide::ZERO { return ai; } @@ -177,7 +185,7 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { let b = *self.point(i1); let mut i = i1; - let ab = b.subtract(a); + let ab = b - a; let mut ce = ab; // the prev vector let mut cj = *self.point(i); @@ -187,10 +195,10 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { cj = *self.point(j); // appended edge - let cc = cj.subtract(ci); + let cc = cj - ci; // ca - slice edge - let ca = a.subtract(cj); + let ca = a - cj; // cab < 180 let cross_a = ab.cross_product(ca); @@ -201,7 +209,7 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { // cce <= 180 let cross_v = cc.cross_product(ce); - if cross_a >= 0 || cross_c <= 0 || cross_v > 0 { + if cross_a >= I::Wide::ZERO || cross_c <= I::Wide::ZERO || cross_v > I::Wide::ZERO { if i == i1 { // empty ear return ConvexSearchResult::None; @@ -209,7 +217,7 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { return ConvexSearchResult::Circle; } - if cross_a == 0 && a == cj { + if cross_a == I::Wide::ZERO && a == cj { return ConvexSearchResult::Index(j, true); } @@ -290,9 +298,9 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { #[inline(always)] fn triangle_contains( &self, - a: IntPoint, - b: IntPoint, - c: IntPoint, + a: IntPoint, + b: IntPoint, + c: IntPoint, ear_indices: u64, same_point: bool, ) -> bool { @@ -318,25 +326,25 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { #[inline(always)] fn fast_filter( &self, - a: IntPoint, - b: IntPoint, - c: IntPoint, - e: IntPoint, + a: IntPoint, + b: IntPoint, + c: IntPoint, + e: IntPoint, ear_indices: u64, same_point: bool, - ) -> Option { + ) -> Option> { // filter by bounding box and first triangle // return None if first triangle is not possible let rect = self.bounding_box(ear_indices); // first triangle - let ab = b.subtract(a); - let bc = c.subtract(b); - let ac = c.subtract(a); + let ab = b - a; + let bc = c - b; + let ac = c - a; // last edge - let ee = a.subtract(e); + let ee = a - e; let mut bits = self.available & !ear_indices; let mut heap = ClockOrderHeap::with_center(a); @@ -350,11 +358,11 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { continue; } - let ap = p.subtract(a); + let ap = p - a; // check last edge let cross = ap.cross_product(ee); - match cross.cmp(&0) { + match cross.cmp(&I::Wide::ZERO) { Ordering::Less => {} Ordering::Equal => { if same_point || !AB::contains(a, e, p) { @@ -366,23 +374,23 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { // check ab let cross = ap.cross_product(ab); - if cross >= 0 { + if cross >= I::Wide::ZERO { continue; } - let cp = p.subtract(c); + let cp = p - c; // check bc let cross = cp.cross_product(bc); - if cross >= 0 { + if cross >= I::Wide::ZERO { continue; } // check ac let cross = ap.cross_product(ac); - match cross.cmp(&0) { + match cross.cmp(&I::Wide::ZERO) { Ordering::Less => {} Ordering::Equal => { if AB::contains(a, c, p) { @@ -401,7 +409,7 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { } #[inline(always)] - fn bounding_box(&self, indices: u64) -> IntRect { + fn bounding_box(&self, indices: u64) -> IntRect { let mut bits = indices; let i0 = bits.trailing_zeros() as usize; bits &= !(1 << i0); @@ -415,38 +423,38 @@ impl<'a, S: EarcutStore> EarcutSolver<'a, S> { } } -struct Ear { - a: IntPoint, +struct Ear { + a: IntPoint, active_index: usize, - active_point: IntPoint, + active_point: IntPoint, start: usize, indices: u64, } -impl Ear { +impl Ear { #[inline(always)] - fn cut(&mut self, p: IntPoint, contour: &[IntPoint]) -> bool { + fn cut(&mut self, p: IntPoint, contour: &[IntPoint]) -> bool { let mut i = self.active_index; - let pa = p.subtract(self.a); + let pa = p - self.a; while i != self.start { i = self.indices.next_wrapped_index(i); let c = *unsafe { contour.get_unchecked(i) }; - let ac = c.subtract(self.a); + let ac = c - self.a; let cross = ac.cross_product(pa); - match cross.cmp(&0) { + match cross.cmp(&I::Wide::ZERO) { Ordering::Less => { - let pc = c.subtract(p); - let bc = c.subtract(self.active_point); - return bc.cross_product(pc) < 0; + let pc = c - p; + let bc = c - self.active_point; + return bc.cross_product(pc) < I::Wide::ZERO; } Ordering::Equal => { - let pc = c.subtract(p); - let bc = c.subtract(self.active_point); - let inside = bc.cross_product(pc) < 0; + let pc = c - p; + let bc = c - self.active_point; + let inside = bc.cross_product(pc) < I::Wide::ZERO; return inside && AB::contains(self.a, c, p); } Ordering::Greater => {} @@ -663,7 +671,7 @@ mod tests { IntPoint::new(5, 1), // inside first triangle ]; - let mut triangulation = IntTriangulation::::empty(); + let mut triangulation = IntTriangulation::::empty(); let solver = EarcutSolver::new(&contour, FlatEarcutStore::new(&mut triangulation)); let queue = solver.fast_filter( @@ -683,7 +691,7 @@ mod tests { IntPoint::new(5, 5), // inside AC ]; - let mut triangulation = IntTriangulation::::empty(); + let mut triangulation = IntTriangulation::::empty(); let solver = EarcutSolver::new(&contour, FlatEarcutStore::new(&mut triangulation)); let queue = solver.fast_filter( @@ -703,7 +711,7 @@ mod tests { IntPoint::new(0, 0), // P == A ]; - let mut triangulation = IntTriangulation::::empty(); + let mut triangulation = IntTriangulation::::empty(); let solver = EarcutSolver::new(&contour, FlatEarcutStore::new(&mut triangulation)); let queue = solver @@ -725,7 +733,7 @@ mod tests { IntPoint::new(15, 15), // on AC but outside ]; - let mut triangulation = IntTriangulation::::empty(); + let mut triangulation = IntTriangulation::::empty(); let solver = EarcutSolver::new(&contour, FlatEarcutStore::new(&mut triangulation)); let queue = solver @@ -747,7 +755,7 @@ mod tests { IntPoint::new(1, 9), // inside second triangle ]; - let mut triangulation = IntTriangulation::::empty(); + let mut triangulation = IntTriangulation::::empty(); let solver = EarcutSolver::new(&contour, FlatEarcutStore::new(&mut triangulation)); let queue = solver @@ -774,7 +782,7 @@ mod tests { IntPoint::new(-15, 5), ]; - fn new_ear() -> Ear { + fn new_ear() -> Ear { Ear { a: IntPoint::new(-15, -5), active_index: 2, @@ -972,7 +980,7 @@ mod tests { IntPoint::new(-5, 20), ]; - let mut triangulation = IntTriangulation::::empty(); + let mut triangulation = IntTriangulation::::empty(); let solver = EarcutSolver::new(&contour, FlatEarcutStore::new(&mut triangulation)); let end = solver.validate_and_shrink_ear(0, 4, false).unwrap(); assert_eq!(end, 4); @@ -1668,9 +1676,9 @@ mod tests { } } - fn single_test(contour: &IntContour) { + fn single_test(contour: &IntContour) { // flat - let mut flat = IntTriangulation::::default(); + let mut flat = IntTriangulation::::default(); contour.earcut_flat_triangulate_into(&mut flat); flat.validate(contour.area_two()); @@ -1685,8 +1693,8 @@ mod tests { assert!(net.triangles.len() / 3 <= contour.len() - 2); } - fn roll_test(contour: &IntContour) { - let mut triangulation = IntTriangulation::::default(); + fn roll_test(contour: &IntContour) { + let mut triangulation = IntTriangulation::::default(); let mut path = contour.to_vec(); for _ in 0..path.len() { @@ -1705,7 +1713,7 @@ mod tests { } } - fn random(radius: i32, n: usize) -> IntPath { + fn random(radius: i32, n: usize) -> IntPath { let a = radius / 2; let mut points = Vec::with_capacity(n); let mut rng = rand::rng(); diff --git a/iTriangle/src/int/earcut/flat.rs b/iTriangle/src/int/earcut/flat.rs index f8da09e..8680276 100644 --- a/iTriangle/src/int/earcut/flat.rs +++ b/iTriangle/src/int/earcut/flat.rs @@ -1,29 +1,30 @@ use crate::int::earcut::earcut_64::{Bit, EarcutStore}; use crate::int::triangulation::{IndexType, IntTriangulation}; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; -pub(super) struct FlatEarcutStore<'a, I> { - triangulation: &'a mut IntTriangulation, +pub(super) struct FlatEarcutStore<'a, I: IntNumber, N: IndexType> { + triangulation: &'a mut IntTriangulation, } -impl<'a, I: IndexType> FlatEarcutStore<'a, I> { +impl<'a, I: IntNumber, N: IndexType> FlatEarcutStore<'a, I, N> { #[inline] - pub(super) fn new(triangulation: &'a mut IntTriangulation) -> Self { + pub(super) fn new(triangulation: &'a mut IntTriangulation) -> Self { Self { triangulation } } } -impl EarcutStore for FlatEarcutStore<'_, I> { +impl EarcutStore for FlatEarcutStore<'_, I, N> { #[inline] - fn collect_triangles(&mut self, _: &[IntPoint], start: usize, bits: u64, count: u32) { + fn collect_triangles(&mut self, _: &[IntPoint], start: usize, bits: u64, count: u32) { let mut i = start; - let a = unsafe { I::try_from(i).unwrap_unchecked() }; + let a = unsafe { N::try_from(i).unwrap_unchecked() }; i = bits.next_wrapped_index(i); - let mut b = unsafe { I::try_from(i).unwrap_unchecked() }; + let mut b = unsafe { N::try_from(i).unwrap_unchecked() }; for _ in 0..count { i = bits.next_wrapped_index(i); - let c = unsafe { I::try_from(i).unwrap_unchecked() }; + let c = unsafe { N::try_from(i).unwrap_unchecked() }; self.triangulation.indices.push(a); self.triangulation.indices.push(b); self.triangulation.indices.push(c); diff --git a/iTriangle/src/int/earcut/heap.rs b/iTriangle/src/int/earcut/heap.rs index 75e1070..c929df8 100644 --- a/iTriangle/src/int/earcut/heap.rs +++ b/iTriangle/src/int/earcut/heap.rs @@ -1,16 +1,18 @@ use core::cmp::Ordering; use core::ptr; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_float::triangle::Triangle; const CLOCK_ORDER_HEAP_LEN: usize = 3; -pub(super) type ClockOrderHeap = FixedHeap; +pub(super) type ClockOrderHeap = + FixedHeap, ClockOrderCompare, CLOCK_ORDER_HEAP_LEN>; -impl ClockOrderHeap { +impl ClockOrderHeap { #[inline(always)] - pub(super) fn with_center(center: IntPoint) -> Self { - Self::new(ClockOrderCompare { center }) + pub(super) fn with_center(center: IntPoint) -> Self { + Self::new(ClockOrderCompare { center }, IntPoint::ZERO) } } @@ -18,14 +20,14 @@ pub(super) trait Compare { fn compare(&self, a: &T, b: &T) -> Ordering; } -pub(super) struct ClockOrderCompare { - center: IntPoint, +pub(super) struct ClockOrderCompare { + center: IntPoint, } -impl Compare for ClockOrderCompare { +impl Compare> for ClockOrderCompare { #[inline(always)] - fn compare(&self, a: &IntPoint, b: &IntPoint) -> Ordering { - Triangle::clock_order_point(self.center, *a, *b) + fn compare(&self, a: &IntPoint, b: &IntPoint) -> Ordering { + Triangle::clock_order(self.center, *a, *b) } } @@ -36,13 +38,13 @@ pub(super) struct FixedHeap, const N: usize> { buffer: [T; N], } -impl, const N: usize> FixedHeap { +impl, const N: usize> FixedHeap { #[inline(always)] - pub(super) fn new(comparator: C) -> Self { + pub(super) fn new(comparator: C, empty: T) -> Self { Self { count: 0, overflow: false, - buffer: [T::default(); N], + buffer: [empty; N], comparator, } } @@ -174,7 +176,7 @@ mod tests { #[test] fn test_min_heap_0() { - let mut heap = FixedHeap::::new(Min); + let mut heap = FixedHeap::::new(Min, 0); for &v in &[30, 10, 50, 20] { heap.add(v); } @@ -185,7 +187,7 @@ mod tests { #[test] fn test_min_heap_1() { - let mut heap = FixedHeap::::new(Min); + let mut heap = FixedHeap::::new(Min, 0); for &v in &[5, 5, 4, 4, 3, 2, 1, 0, 0, 0] { heap.add(v); } @@ -196,7 +198,7 @@ mod tests { #[test] fn test_max_heap() { - let mut heap = FixedHeap::::new(Max); + let mut heap = FixedHeap::::new(Max, 0); for &v in &[30, 10, 50, 20] { heap.add(v); } @@ -224,7 +226,7 @@ mod tests { heap.sort_in_place(); - points.sort_unstable_by(|a, b| Triangle::clock_order_point(c, *b, *a)); + points.sort_unstable_by(|a, b| Triangle::clock_order(c, *b, *a)); assert_eq!( heap.buffer[0..CLOCK_ORDER_HEAP_LEN], @@ -251,7 +253,7 @@ mod tests { heap.sort_in_place(); - points.sort_unstable_by(|a, b| Triangle::clock_order_point(c, *b, *a)); + points.sort_unstable_by(|a, b| Triangle::clock_order(c, *b, *a)); assert_eq!( heap.buffer[0..CLOCK_ORDER_HEAP_LEN], @@ -268,7 +270,7 @@ mod tests { heap.add(points[1]); heap.sort_in_place(); - points.sort_unstable_by(|a, b| Triangle::clock_order_point(c, *b, *a)); + points.sort_unstable_by(|a, b| Triangle::clock_order(c, *b, *a)); assert_eq!(heap.buffer[0..2], points); } @@ -294,7 +296,7 @@ mod tests { heap.sort_in_place(); - points.sort_unstable_by(|a, b| Triangle::clock_order_point(c, *b, *a)); + points.sort_unstable_by(|a, b| Triangle::clock_order(c, *b, *a)); assert_eq!( heap.buffer[0..CLOCK_ORDER_HEAP_LEN], diff --git a/iTriangle/src/int/earcut/net.rs b/iTriangle/src/int/earcut/net.rs index a1deb1f..88410ad 100644 --- a/iTriangle/src/int/earcut/net.rs +++ b/iTriangle/src/int/earcut/net.rs @@ -3,6 +3,7 @@ use crate::geom::triangle::IntTriangle; use crate::int::earcut::earcut_64::{Bit, EarcutStore}; use crate::int::triangulation::RawIntTriangulation; use alloc::vec::Vec; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; struct TriangleHandler { @@ -51,15 +52,15 @@ impl EdgePool { } } -pub(super) struct NetEarcutStore<'a> { - triangulation: &'a mut RawIntTriangulation, +pub(super) struct NetEarcutStore<'a, I: IntNumber> { + triangulation: &'a mut RawIntTriangulation, pool: EdgePool, last: usize, } -impl<'a> NetEarcutStore<'a> { +impl<'a, I: IntNumber> NetEarcutStore<'a, I> { #[inline] - pub(super) fn new(count: usize, triangulation: &'a mut RawIntTriangulation) -> Self { + pub(super) fn new(count: usize, triangulation: &'a mut RawIntTriangulation) -> Self { Self { last: count - 1, triangulation, @@ -70,9 +71,9 @@ impl<'a> NetEarcutStore<'a> { } } -impl EarcutStore for NetEarcutStore<'_> { +impl EarcutStore for NetEarcutStore<'_, I> { #[inline] - fn collect_triangles(&mut self, contour: &[IntPoint], start: usize, bits: u64, count: u32) { + fn collect_triangles(&mut self, contour: &[IntPoint], start: usize, bits: u64, count: u32) { let ai = start; let a = IndexPoint::new(ai, contour[ai]); @@ -97,7 +98,7 @@ impl EarcutStore for NetEarcutStore<'_> { } } -impl NetEarcutStore<'_> { +impl NetEarcutStore<'_, I> { #[inline] fn get_or_put(&mut self, i0: usize, i1: usize, t: usize, v: usize) -> usize { // is edge inner or outer diff --git a/iTriangle/src/int/earcut/util.rs b/iTriangle/src/int/earcut/util.rs index 42a1e96..cdb42af 100644 --- a/iTriangle/src/int/earcut/util.rs +++ b/iTriangle/src/int/earcut/util.rs @@ -1,6 +1,8 @@ use core::cmp::Ordering; -use i_overlay::i_float::fix_vec::FixVec; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; use i_overlay::i_float::int::point::IntPoint; +use i_overlay::i_float::int::vector::IntVector as FixVec; #[derive(PartialEq, Eq)] pub(super) enum ABCExcludeResult { @@ -10,21 +12,21 @@ pub(super) enum ABCExcludeResult { } // a, b, c - counter clock wised points -pub(super) struct Abc { - a: IntPoint, - b: IntPoint, - c: IntPoint, - ab: FixVec, - bc: FixVec, - ca: FixVec, +pub(super) struct Abc { + a: IntPoint, + b: IntPoint, + c: IntPoint, + ab: FixVec, + bc: FixVec, + ca: FixVec, } -impl Abc { +impl Abc { #[inline(always)] - pub(super) fn new(a: IntPoint, b: IntPoint, c: IntPoint) -> Self { - let ab = b.subtract(a); - let bc = c.subtract(b); - let ca = a.subtract(c); + pub(super) fn new(a: IntPoint, b: IntPoint, c: IntPoint) -> Self { + let ab = b - a; + let bc = c - b; + let ca = a - c; Self { a, b, @@ -36,43 +38,43 @@ impl Abc { } #[inline(always)] - pub(super) fn contains(&self, p: IntPoint) -> bool { - let ap = p.subtract(self.a); + pub(super) fn contains(&self, p: IntPoint) -> bool { + let ap = p - self.a; let a_cross = ap.cross_product(self.ab); - if a_cross >= 0 { + if a_cross >= I::Wide::ZERO { return false; } - let bp = p.subtract(self.b); + let bp = p - self.b; let b_cross = bp.cross_product(self.bc); - if b_cross >= 0 { + if b_cross >= I::Wide::ZERO { return false; } - let cp = p.subtract(self.c); + let cp = p - self.c; let c_cross = cp.cross_product(self.ca); - c_cross < 0 + c_cross < I::Wide::ZERO } #[inline(always)] - pub(super) fn contains_exclude_ca(&self, p: IntPoint) -> ABCExcludeResult { - let ap = p.subtract(self.a); + pub(super) fn contains_exclude_ca(&self, p: IntPoint) -> ABCExcludeResult { + let ap = p - self.a; let a_cross = ap.cross_product(self.ab); - if a_cross >= 0 { + if a_cross >= I::Wide::ZERO { return ABCExcludeResult::Outside; } - let bp = p.subtract(self.b); + let bp = p - self.b; let b_cross = bp.cross_product(self.bc); - if b_cross >= 0 { + if b_cross >= I::Wide::ZERO { return ABCExcludeResult::Outside; } - let cp = p.subtract(self.c); + let cp = p - self.c; let c_cross = cp.cross_product(self.ca); - match c_cross.cmp(&0) { + match c_cross.cmp(&I::Wide::ZERO) { Ordering::Less => ABCExcludeResult::Inside, Ordering::Equal => { if AB::contains(self.a, self.c, p) { @@ -90,13 +92,13 @@ pub(super) struct AB; impl AB { #[inline(always)] - pub(super) fn contains(a: IntPoint, b: IntPoint, p: IntPoint) -> bool { + pub(super) fn contains(a: IntPoint, b: IntPoint, p: IntPoint) -> bool { // a, b, p already on one line // not including ends - let ap = a.subtract(p); - let bp = b.subtract(p); + let ap = a - p; + let bp = b - p; // must have opposite direction - ap.dot_product(bp) < 0 + ap.dot_product(bp) < I::Wide::ZERO } } diff --git a/iTriangle/src/int/locator.rs b/iTriangle/src/int/locator.rs index 63de362..b17d0de 100644 --- a/iTriangle/src/int/locator.rs +++ b/iTriangle/src/int/locator.rs @@ -1,6 +1,9 @@ use alloc::vec; use alloc::vec::Vec; +use i_key_sort::sort::key::SortKey; use i_key_sort::sort::two_keys::TwoKeysSort; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; use i_overlay::i_float::int::rect::IntRect; use i_overlay::i_shape::int::IntPoint; @@ -9,22 +12,23 @@ use crate::{ location::{PointLocationInTriangulation, TriangleIndex}, }; -pub trait IntPointInTriangulationLocator { - fn locate_points(&self, points: &[IntPoint]) -> Vec; +pub trait IntPointInTriangulationLocator { + fn locate_points(&self, points: &[IntPoint]) -> Vec; } -impl IntPointInTriangulationLocator for I +impl IntPointInTriangulationLocator for T where - I: Iterator + Clone, + I: IntNumber + SortKey, + T: Iterator; 3]> + Clone, { - fn locate_points(&self, points: &[IntPoint]) -> Vec { + fn locate_points(&self, points: &[IntPoint]) -> Vec { locate_points_in_triangles(self.clone(), points) } } -fn locate_points_in_triangles( - triangles: impl Iterator, - points: &[IntPoint], +fn locate_points_in_triangles( + triangles: impl Iterator; 3]>, + points: &[IntPoint], ) -> Vec { let mut result = vec![PointLocationInTriangulation::Outside; points.len()]; let mut sorted_points: Vec<_> = points @@ -97,9 +101,9 @@ fn locate_points_in_triangles( } #[derive(Clone, Copy)] -struct IndexedPoint { +struct IndexedPoint { index: usize, - point: IntPoint, + point: IntPoint, } #[derive(Clone, Copy, Debug, Eq, PartialEq)] @@ -111,39 +115,33 @@ enum PointLocationInTriangle { } trait IntPointInTriangleLocator { - fn locate_point(&self, point: IntPoint) -> PointLocationInTriangle; + type Int: IntNumber; + fn locate_point(&self, point: IntPoint) -> PointLocationInTriangle; - fn boundary(&self) -> IntRect; + fn boundary(&self) -> IntRect; } -impl IntPointInTriangleLocator for [IntPoint; 3] { +impl IntPointInTriangleLocator for [IntPoint; 3] { + type Int = I; + #[inline] - fn locate_point(&self, point: IntPoint) -> PointLocationInTriangle { + fn locate_point(&self, point: IntPoint) -> PointLocationInTriangle { let [p0, p1, p2] = *self; if point == p0 || point == p1 || point == p2 { return PointLocationInTriangle::OnVertex; } - let px = point.x as i64; - let py = point.y as i64; - let x0 = p0.x as i64; - let y0 = p0.y as i64; - let x1 = p1.x as i64; - let y1 = p1.y as i64; - let x2 = p2.x as i64; - let y2 = p2.y as i64; - - let q0 = (px - x1) * (y0 - y1) - (py - y1) * (x0 - x1); - let q1 = (px - x2) * (y1 - y2) - (py - y2) * (x1 - x2); - let q2 = (px - x0) * (y2 - y0) - (py - y0) * (x2 - x0); + let q0 = (point - p1).cross_product(p0 - p1); + let q1 = (point - p2).cross_product(p1 - p2); + let q2 = (point - p0).cross_product(p2 - p0); - let has_neg = q0 < 0 || q1 < 0 || q2 < 0; - let has_pos = q0 > 0 || q1 > 0 || q2 > 0; + let has_neg = q0 < I::Wide::ZERO || q1 < I::Wide::ZERO || q2 < I::Wide::ZERO; + let has_pos = q0 > I::Wide::ZERO || q1 > I::Wide::ZERO || q2 > I::Wide::ZERO; if has_neg && has_pos { PointLocationInTriangle::Outside - } else if q0 == 0 || q1 == 0 || q2 == 0 { + } else if q0 == I::Wide::ZERO || q1 == I::Wide::ZERO || q2 == I::Wide::ZERO { PointLocationInTriangle::OnEdge } else { PointLocationInTriangle::Inside @@ -151,7 +149,7 @@ impl IntPointInTriangleLocator for [IntPoint; 3] { } #[inline] - fn boundary(&self) -> IntRect { + fn boundary(&self) -> IntRect { let mut rect = IntRect::with_point(self[0]); rect.unsafe_add_point(&self[1]); rect.unsafe_add_point(&self[2]); @@ -159,16 +157,18 @@ impl IntPointInTriangleLocator for [IntPoint; 3] { } } -impl IntTriangulation { +impl IntTriangulation { #[inline] - pub fn locate_points(&self, points: &[IntPoint]) -> Vec { + pub fn locate_points(&self, points: &[IntPoint]) -> Vec { locate_points_in_triangles(self.triangles(), points) } } -impl IntPointInTriangulationLocator for IntTriangulation { +impl IntPointInTriangulationLocator + for IntTriangulation +{ #[inline] - fn locate_points(&self, points: &[IntPoint]) -> Vec { + fn locate_points(&self, points: &[IntPoint]) -> Vec { IntTriangulation::locate_points(self, points) } } @@ -184,7 +184,7 @@ mod tests { use i_overlay::i_shape::int::IntPoint; use i_overlay::i_shape::int_path; - fn square_triangulation() -> IntTriangulation { + fn square_triangulation() -> IntTriangulation { IntTriangulation { points: vec![ IntPoint::new(0, 0), @@ -225,7 +225,7 @@ mod tests { fill_rule: Default::default(), options: IntOverlayOptions::keep_all_points(), }; - let mut triangulator = IntTriangulator::::new(32, validation, Default::default()); + let mut triangulator = IntTriangulator::::new(32, validation, Default::default()); triangulator.delaunay = true; let triangulation = triangulator.triangulate_contour(&path); diff --git a/iTriangle/src/int/meta.rs b/iTriangle/src/int/meta.rs index 5732d1b..29a5764 100644 --- a/iTriangle/src/int/meta.rs +++ b/iTriangle/src/int/meta.rs @@ -1,3 +1,4 @@ +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::flat::buffer::FlatContoursBuffer; use i_overlay::i_shape::int::shape::IntContour; @@ -11,7 +12,7 @@ pub(crate) trait TrianglesCount { fn triangles_count(&self, points_count: usize) -> usize; } -impl TrianglesCount for FlatContoursBuffer { +impl TrianglesCount for FlatContoursBuffer { #[inline] fn triangles_count(&self, points_count: usize) -> usize { let mut count = 2 * points_count; @@ -21,7 +22,7 @@ impl TrianglesCount for FlatContoursBuffer { } } -impl TrianglesCount for [IntContour] { +impl TrianglesCount for [IntContour] { #[inline] fn triangles_count(&self, points_count: usize) -> usize { let mut count = 2 * points_count; @@ -32,7 +33,7 @@ impl TrianglesCount for [IntContour] { } } -impl TrianglesCount for [IntPoint] { +impl TrianglesCount for [IntPoint] { #[inline] fn triangles_count(&self, points_count: usize) -> usize { self.len() - 2 + 2 * points_count @@ -43,7 +44,7 @@ pub(crate) trait MeshMetaProvider { fn meta(&self, points_count: usize) -> MeshMeta; } -impl MeshMetaProvider for [IntPoint] { +impl MeshMetaProvider for [IntPoint] { #[inline] fn meta(&self, points_count: usize) -> MeshMeta { MeshMeta { @@ -53,7 +54,7 @@ impl MeshMetaProvider for [IntPoint] { } } -impl MeshMetaProvider for [IntContour] { +impl MeshMetaProvider for [IntContour] { #[inline] fn meta(&self, points_count: usize) -> MeshMeta { let mut triangles_count = 2 * points_count; diff --git a/iTriangle/src/int/monotone/chain/builder.rs b/iTriangle/src/int/monotone/chain/builder.rs index 68b1957..aab4eab 100644 --- a/iTriangle/src/int/monotone/chain/builder.rs +++ b/iTriangle/src/int/monotone/chain/builder.rs @@ -1,6 +1,8 @@ use crate::int::monotone::chain::vertex::ChainVertex; use alloc::vec::Vec; +use i_key_sort::sort::key::SortKey; use i_key_sort::sort::two_keys::TwoKeysSort; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_float::triangle::Triangle; use i_overlay::i_shape::flat::buffer::FlatContoursBuffer; @@ -10,7 +12,10 @@ use i_overlay::i_shape::util::reserve::Reserve; pub(crate) struct ChainBuilder; impl ChainBuilder { - pub(crate) fn flat_to_vertices(flat: &FlatContoursBuffer, vertices: &mut Vec) { + pub(crate) fn flat_to_vertices( + flat: &FlatContoursBuffer, + vertices: &mut Vec>, + ) { vertices.clear(); for range in flat.ranges.iter() { let contour = &flat.points[range.clone()]; @@ -19,10 +24,10 @@ impl ChainBuilder { vertices.sort_by_swipe_line(); } - pub(crate) fn shape_to_vertices( - shape: &IntShape, - points: Option<&[IntPoint]>, - vertices: &mut Vec, + pub(crate) fn shape_to_vertices( + shape: &IntShape, + points: Option<&[IntPoint]>, + vertices: &mut Vec>, ) { vertices.clear(); for contour in shape.iter() { @@ -34,10 +39,10 @@ impl ChainBuilder { vertices.sort_by_swipe_line(); } - pub(crate) fn contour_to_vertices( - contour: &IntContour, - points: Option<&[IntPoint]>, - vertices: &mut Vec, + pub(crate) fn contour_to_vertices( + contour: &IntContour, + points: Option<&[IntPoint]>, + vertices: &mut Vec>, ) { vertices.clear(); vertices.add_contour(contour); @@ -54,19 +59,19 @@ enum DirectionType { Prev, } -struct Direction { - point: IntPoint, +struct Direction { + point: IntPoint, kind: DirectionType, } -trait ChainVertexVec { - fn add_contour(&mut self, contour: &[IntPoint]); - fn add_steiner_points(&mut self, points: &[IntPoint]); +trait ChainVertexVec { + fn add_contour(&mut self, contour: &[IntPoint]); + fn add_steiner_points(&mut self, points: &[IntPoint]); } -impl ChainVertexVec for Vec { +impl ChainVertexVec for Vec> { #[inline] - fn add_contour(&mut self, contour: &[IntPoint]) { + fn add_contour(&mut self, contour: &[IntPoint]) { let mut prev = contour[contour.len() - 2]; let mut this = contour[contour.len() - 1]; @@ -78,7 +83,7 @@ impl ChainVertexVec for Vec { } #[inline] - fn add_steiner_points(&mut self, points: &[IntPoint]) { + fn add_steiner_points(&mut self, points: &[IntPoint]) { for &this in points { self.push(ChainVertex::implant(this)); } @@ -86,11 +91,14 @@ impl ChainVertexVec for Vec { } pub(crate) trait ChainVertexExport { - fn feed_points(&self, points: &mut Vec); + type Int: IntNumber; + fn feed_points(&self, points: &mut Vec>); } -impl ChainVertexExport for [ChainVertex] { +impl ChainVertexExport for [ChainVertex] { + type Int = I; + #[inline] - fn feed_points(&self, points: &mut Vec) { + fn feed_points(&self, points: &mut Vec>) { points.reserve_capacity(self.len()); points.clear(); let mut index = usize::MAX; @@ -108,7 +116,7 @@ trait ChainVertexSort { fn sort_node_in_clockwise_order(&mut self); } -impl ChainVertexSort for [ChainVertex] { +impl ChainVertexSort for [ChainVertex] { #[inline] fn sort_by_swipe_line(&mut self) { self.sort_by_two_keys(false, |v| v.this.x, |v| v.this.y); @@ -161,7 +169,7 @@ impl ChainVertexSort for [ChainVertex] { if (a.x < c.x || a.x == c.x && a.y < c.y) && (b.x < c.x || b.x == c.x && b.y < c.y) || (a.x > c.x || a.x == c.x && a.y > c.y) && (b.x > c.x || b.x == c.x && b.y > c.y) { - Triangle::clock_order_point(a, b, c) + Triangle::clock_order(a, b, c) } else if a.x == c.x && b.x == c.x { a.y.cmp(&b.y) } else { diff --git a/iTriangle/src/int/monotone/chain/vertex.rs b/iTriangle/src/int/monotone/chain/vertex.rs index 77f3dcd..a43aad7 100644 --- a/iTriangle/src/int/monotone/chain/vertex.rs +++ b/iTriangle/src/int/monotone/chain/vertex.rs @@ -1,4 +1,5 @@ use crate::geom::point::IndexPoint; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_float::triangle::Triangle; @@ -13,16 +14,16 @@ pub(crate) enum VertexType { } #[derive(Debug, Clone, Copy, Default)] -pub(crate) struct ChainVertex { +pub(crate) struct ChainVertex { pub(crate) index: usize, - pub(crate) this: IntPoint, - pub(crate) next: IntPoint, - pub(crate) prev: IntPoint, + pub(crate) this: IntPoint, + pub(crate) next: IntPoint, + pub(crate) prev: IntPoint, } -impl ChainVertex { +impl ChainVertex { #[inline] - pub(super) fn new(this: IntPoint, next: IntPoint, prev: IntPoint) -> Self { + pub(super) fn new(this: IntPoint, next: IntPoint, prev: IntPoint) -> Self { Self { index: 0, this, @@ -32,7 +33,7 @@ impl ChainVertex { } #[inline] - pub(crate) fn implant(this: IntPoint) -> Self { + pub(crate) fn implant(this: IntPoint) -> Self { Self { index: 0, this, @@ -43,7 +44,7 @@ impl ChainVertex { #[inline] pub(crate) fn get_type(&self) -> VertexType { - let clock_wise = Triangle::is_clockwise_point(self.prev, self.this, self.next); + let clock_wise = Triangle::is_clockwise(self.prev, self.this, self.next); if self.prev == IntPoint::EMPTY && self.next == IntPoint::EMPTY { VertexType::Steiner } else if self.prev < self.this && self.next < self.this { @@ -64,7 +65,7 @@ impl ChainVertex { } #[inline] - pub(crate) fn index_point(&self) -> IndexPoint { + pub(crate) fn index_point(&self) -> IndexPoint { IndexPoint::new(self.index, self.this) } } diff --git a/iTriangle/src/int/monotone/flat/section.rs b/iTriangle/src/int/monotone/flat/section.rs index 3132c7d..bc45ecd 100644 --- a/iTriangle/src/int/monotone/flat/section.rs +++ b/iTriangle/src/int/monotone/flat/section.rs @@ -1,15 +1,16 @@ use crate::geom::point::IndexPoint; use crate::int::monotone::v_segment::VSegment; use alloc::vec::Vec; +use i_overlay::i_float::int::number::int::IntNumber; use i_tree::set::sort::KeyValue; #[derive(Debug, Clone)] -pub(super) struct FlatSection { - pub(super) sort: VSegment, - pub(super) points: Vec, +pub(super) struct FlatSection { + pub(super) sort: VSegment, + pub(super) points: Vec>, } -impl Default for FlatSection { +impl Default for FlatSection { #[inline] fn default() -> Self { Self { @@ -19,9 +20,9 @@ impl Default for FlatSection { } } -impl KeyValue for FlatSection { +impl KeyValue> for FlatSection { #[inline] - fn key(&self) -> &VSegment { + fn key(&self) -> &VSegment { &self.sort } } diff --git a/iTriangle/src/int/monotone/flat/triangulator.rs b/iTriangle/src/int/monotone/flat/triangulator.rs index 69d7749..cb9fe0b 100644 --- a/iTriangle/src/int/monotone/flat/triangulator.rs +++ b/iTriangle/src/int/monotone/flat/triangulator.rs @@ -6,29 +6,30 @@ use crate::int::triangulation::{IndexType, IntTriangulation}; use alloc::vec; use alloc::vec::Vec; use core::cmp::Ordering; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::triangle::Triangle; use i_overlay::i_shape::util::reserve::Reserve; use i_tree::set::list::SetList; use i_tree::set::sort::SetCollection; use i_tree::set::tree::SetTree; -struct FlatBuilder<'a, I> { - triangulation: &'a mut IntTriangulation, +struct FlatBuilder<'a, I: IntNumber, N: IndexType> { + triangulation: &'a mut IntTriangulation, } -pub(crate) trait FlatTriangulation { - fn flat_triangulate_into( +pub(crate) trait FlatTriangulation { + fn flat_triangulate_into( &self, triangles_count: usize, - triangulation: &mut IntTriangulation, + triangulation: &mut IntTriangulation, ); } -impl FlatTriangulation for [ChainVertex] { - fn flat_triangulate_into( +impl FlatTriangulation for [ChainVertex] { + fn flat_triangulate_into( &self, triangles_count: usize, - triangulation: &mut IntTriangulation, + triangulation: &mut IntTriangulation, ) { triangulation.indices.reserve_capacity(triangles_count); triangulation.indices.clear(); @@ -47,17 +48,17 @@ impl FlatTriangulation for [ChainVertex] { } } -impl<'a, I> FlatBuilder<'a, I> { - fn new(triangulation: &'a mut IntTriangulation) -> Self { +impl<'a, I: IntNumber, N: IndexType> FlatBuilder<'a, I, N> { + fn new(triangulation: &'a mut IntTriangulation) -> Self { Self { triangulation } } } -impl FlatBuilder<'_, I> { +impl FlatBuilder<'_, I, N> { #[inline] - fn triangulate>( + fn triangulate, FlatSection>>( &mut self, - vertices: &[ChainVertex], + vertices: &[ChainVertex], mut store: S, ) { for v in vertices.iter() { @@ -73,7 +74,11 @@ impl FlatBuilder<'_, I> { } #[inline] - fn join>(&mut self, v: &ChainVertex, tree: &mut S) { + fn join, FlatSection>>( + &mut self, + v: &ChainVertex, + tree: &mut S, + ) { let index = tree.find_section(v); let section = unsafe { tree.value_by_index_mut(index) }; if section.sort.b == v.this { @@ -84,7 +89,11 @@ impl FlatBuilder<'_, I> { } #[inline] - fn start>(&mut self, v: &ChainVertex, tree: &mut S) { + fn start, FlatSection>>( + &mut self, + v: &ChainVertex, + tree: &mut S, + ) { let section = FlatSection { sort: VSegment { a: v.this, @@ -96,7 +105,11 @@ impl FlatBuilder<'_, I> { } #[inline] - fn end>(&mut self, v: &ChainVertex, tree: &mut S) { + fn end, FlatSection>>( + &mut self, + v: &ChainVertex, + tree: &mut S, + ) { let index = tree.find_section(v); let section = unsafe { tree.value_by_index_mut(index) }; section.add_as_last(v, &mut self.triangulation.indices); @@ -104,14 +117,22 @@ impl FlatBuilder<'_, I> { } #[inline] - fn split>(&mut self, v: &ChainVertex, tree: &mut S) { + fn split, FlatSection>>( + &mut self, + v: &ChainVertex, + tree: &mut S, + ) { let index = tree.find_section(v); let section = unsafe { tree.value_by_index_mut(index) }; let new_section = section.add_to_middle(v, &mut self.triangulation.indices); tree.insert(new_section); } - fn merge>(&mut self, v: &ChainVertex, tree: &mut S) { + fn merge, FlatSection>>( + &mut self, + v: &ChainVertex, + tree: &mut S, + ) { let prev_index = tree.find_section(v); let next_index = tree.index_before(prev_index); let next = unsafe { tree.value_by_index_mut(next_index) }; @@ -137,9 +158,9 @@ impl FlatBuilder<'_, I> { } } -impl FlatSection { +impl FlatSection { #[inline] - fn add_as_last(&mut self, v: &ChainVertex, triangles: &mut Vec) { + fn add_as_last(&mut self, v: &ChainVertex, triangles: &mut Vec) { debug_assert!(self.points.len() >= 2); let a = v.index_point(); @@ -149,12 +170,12 @@ impl FlatSection { } #[inline] - fn add_to_top(&mut self, v: &ChainVertex, triangles: &mut Vec) { + fn add_to_top(&mut self, v: &ChainVertex, triangles: &mut Vec) { self.add_from_start(v, triangles); } #[inline] - fn add_to_bottom(&mut self, v: &ChainVertex, triangles: &mut Vec) { + fn add_to_bottom(&mut self, v: &ChainVertex, triangles: &mut Vec) { self.sort = VSegment { a: v.this, b: v.next, @@ -162,11 +183,11 @@ impl FlatSection { self.add_from_end(v, triangles); } - fn add_to_middle( + fn add_to_middle( &mut self, - v: &ChainVertex, - triangles: &mut Vec, - ) -> FlatSection { + v: &ChainVertex, + triangles: &mut Vec, + ) -> FlatSection { debug_assert!(!self.points.is_empty()); let a = v.index_point(); let mut b = self.points[0]; @@ -191,7 +212,7 @@ impl FlatSection { let mut i = 1; while i < self.points.len() { let c = self.points[i]; - if Triangle::is_cw_or_line_point(a.point, b.point, c.point) { + if Triangle::is_cw_or_line(a.point, b.point, c.point) { i += 1; b = c; continue; @@ -204,11 +225,11 @@ impl FlatSection { // we still must split section // peak the closest point by x to a.x let mut split_index = 0; - let mut min_dist = i32::MAX; + let mut min_dist = None; for (i, v) in self.points.iter().enumerate() { - let dist = a.point.x - v.point.x; - if dist < min_dist { - min_dist = dist; + let dist = a.point.x.wide() - v.point.x.wide(); + if min_dist.is_none_or(|min_dist| dist < min_dist) { + min_dist = Some(dist); split_index = i; } } @@ -236,7 +257,7 @@ impl FlatSection { let mut n = 0; while i < bottom_points.len() { let c = bottom_points[i]; - if Triangle::is_cw_or_line_point(a.point, b.point, c.point) { + if Triangle::is_cw_or_line(a.point, b.point, c.point) { break; } triangles.add_abc(a.index, b.index, bottom_points[i].index); @@ -267,7 +288,7 @@ impl FlatSection { } } - fn add_from_start(&mut self, v: &ChainVertex, triangles: &mut Vec) { + fn add_from_start(&mut self, v: &ChainVertex, triangles: &mut Vec) { let a = v.index_point(); debug_assert!(!self.points.is_empty()); if self.points.len() <= 1 { @@ -278,7 +299,7 @@ impl FlatSection { let mut n = 0; let mut b = *self.points.first().unwrap(); for &c in self.points.iter().skip(1) { - if Triangle::is_cw_or_line_point(a.point, b.point, c.point) { + if Triangle::is_cw_or_line(a.point, b.point, c.point) { break; } n += 1; @@ -296,7 +317,7 @@ impl FlatSection { } } - fn add_from_end(&mut self, v: &ChainVertex, triangles: &mut Vec) { + fn add_from_end(&mut self, v: &ChainVertex, triangles: &mut Vec) { let a = v.index_point(); debug_assert!(!self.points.is_empty()); if self.points.len() <= 1 { @@ -307,7 +328,7 @@ impl FlatSection { let mut n = 0; let mut c = *self.points.last().unwrap(); for &b in self.points.iter().rev().skip(1) { - if Triangle::is_cw_or_line_point(a.point, b.point, c.point) { + if Triangle::is_cw_or_line(a.point, b.point, c.point) { break; } n += 1; @@ -334,16 +355,17 @@ impl AddTriangle for Vec { } } -trait FindSection { - fn find_section(&self, v: &ChainVertex) -> u32; +trait FindSection { + fn find_section(&self, v: &ChainVertex) -> u32; } -impl FindSection for C +impl FindSection for C where - C: SetCollection, + I: IntNumber, + C: SetCollection, FlatSection>, { #[inline] - fn find_section(&self, v: &ChainVertex) -> u32 { + fn find_section(&self, v: &ChainVertex) -> u32 { self.first_index_less_by(|s| { let point_search = s.is_under_point_order(v.this); match point_search { @@ -351,7 +373,7 @@ where if v.prev == s.a { Ordering::Equal } else { - Triangle::clock_order_point(s.a, v.next, s.b) + Triangle::clock_order(s.a, v.next, s.b) } } _ => point_search, @@ -376,7 +398,7 @@ mod tests { use i_overlay::i_shape::int::path::IntPath; use rand::RngExt; - fn path(slice: &[[i32; 2]]) -> IntPath { + fn path(slice: &[[i32; 2]]) -> IntPath { slice.iter().map(|p| IntPoint::new(p[0], p[1])).collect() } @@ -390,7 +412,7 @@ mod tests { ]]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 2); @@ -407,7 +429,7 @@ mod tests { ]]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 2); @@ -424,7 +446,7 @@ mod tests { ]]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 2); @@ -441,7 +463,7 @@ mod tests { ]]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 2); @@ -458,7 +480,7 @@ mod tests { ]]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 2); @@ -477,7 +499,7 @@ mod tests { ]]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 4); @@ -497,7 +519,7 @@ mod tests { ]]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 5); @@ -515,7 +537,7 @@ mod tests { ]]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 3); @@ -536,7 +558,7 @@ mod tests { ]]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 6); @@ -559,7 +581,7 @@ mod tests { ]]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 8); @@ -577,7 +599,7 @@ mod tests { ]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 16); @@ -596,7 +618,7 @@ mod tests { ]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 24); @@ -629,7 +651,7 @@ mod tests { ]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 16); @@ -650,7 +672,7 @@ mod tests { ])]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 6); @@ -664,7 +686,7 @@ mod tests { let shape_area = s.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 3); @@ -676,7 +698,7 @@ mod tests { let shape = vec![path(&[[0, 2], [2, 0], [5, 0], [4, 6]])]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 2); @@ -688,7 +710,7 @@ mod tests { let shape = vec![path(&[[0, 4], [-4, -3], [-2, -2], [1, -2], [0, -1]])]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 3); @@ -709,7 +731,7 @@ mod tests { ])]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 6); @@ -729,7 +751,7 @@ mod tests { ])]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 5); @@ -748,7 +770,7 @@ mod tests { ])]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 4); @@ -768,7 +790,7 @@ mod tests { ])]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 5); @@ -789,7 +811,7 @@ mod tests { ])]; let shape_area = shape.area_two(); - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); MonotoneTriangulator::default().shape_into_flat_triangulation(&shape, &mut raw); assert_eq!(raw.indices.len() / 3, 6); @@ -798,7 +820,7 @@ mod tests { #[test] fn test_random_0() { - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); for _ in 0..100_000 { let path = random(8, 5); let shape = vec![path]; @@ -817,7 +839,7 @@ mod tests { #[test] fn test_random_1() { - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); for _ in 0..100_000 { let path = random(10, 6); let shape = vec![path]; @@ -836,7 +858,7 @@ mod tests { #[test] fn test_random_2() { - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); for _ in 0..100_000 { let path = random(10, 12); let shape = vec![path]; @@ -855,7 +877,7 @@ mod tests { #[test] fn test_random_3() { - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); for _ in 0..50_000 { let path = random(20, 20); let shape = vec![path]; @@ -874,7 +896,7 @@ mod tests { #[test] fn test_random_4() { - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); for _ in 0..5_000 { let path = random(30, 50); let shape = vec![path]; @@ -893,7 +915,7 @@ mod tests { #[test] fn test_random_5() { - let mut raw = IntTriangulation::::default(); + let mut raw = IntTriangulation::::default(); for _ in 0..2_000 { let main = random(50, 20); let mut shape = vec![main]; @@ -914,7 +936,7 @@ mod tests { } } - fn random(radius: i32, n: usize) -> IntPath { + fn random(radius: i32, n: usize) -> IntPath { let a = radius / 2; let mut points = Vec::with_capacity(n); let mut rng = rand::rng(); diff --git a/iTriangle/src/int/monotone/net/section.rs b/iTriangle/src/int/monotone/net/section.rs index 9c26789..4fb0447 100644 --- a/iTriangle/src/int/monotone/net/section.rs +++ b/iTriangle/src/int/monotone/net/section.rs @@ -1,6 +1,7 @@ use crate::geom::point::IndexPoint; use crate::int::monotone::v_segment::VSegment; use alloc::vec::Vec; +use i_overlay::i_float::int::number::int::IntNumber; use i_tree::set::sort::KeyValue; #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -9,25 +10,25 @@ pub(crate) enum EdgeType { Phantom(usize), // keep index to itself(edge) in phantom store } #[derive(Debug, Clone, Copy)] -pub(crate) struct TriangleEdge { - pub(crate) a: IndexPoint, - pub(crate) b: IndexPoint, +pub(crate) struct TriangleEdge { + pub(crate) a: IndexPoint, + pub(crate) b: IndexPoint, pub(crate) kind: EdgeType, } #[derive(Debug, Clone)] -pub(crate) enum Content { - Point(IndexPoint), - Edges(Vec), +pub(crate) enum Content { + Point(IndexPoint), + Edges(Vec>), } #[derive(Debug, Clone)] -pub(crate) struct Section { - pub(crate) sort: VSegment, - pub(crate) content: Content, +pub(crate) struct Section { + pub(crate) sort: VSegment, + pub(crate) content: Content, } -impl Default for Section { +impl Default for Section { #[inline] fn default() -> Self { Self { @@ -37,16 +38,16 @@ impl Default for Section { } } -impl KeyValue for Section { +impl KeyValue> for Section { #[inline] - fn key(&self) -> &VSegment { + fn key(&self) -> &VSegment { &self.sort } } -impl TriangleEdge { +impl TriangleEdge { #[inline] - pub(crate) fn border(a: IndexPoint, b: IndexPoint) -> Self { + pub(crate) fn border(a: IndexPoint, b: IndexPoint) -> Self { Self { a, b, @@ -55,7 +56,7 @@ impl TriangleEdge { } #[inline] - pub(crate) fn phantom(a: IndexPoint, b: IndexPoint, index: usize) -> Self { + pub(crate) fn phantom(a: IndexPoint, b: IndexPoint, index: usize) -> Self { Self { a, b, @@ -64,7 +65,7 @@ impl TriangleEdge { } #[inline] - pub(crate) fn regular(a: IndexPoint, b: IndexPoint, index: usize) -> Self { + pub(crate) fn regular(a: IndexPoint, b: IndexPoint, index: usize) -> Self { Self { a, b, @@ -83,8 +84,8 @@ mod tests { use i_tree::set::tree::SetTree; use i_tree::EMPTY_REF; - impl Section { - fn with_sort(sort: VSegment) -> Section { + impl Section { + fn with_sort(sort: VSegment) -> Section { Section { sort, content: Content::Point(IndexPoint::empty()), diff --git a/iTriangle/src/int/monotone/net/triangulator.rs b/iTriangle/src/int/monotone/net/triangulator.rs index 5c38c47..b8f53f0 100644 --- a/iTriangle/src/int/monotone/net/triangulator.rs +++ b/iTriangle/src/int/monotone/net/triangulator.rs @@ -10,26 +10,31 @@ use alloc::vec; use alloc::vec::Vec; use core::cmp::Ordering; use core::mem::swap; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::triangle::Triangle; use i_overlay::i_shape::util::reserve::Reserve; use i_tree::set::list::SetList; use i_tree::set::sort::SetCollection; use i_tree::set::tree::SetTree; -struct NetBuilder<'a> { - triangulation: &'a mut RawIntTriangulation, +struct NetBuilder<'a, I: IntNumber> { + triangulation: &'a mut RawIntTriangulation, phantom_store: PhantomEdgePool, } -pub(crate) trait NetTriangulation { - fn net_triangulate_into(&self, triangles_count: usize, triangulation: &mut RawIntTriangulation); +pub(crate) trait NetTriangulation { + fn net_triangulate_into( + &self, + triangles_count: usize, + triangulation: &mut RawIntTriangulation, + ); } -impl NetTriangulation for [ChainVertex] { +impl NetTriangulation for [ChainVertex] { fn net_triangulate_into( &self, triangles_count: usize, - triangulation: &mut RawIntTriangulation, + triangulation: &mut RawIntTriangulation, ) { triangulation.triangles.reserve_capacity(triangles_count); triangulation.triangles.clear(); @@ -47,8 +52,8 @@ impl NetTriangulation for [ChainVertex] { } } -impl<'a> NetBuilder<'a> { - fn new(triangulation: &'a mut RawIntTriangulation) -> Self { +impl<'a, I: IntNumber> NetBuilder<'a, I> { + fn new(triangulation: &'a mut RawIntTriangulation) -> Self { Self { triangulation, phantom_store: PhantomEdgePool::new(), @@ -56,11 +61,11 @@ impl<'a> NetBuilder<'a> { } } -impl NetBuilder<'_> { +impl NetBuilder<'_, I> { #[inline] - fn triangulate>( + fn triangulate, Section>>( &mut self, - vertices: &[ChainVertex], + vertices: &[ChainVertex], mut store: S, ) { for v in vertices.iter() { @@ -88,9 +93,9 @@ impl NetBuilder<'_> { #[inline] fn insert_triangle_with_neighbor_link( &mut self, - edge: &TriangleEdge, + edge: &TriangleEdge, vertex: usize, - mut new_triangle: IntTriangle, + mut new_triangle: IntTriangle, ) -> usize { let new_index = self.next_triangle_index(); match edge.kind { @@ -129,7 +134,11 @@ impl NetBuilder<'_> { } #[inline] - fn join>(&mut self, v: &ChainVertex, tree: &mut S) { + fn join, Section>>( + &mut self, + v: &ChainVertex, + tree: &mut S, + ) { let index = tree.find_section(v); let section = unsafe { tree.value_by_index_mut(index) }; if section.sort.b == v.this { @@ -140,7 +149,11 @@ impl NetBuilder<'_> { } #[inline] - fn start>(&mut self, v: &ChainVertex, tree: &mut S) { + fn start, Section>>( + &mut self, + v: &ChainVertex, + tree: &mut S, + ) { let section = Section { sort: VSegment { a: v.this, @@ -152,21 +165,29 @@ impl NetBuilder<'_> { } #[inline] - fn end>(&mut self, v: &ChainVertex, tree: &mut S) { + fn end, Section>>(&mut self, v: &ChainVertex, tree: &mut S) { let index = tree.find_section(v); let section = unsafe { tree.value_by_index_mut(index) }; section.add_as_last(v, self); tree.delete_by_index(index); } - fn split>(&mut self, v: &ChainVertex, tree: &mut S) { + fn split, Section>>( + &mut self, + v: &ChainVertex, + tree: &mut S, + ) { let index = tree.find_section(v); let section = unsafe { tree.value_by_index_mut(index) }; let new_section = section.add_to_middle(v, self); tree.insert(new_section); } - fn merge>(&mut self, v: &ChainVertex, tree: &mut S) { + fn merge, Section>>( + &mut self, + v: &ChainVertex, + tree: &mut S, + ) { let prev_index = tree.find_section(v); let next_index = tree.index_before(prev_index); let next = unsafe { tree.value_by_index_mut(next_index) }; @@ -193,16 +214,20 @@ impl NetBuilder<'_> { tree.delete_by_index(next_index); } - fn steiner>(&mut self, v: &ChainVertex, tree: &mut S) { + fn steiner, Section>>( + &mut self, + v: &ChainVertex, + tree: &mut S, + ) { let index = tree.find_section(v); let section = unsafe { tree.value_by_index_mut(index) }; section.add_steiner(v.index_point(), self); } } -impl Section { +impl Section { #[inline] - fn add_as_last(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) { + fn add_as_last(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) { let edges = match &mut self.content { Content::Edges(edges) => edges, Content::Point(_) => unreachable!("Section with less then 3 points not possible"), @@ -229,12 +254,12 @@ impl Section { } #[inline] - fn add_to_top(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) { + fn add_to_top(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) { self.add_from_start(v, net_builder); } #[inline] - fn add_to_bottom(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) { + fn add_to_bottom(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) { self.sort = VSegment { a: v.this, b: v.next, @@ -243,7 +268,7 @@ impl Section { } #[inline] - fn add_to_middle(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) -> Section { + fn add_to_middle(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) -> Section { let edges = match &mut self.content { Content::Point(point) => { let phantom_index = net_builder.get_unique_phantom_edge_index(); @@ -273,7 +298,7 @@ impl Section { while i < edges.len() { let ei = &edges[i]; // skip first not valid triangles - if Triangle::is_cw_or_line_point(v.this, ei.a.point, ei.b.point) { + if Triangle::is_cw_or_line(v.this, ei.a.point, ei.b.point) { i += 1; continue; } @@ -284,9 +309,9 @@ impl Section { if i >= edges.len() { let last = edges[edges.len() - 1].b; let mut index = edges.len(); - let mut min_dist = vp.point.x - last.point.x; + let mut min_dist = vp.point.x.wide() - last.point.x.wide(); for (ei, e) in edges.iter().enumerate() { - let dist = vp.point.x - e.a.point.x; + let dist = vp.point.x.wide() - e.a.point.x.wide(); if dist < min_dist { min_dist = dist; index = ei; @@ -360,7 +385,7 @@ impl Section { i = 1; while i < edges.len() { let ei = &edges[i]; - if Triangle::is_cw_or_line_point(v.this, ei.a.point, ei.b.point) { + if Triangle::is_cw_or_line(v.this, ei.a.point, ei.b.point) { break; } let mut triangle = IntTriangle::abc(vp, ei.a, ei.b); @@ -381,7 +406,7 @@ impl Section { top_section } - fn add_from_start(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) { + fn add_from_start(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) { let vp = v.index_point(); let edges = match &mut self.content { @@ -397,7 +422,7 @@ impl Section { let e0 = unsafe { edges.get_unchecked(0) }; - if Triangle::is_cw_or_line_point(v.this, e0.a.point, e0.b.point) { + if Triangle::is_cw_or_line(v.this, e0.a.point, e0.b.point) { edges.insert(0, TriangleEdge::border(vp, e0.a)); return; } @@ -408,7 +433,7 @@ impl Section { let mut n = 1; let mut eb = e0.b; for ei in edges.iter().skip(1) { - if Triangle::is_cw_or_line_point(vp.point, ei.a.point, ei.b.point) { + if Triangle::is_cw_or_line(vp.point, ei.a.point, ei.b.point) { break; } eb = ei.b; @@ -437,7 +462,7 @@ impl Section { ); } - fn add_from_end(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) { + fn add_from_end(&mut self, v: &ChainVertex, net_builder: &mut NetBuilder) { let vp = v.index_point(); let edges = match &mut self.content { Content::Point(point) => { @@ -449,7 +474,7 @@ impl Section { let el = edges.last().unwrap(); - if Triangle::is_cw_or_line_point(v.this, el.a.point, el.b.point) { + if Triangle::is_cw_or_line(v.this, el.a.point, el.b.point) { edges.push(TriangleEdge::border(el.b, vp)); return; } @@ -459,7 +484,7 @@ impl Section { let mut ea = el.a; let mut n = 1; for ei in edges.iter().rev().skip(1) { - if Triangle::is_cw_or_line_point(v.this, ei.a.point, ei.b.point) { + if Triangle::is_cw_or_line(v.this, ei.a.point, ei.b.point) { break; } ea = ei.a; @@ -477,7 +502,7 @@ impl Section { } #[inline] - fn add_steiner(&mut self, vp: IndexPoint, net_builder: &mut NetBuilder) { + fn add_steiner(&mut self, vp: IndexPoint, net_builder: &mut NetBuilder) { let edges = match &mut self.content { Content::Point(point) => { let phantom_index = net_builder.get_unique_phantom_edge_index(); @@ -495,7 +520,7 @@ impl Section { while i < edges.len() { let ei = &edges[i]; // skip first not valid triangles - if Triangle::is_cw_or_line_point(vp.point, ei.a.point, ei.b.point) { + if Triangle::is_cw_or_line(vp.point, ei.a.point, ei.b.point) { i += 1; continue; } @@ -505,9 +530,9 @@ impl Section { if i >= edges.len() { let last = edges[edges.len() - 1].b; let mut index = edges.len(); - let mut min_dist = vp.point.x - last.point.x; + let mut min_dist = vp.point.x.wide() - last.point.x.wide(); for (ei, e) in edges.iter().enumerate() { - let dist = vp.point.x - e.a.point.x; + let dist = vp.point.x.wide() - e.a.point.x.wide(); if dist < min_dist { min_dist = dist; index = ei; @@ -547,7 +572,7 @@ impl Section { i = 1; while i < edges.len() { let ei = &edges[i]; - if Triangle::is_cw_or_line_point(vp.point, ei.a.point, ei.b.point) { + if Triangle::is_cw_or_line(vp.point, ei.a.point, ei.b.point) { break; } let mut triangle = IntTriangle::abc(vp, ei.a, ei.b); @@ -571,16 +596,17 @@ impl Section { } } -trait FindSection { - fn find_section(&self, v: &ChainVertex) -> u32; +trait FindSection { + fn find_section(&self, v: &ChainVertex) -> u32; } -impl FindSection for C +impl FindSection for C where - C: SetCollection, + I: IntNumber, + C: SetCollection, Section>, { #[inline] - fn find_section(&self, v: &ChainVertex) -> u32 { + fn find_section(&self, v: &ChainVertex) -> u32 { self.first_index_less_by(|s| { let point_search = s.is_under_point_order(v.this); match point_search { @@ -588,7 +614,7 @@ where if v.prev == s.a { Ordering::Equal } else { - Triangle::clock_order_point(s.a, v.next, s.b) + Triangle::clock_order(s.a, v.next, s.b) } } _ => point_search, @@ -615,7 +641,7 @@ mod tests { use rand::RngExt; use std::collections::HashSet; - fn path(slice: &[[i32; 2]]) -> IntPath { + fn path(slice: &[[i32; 2]]) -> IntPath { slice.iter().map(|p| IntPoint::new(p[0], p[1])).collect() } @@ -1547,7 +1573,7 @@ mod tests { } } - fn random(radius: i32, n: usize) -> IntPath { + fn random(radius: i32, n: usize) -> IntPath { let a = radius / 2; let mut points = Vec::with_capacity(n); let mut rng = rand::rng(); diff --git a/iTriangle/src/int/monotone/triangulator.rs b/iTriangle/src/int/monotone/triangulator.rs index c94ba3f..930722e 100644 --- a/iTriangle/src/int/monotone/triangulator.rs +++ b/iTriangle/src/int/monotone/triangulator.rs @@ -5,22 +5,29 @@ use crate::int::monotone::flat::triangulator::FlatTriangulation; use crate::int::monotone::net::triangulator::NetTriangulation; use crate::int::triangulation::{IndexType, IntTriangulation, RawIntTriangulation}; use alloc::vec::Vec; +use i_key_sort::sort::key::SortKey; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::flat::buffer::FlatContoursBuffer; use i_overlay::i_shape::int::shape::{IntContour, IntShape}; -#[derive(Default)] -pub(crate) struct MonotoneTriangulator { - vertices: Option>, +pub(crate) struct MonotoneTriangulator { + vertices: Option>>, } -impl MonotoneTriangulator { +impl Default for MonotoneTriangulator { + fn default() -> Self { + Self { vertices: None } + } +} + +impl MonotoneTriangulator { #[inline] pub(crate) fn shape_into_net_triangulation( &mut self, - shape: &IntShape, - points: Option<&[IntPoint]>, - triangulation: &mut RawIntTriangulation, + shape: &IntShape, + points: Option<&[IntPoint]>, + triangulation: &mut RawIntTriangulation, ) { let points_count = points.map(|points| points.len()).unwrap_or(0); @@ -35,9 +42,9 @@ impl MonotoneTriangulator { #[inline] pub(crate) fn contour_into_net_triangulation( &mut self, - contour: &IntContour, - points: Option<&[IntPoint]>, - triangulation: &mut RawIntTriangulation, + contour: &IntContour, + points: Option<&[IntPoint]>, + triangulation: &mut RawIntTriangulation, ) { let points_count = points.map(|points| points.len()).unwrap_or(0); @@ -52,8 +59,8 @@ impl MonotoneTriangulator { #[inline] pub(crate) fn flat_into_net_triangulation( &mut self, - flat: &FlatContoursBuffer, - triangulation: &mut RawIntTriangulation, + flat: &FlatContoursBuffer, + triangulation: &mut RawIntTriangulation, ) { let mut vertices = self.vertices.take().unwrap_or_default(); ChainBuilder::flat_to_vertices(flat, &mut vertices); @@ -64,10 +71,10 @@ impl MonotoneTriangulator { } #[inline] - pub(crate) fn shape_into_flat_triangulation( + pub(crate) fn shape_into_flat_triangulation( &mut self, - shape: &IntShape, - triangulation: &mut IntTriangulation, + shape: &IntShape, + triangulation: &mut IntTriangulation, ) { let mut vertices = self.vertices.take().unwrap_or_default(); ChainBuilder::shape_to_vertices(shape, None, &mut vertices); @@ -78,10 +85,10 @@ impl MonotoneTriangulator { } #[inline] - pub(crate) fn contour_into_flat_triangulation( + pub(crate) fn contour_into_flat_triangulation( &mut self, - contour: &IntContour, - triangulation: &mut IntTriangulation, + contour: &IntContour, + triangulation: &mut IntTriangulation, ) { let mut vertices = self.vertices.take().unwrap_or_default(); ChainBuilder::contour_to_vertices(contour, None, &mut vertices); @@ -92,10 +99,10 @@ impl MonotoneTriangulator { } #[inline] - pub(crate) fn flat_into_flat_triangulation( + pub(crate) fn flat_into_flat_triangulation( &mut self, - flat: &FlatContoursBuffer, - triangulation: &mut IntTriangulation, + flat: &FlatContoursBuffer, + triangulation: &mut IntTriangulation, ) { let mut vertices = self.vertices.take().unwrap_or_default(); ChainBuilder::flat_to_vertices(flat, &mut vertices); diff --git a/iTriangle/src/int/monotone/v_segment.rs b/iTriangle/src/int/monotone/v_segment.rs index 7b80942..7322b20 100644 --- a/iTriangle/src/int/monotone/v_segment.rs +++ b/iTriangle/src/int/monotone/v_segment.rs @@ -1,45 +1,46 @@ use core::cmp::Ordering; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_float::triangle::Triangle; #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub(crate) struct VSegment { - pub(crate) a: IntPoint, - pub(crate) b: IntPoint, +pub(crate) struct VSegment { + pub(crate) a: IntPoint, + pub(crate) b: IntPoint, } -impl VSegment { +impl VSegment { #[inline] - fn is_under_segment_order(&self, other: &VSegment) -> Ordering { + fn is_under_segment_order(&self, other: &VSegment) -> Ordering { match self.b.cmp(&other.b) { - Ordering::Less => Triangle::clock_order_point(self.b, other.a, other.b), - Ordering::Equal => Triangle::clock_order_point(self.b, self.a, other.a), - Ordering::Greater => Triangle::clock_order_point(other.b, self.b, self.a), + Ordering::Less => Triangle::clock_order(self.b, other.a, other.b), + Ordering::Equal => Triangle::clock_order(self.b, self.a, other.a), + Ordering::Greater => Triangle::clock_order(other.b, self.b, self.a), } } #[inline] - pub(crate) fn is_under_point_order(&self, p: IntPoint) -> Ordering { + pub(crate) fn is_under_point_order(&self, p: IntPoint) -> Ordering { debug_assert!(self.a.x <= p.x && p.x <= self.b.x); - Triangle::clock_order_point(self.a, p, self.b) + Triangle::clock_order(self.a, p, self.b) } } -impl PartialOrd for VSegment { +impl PartialOrd for VSegment { #[inline] fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } -impl Ord for VSegment { +impl Ord for VSegment { #[inline] fn cmp(&self, other: &Self) -> Ordering { self.is_under_segment_order(other) } } -impl Default for VSegment { +impl Default for VSegment { #[inline] fn default() -> Self { Self { diff --git a/iTriangle/src/int/solver.rs b/iTriangle/src/int/solver.rs index 2d49bc9..631541d 100644 --- a/iTriangle/src/int/solver.rs +++ b/iTriangle/src/int/solver.rs @@ -4,9 +4,12 @@ use crate::int::triangulation::RawIntTriangulation; use crate::int::unchecked::IntUncheckedTriangulatable; use crate::int::validation::Validation; use alloc::vec::Vec; +use i_key_sort::sort::key::SortKey; use i_overlay::core::simplify::Simplify; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::int::shape::{IntContour, IntShape, IntShapes}; +use i_tree::{Expiration, LayoutNumber}; pub(super) struct ShapesSolver; pub(super) struct ShapeSolver; @@ -14,12 +17,17 @@ pub(super) struct ContourSolver; impl ShapesSolver { #[inline] - pub(super) fn triangulate(validation: Validation, shapes: &IntShapes) -> RawIntTriangulation { + pub(super) fn triangulate( + validation: Validation, + shapes: &IntShapes, + ) -> RawIntTriangulation { let shapes = shapes.simplify(validation.fill_rule, validation.options); Self::uncheck_triangulate(&shapes) } - pub(super) fn uncheck_triangulate(shapes: &IntShapes) -> RawIntTriangulation { + pub(super) fn uncheck_triangulate( + shapes: &IntShapes, + ) -> RawIntTriangulation { if shapes.len() <= 1 { return if let Some(first) = shapes.first() { first.uncheck_triangulate() @@ -60,20 +68,22 @@ impl ShapesSolver { } #[inline] - pub(super) fn triangulate_with_steiner_points( - validation: Validation, - shapes: &IntShapes, - points: &[IntPoint], - ) -> RawIntTriangulation { + pub(super) fn triangulate_with_steiner_points< + I: IntNumber + Expiration + LayoutNumber + SortKey, + >( + validation: Validation, + shapes: &IntShapes, + points: &[IntPoint], + ) -> RawIntTriangulation { shapes .simplify(validation.fill_rule, validation.options) .uncheck_triangulate_with_steiner_points(points) } - pub(super) fn uncheck_triangulate_with_steiner_points( - shapes: &IntShapes, - groups: &[Vec], - ) -> RawIntTriangulation { + pub(super) fn uncheck_triangulate_with_steiner_points( + shapes: &IntShapes, + groups: &[Vec>], + ) -> RawIntTriangulation { if shapes.len() <= 1 { return if let Some(first) = shapes.first() { first.uncheck_triangulate_with_steiner_points(&groups[0]) @@ -123,34 +133,41 @@ impl ShapesSolver { impl ShapeSolver { #[inline] - pub(super) fn triangulate(validation: Validation, shape: &IntShape) -> RawIntTriangulation { + pub(super) fn triangulate( + validation: Validation, + shape: &IntShape, + ) -> RawIntTriangulation { let shapes = shape.simplify(validation.fill_rule, validation.options); ShapesSolver::uncheck_triangulate(&shapes) } #[inline] - pub(super) fn uncheck_triangulate(shape: &IntShape) -> RawIntTriangulation { + pub(super) fn uncheck_triangulate( + shape: &IntShape, + ) -> RawIntTriangulation { let mut raw = RawIntTriangulation::default(); MonotoneTriangulator::default().shape_into_net_triangulation(shape, None, &mut raw); raw } #[inline] - pub(super) fn triangulate_with_steiner_points( - validation: Validation, - shape: &IntShape, - points: &[IntPoint], - ) -> RawIntTriangulation { + pub(super) fn triangulate_with_steiner_points< + I: IntNumber + Expiration + LayoutNumber + SortKey, + >( + validation: Validation, + shape: &IntShape, + points: &[IntPoint], + ) -> RawIntTriangulation { shape .simplify(validation.fill_rule, validation.options) .uncheck_triangulate_with_steiner_points(points) } #[inline] - pub(super) fn uncheck_triangulate_with_steiner_points( - shape: &IntShape, - points: &[IntPoint], - ) -> RawIntTriangulation { + pub(super) fn uncheck_triangulate_with_steiner_points( + shape: &IntShape, + points: &[IntPoint], + ) -> RawIntTriangulation { if shape.len() <= 1 { return if let Some(first) = shape.first() { first.uncheck_triangulate_with_steiner_points(points) @@ -166,14 +183,19 @@ impl ShapeSolver { impl ContourSolver { #[inline] - pub(super) fn triangulate(validation: Validation, contour: &IntContour) -> RawIntTriangulation { + pub(super) fn triangulate( + validation: Validation, + contour: &IntContour, + ) -> RawIntTriangulation { contour .simplify(validation.fill_rule, validation.options) .uncheck_triangulate() } #[inline] - pub(super) fn uncheck_triangulate(contour: &IntContour) -> RawIntTriangulation { + pub(super) fn uncheck_triangulate( + contour: &IntContour, + ) -> RawIntTriangulation { if contour.len() < 3 { RawIntTriangulation::default() } else { @@ -184,21 +206,23 @@ impl ContourSolver { } #[inline] - pub(super) fn triangulate_with_steiner_points( - validation: Validation, - contour: &IntContour, - points: &[IntPoint], - ) -> RawIntTriangulation { + pub(super) fn triangulate_with_steiner_points< + I: IntNumber + Expiration + LayoutNumber + SortKey, + >( + validation: Validation, + contour: &IntContour, + points: &[IntPoint], + ) -> RawIntTriangulation { contour .simplify(validation.fill_rule, validation.options) .uncheck_triangulate_with_steiner_points(points) } #[inline] - pub(super) fn uncheck_triangulate_with_steiner_points( - contour: &IntContour, - points: &[IntPoint], - ) -> RawIntTriangulation { + pub(super) fn uncheck_triangulate_with_steiner_points( + contour: &IntContour, + points: &[IntPoint], + ) -> RawIntTriangulation { if contour.len() < 3 { Default::default() } else { diff --git a/iTriangle/src/int/triangulatable.rs b/iTriangle/src/int/triangulatable.rs index db9c858..e91e292 100644 --- a/iTriangle/src/int/triangulatable.rs +++ b/iTriangle/src/int/triangulatable.rs @@ -1,7 +1,10 @@ use crate::int::solver::{ContourSolver, ShapeSolver, ShapesSolver}; use crate::int::triangulation::RawIntTriangulation; +use i_key_sort::sort::key::SortKey; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::int::shape::{IntContour, IntShape, IntShapes}; +use i_tree::{Expiration, LayoutNumber}; /// A trait for performing triangulation with default validation settings. /// /// Provides a simplified interface for converting shapes or contours into triangle meshes. @@ -20,50 +23,50 @@ use i_overlay::i_shape::int::shape::{IntContour, IntShape, IntShapes}; /// /// # Steiner Points /// Use [`triangulate_with_steiner_points`] to inject additional internal points during triangulation. -pub trait IntTriangulatable { +pub trait IntTriangulatable { /// Triangulates the shape(s) with automatic validation and cleanup. /// /// Uses the default [`DisposableTriangulator`] (non-zero fill rule, zero area threshold). - fn triangulate(&self) -> RawIntTriangulation; + fn triangulate(&self) -> RawIntTriangulation; /// Triangulates the shape(s) with inserted Steiner points. /// /// Points must lie within the shape's valid interior area (not on edges). - fn triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation; + fn triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation; } -impl IntTriangulatable for IntContour { +impl IntTriangulatable for IntContour { #[inline] - fn triangulate(&self) -> RawIntTriangulation { + fn triangulate(&self) -> RawIntTriangulation { ContourSolver::triangulate(Default::default(), self) } #[inline] - fn triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation { + fn triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation { ContourSolver::triangulate_with_steiner_points(Default::default(), self, points) } } -impl IntTriangulatable for IntShape { +impl IntTriangulatable for IntShape { #[inline] - fn triangulate(&self) -> RawIntTriangulation { + fn triangulate(&self) -> RawIntTriangulation { ShapeSolver::triangulate(Default::default(), self) } #[inline] - fn triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation { + fn triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation { ShapeSolver::triangulate_with_steiner_points(Default::default(), self, points) } } -impl IntTriangulatable for IntShapes { +impl IntTriangulatable for IntShapes { #[inline] - fn triangulate(&self) -> RawIntTriangulation { + fn triangulate(&self) -> RawIntTriangulation { ShapesSolver::triangulate(Default::default(), self) } #[inline] - fn triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation { + fn triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation { ShapesSolver::triangulate_with_steiner_points(Default::default(), self, points) } } diff --git a/iTriangle/src/int/triangulation.rs b/iTriangle/src/int/triangulation.rs index 68c7022..c43920d 100644 --- a/iTriangle/src/int/triangulation.rs +++ b/iTriangle/src/int/triangulation.rs @@ -2,6 +2,8 @@ use crate::advanced::delaunay::IntDelaunay; use crate::geom::triangle::IntTriangle; use alloc::vec::Vec; use core::iter::FusedIterator; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_float::triangle::Triangle; use i_overlay::i_shape::util::reserve::Reserve; @@ -74,10 +76,20 @@ impl IndexType for usize { } } -#[derive(Debug, Clone, Default)] -pub struct IntTriangulation { - pub points: Vec, - pub indices: Vec, +#[derive(Debug, Clone)] +pub struct IntTriangulation { + pub points: Vec>, + pub indices: Vec, +} + +impl Default for IntTriangulation { + #[inline] + fn default() -> Self { + Self { + points: Vec::new(), + indices: Vec::new(), + } + } } /// Iterator over resolved triangles in a flat [`IntTriangulation`]. @@ -85,13 +97,13 @@ pub struct IntTriangulation { /// Each item contains the three triangle points addressed by one consecutive /// triple in the triangulation index buffer. #[derive(Clone)] -pub struct IntTriangleIterator<'a, I> { - points: &'a [IntPoint], - indices: core::slice::ChunksExact<'a, I>, +pub struct IntTriangleIterator<'a, I: IntNumber, N> { + points: &'a [IntPoint], + indices: core::slice::ChunksExact<'a, N>, } -impl Iterator for IntTriangleIterator<'_, I> { - type Item = [IntPoint; 3]; +impl Iterator for IntTriangleIterator<'_, I, N> { + type Item = [IntPoint; 3]; #[inline] fn next(&mut self) -> Option { @@ -108,14 +120,14 @@ impl Iterator for IntTriangleIterator<'_, I> { } } -impl ExactSizeIterator for IntTriangleIterator<'_, I> { +impl ExactSizeIterator for IntTriangleIterator<'_, I, N> { #[inline] fn len(&self) -> usize { self.indices.len() } } -impl FusedIterator for IntTriangleIterator<'_, I> {} +impl FusedIterator for IntTriangleIterator<'_, I, N> {} /// A int triangle mesh produced by the triangulation process. /// @@ -125,15 +137,25 @@ impl FusedIterator for IntTriangleIterator<'_, I> {} /// /// Use this when you need detailed control over topology, neighbor tracking, or /// advanced mesh manipulation. -#[derive(Debug, Default)] -pub struct RawIntTriangulation { - pub(crate) triangles: Vec, - pub(crate) points: Vec, +#[derive(Debug)] +pub struct RawIntTriangulation { + pub(crate) triangles: Vec>, + pub(crate) points: Vec>, +} + +impl Default for RawIntTriangulation { + #[inline] + fn default() -> Self { + Self { + triangles: Vec::new(), + points: Vec::new(), + } + } } -impl RawIntTriangulation { +impl RawIntTriangulation { #[inline] - pub(super) fn new(triangles: Vec, points: Vec) -> Self { + pub(super) fn new(triangles: Vec>, points: Vec>) -> Self { Self { triangles, points } } @@ -147,7 +169,7 @@ impl RawIntTriangulation { /// /// Each point corresponds to a coordinate used by one or more triangles. #[inline] - pub fn points(&self) -> &Vec { + pub fn points(&self) -> &Vec> { &self.points } @@ -155,7 +177,7 @@ impl RawIntTriangulation { /// /// Each triangle contributes 3 indices into the `points` buffer. #[inline] - pub fn triangle_indices(&self) -> Vec { + pub fn triangle_indices(&self) -> Vec { let mut indices = Vec::new(); self.triangles.feed_indices(self.points.len(), &mut indices); indices @@ -174,7 +196,7 @@ impl RawIntTriangulation { /// /// Returns a [`IntTriangulation`] with separate index buffer and point list. #[inline] - pub fn into_triangulation(self) -> IntTriangulation { + pub fn into_triangulation(self) -> IntTriangulation { IntTriangulation { indices: self.triangle_indices(), points: self.points, @@ -185,7 +207,7 @@ impl RawIntTriangulation { /// /// Returns a [`IntTriangulation`] with separate index buffer and point list. #[inline] - pub fn to_triangulation(&self) -> IntTriangulation { + pub fn to_triangulation(&self) -> IntTriangulation { IntTriangulation { indices: self.triangle_indices(), points: self.points.as_slice().to_vec(), @@ -204,7 +226,7 @@ impl RawIntTriangulation { } } } -impl IntTriangulation { +impl IntTriangulation { #[inline] pub fn empty() -> Self { Self { @@ -223,7 +245,7 @@ impl IntTriangulation { #[inline] pub fn join(&mut self, other: &Self) { - let points_offset = I::try_from(self.points.len()).unwrap_or(I::ZERO); + let points_offset = N::try_from(self.points.len()).unwrap_or(N::ZERO); for &i in other.indices.iter() { self.indices.push(i.add(points_offset)); } @@ -235,7 +257,7 @@ impl IntTriangulation { /// The iterator walks `indices` in exact triples and yields the matching /// `[IntPoint; 3]` for each triangle. #[inline] - pub fn triangles(&self) -> IntTriangleIterator<'_, I> { + pub fn triangles(&self) -> IntTriangleIterator<'_, I, N> { IntTriangleIterator { points: &self.points, indices: self.indices.chunks_exact(3), @@ -251,7 +273,7 @@ impl IntTriangulation { } #[inline] - pub fn fill_with_raw(&mut self, triangulation: &RawIntTriangulation) { + pub fn fill_with_raw(&mut self, triangulation: &RawIntTriangulation) { self.points.clear(); self.points.extend_from_slice(&triangulation.points); @@ -261,7 +283,7 @@ impl IntTriangulation { } #[inline] - pub fn fill_with_delaunay(&mut self, delaunay: &IntDelaunay) { + pub fn fill_with_delaunay(&mut self, delaunay: &IntDelaunay) { self.points.clear(); self.points.extend_from_slice(&delaunay.points); @@ -310,16 +332,16 @@ mod tests { } pub(crate) trait IndicesBuilder { - fn feed_indices(&self, max_count: usize, indices: &mut Vec); + fn feed_indices(&self, max_count: usize, indices: &mut Vec); } -impl IndicesBuilder for [IntTriangle] { +impl IndicesBuilder for [IntTriangle] { #[inline] - fn feed_indices(&self, max_count: usize, indices: &mut Vec) { - if max_count > I::MAX { + fn feed_indices(&self, max_count: usize, indices: &mut Vec) { + if max_count > N::MAX { panic!( "Index type `{}` cannot hold {} points", - core::any::type_name::(), + core::any::type_name::(), max_count ); } @@ -329,9 +351,9 @@ impl IndicesBuilder for [IntTriangle] { indices.clear(); for t in self.iter() { - let i0 = unsafe { I::try_from(t.vertices[0].index).unwrap_unchecked() }; - let i1 = unsafe { I::try_from(t.vertices[1].index).unwrap_unchecked() }; - let i2 = unsafe { I::try_from(t.vertices[2].index).unwrap_unchecked() }; + let i0 = unsafe { N::try_from(t.vertices[0].index).unwrap_unchecked() }; + let i1 = unsafe { N::try_from(t.vertices[1].index).unwrap_unchecked() }; + let i2 = unsafe { N::try_from(t.vertices[2].index).unwrap_unchecked() }; indices.push(i0); indices.push(i1); indices.push(i2); @@ -339,14 +361,14 @@ impl IndicesBuilder for [IntTriangle] { } } -impl RawIntTriangulation { +impl RawIntTriangulation { pub fn validate(&self) { for (i, t) in self.triangles.iter().enumerate() { let a = t.vertices[0].point; let b = t.vertices[1].point; let c = t.vertices[2].point; - let area = Triangle::area_two_point(a, b, c); - assert!(area <= 0); + let area = Triangle::area_two(a, b, c); + assert!(area <= I::Wide::ZERO); let n0 = t.neighbors[0]; let n1 = t.neighbors[1]; @@ -364,23 +386,23 @@ impl RawIntTriangulation { } } - pub fn area_two(&self) -> i64 { - let mut s = 0; + pub fn area_two(&self) -> I::Wide { + let mut s = I::Wide::ZERO; for t in self.triangles.iter() { let a = t.vertices[0].point; let b = t.vertices[1].point; let c = t.vertices[2].point; - s += Triangle::area_two_point(a, b, c); + s = s + Triangle::area_two(a, b, c); } s } } #[cfg(test)] -impl IntTriangulation { - pub fn validate(&self, shape_x2_area: i64) { - let mut s = 0; +impl IntTriangulation { + pub fn validate(&self, shape_x2_area: I::Wide) { + let mut s = I::Wide::ZERO; let mut i = 0; while i < self.indices.len() { let ai = self.indices[i]; @@ -394,9 +416,9 @@ impl IntTriangulation { let b = self.points[bi.into_usize()]; let c = self.points[ci.into_usize()]; - let abc = Triangle::area_two_point(a, b, c); + let abc = Triangle::area_two(a, b, c); - assert!(abc < 0); + assert!(abc < I::Wide::ZERO); s = s + abc; } diff --git a/iTriangle/src/int/triangulator.rs b/iTriangle/src/int/triangulator.rs index 3ef1b6d..3da5fcf 100644 --- a/iTriangle/src/int/triangulator.rs +++ b/iTriangle/src/int/triangulator.rs @@ -3,27 +3,34 @@ use crate::int::earcut::earcut_64::Earcut64; use crate::int::monotone::triangulator::MonotoneTriangulator; use crate::int::triangulation::{IndexType, IntTriangulation, RawIntTriangulation}; use crate::int::validation::Validation; +use i_key_sort::sort::key::SortKey; use i_overlay::core::fill_rule::FillRule; use i_overlay::core::overlay::Overlay; use i_overlay::core::solver::Solver; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::flat::buffer::FlatContoursBuffer; use i_overlay::i_shape::int::shape::{IntContour, IntShape, IntShapes}; +use i_tree::{Expiration, LayoutNumber}; -pub struct IntTriangulator { - pub overlay: Overlay, +pub struct IntTriangulator { + pub overlay: Overlay, pub fill_rule: FillRule, pub earcut: bool, pub delaunay: bool, - triangulator: MonotoneTriangulator, - shapes_buffer: Option>, - raw_buffer: Option, + triangulator: MonotoneTriangulator, + shapes_buffer: Option>, + raw_buffer: Option>, delaunay_buffer: DelaunayBuffer, } -impl IntTriangulator { +impl IntTriangulator +where + I: IntNumber + Expiration + LayoutNumber + SortKey, + N: IndexType, +{ #[inline] - pub fn new(max_points_count: usize, validation: Validation, solver: Solver) -> Self { + pub fn new(max_points_count: usize, validation: Validation, solver: Solver) -> Self { Self { overlay: Overlay::new_custom(max_points_count, validation.options, solver), fill_rule: validation.fill_rule, @@ -37,16 +44,24 @@ impl IntTriangulator { } } -impl Default for IntTriangulator { +impl Default for IntTriangulator +where + I: IntNumber + Expiration + LayoutNumber + SortKey, + N: IndexType, +{ #[inline] fn default() -> Self { Self::new(64, Default::default(), Default::default()) } } -impl IntTriangulator { +impl IntTriangulator +where + I: IntNumber + Expiration + LayoutNumber + SortKey, + N: IndexType, +{ #[inline] - pub fn triangulate_contour(&mut self, contour: &IntContour) -> IntTriangulation { + pub fn triangulate_contour(&mut self, contour: &IntContour) -> IntTriangulation { match self.overlay.simplify_contour(contour, self.fill_rule) { None => self.uncheck_triangulate_contour(contour), Some(shapes) => self.uncheck_triangulate_shapes(&shapes), @@ -56,8 +71,8 @@ impl IntTriangulator { #[inline] pub fn triangulate_contour_into( &mut self, - contour: IntContour, - triangulation: &mut IntTriangulation, + contour: IntContour, + triangulation: &mut IntTriangulation, ) { match self.overlay.simplify_contour(&contour, self.fill_rule) { None => self.uncheck_triangulate_contour_into(&contour, triangulation), @@ -66,7 +81,7 @@ impl IntTriangulator { } #[inline] - pub fn triangulate_shape(&mut self, shape: &IntShape) -> IntTriangulation { + pub fn triangulate_shape(&mut self, shape: &IntShape) -> IntTriangulation { match self.overlay.simplify_shape(shape, self.fill_rule) { None => self.uncheck_triangulate_shape(shape), Some(shapes) => self.uncheck_triangulate_shapes(&shapes), @@ -76,8 +91,8 @@ impl IntTriangulator { #[inline] pub fn triangulate_shape_into( &mut self, - shape: &IntShape, - triangulation: &mut IntTriangulation, + shape: &IntShape, + triangulation: &mut IntTriangulation, ) { match self.overlay.simplify_shape(shape, self.fill_rule) { None => self.uncheck_triangulate_shape_into(shape, triangulation), @@ -86,7 +101,7 @@ impl IntTriangulator { } #[inline] - pub fn triangulate_shapes(&mut self, shapes: &IntShapes) -> IntTriangulation { + pub fn triangulate_shapes(&mut self, shapes: &IntShapes) -> IntTriangulation { let simple = self.overlay.simplify_shapes(shapes, self.fill_rule); self.uncheck_triangulate_shapes(&simple) } @@ -94,15 +109,15 @@ impl IntTriangulator { #[inline] pub fn triangulate_shapes_into( &mut self, - shapes: &IntShapes, - triangulation: &mut IntTriangulation, + shapes: &IntShapes, + triangulation: &mut IntTriangulation, ) { let simple = self.overlay.simplify_shapes(shapes, self.fill_rule); self.uncheck_triangulate_shapes_into(&simple, triangulation); } #[inline] - pub fn triangulate_flat(&mut self, flat: &mut FlatContoursBuffer) -> IntTriangulation { + pub fn triangulate_flat(&mut self, flat: &mut FlatContoursBuffer) -> IntTriangulation { self.overlay.simplify_flat_buffer(flat, self.fill_rule); self.uncheck_triangulate_flat(flat) } @@ -110,17 +125,24 @@ impl IntTriangulator { #[inline] pub fn triangulate_flat_into( &mut self, - flat: &mut FlatContoursBuffer, - triangulation: &mut IntTriangulation, + flat: &mut FlatContoursBuffer, + triangulation: &mut IntTriangulation, ) { self.overlay.simplify_flat_buffer(flat, self.fill_rule); self.uncheck_triangulate_flat_into(flat, triangulation); } } -impl IntTriangulator { +impl IntTriangulator +where + I: IntNumber + Expiration + LayoutNumber + SortKey, + N: IndexType, +{ #[inline] - pub fn uncheck_triangulate_contour(&mut self, contour: &IntContour) -> IntTriangulation { + pub fn uncheck_triangulate_contour( + &mut self, + contour: &IntContour, + ) -> IntTriangulation { let mut triangulation = Default::default(); self.uncheck_triangulate_contour_into(contour, &mut triangulation); triangulation @@ -129,8 +151,8 @@ impl IntTriangulator { #[inline] pub fn uncheck_triangulate_contour_into( &mut self, - contour: &IntContour, - triangulation: &mut IntTriangulation, + contour: &IntContour, + triangulation: &mut IntTriangulation, ) { if self.delaunay { let mut raw = self.raw_buffer.take().unwrap_or_default(); @@ -152,7 +174,7 @@ impl IntTriangulator { } #[inline] - pub fn uncheck_triangulate_shape(&mut self, shape: &IntShape) -> IntTriangulation { + pub fn uncheck_triangulate_shape(&mut self, shape: &IntShape) -> IntTriangulation { let mut triangulation = Default::default(); self.uncheck_triangulate_shape_into(shape, &mut triangulation); triangulation @@ -161,8 +183,8 @@ impl IntTriangulator { #[inline] pub fn uncheck_triangulate_shape_into( &mut self, - shape: &IntShape, - triangulation: &mut IntTriangulation, + shape: &IntShape, + triangulation: &mut IntTriangulation, ) { if shape.len() == 1 { self.uncheck_triangulate_contour_into(&shape[0], triangulation); @@ -183,7 +205,7 @@ impl IntTriangulator { } #[inline] - pub fn uncheck_triangulate_shapes(&mut self, shapes: &IntShapes) -> IntTriangulation { + pub fn uncheck_triangulate_shapes(&mut self, shapes: &IntShapes) -> IntTriangulation { let mut triangulation = Default::default(); self.uncheck_triangulate_shapes_into(shapes, &mut triangulation); triangulation @@ -192,8 +214,8 @@ impl IntTriangulator { #[inline] pub fn uncheck_triangulate_shapes_into( &mut self, - shapes: &IntShapes, - triangulation: &mut IntTriangulation, + shapes: &IntShapes, + triangulation: &mut IntTriangulation, ) { if shapes.len() == 1 { self.uncheck_triangulate_shape_into(&shapes[0], triangulation); @@ -214,8 +236,8 @@ impl IntTriangulator { #[inline] pub fn uncheck_triangulate_flat( &mut self, - flat_buffer: &FlatContoursBuffer, - ) -> IntTriangulation { + flat_buffer: &FlatContoursBuffer, + ) -> IntTriangulation { let mut triangulation = Default::default(); self.uncheck_triangulate_flat_into(flat_buffer, &mut triangulation); triangulation @@ -224,8 +246,8 @@ impl IntTriangulator { #[inline] pub fn uncheck_triangulate_flat_into( &mut self, - flat: &FlatContoursBuffer, - triangulation: &mut IntTriangulation, + flat: &FlatContoursBuffer, + triangulation: &mut IntTriangulation, ) { if flat.is_empty() { triangulation.reserve_and_clear(0); @@ -258,14 +280,14 @@ trait Earcut64Compatible { fn is_earcut_compatible(&self) -> bool; } -impl Earcut64Compatible for FlatContoursBuffer { +impl Earcut64Compatible for FlatContoursBuffer { #[inline(always)] fn is_earcut_compatible(&self) -> bool { self.is_single_contour() && self.points.len() <= 64 } } -impl Earcut64Compatible for [IntPoint] { +impl Earcut64Compatible for [IntPoint] { #[inline(always)] fn is_earcut_compatible(&self) -> bool { self.len() <= 64 diff --git a/iTriangle/src/int/unchecked.rs b/iTriangle/src/int/unchecked.rs index b447439..034949b 100644 --- a/iTriangle/src/int/unchecked.rs +++ b/iTriangle/src/int/unchecked.rs @@ -1,8 +1,11 @@ use crate::int::binder::SteinerInference; use crate::int::solver::{ContourSolver, ShapeSolver, ShapesSolver}; use crate::int::triangulation::RawIntTriangulation; +use i_key_sort::sort::key::SortKey; +use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::int::shape::{IntContour, IntShape, IntShapes}; +use i_tree::Expiration; /// A trait for performing triangulation on already validated geometry. /// @@ -19,48 +22,60 @@ use i_overlay::i_shape::int::shape::{IntContour, IntShape, IntShapes}; /// - [`IntContour`] /// - [`IntShape`] /// - [`IntShapes`] -pub trait IntUncheckedTriangulatable { +pub trait IntUncheckedTriangulatable { /// Performs triangulation without applying any shape simplification or validation. - fn uncheck_triangulate(&self) -> RawIntTriangulation; + fn uncheck_triangulate(&self) -> RawIntTriangulation; /// Performs triangulation without validation, inserting the given Steiner points. /// /// Points are grouped and applied based on their target shape. - fn uncheck_triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation; + fn uncheck_triangulate_with_steiner_points( + &self, + points: &[IntPoint], + ) -> RawIntTriangulation; } -impl IntUncheckedTriangulatable for IntContour { +impl IntUncheckedTriangulatable for IntContour { #[inline] - fn uncheck_triangulate(&self) -> RawIntTriangulation { + fn uncheck_triangulate(&self) -> RawIntTriangulation { ContourSolver::uncheck_triangulate(self) } #[inline] - fn uncheck_triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation { + fn uncheck_triangulate_with_steiner_points( + &self, + points: &[IntPoint], + ) -> RawIntTriangulation { ContourSolver::uncheck_triangulate_with_steiner_points(self, points) } } -impl IntUncheckedTriangulatable for IntShape { +impl IntUncheckedTriangulatable for IntShape { #[inline] - fn uncheck_triangulate(&self) -> RawIntTriangulation { + fn uncheck_triangulate(&self) -> RawIntTriangulation { ShapeSolver::uncheck_triangulate(self) } #[inline] - fn uncheck_triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation { + fn uncheck_triangulate_with_steiner_points( + &self, + points: &[IntPoint], + ) -> RawIntTriangulation { ShapeSolver::uncheck_triangulate_with_steiner_points(self, points) } } -impl IntUncheckedTriangulatable for IntShapes { +impl IntUncheckedTriangulatable for IntShapes { #[inline] - fn uncheck_triangulate(&self) -> RawIntTriangulation { + fn uncheck_triangulate(&self) -> RawIntTriangulation { ShapesSolver::uncheck_triangulate(self) } #[inline] - fn uncheck_triangulate_with_steiner_points(&self, points: &[IntPoint]) -> RawIntTriangulation { + fn uncheck_triangulate_with_steiner_points( + &self, + points: &[IntPoint], + ) -> RawIntTriangulation { let group = self.group_by_shapes(points); ShapesSolver::uncheck_triangulate_with_steiner_points(self, &group) } diff --git a/iTriangle/src/int/validation.rs b/iTriangle/src/int/validation.rs index 007b031..ab334d0 100644 --- a/iTriangle/src/int/validation.rs +++ b/iTriangle/src/int/validation.rs @@ -1,13 +1,14 @@ use i_overlay::core::fill_rule::FillRule; use i_overlay::core::overlay::IntOverlayOptions; +use i_overlay::i_float::int::number::int::IntNumber; #[derive(Debug, Clone, Copy)] -pub struct Validation { +pub struct Validation { pub fill_rule: FillRule, - pub options: IntOverlayOptions, + pub options: IntOverlayOptions, } -impl Validation { +impl Validation { pub fn with_fill_rule(fill_rule: FillRule) -> Self { Self { fill_rule, @@ -16,7 +17,7 @@ impl Validation { } } -impl Default for Validation { +impl Default for Validation { fn default() -> Self { Self { fill_rule: FillRule::NonZero, diff --git a/iTriangle/src/tessellation/circumcenter.rs b/iTriangle/src/tessellation/circumcenter.rs index a997039..8cce5bf 100644 --- a/iTriangle/src/tessellation/circumcenter.rs +++ b/iTriangle/src/tessellation/circumcenter.rs @@ -3,34 +3,38 @@ use crate::advanced::delaunay::{DelaunayRefine, IntDelaunay}; use crate::geom::point::IndexPoint; use crate::geom::triangle::{Abc, IntTriangle}; use alloc::vec::Vec; -use i_overlay::i_float::float::number::FloatNumber; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_float::triangle::Triangle; -impl IntDelaunay { +impl IntDelaunay { #[inline] - pub fn refine_with_circumcenters(mut self, min_area: u64) -> Self { + pub fn refine_with_circumcenters(mut self, min_area: I::WideUInt) -> Self { self.refine_with_circumcenters_mut(min_area); self } #[inline] - pub fn refine_with_circumcenters_mut(&mut self, min_area: u64) { + pub fn refine_with_circumcenters_mut(&mut self, min_area: I::WideUInt) { self.refine_with_circumcenters_and_selector::(min_area); } #[inline] - pub fn refine_with_circumcenters_by_obtuse_angle(mut self, min_area: u64) -> Self { + pub fn refine_with_circumcenters_by_obtuse_angle(mut self, min_area: I::WideUInt) -> Self { self.refine_with_circumcenters_by_obtuse_angle_mut(min_area); self } #[inline] - pub fn refine_with_circumcenters_by_obtuse_angle_mut(&mut self, min_area: u64) { + pub fn refine_with_circumcenters_by_obtuse_angle_mut(&mut self, min_area: I::WideUInt) { self.refine_with_circumcenters_and_selector::(min_area) } - fn refine_with_circumcenters_and_selector(&mut self, min_area: u64) { + fn refine_with_circumcenters_and_selector>( + &mut self, + min_area: I::WideUInt, + ) { let two_area = min_area << 1; let mut bitset = IndexBitSet::with_size(self.triangles.len()); @@ -59,16 +63,16 @@ impl IntDelaunay { } #[inline] - fn select_edge_for_refinement( + fn select_edge_for_refinement>( &self, - min_area: u64, - abc: &IntTriangle, - ) -> Option { + min_area: I::WideUInt, + abc: &IntTriangle, + ) -> Option> { let a = abc.vertices[0].point; let b = abc.vertices[1].point; let c = abc.vertices[2].point; - let area = Triangle::area_two_point(a, b, c).unsigned_abs(); + let area = Triangle::area_two(a, b, c).unsigned_abs(); if area <= min_area { return None; } @@ -77,7 +81,7 @@ impl IntDelaunay { } #[inline] - fn split_triangle(&mut self, abc_index: usize, abc: Abc, buffer: &mut Vec) { + fn split_triangle(&mut self, abc_index: usize, abc: Abc, buffer: &mut Vec) { let pcb_index = abc.v0.neighbor; if pcb_index < self.triangles.len() { buffer.extend_from_slice(&self.split_triangle_with_neighbor(abc_index, abc, pcb_index)); @@ -89,7 +93,7 @@ impl IntDelaunay { fn split_triangle_with_neighbor( &mut self, abc_index: usize, - abc: Abc, + abc: Abc, pcb_index: usize, ) -> [usize; 4] { let p = abc.circumscribed_center(); @@ -154,7 +158,7 @@ impl IntDelaunay { [abm_index, pcm_index, amc_index, pmb_index] } - fn split_alone_triangle(&mut self, abc_index: usize, abc: Abc) -> [usize; 2] { + fn split_alone_triangle(&mut self, abc_index: usize, abc: Abc) -> [usize; 2] { let m = abc.edge_mid_point(); let m_index = self.points.len(); self.points.push(m); @@ -188,18 +192,18 @@ impl IntDelaunay { } } -impl Abc { +impl Abc { #[inline] - fn circumscribed_center(&self) -> IntPoint { + fn circumscribed_center(&self) -> IntPoint { let a = self.v0.vertex.point; let b = self.v1.vertex.point; let c = self.v2.vertex.point; - let ax = a.x as f64; - let ay = a.y as f64; - let bx = b.x as f64; - let by = b.y as f64; - let cx = c.x as f64; - let cy = c.y as f64; + let ax = a.x.to_f64(); + let ay = a.y.to_f64(); + let bx = b.x.to_f64(); + let by = b.y.to_f64(); + let cx = c.x.to_f64(); + let cy = c.y.to_f64(); let d = 2.0 * (ax * (by - cy) + bx * (cy - ay) + cx * (ay - by)); let aa = ax * ax + ay * ay; @@ -210,43 +214,43 @@ impl Abc { let fx = (aa * (by - cy) + bb * (cy - ay) + cc * (ay - by)) * id; let fy = (aa * (cx - bx) + bb * (ax - cx) + cc * (bx - ax)) * id; - let x = fx.to_i32(); - let y = fy.to_i32(); + let x = I::from_float(fx); + let y = I::from_float(fy); IntPoint::new(x, y) } #[inline] - fn is_contain(&self, p: IntPoint) -> bool { + fn is_contain(&self, p: IntPoint) -> bool { let a = self.v0.vertex.point; let b = self.v1.vertex.point; let c = self.v2.vertex.point; - Triangle::is_contain_point_exclude_borders(p, a, b, c) + Triangle::is_contain_exclude_borders(p, a, b, c) } #[inline] - fn edge_mid_point(&self) -> IntPoint { + fn edge_mid_point(&self) -> IntPoint { let b = self.v1.vertex.point; let c = self.v2.vertex.point; - let x = (b.x as i64 + c.x as i64) >> 1; - let y = (b.y as i64 + c.y as i64) >> 1; + let x = (b.x.wide() + c.x.wide()) >> 1; + let y = (b.y.wide() + c.y.wide()) >> 1; - IntPoint::new(x as i32, y as i32) + IntPoint::new(I::from_wide(x), I::from_wide(y)) } } -trait EdgeSelector { - fn select(abc: &IntTriangle) -> Option; +trait EdgeSelector { + fn select(abc: &IntTriangle) -> Option>; } struct SelectBiggerAngle {} struct SelectObtuseAngle {} -impl EdgeSelector for SelectObtuseAngle { +impl EdgeSelector for SelectObtuseAngle { #[inline] - fn select(abc: &IntTriangle) -> Option { + fn select(abc: &IntTriangle) -> Option> { let a = abc.vertices[0].point; let b = abc.vertices[1].point; let c = abc.vertices[2].point; @@ -267,9 +271,9 @@ impl EdgeSelector for SelectObtuseAngle { } } -impl EdgeSelector for SelectBiggerAngle { +impl EdgeSelector for SelectBiggerAngle { #[inline] - fn select(abc: &IntTriangle) -> Option { + fn select(abc: &IntTriangle) -> Option> { let a = abc.vertices[0].point; let b = abc.vertices[1].point; let c = abc.vertices[2].point; diff --git a/iTriangle/src/tessellation/split.rs b/iTriangle/src/tessellation/split.rs index b6f0c68..7abc9d6 100644 --- a/iTriangle/src/tessellation/split.rs +++ b/iTriangle/src/tessellation/split.rs @@ -1,26 +1,31 @@ use alloc::vec::Vec; +use i_overlay::i_float::int::number::int::IntNumber; +use i_overlay::i_float::int::number::uint::UIntNumber; +use i_overlay::i_float::int::number::wide_int::WideIntNumber; use i_overlay::i_float::int::point::IntPoint; use i_overlay::i_shape::int::shape::{IntContour, IntShape, IntShapes}; -pub trait SliceContour { - fn slice_contour(&self, max_edge_length: u32) -> Self; +pub trait SliceContour { + fn slice_contour(&self, max_edge_length: I::WideUInt) -> Self; } -const SCALE: u32 = 29; - -impl SliceContour for IntContour { +impl SliceContour for IntContour { #[inline] - fn slice_contour(&self, max_edge_length: u32) -> Self { + fn slice_contour(&self, max_edge_length: I::WideUInt) -> Self { let mut a = if let Some(last) = self.last() { *last } else { return Vec::new(); }; - let radius = max_edge_length as u64; - let sqr_radius = radius.pow(2); + let radius = max_edge_length; + if radius > I::WideUInt::HALF_MASK { + return self.clone(); + } + + let sqr_radius = radius * radius; - let mut contour = IntContour::with_capacity(2 * self.len()); + let mut contour = IntContour::::with_capacity(2 * self.len()); for &b in self.iter() { extract(a, b, radius, sqr_radius, &mut contour); @@ -31,9 +36,9 @@ impl SliceContour for IntContour { } } -impl SliceContour for IntShape { +impl SliceContour for IntShape { #[inline] - fn slice_contour(&self, max_edge_length: u32) -> Self { + fn slice_contour(&self, max_edge_length: I::WideUInt) -> Self { let mut shape = Vec::with_capacity(self.len()); for contour in self.iter() { @@ -44,9 +49,9 @@ impl SliceContour for IntShape { } } -impl SliceContour for IntShapes { +impl SliceContour for IntShapes { #[inline] - fn slice_contour(&self, max_edge_length: u32) -> Self { + fn slice_contour(&self, max_edge_length: I::WideUInt) -> Self { let mut shapes = Vec::with_capacity(self.len()); for shape in self.iter() { @@ -58,15 +63,21 @@ impl SliceContour for IntShapes { } #[inline] -fn extract(a: IntPoint, b: IntPoint, radius: u64, sqr_radius: u64, contour: &mut IntContour) { - let ab = b.subtract(a); - let sqr_len = ab.sqr_length() as u64; +fn extract( + a: IntPoint, + b: IntPoint, + radius: I::WideUInt, + sqr_radius: I::WideUInt, + contour: &mut IntContour, +) { + let ab = b - a; + let sqr_len = ab.sqr_length().to_uint(); if sqr_len <= sqr_radius { contour.push(b); return; } - let len = sqr_len.isqrt(); - let n = ((len + (radius >> 1)) / radius) as i64; + let len = i_overlay::i_float::float::number::FloatNumber::sqrt(sqr_len.to_f64()); + let n = ((len + 0.5 * radius.to_f64()) / radius.to_f64()) as usize; if n <= 1 { contour.push(b); @@ -74,26 +85,19 @@ fn extract(a: IntPoint, b: IntPoint, radius: u64, sqr_radius: u64, contour: &mut } if n == 2 { - let x = ((a.x as i64 + b.x as i64) / 2) as i32; - let y = ((a.y as i64 + b.y as i64) / 2) as i32; + let x = I::from_wide((a.x.wide() + b.x.wide()) / I::Wide::TWO); + let y = I::from_wide((a.y.wide() + b.y.wide()) / I::Wide::TWO); contour.push(IntPoint::new(x, y)); contour.push(b); return; } - let sx = (ab.x << SCALE) / n; - let sy = (ab.y << SCALE) / n; - - let mut dx = 0i64; - let mut dy = 0i64; - - for _ in 1..n { - dx += sx; - dy += sy; - - let x = a.x + (dx >> SCALE) as i32; - let y = a.y + (dy >> SCALE) as i32; + let n_w = I::Wide::from_usize(n); + for i in 1..n { + let i_w = I::Wide::from_usize(i); + let x = I::from_wide(a.x.wide() + ab.x * i_w / n_w); + let y = I::from_wide(a.y.wide() + ab.y * i_w / n_w); contour.push(IntPoint::new(x, y)); } @@ -115,19 +119,19 @@ mod tests { IntPoint::new(0, 10), ]; - let s0 = contour.slice_contour(8); + let s0 = contour.slice_contour(8u64); assert_eq!(s0.len(), 4); - let s1 = contour.slice_contour(7); + let s1 = contour.slice_contour(7u64); assert_eq!(s1.len(), 4); - let s2 = contour.slice_contour(6); + let s2 = contour.slice_contour(6u64); assert_eq!(s2.len(), 8); - let s3 = contour.slice_contour(5); + let s3 = contour.slice_contour(5u64); assert_eq!(s3.len(), 8); - let s4 = contour.slice_contour(3); + let s4 = contour.slice_contour(3u64); assert_eq!(s4.len(), 12); } } diff --git a/iTriangle/tests/doc_tests.rs b/iTriangle/tests/doc_tests.rs index 727c9f8..4b511a5 100644 --- a/iTriangle/tests/doc_tests.rs +++ b/iTriangle/tests/doc_tests.rs @@ -43,23 +43,28 @@ mod tests { ], ]; - let triangulation = shape.triangulate().to_triangulation::(); + let triangulation = shape.triangulate::().to_triangulation::(); println!("points: {:?}", triangulation.points); println!("indices: {:?}", triangulation.indices); - let delaunay_triangulation: Triangulation<[f64; 2], u16> = - shape.triangulate().into_delaunay().to_triangulation(); + let delaunay_triangulation: Triangulation<[f64; 2], u16> = shape + .triangulate::() + .into_delaunay() + .to_triangulation(); println!("points: {:?}", delaunay_triangulation.points); println!("indices: {:?}", delaunay_triangulation.indices); - let convex_polygons = shape.triangulate().into_delaunay().to_convex_polygons(); + let convex_polygons = shape + .triangulate::() + .into_delaunay() + .to_convex_polygons(); println!("convex polygons: {:?}", convex_polygons); let tessellation: Triangulation<[f64; 2], u16> = shape - .triangulate() + .triangulate::() .into_delaunay() .refine_with_circumcenters_by_obtuse_angle(0.0) .to_triangulation(); @@ -68,7 +73,7 @@ mod tests { println!("indices: {:?}", tessellation.indices); let centroids = shape - .triangulate() + .triangulate::() .into_delaunay() .refine_with_circumcenters_by_obtuse_angle(0.0) .to_centroid_net(0.0); @@ -80,7 +85,7 @@ mod tests { fn test_1() { let contours = random_contours(100); - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); // apply Delaunay condition triangulator.delaunay(true); diff --git a/iTriangle/tests/float_tests.rs b/iTriangle/tests/float_tests.rs index b36e1d3..7b89888 100644 --- a/iTriangle/tests/float_tests.rs +++ b/iTriangle/tests/float_tests.rs @@ -22,7 +22,7 @@ mod tests { .to_vec()] .to_vec(); - let triangulation = shape.triangulate().to_triangulation::(); + let triangulation = shape.triangulate::().to_triangulation::(); assert_eq!(triangulation.points.len(), 6); assert_eq!(triangulation.indices.len(), 12); @@ -32,7 +32,7 @@ mod tests { fn test_1() { let contour = [[0.0, 2.0], [0.0, 0.0], [4.0, 2.0], [4.0, 0.0]]; - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); triangulator.delaunay(false); let t0 = triangulator.triangulate(&contour); @@ -59,7 +59,7 @@ mod tests { let simple = contour.simplify_shape(FillRule::NonZero); let area = simple.area(); - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); triangulator.delaunay(false); let t0 = triangulator.triangulate(&contour); @@ -75,7 +75,7 @@ mod tests { fn test_3() { let contour = [[2.0, 3.0], [2.0, -2.0], [0.0, 3.0], [-1.0, 4.0], [0.0, 1.0]]; - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); triangulator.delaunay(false); let t0 = triangulator.triangulate(&contour); @@ -91,7 +91,7 @@ mod tests { #[test] fn test_random_0() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..20_000 { @@ -110,7 +110,7 @@ mod tests { #[test] fn test_random_1() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..20_000 { @@ -129,7 +129,7 @@ mod tests { #[test] fn test_random_2() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..20_000 { @@ -148,7 +148,7 @@ mod tests { #[test] fn test_random_3() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..10_000 { @@ -167,7 +167,7 @@ mod tests { #[test] fn test_random_4() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..1_000 { @@ -186,7 +186,7 @@ mod tests { #[test] fn test_random_5() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..500 { From cc48d54902b2a32d93a63dae5e7b6d89f125dc56 Mon Sep 17 00:00:00 2001 From: Nail Sharipov Date: Sat, 23 May 2026 16:22:46 +0300 Subject: [PATCH 2/9] add several solvers --- iTriangle/tests/float_tests.rs | 87 ++++++++++++++++++++++++++++++---- 1 file changed, 77 insertions(+), 10 deletions(-) diff --git a/iTriangle/tests/float_tests.rs b/iTriangle/tests/float_tests.rs index 7b89888..7981d60 100644 --- a/iTriangle/tests/float_tests.rs +++ b/iTriangle/tests/float_tests.rs @@ -1,16 +1,29 @@ #[cfg(test)] mod tests { + use i_key_sort::sort::key::SortKey; use i_overlay::core::fill_rule::FillRule; use i_overlay::float::simplify::SimplifyShape; + use i_overlay::i_float::int::number::int::IntNumber; use i_overlay::i_shape::base::data::Contour; use i_overlay::i_shape::float::area::Area; + use i_tree::{Expiration, LayoutNumber}; use i_triangle::float::triangulatable::Triangulatable; use i_triangle::float::triangulation::Triangulation; use i_triangle::float::triangulator::Triangulator; use rand::RngExt; + trait TestInt: IntNumber + Expiration + LayoutNumber + SortKey {} + + impl TestInt for I where I: IntNumber + Expiration + LayoutNumber + SortKey {} + #[test] fn test_0() { + test_0_as::(); + test_0_as::(); + test_0_as::(); + } + + fn test_0_as() { let shape = [[ [1.0, 1.0], [1.0, 4.0], @@ -22,7 +35,7 @@ mod tests { .to_vec()] .to_vec(); - let triangulation = shape.triangulate::().to_triangulation::(); + let triangulation = shape.triangulate::().to_triangulation::(); assert_eq!(triangulation.points.len(), 6); assert_eq!(triangulation.indices.len(), 12); @@ -30,9 +43,15 @@ mod tests { #[test] fn test_1() { + test_1_as::(); + test_1_as::(); + test_1_as::(); + } + + fn test_1_as() { let contour = [[0.0, 2.0], [0.0, 0.0], [4.0, 2.0], [4.0, 0.0]]; - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); triangulator.delaunay(false); let t0 = triangulator.triangulate(&contour); @@ -48,6 +67,12 @@ mod tests { #[test] fn test_2() { + test_2_as::(); + test_2_as::(); + test_2_as::(); + } + + fn test_2_as() { let contour = [ [0.0, 3.0], [-4.0, -3.0], @@ -59,7 +84,7 @@ mod tests { let simple = contour.simplify_shape(FillRule::NonZero); let area = simple.area(); - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); triangulator.delaunay(false); let t0 = triangulator.triangulate(&contour); @@ -73,9 +98,15 @@ mod tests { #[test] fn test_3() { + test_3_as::(); + test_3_as::(); + test_3_as::(); + } + + fn test_3_as() { let contour = [[2.0, 3.0], [2.0, -2.0], [0.0, 3.0], [-1.0, 4.0], [0.0, 1.0]]; - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); triangulator.delaunay(false); let t0 = triangulator.triangulate(&contour); @@ -91,7 +122,13 @@ mod tests { #[test] fn test_random_0() { - let mut triangulator = Triangulator::::default(); + test_random_0_as::(); + test_random_0_as::(); + test_random_0_as::(); + } + + fn test_random_0_as() { + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..20_000 { @@ -110,7 +147,13 @@ mod tests { #[test] fn test_random_1() { - let mut triangulator = Triangulator::::default(); + test_random_1_as::(); + test_random_1_as::(); + test_random_1_as::(); + } + + fn test_random_1_as() { + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..20_000 { @@ -129,7 +172,13 @@ mod tests { #[test] fn test_random_2() { - let mut triangulator = Triangulator::::default(); + test_random_2_as::(); + test_random_2_as::(); + test_random_2_as::(); + } + + fn test_random_2_as() { + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..20_000 { @@ -148,7 +197,13 @@ mod tests { #[test] fn test_random_3() { - let mut triangulator = Triangulator::::default(); + test_random_3_as::(); + test_random_3_as::(); + test_random_3_as::(); + } + + fn test_random_3_as() { + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..10_000 { @@ -167,7 +222,13 @@ mod tests { #[test] fn test_random_4() { - let mut triangulator = Triangulator::::default(); + test_random_4_as::(); + test_random_4_as::(); + test_random_4_as::(); + } + + fn test_random_4_as() { + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..1_000 { @@ -186,7 +247,13 @@ mod tests { #[test] fn test_random_5() { - let mut triangulator = Triangulator::::default(); + test_random_5_as::(); + test_random_5_as::(); + test_random_5_as::(); + } + + fn test_random_5_as() { + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..500 { From fcecac3d8946a048445145d08185863f5781b5d4 Mon Sep 17 00:00:00 2001 From: Nail Sharipov Date: Sat, 23 May 2026 16:49:26 +0300 Subject: [PATCH 3/9] add default i32 solver to public api --- iTriangle/README.md | 28 +++++++++++++++++-- iTriangle/src/float/custom.rs | 30 +++++++++++++++------ iTriangle/src/float/delaunay.rs | 2 +- iTriangle/src/float/locator.rs | 2 +- iTriangle/src/float/triangulatable.rs | 26 ++++++++++++------ iTriangle/src/float/triangulation.rs | 4 +-- iTriangle/src/float/triangulator.rs | 11 +++++--- iTriangle/src/float/unchecked.rs | 39 +++++++++++++++++++++------ iTriangle/tests/doc_tests.rs | 19 +++++-------- iTriangle/tests/float_tests.rs | 23 +++++++++------- 10 files changed, 128 insertions(+), 56 deletions(-) diff --git a/iTriangle/README.md b/iTriangle/README.md index f57af25..8b69b26 100644 --- a/iTriangle/README.md +++ b/iTriangle/README.md @@ -93,6 +93,29 @@ let triangulation = vec![contour].triangulate().to_triangulation::(); println!("triangles: {}", triangulation.indices.len() / 3); ``` +By default, float input is converted to the robust integer core using `i32` +coordinates. If your geometry needs a different integer precision, choose it +explicitly: + +```rust +use i_triangle::float::triangulatable::Triangulatable; +use i_triangle::float::triangulator::Triangulator; + +let shape = vec![vec![ + [0.0, 0.0], + [10.0, 0.0], + [10.0, 10.0], + [0.0, 10.0], +]]; + +// One-shot triangulation with i64 integer coordinates. +let mesh = shape.triangulate_as::().to_triangulation::(); + +// Reusable triangulator: first generic is index type, second is coordinate type. +let mut triangulator = Triangulator::::default(); +let mesh = triangulator.triangulate(&shape); +``` + ## Documentation - [Docs.rs](https://docs.rs/i_triangle) @@ -192,6 +215,7 @@ let contours = vec![ vec![[5.0, 0.0], [9.0, 0.0], [9.0, 4.0], [5.0, 4.0]], ]; +// Uses u32 triangle indices and the default i32 integer coordinate solver. let mut triangulator = Triangulator::::default(); // Enable Delaunay refinement @@ -256,8 +280,8 @@ let contours = vec![ ], ]; -let mut triangulator = IntTriangulator::::default(); -let mut output = IntTriangulation::::default(); +let mut triangulator = IntTriangulator::::default(); +let mut output = IntTriangulation::::default(); for contour in &contours { triangulator.triangulate_contour_into(contour.clone(), &mut output); diff --git a/iTriangle/src/float/custom.rs b/iTriangle/src/float/custom.rs index e204e46..3925327 100644 --- a/iTriangle/src/float/custom.rs +++ b/iTriangle/src/float/custom.rs @@ -17,12 +17,26 @@ use i_tree::{Expiration, LayoutNumber}; /// Accepts a custom [`Validation`] object for tuning fill rule, min area, etc. pub trait CustomTriangulatable { /// Performs triangulation using the specified [`Validation`] settings. - fn custom_triangulate(&self, validation: Validation) -> RawTriangulation + fn custom_triangulate(&self, validation: Validation) -> RawTriangulation

{ + self.custom_triangulate_as(validation) + } + + /// Performs triangulation using the requested integer coordinate type. + fn custom_triangulate_as(&self, validation: Validation) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey; /// Performs triangulation with Steiner points and a custom [`Validation`] config. - fn custom_triangulate_with_steiner_points( + fn custom_triangulate_with_steiner_points( + &self, + points: &[P], + validation: Validation, + ) -> RawTriangulation

{ + self.custom_triangulate_with_steiner_points_as(points, validation) + } + + /// Performs triangulation with Steiner points using the requested integer coordinate type. + fn custom_triangulate_with_steiner_points_as( &self, points: &[P], validation: Validation, @@ -35,7 +49,7 @@ impl

CustomTriangulatable

for Contour

where P: FloatPointCompatible, { - fn custom_triangulate(&self, validation: Validation) -> RawTriangulation + fn custom_triangulate_as(&self, validation: Validation) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey, { @@ -51,7 +65,7 @@ where } } - fn custom_triangulate_with_steiner_points( + fn custom_triangulate_with_steiner_points_as( &self, points: &[P], validation: Validation, @@ -79,7 +93,7 @@ impl

CustomTriangulatable

for [Contour

] where P: FloatPointCompatible, { - fn custom_triangulate(&self, validation: Validation) -> RawTriangulation + fn custom_triangulate_as(&self, validation: Validation) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey, { @@ -95,7 +109,7 @@ where } } - fn custom_triangulate_with_steiner_points( + fn custom_triangulate_with_steiner_points_as( &self, points: &[P], validation: Validation, @@ -123,7 +137,7 @@ impl

CustomTriangulatable

for [Shape

] where P: FloatPointCompatible, { - fn custom_triangulate(&self, validation: Validation) -> RawTriangulation + fn custom_triangulate_as(&self, validation: Validation) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey, { @@ -139,7 +153,7 @@ where } } - fn custom_triangulate_with_steiner_points( + fn custom_triangulate_with_steiner_points_as( &self, points: &[P], validation: Validation, diff --git a/iTriangle/src/float/delaunay.rs b/iTriangle/src/float/delaunay.rs index f43f021..6a31a62 100644 --- a/iTriangle/src/float/delaunay.rs +++ b/iTriangle/src/float/delaunay.rs @@ -12,7 +12,7 @@ use i_overlay::i_shape::float::adapter::PathToFloat; /// /// Produced from [`Triangulation::into_delaunay`] by applying edge flips /// to satisfy the Delaunay condition. -pub struct Delaunay { +pub struct Delaunay { pub(super) delaunay: IntDelaunay, pub(super) adapter: FloatPointAdapter, } diff --git a/iTriangle/src/float/locator.rs b/iTriangle/src/float/locator.rs index 2a20814..dc3012f 100644 --- a/iTriangle/src/float/locator.rs +++ b/iTriangle/src/float/locator.rs @@ -11,7 +11,7 @@ use crate::{ location::PointLocationInTriangulation, }; -pub trait PointInTriangulationLocator { +pub trait PointInTriangulationLocator { fn locate_points(&self, points: &[P]) -> Vec where P: FloatPointCompatible, diff --git a/iTriangle/src/float/triangulatable.rs b/iTriangle/src/float/triangulatable.rs index 87ebe92..32c057f 100644 --- a/iTriangle/src/float/triangulatable.rs +++ b/iTriangle/src/float/triangulatable.rs @@ -24,14 +24,24 @@ pub trait Triangulatable { /// Triangulates the shape(s) using the default [`Triangulator`] configuration. /// /// Validation includes contour simplification, direction correction, and area filtering. - fn triangulate(&self) -> RawTriangulation + fn triangulate(&self) -> RawTriangulation

{ + self.triangulate_as::() + } + + /// Triangulates the shape(s) using the requested integer coordinate type. + fn triangulate_as(&self) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey; /// Triangulates the shape(s) and inserts the given Steiner points. /// /// Points must lie strictly within the interior of the geometry. - fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation

{ + self.triangulate_with_steiner_points_as::(points) + } + + /// Triangulates the shape(s) with Steiner points using the requested integer coordinate type. + fn triangulate_with_steiner_points_as(&self, points: &[P]) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey; } @@ -40,7 +50,7 @@ impl

Triangulatable

for [P] where P: FloatPointCompatible, { - fn triangulate(&self) -> RawTriangulation + fn triangulate_as(&self) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey, { @@ -56,7 +66,7 @@ where } } - fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + fn triangulate_with_steiner_points_as(&self, points: &[P]) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey, { @@ -80,7 +90,7 @@ impl

Triangulatable

for [Contour

] where P: FloatPointCompatible, { - fn triangulate(&self) -> RawTriangulation + fn triangulate_as(&self) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey, { @@ -96,7 +106,7 @@ where } } - fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + fn triangulate_with_steiner_points_as(&self, points: &[P]) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey, { @@ -120,7 +130,7 @@ impl

Triangulatable

for [Shape

] where P: FloatPointCompatible, { - fn triangulate(&self) -> RawTriangulation + fn triangulate_as(&self) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey, { @@ -136,7 +146,7 @@ where } } - fn triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + fn triangulate_with_steiner_points_as(&self, points: &[P]) -> RawTriangulation where I: IntNumber + Expiration + LayoutNumber + SortKey, { diff --git a/iTriangle/src/float/triangulation.rs b/iTriangle/src/float/triangulation.rs index c491cbc..822eba7 100644 --- a/iTriangle/src/float/triangulation.rs +++ b/iTriangle/src/float/triangulation.rs @@ -14,7 +14,7 @@ use i_overlay::i_shape::util::reserve::Reserve; /// /// # Parameters /// - `P`: Float point type (e.g., `Vec2`, `[f32; 2]`, etc.) -pub struct RawTriangulation { +pub struct RawTriangulation { pub raw: RawIntTriangulation, pub adapter: FloatPointAdapter, } @@ -181,7 +181,7 @@ mod tests { fn test_0() { let rect = [[0.0, 0.0], [5.0, 0.0], [5.0, 8.0], [0.0, 8.0]]; - let triangulation = Triangulator::::default().triangulate(&rect); + let triangulation = Triangulator::::default().triangulate(&rect); assert_eq!(triangulation.points.len(), 4); assert_eq!(triangulation.indices.len(), 6); diff --git a/iTriangle/src/float/triangulator.rs b/iTriangle/src/float/triangulator.rs index fbd09dd..c6def4d 100644 --- a/iTriangle/src/float/triangulator.rs +++ b/iTriangle/src/float/triangulator.rs @@ -11,13 +11,16 @@ use i_overlay::i_shape::source::resource::ShapeResource; use i_tree::{Expiration, LayoutNumber}; /// A reusable triangulator that converts float-based shapes into triangle meshes. -pub struct Triangulator { +pub struct Triangulator +where + I: IntNumber + Expiration + LayoutNumber + SortKey, +{ flat_buffer: Option>, int_buffer: Option>, int_triangulator: IntTriangulator, } -impl Triangulator +impl Triangulator where I: IntNumber + Expiration + LayoutNumber + SortKey, N: IndexType, @@ -68,7 +71,7 @@ where } } -impl Default for Triangulator +impl Default for Triangulator where I: IntNumber + Expiration + LayoutNumber + SortKey, N: IndexType, @@ -79,7 +82,7 @@ where } } -impl Triangulator +impl Triangulator where I: IntNumber + Expiration + LayoutNumber + SortKey, N: IndexType, diff --git a/iTriangle/src/float/unchecked.rs b/iTriangle/src/float/unchecked.rs index 69be499..4356aaa 100644 --- a/iTriangle/src/float/unchecked.rs +++ b/iTriangle/src/float/unchecked.rs @@ -21,11 +21,25 @@ use i_tree::Expiration; /// - Steiner points must lie strictly within the shape pub trait UncheckedTriangulatable { /// Triangulates float geometry without validation or simplification. - fn unchecked_triangulate(&self) -> RawTriangulation + fn unchecked_triangulate(&self) -> RawTriangulation

{ + self.unchecked_triangulate_as::() + } + + /// Triangulates float geometry without validation using the requested integer coordinate type. + fn unchecked_triangulate_as(&self) -> RawTriangulation where I: IntNumber + Expiration + SortKey; + /// Same as `unchecked_triangulate`, but inserts user-defined Steiner points. - fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation

{ + self.unchecked_triangulate_with_steiner_points_as::(points) + } + + /// Same as `unchecked_triangulate_as`, but inserts user-defined Steiner points. + fn unchecked_triangulate_with_steiner_points_as( + &self, + points: &[P], + ) -> RawTriangulation where I: IntNumber + Expiration + SortKey; } @@ -34,7 +48,7 @@ impl

UncheckedTriangulatable

for [P] where P: FloatPointCompatible, { - fn unchecked_triangulate(&self) -> RawTriangulation + fn unchecked_triangulate_as(&self) -> RawTriangulation where I: IntNumber + Expiration + SortKey, { @@ -50,7 +64,10 @@ where } } - fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + fn unchecked_triangulate_with_steiner_points_as( + &self, + points: &[P], + ) -> RawTriangulation where I: IntNumber + Expiration + SortKey, { @@ -74,7 +91,7 @@ impl

UncheckedTriangulatable

for [Contour

] where P: FloatPointCompatible, { - fn unchecked_triangulate(&self) -> RawTriangulation + fn unchecked_triangulate_as(&self) -> RawTriangulation where I: IntNumber + Expiration + SortKey, { @@ -90,7 +107,10 @@ where } } - fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + fn unchecked_triangulate_with_steiner_points_as( + &self, + points: &[P], + ) -> RawTriangulation where I: IntNumber + Expiration + SortKey, { @@ -114,7 +134,7 @@ impl

UncheckedTriangulatable

for [Shape

] where P: FloatPointCompatible, { - fn unchecked_triangulate(&self) -> RawTriangulation + fn unchecked_triangulate_as(&self) -> RawTriangulation where I: IntNumber + Expiration + SortKey, { @@ -130,7 +150,10 @@ where } } - fn unchecked_triangulate_with_steiner_points(&self, points: &[P]) -> RawTriangulation + fn unchecked_triangulate_with_steiner_points_as( + &self, + points: &[P], + ) -> RawTriangulation where I: IntNumber + Expiration + SortKey, { diff --git a/iTriangle/tests/doc_tests.rs b/iTriangle/tests/doc_tests.rs index 4b511a5..727c9f8 100644 --- a/iTriangle/tests/doc_tests.rs +++ b/iTriangle/tests/doc_tests.rs @@ -43,28 +43,23 @@ mod tests { ], ]; - let triangulation = shape.triangulate::().to_triangulation::(); + let triangulation = shape.triangulate().to_triangulation::(); println!("points: {:?}", triangulation.points); println!("indices: {:?}", triangulation.indices); - let delaunay_triangulation: Triangulation<[f64; 2], u16> = shape - .triangulate::() - .into_delaunay() - .to_triangulation(); + let delaunay_triangulation: Triangulation<[f64; 2], u16> = + shape.triangulate().into_delaunay().to_triangulation(); println!("points: {:?}", delaunay_triangulation.points); println!("indices: {:?}", delaunay_triangulation.indices); - let convex_polygons = shape - .triangulate::() - .into_delaunay() - .to_convex_polygons(); + let convex_polygons = shape.triangulate().into_delaunay().to_convex_polygons(); println!("convex polygons: {:?}", convex_polygons); let tessellation: Triangulation<[f64; 2], u16> = shape - .triangulate::() + .triangulate() .into_delaunay() .refine_with_circumcenters_by_obtuse_angle(0.0) .to_triangulation(); @@ -73,7 +68,7 @@ mod tests { println!("indices: {:?}", tessellation.indices); let centroids = shape - .triangulate::() + .triangulate() .into_delaunay() .refine_with_circumcenters_by_obtuse_angle(0.0) .to_centroid_net(0.0); @@ -85,7 +80,7 @@ mod tests { fn test_1() { let contours = random_contours(100); - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); // apply Delaunay condition triangulator.delaunay(true); diff --git a/iTriangle/tests/float_tests.rs b/iTriangle/tests/float_tests.rs index 7981d60..9d372e6 100644 --- a/iTriangle/tests/float_tests.rs +++ b/iTriangle/tests/float_tests.rs @@ -35,7 +35,10 @@ mod tests { .to_vec()] .to_vec(); - let triangulation = shape.triangulate::().to_triangulation::(); + let triangulation = shape + .as_slice() + .triangulate_as::() + .to_triangulation::(); assert_eq!(triangulation.points.len(), 6); assert_eq!(triangulation.indices.len(), 12); @@ -51,7 +54,7 @@ mod tests { fn test_1_as() { let contour = [[0.0, 2.0], [0.0, 0.0], [4.0, 2.0], [4.0, 0.0]]; - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); triangulator.delaunay(false); let t0 = triangulator.triangulate(&contour); @@ -84,7 +87,7 @@ mod tests { let simple = contour.simplify_shape(FillRule::NonZero); let area = simple.area(); - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); triangulator.delaunay(false); let t0 = triangulator.triangulate(&contour); @@ -106,7 +109,7 @@ mod tests { fn test_3_as() { let contour = [[2.0, 3.0], [2.0, -2.0], [0.0, 3.0], [-1.0, 4.0], [0.0, 1.0]]; - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); triangulator.delaunay(false); let t0 = triangulator.triangulate(&contour); @@ -128,7 +131,7 @@ mod tests { } fn test_random_0_as() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..20_000 { @@ -153,7 +156,7 @@ mod tests { } fn test_random_1_as() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..20_000 { @@ -178,7 +181,7 @@ mod tests { } fn test_random_2_as() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..20_000 { @@ -203,7 +206,7 @@ mod tests { } fn test_random_3_as() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..10_000 { @@ -228,7 +231,7 @@ mod tests { } fn test_random_4_as() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..1_000 { @@ -253,7 +256,7 @@ mod tests { } fn test_random_5_as() { - let mut triangulator = Triangulator::::default(); + let mut triangulator = Triangulator::::default(); let mut t = Triangulation::with_capacity(8); for _ in 0..500 { From 8de3bdcb33c1e5052b839afb638cc1796e540e3e Mon Sep 17 00:00:00 2001 From: Nail Sharipov Date: Sat, 23 May 2026 18:15:08 +0300 Subject: [PATCH 4/9] update images --- iTriangle/README.md | 21 +--- iTriangle/readme/architecture.png | Bin 496967 -> 0 bytes iTriangle/readme/architecture.svg | 164 ++++++++++++++++++++++++++++++ readme/architecture.png | Bin 496967 -> 0 bytes readme/architecture.svg | 164 ++++++++++++++++++++++++++++++ 5 files changed, 329 insertions(+), 20 deletions(-) delete mode 100644 iTriangle/readme/architecture.png create mode 100644 iTriangle/readme/architecture.svg delete mode 100644 readme/architecture.png create mode 100644 readme/architecture.svg diff --git a/iTriangle/README.md b/iTriangle/README.md index 8b69b26..5aa0a63 100644 --- a/iTriangle/README.md +++ b/iTriangle/README.md @@ -47,26 +47,7 @@ iTriangle is a high-performance 2D polygon triangulation library for Rust. It so ## Architecture Overview - - -

-Mermaid source - -```mermaid -flowchart TD - A[Input contours] --> B[Normalize and fix self-intersections] - B --> C[Sweep-line triangulation] - C --> D[Raw triangulation] - D -->|Delaunay| E[Delaunay triangulation] - D --> I[Triangles and indices] - E -->|Tessellation| F[Adaptive refinement] - F --> E - E --> G[Convex decomposition] - E --> H[Centroid net] - E --> I -``` - -
+ ## Quick Start diff --git a/iTriangle/readme/architecture.png b/iTriangle/readme/architecture.png deleted file mode 100644 index 6820197a233f17bcc5c96d37d23bd08215c59902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496967 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%0Ap-n*5)wFmQn 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

+xSu#F~c-ZenZ25OLoZTC~2l`hx@;&&m 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

N6ldGW= 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 + iTriangle architecture overview + Input contours are normalized, sweep-line triangulated, optionally refined into Delaunay, tessellation, convex decomposition, centroid net, and triangle index outputs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Delaunay + + + Tessellation + + + + + + Input + contours + + + + + Normalize + fix intersections + + + + + Sweep-line + triangulation + + + + + Raw + triangulation + + + + + Delaunay + triangulation + + + + + Adaptive + refinement + + + + + Convex + decomposition + + + + + Centroid + net + + + + + Triangles + and indices + + + diff --git a/readme/architecture.png b/readme/architecture.png deleted file mode 100644 index 6820197a233f17bcc5c96d37d23bd08215c59902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496967 zcmeFabzGEP*FS0?s352)p~RSoNQsCv=&cAyC@HCu(%lRqDkumDA|fd$Al(gvpoFB- z-5o>Mz|7f~0dq6@An)`3&N-iR_=nHMH8VTbT6?YUioN$!NpYcldynkhwr$%!;p_k0 z+O}=~`EA<>lXv5TH(JL#R<><}Z4>@SP})jmv`s5Rx~_>IeN@^m;W%07NA1wWU4%Lb zbay^CvY!nVJa+nKVv)-cLhW;niLg+7!t3Wq(i#slkmb{eUYLA(y3saN{wt=5&SB~V zi>c-uCrVGN%C0{vXR15KK0cLi{!N7s`3N_4p25;1lI=V2cJGG?JlOVMJ-~K45@!C@<~&-w>|{0-8I3c!f#3{IARs2p7?oaQ*e7 z-x99PEQT%N+LWf<60R-b!ZHzCW^pq(Y|AYE#*Cji#-di_W;NGD-ZK)9=)dw4Q^Ev7 zjCKTaRgf~oFRv8DwmjUk_S;AjfS_i-3T6MbP27QZp6oT>ig%+S;zUmwGvZ4|lF6DF zH_L@wadvr3_J;qOJ5Q!P-K{`u+@gU8aM6*qZ*K?z9S`onEHwxvj%O(no;TuJ{r+A$ zPdv(VNhOyjCkiDsFvjw0Z2n_os}vOhL^C?K`tP%|u#%9-z+{6p zlQw$-yn@@@r^D)JgB}E)K;ZS0^s`??gUNyUW}5iB{d)0W8({H6A}YeQel~1gU=L`- zeU-ZcH+SJt9!fQ>7yCtMfe<(lv|0(~u}5qDY$OaNl7Qn+UW**~MXO#w0+^hE_v(xN zuyqXm3!a@hCaLc!SnN)%R!75djo{hZbdUmuD$`1PYNVoZ*`1+@vu(v zb)c0WYyQawYdmM@U?urYzXani+FZW?Yu^CS3^DpTD>)r%(6tE9V9Pl`-L)!GV@#f>OF~3_cd2!Mie|elb?{zwrs=>9 z9s0{yBU1y~Q`?QN<9Hh3pa<$GK&6F#6CD97B)Iq7mDP?+4gdo}m@JG%?-Bv<9efuNEb+wZ^|#cU1#2P% zZKEUflTwbMguBn5u_1^JUj6#kXd&s|qOHJ#ElJptgdcihOA@vuVM`L$?Ch3x*s=~k z0MnKvY)QiZ&m}>sD5~sNEx?u^vE`#}d6YZww!C!^E82=JfOyZABy35-kEq<1By35- zmLzONp8wB8^Nf5nw)NJjUhRJ$s79 zrnZs7xc=%X4)cW{fLC^0%7V5EVdc;@uMKK5mlZ+!%^RzE zftw&(bm+ZQz3^IMXEl}ahllSuV%l+@heTrPt*nt5J2F zd7^~>TAE){7$jOw9dn>t>o`OfN{)%p#cU#L7fBB?a*HWfJO%kGHHASY1{Uc1wIc^m z)G&`gRshBfKDHM2$4}l-McLb<_sR^U>%Li2u2cX}zR+)b zXBXboLGZC}iZvGBw4=cg()QW}{efO8lQ|W-C+9)n{c3NRpNXo<) z+HGl5GG50iXQwR8i*dA^aYwb?UDPW%XATmrAxzDUlK%VEt0l+Mn()cNLnlH0+#2-` zT?d?We53K!$G ztkS&4Q3TBW?4Ct#EIOqg2fvWzx=W4K^9CIXh(Uu5w1EDoT=*ga^1C7tBU-@^iH0M5 zEiQ+6fpLpmMvJe}L?9L_2l5e@C&21?gAOI7z+iPEsIL;9x0_%f zCt&SZ4(vg7U{uZ_mXi_}4!YLkjVc=EkxKBd*yW(cZ6{|N4g|xOZlC*_l6J~>l&sBH zFrNB+O4vO5b5{EGY53|qFv8@dq0GDtTu$S<9?-_W^2n7 zR+mazhCufjPJR=OzhGb0?m@!0pjBh3m$-o5+wr{bmEvhKB_l`K2Bz6NHy;x5E%w$} z^~|QDYZ^TGmM-NjPn8X}W}2ExkSm+LkiXy8r{>L-CYYlRev(>~%i~0pw`_84*)INyhymJG%-6%2 z#!|Z!amqK&Fatf8G2<28^O;=btgG*%BYLTIrzic7p*~+GOhq3zHF-Me>GY%sB}QJZ zg-J=N%%&56_F_QgNEPq=J=c9`W8`dThe1p6lcTdbc|7gS5+-jgf>nw9dM0}>FW(Y1 zcReOVWS~D})!S8kuePMD-wK`>zW)j1(wuum`hu}*YCHw^vGI(RJTJBI8`epmwQOe< zPSj<2uLM~Xu~v}V=}t~hmDO~=@~0~@Z)iVQgPydJ5xud4`C>52zO>w%v53??s0Pmy4QHZl*sqwyU%uV(92qrXi=VbB8um?Lz-R^p|T ziu%d7N0UY_p2ECRqN1Hf@qeN%QthDHc5~c2#x_5Q|2Z$g_^s47XIeA^F_oQksh8@7 z$J==(7uYlgL~S*_FY~vU4m6r2KaaY|z`q+H~hf6-~bM z-WpSrXbsZj#IVn$DI)I^o1U3%O6{;<9bNeLmXxiSgnuX}WAt0JBCkU;0rIt##&mpW z!?%IA1hmhSD|1+a7HfiAQet`o0xm44CpHf=q-Tjw@pARd5OzDF=+d)_hNI&T5>Q<@ zbFnc&E?T$T&SHaZ&S++0X4ssIWEBm)q9UsJrZ1ba2p#umd@6HwQBVR-a<8bS@vXDC1$H1{^23T7jS*fOH4Ig)``eV zHJ?xG(`VzMQ?Ur5V5NiNOoS0D(piICx}BFzw$Coy)d~;n=I`;&cbvW!R2!w59pC3# z_?$|8qDd>b*d=_MQ(8b<6N$906TKHk|6uE)gMu=f zn5W>uL+AAdDPxK6ULP$|F*b-v`m&cXF8#V7{?k%JVqQL(d{I$<3AbxO4!2^m+ZAHR z?=vDiG~1-#&!b`l@f~cI78`Y|oYaVCa&p3+(Kc=ASlOb;<~!$e8#jps>h{JB4)|N z{zyjQlhLD2bM1^3Coq(XWyrAG9MVH8d~7A1W9c2w$I>Y&N;4zpq(BW+a#ha$op6gg z*)vA{3RRbMwU^bS#iEq6jFSPKjHs~8$N$)g_|n#`o=T?fsdS!q#`CUm@z}h^!xR(^ zchT2knt&+T_pWiJkEh7d%eV9pWBJnNibrxrliGTkj~2aK@1J-LL;yE4qFvuJ-|MDuKJ2dEHb zZ%{~WvYtBO5n&Q}x&$`j!2N|$(o-<1ex>1#AbxE6^hqomx(L+-H?-(&0CccGq<|pg zhKPsh(3f;J@pl{*!pyzQ7;jc&+m*FgpE#M@_v%BICZG$67+P&KVJxJaIfjHPMVE;4 zo>ARM3?xZ_oB@8h1k`Vqx=rgU434}$UDD}R!{p-1d?YyBF1jc#dHjv>SEPi8b-y2X z-L%g`q9?&N(nO6t`BsyUeQ(w2-#1D(a4inBRF$!aO{GzvXx23>x~RC%1>g=ZKjF;F zysNuw+7z#m&k$Tlh>}fTJXIN%>IUMdm*%HaYRN`5Z~V*?Pja_z|K>~{r(73z2u7i zM1Y>I0W7aWGyR1Dx1Z}I!q?X1HmI5}YDOr7SI>X2b`E^i?eTL1m0>}I|ePu43U zi)tkJ$)zHAC?$B%%B59M-cXUGd<@1l_U2O2Sb&6oJjcG zd@*w#RzvUQy7O#l-EEQ9k@o@%JzDwaj%0{_HclqirZ0g}rhhrh@X53)S3XG-a%C#g z2dT@Lvdzw=)*hTRuKA2c8oMIR}bpl9QJ-~hRl;TyKVI` z962^)l{wV$*01XzkiNL(!hOcA)of?IPMgjQ*Cj71o$9FBMfN(L{()N1!f0|;51`p| z3BJX1?RGt};SP!_?gRdLbnolWmV_KPZQA~jNWpMG7z>b09R}W7e0md>g4#f=93Mi? zN#M1*Tb_dSJ}38gk|UaVA$(Ozh!&R5cVT0GCR(H9^Z$ z$Ei>kl|{zCX}tBCUS2`Q7flvcJ|mzLyKhV#5zKiZt=Yyqs$SuxYhkjX=1gQFYj=#R z$T;he)VKKK_Ff6kf@j*oKA)l^_jV@czL2&o9NbS>>cc1OneXF}!B?cr_tsi_Y8hZ0 zm7zpvL50m<<9?OC9Xa3gcb5sR~vtcx#-%i?;L3B}z{3c$v+irgr_ zs`c?{&_-WWKR%YjR;+5@_ndX6u}0C3XOa>=d~-4oX_x)k7>U5#4Y2sKc(_o8cyX4w z#}}1i7pD~%c?KC)pVQ%Oe;WBdPtlw#yuPDKki|L__XLqJNmnoetpF!Ul z(yBEO2&ZJ+l^K)JZNh4W$-UPjcJZ8bQCXc>C3@$)gaPr6EZgpP{dWO-QTndH@3-NW zIJm|~&v*b+>~brvVHt2N#rqq@vHQ?JK-r94hd%HFDFdD`Ve6$qGW#X#f4>ne99)@^ z&(`YjQj5-AP%#K?G03GO=G4|MBD7wVXw zd?NMWmzwk2NdnMCc1Ms*!;PcrlKT0@(KRX_VjN7gkBl2V?bWK=vt@EC{dOXTU{0~= z%eR~66_bj3xvgti31km@v6@PxcUTxw*>xsrFnU>*>`h03JC>FyMUa>qg$Ns zX?%-t9~WizTWT#|%0FtDbJ!j}(@YWV@v9b~CW-xGn_k$Z*%`G^(*ex=8lGUgsr%E2 zeZn36f$38II_$%R4~dSXPS0WO0kHz`|5*bY!)Yudw*kH~0o!IgcbfP})!qY+y5n4c zsRQ{@y~gM-%Kx<5)qDz9RpXEAU4T3=TiS(r<`%i>4|Acq2UUzdK92a*EqYEttf`+B znTLYw<=sd0t0I}^Kg>0>xtbVT&DqyWd47bn{YY%GnCnUo0BHJoc*CzKEV z?d@u^r{j{U0^4S2+U;Cv9uir3hN@ zX*Fdo5^q5&&-v*TZuiTKfg@Bk+IBhF^}$^%X1g9TVs28uc2v0iQ*;zMu=gxNzEu$em~TT?RU< zMI??hbDP6-tXhv^hr;pMATNS;_(v$2kq=++eGz1BpH2{2w$w+@vqL1JtP7fdLS8C}*>jnbo8=t7;=Df}^NzPh}p* zr_{@|##k-(-9I&-jHX^TvA^~&8 zEC*W-g&M1y0e2!QSB`BE3Yffgrjj$!u41?Sw7^gmAMVD=2@Gh-_NGHvdRH9)H5lo& zt5`C(roMlx3>e%-%r>FBu)S~t%#n^&H00GpV%WyEF^j-<#4+J{g(n}h8 z604v!CHY>}60!Wuw8xoWDfiw=s1j9>{fXH_>Iw599iN=M!(WcpF=ZQ&7O#vaJhLy? z$$#&wL>&=er&4MHvI=tyOf|;fud6;cV$l04mUkp&jnUutm!niJT8Lp zeo05G8x}o(<9%Y&Q(*gd$H5yo4luFC{LzQj_>?Icfou)Av#WSSq#;kDx#M^6sL9;v`kui4$tGb#lUr%?oZInxRe{jL%T~B*sS~W^PDAtJLuvWaFAU3(qb?%`6r>EXId%rNlsQPl zp7E#NB9)eNnFv=X#OU8(vZ&GUsgy2AF-iOuzhA@~3E-6oy9iBDYmY?$+6LKwsA4 zep(z%&)ESMzXw2<+S3Z-2;>V0tGtZyKK%eRY96ai|MITWKHJZq)x_iDBp=@tmcM-P zjpVRt#UsKKnM$fdCrU!RBtM-}i+d*J>=DB=fuV&$`f9PMvaWStf2H@845-k8eGG|{u?NpkZs?Ck-`s&`bQtboLp8>n^Tr9 zV(ebyq;uNReh(VmjLH4ikZ*xxWOu#`$T;o~bs11cwY zJ98dbw0^aEGsgiET)}JPUtO$@-B5Tud}2Zg zo#{;$)0c){JKgJgOdg||!HTnS{t&c)ZgOb^ZbDDT0bZK)85o}z#5bLS6wv4Rcv^Vl z9^;;UmM=%eOelFW%aw~)ZbG;f8kMP&{__|n)`t8WvN;)c@NLai^~@1iW<1Hxj*%Txt|mE}DJzcAnT zDMZb;Fb7#J`+0@MXWzXMlQK0WBYT#A^y>$S&s7%uA-&rK@%8%yq4cPOxB4Pq)C`=K z1DzwUJ64xus7ZKOHE_;`XQo=s7-LUTtZd0w-Jh9lF?O(_!%FyE-ltIgxH=c02`=1g z7+c-;{6K&e3VkOV%C5O08zQ?DD5qiQTh$wF6MZKcB2xTG@=?vnfLq|K3b1w0qP6D5`?G+jAA@vEvpt+1? zesCPbV4_KI68d%ysmNhNkKC7UwBolD6!!|zFlQokPb*RI$|`^8e#;0T*Ef{?=;48) zW&mlr;VrrXCiQ6am*`1=u|JzuZ6yUVb)%c5rkuSKEB899P<55$?;iW)%nct+6b@GY z;%;U2MeOVQvdfuc?*VXv!rHQ`_C6Qm`?|ta0Xk|pc538g*HPi!LhQjm*J^eDkClp1 zAUfYTC^YivF?q1;KFiOnjDdmI2+vdeWd7MVeVm=Z7k+lXM#Yf$;_LH^Pcv51Yk%FT}b{A+JI z517+VeA>g7ZHoe>?I(RddW&}X@LgTpHPbZD`n|qI7WmmKBvgl-<~yRl)$4X6X>%}l zW6~=xYBZS4V%*(j($A00bnn73$A zis&#KX@uOivz1aW=Wo8Bw`IhqEO!qcz58vacMk|wq*G`oj9K^>(??J%CtBh!r-NJv z-ReegsB8~X#{a`y$LW$g;z1(h%E1nk=!+Z)?^Ok8*_U31!<=T%R^I#$EPJQQ;+}d- z@TB*m@rj$+pHQ)8bhqo?6?kt7ax+)dqGLHq^*<2MTIo$Qr}{39uDGI&2k)W)X~>nW zt_D~y4SJcwC(GJ;8W4*zGNy+ZOJGg4-vL=WO%OQaU?@pa##VxD5agAgjiph_&%G%1 zXg>%=z1{#T9LTD6ZALy*qUnefErOj){to(?>7hP*=^FHYOS60JvNXVEXbk#1Ei!DO96l(9c%WL-4*8a z3ch`HMc>PAneLw0Q|#fwP^7GAvM+nCh3N^kgZAfHpQA=A=INhbI0s8lRY8I60Pd+z zvJI7}kEu2W2Wt4y?|M^Ew3p7{BN1{2qFh~;TE&Oe=w1dGhSA27lB?J$_%|f|a(iOf zW-_jXfz&y0WezwIU6i+Mu|npOh>Rn%juw3qVPICRYp)@)L5*4V2pt`joO{8q#Cx`0 zzK7txNG0oBDP8dMHjAco_2-NINGcCrV_TV7SKw67z?ngK^xNx!AX`?8W;im5*Jju+ zJ5(w{TxPa9!~r-gMhCHI@n7YH0Qq`9fDmgeNN?qwXIwIF^a6GGJXlB2A5A}*X7ps?-Uqg9+yCQ5Jz%2u*=ExATVss31wUmp_vs&-2g zB1Pt&ex(qlD8qYUumeJJcvz_IzeaK(waANpbS!b2NijX^sjrHOd4S23wMH;v-f_>@ z*p}|YBXU`nmaBXDi;laVQ%bCi*{K4zRv2wJL?j`2g5C6WJwHlG@RF}sv`36)U3*T` zZgvd5B0Yi*$EUNuv2=T!&7@X1aq{%h{-m5&1>3!LjXHFOP~>1#VpYnl2i%^%7*JN2 zTWlGpqAfdDlN+^kmFWCJU%T^X5W{84MD!M5>PW8@E16cv)S+vLnoT`+s(pD$C(7rA zC*5j3U-tnqz~-8Z8b>8AhOgWM+1r;fh!tY{o?a;tXZLcn0PvxG+L53DC^9AZm&^R- zM8kyIF3Jnb2ez$g_Yf99*u6Dp2~VxP+sNQgL4|b@7G06@#E}_ItiSI(l(_gFwaAVGAyrC_4z7z_=EKsn&4>?<^X=0{qp0Y@GVudw^ZZr)F5o1*TMP}oVI>_C|Wi!#$57>UW&lu7-uiVcBj zLm_QX(%6m;$?K=eym=^gF>-iC<*-dnNHL8)*W4h&p{c7X*GM&dS|&U0xCg1aWbgRx zwTdyvB2W%jEx(ech$Y5YD<8`auW}$n1jIOGF88tA0MM!gK&wi-d-J>&ZdXWJ=(sG= z!BJd3O71-Uky2^}n06%#yADRwr`uW}Dw?YpcJflZ)}eBMg8y zM^acWK6<9+y&cf|y3R>*LvO;2K0eea2Mod4ed4D?aA(f`23k8zFi?ZJt}h44k}DOH&j021#?$H z^UQQUOlSzA)ywXC?;A*p9*^ZVx6_+azA)gW+l)K7}Bl9oHhcKf*)T6`SQalr56rJ8Vk+Bn4Il>0zI0Y5+qEPJs0 zfLh4mQRaHT3BNPs7GS-PNjfiJeHM>3a~83~aqFh}M;^4CGY2Od6Pc@0#0z%tnGbX7 ztDcvj;TuV&bDqz!jCUvKEh&`Pi{YDhFQ26gHo0+W;tG;*1eD-$>Aqsd*e_J38xqSY z&sL-{e?ZK9RKcUP>w6aOY|3Y8++u5hD75H$=j}nvo!jRSUf;obtCW!6w*G2YFk&e- zE#jo9Ns%8dav{Bi&YyR#vD>JPo#T;1ZkO#9+Yb1ESSE+{opz_YMSKJU^(J$pQiUTb z9E_F-ZsdaXrKL!z0@EtK;7p4Z1O@GQ#t3&;A9Ga@#+Og280It(ta`wr$+{zrtdy68 zcl5yoi8CCgm+}=qGcS&DbNf2n$ zoOrk15jmFf>8<%srg4|tVbngTJrPHl?QEH&*1%%??X)syynN#MR+}>Yu7G6bN}?p; zi=&?{&E+1mt0%&oo?Q6GzP2KX9ss{)yLJ)-Rn$$a#HZKbIMp+^p z#3FjPQ!Jrb9*?n$z{D|^Ph9rpBkNbGsYFCKUTnHN87i;T??#d z+*@v|J4Jcf&Q%rTXrv~AA_x2_%&927ao1W9<-#?fDAg2(j$0-(Jhbsngc+2Oh_ zwc-FWgWSHf0?X3o5Pt+MB5NQo0RtC$DJz;ZY0;ujooBrg@V0}hV@yIBBt31>6ZI{H zH-+FyEe!F=c`cwCO1J(IsXMpYAX3whzqAZlDmrmu@k8PK&342UvEAq8G0a8Ih8<=y zjrYnbu6-+VbO5o`e2`FHLk_9n7%WMDS^7;x1tXy|yV#o_5}|urD?~eiNjYuXW?fuW zc#MF$Bl(*93`YpvuI15)`A0jo>{E;w4co>TyF!@*4;Q&v-`1Y@ubX$k7yYzhN;}H#KJ=r)!Y(0rLUnth18tu@!uNo>QP(cHN6f0rb(iA;`En+Ujy@@ih$+@xIbw&J4YdN#h z45Dz{HYc^3kIufkrYqbKbLW$74y4=WG9w=Ma#+*x%Ydwx7NcU%a@x?ZT7bD5msV1m z9>Z(wh(Jl5vTU5vVNHkeZlf`F4z~>Q+awljg}U<#Rj2`HHFv&K=M)yKs)m~k`}w-O zF(Ybsmluprv?q^)Uw(G58X4>Ap$no6vYlHz!085R(>c#9!m|bm<-Ws|P}3S35fwN; zh7fb8eWo8VR2szki*^%`s-%-xx{(2#Qrm9-)KW-h`<3{(Z?xHod>FW3Zz_l{hD<=M zo!_YK4%AWq%r~($^SHsX+~!CFf}4ZKH2q^ignUngziFH=?DwByejQ$~fj(b@?cd`Q+r=E%66thLM>xB%Fu#Zo8=qStgz>o z#o%C4`1A;ha8}KO*YfBRaiezFzP)2?%U!P#9#eT8Wnec^jb$tKmFX&rC^uucY8g~Da=dDH?y4bF#0w~+);-S7a(PpSM`HBJ9~uMvzDFn>{c?7?!U`59dkU6DJV>N2`X9R3 zVJBiWri&43>|&2+8cUDnpBp6YqT|ox<^eF&6OZbo-~j|?#qpHob^HuKfl<_l9M#sv5&(} zqtON!A^>(@AQBIs0A4xE@rxvDx(-%N0L+KIfF*WG@&_kvJMSdtiKEs|mCWx1mWU!iC3_QRU{*f{jWZ>ji&X*!ysww|M|A!sXvigW-!rVZ zLC8)paBA4?wQ%feB;ijFL_whKk0aKB2Iopb#M^E$d>6Z)=(8ECFv`&ci0sP|T}v#X z-M|=xgoEIcPIJa~dPUEV4=yybf5&g`|CQ`Rr1^O62f6nFP*m-CEo<$t zSI6xjivK?`|iKfU4sD>(0w*L ztJUQ;kv+CY`3f~7LH^d}ZEu<-70J%KI#xurk1^yilT#8Mes`V)&7Tl(|Q3HUABv1L29Y{!=E zz*3k02W-c-;XPKrY5{iqA87yoEp3L>z?_WLil2B(aGiBiFgzr*78id{$b)HpW;Dl1 zp3bW!J%V{-kkR$X2;BR4I8IAiH@Ua!(H_#hNR6Fqzre!>X^fAZGtFXag+jl@|Eqx% zuv3Exj|-Hysth;V4ZqyqOJVj_cQxade|=Yd%xzK{TRr2J;$4(((ha6qmT^V|M8e}w zj$vIP_-Cu}qsI#((0s2cH*5R~d*K~{4&gkYZ-$lUN+kn1j*&U~O&l+JMih+YcGBEx zb@mx>?yF!^!5r2JtS~5l6y#a83EDV<3T_rpearhlX)JI8)_qu8y{`8;$%G}O~*5|DfQv*~(o>6Q>ufD+B-3z``LOR8Xwalm5_@;80-!-`ON14c(5!v>yH*84&Vg)|MrpI}FXo2mK`#hf z)^fGm9C^Si>&tvt)W#CA-%bG^6j^-~NNaoliyhCQEypewv+!2G?x+CB5^0V)w29;8 zUP8x{p1X}&P20T$d$&UL?xL{R;|ZOlD^W7A0X^4JKo9Z-_Qrs6*Z|w{Q+GjK8*e6t zkU6K?+g=YOkR7@9#wcZ;SF)e2%Y5%a%g_Kl%pfiRLNaJeZz80%8cxHMQQGtlLl%!kI-mi?Uxpb3ans@h)vn-srYLO<8S zAe4^e3*q*HXoN@kPtD%P;Oil}V3f+<)>sS1@fFxkr?$~hvBftMy4iDAi91XHrU07z zns)6j__zexaww{fo$aItlX6?VRQWH)9_oswAA0PfQ45>SWUw;HwJ4f@@ z-p5iM{}a5zwBz#6${ook`Cg|)3&Q;k-ek|d6ZS43mEd`iUAY4SKas#RvrS-QS4VN6 zAI#2bQ2)W~{9cPeUv|3=%zUG|x0p$=*h3;RW|e@So&4)3ju}viO&e|9Cd|=yQiRL_ zrLEI(nfzbPK^>bxXorEx^%sW1qTGKnM8N1M0xjG2>^2UviUd2koowbMX8*dWpLWYd z1z3a`##^xU)C-9Kqqq5TpADiq&J6z38!J$^xsz?p=Kk!70s^E?b%yC{mL7W%uJ3=% zt_t*lk({No#2sQh_+aS^(rB|oyr2puJ#9PsWc}0}yFiQOJO4bEe`(P*y1ayH>7`Zt zvC!&|xrKtdul>rRhyGcc&L5iiH$@#aA$%pv-}Yqv*Ef%Xf3_eAU5Rjvj|69oI?!F= z7K~DxIOYAv!mmn+QrqJdgJ3}ryU6$CvGzX99elx}Dl9)qQO zsCybmxr9K)#X1e=cWqW0LsY;IhwGT@a2WFpNWhu1gVyWiewAQYzPOoqC8j>g>6N7u&J?;d$Seg!J^Psl;?LE`%k!FE6Rf% z6xoXMU{hlQo3$0?!49--MR~BPv4IQw|8=m_iAgraB-*^{qs~XlR)5>;E-&}_xS6!l z>o&{jwMh4|fqt%XVq zbLZ|KSbv9WiN;#p7}I@8`3rbA<(nw=l5+oq^$sc7?sN0_NS0G z&nA46AC`^?1T^z^;>Kb@ZU`1{@4x9p+Eq3v_cuG~{mM`t(*)}f#Ghm51q`c}f`8s@gOUzFL4)t7vT$VBGXSuwS2pz6dSc)-v5rk!N(Y-_y<1A>uVr#e z>0o1-h#Y#I0uiv{{<3+b#P;w_}}8-@BG#AnOBT6J}{ z+^dbefq%)-meSc$I^W9_|DTWPI2_cz=>N7(M}z*nVS5g^JY)Hs7RQD4p{AevMzgW@ zjjsR7?=kAry{$GQv2XdyJHHCiilr2qG;=L1c}gQ4l=n-+}`%XAK9~Kxt{~E z=lQi0N)9Wtd(3527%DW`ViZ!Na&{PC9c}w_O1nV_<@f_XbBs2)*ef;${P$;2hvO18oY9=Lq5ZJ9ey*^5FhUL+`u`9+RuQ7NF}( zg=hzDGo9L-v361Bud&_%I}{zASC{NxKXg@cBZ&ZocmT^&YcFZ|x{Us+1sF{zyc}J( zH+w8ik#T?x`+Do|Lxi0I(HMIDE6i&H{yW<|_%=UtAn0h`%zNh91Sb;_k0b17XJ%&~ z(@TZFl**6AZ7v=hr`##{FYWwm+Uq3~n~nJo@{67yy%P3yw{CsR2cHsffm6Y=!wfp? z-gj{ZN)I*#T({=7!C~G8y$Yy1BJGj3JMZFyn?3bJFunDN> zn`Se6M1M>&=UQhAz-uNx2%dMl~2>V zeQCBxI3m->H)(`Fbf^Lkm%F*{#%C6fv7Kwt9(JHW*` z`(BF7#@t@-NC^Z&;qd$ZnmFO`jbzz(7mdx}+iL9#1zF}JS$3wJ4fexQ!F%oP?eF?3 zThK>5P{dKwc+hSRZP8xrQ!@UFY`_$l^nEeveoA-RgT-RBv05j!;D8X-3%mFuIK-)i z&M6N}*S)xYs=pO2EGC%=cE0yj*$dR0l0}n-az<94p}$w6*MSH;`P6%2 zvmNy^8Wry2AbLc(JS>M0IoSPRC-H8GY{B+(!b$vMI5qkvpkm&$CanU;vTh*TjyrZt z_g4_AqM94_wo0~tJ}h7rCfdm*0g`}`3gAagGK!;E$*uQ&w>CmbS$Q^J$K>A z^NBFpl{54%Kruhc%gbZYsf~QM^o?k}8T)ZFxj}m??hyX-n?Zq2FHt7S-E56X8lnUd z*$%yJNcg;f%g4LU)b%T6Z8+O9VAbHBKPUG_s!gYe@^%!{IxGuV3GC%J9jM$#NOtb} z+rzxLbXW#AmODoLwe?(`U*W-wv9y-U$xTH3n8hk*^SBmTi691|&aRl`%Hg2}a6iS7-O~TsXZwRap3n}Vl)1M!o69y@ zGt!qkCyQxGAOL0AX3jfg*_?78V9&<~PF$OLmlwJ^{M83Ta34(m$OeMDUS_~%Wp})| zjP7TUc7_i7__`=gBKDf)7z6~INcb{p7y@u@@fqko`KK9ixH#@VcQ4Skiw|N8ST6ri zo1&K&@3!Yy-_$(|&O=x?FcveQps%D)om%&PV~JSy%U8B+JACB%HE2`D#a(vu#!6qn&P-ZxWSwJi#uG&nTeCNs+ii;i>WP%AWbt|`{8}VEu8rX zgqVT}1-5W*;=-w)-7D_8sNa0(O@(I0(r~os>}x)I8~IEVjSuWfxSPu)A&0>D3daT` zUr%iTn5`qy0fU0z6VLPwdNQPK2MPjD1T*G7mf(9l_0L#H>Zq172#018Y{ zFZH@bM8>2<(O>Q-^`(socaQU699THxHd)Vc28&DFf4yni+vdHYrSQ8qF!I~w1a z7H*}TssJtrHCE1T&{$nBs}FtPM2|DYb-w|;t6%x;L&>c>i&K4Fz1|Yz&7fTZ^5?2*l`&7}RW z*|fwLmKqQ$+V#_w+|1wzq3CLA-0c4DPoUUge}~d0E@}B80<|igUCy+`KxxJ(XQzeT z=AV2j0pVtgHuDDeN^aa;<<(G8OK!3pt|Rv^nZo6NDp|&0sB6Im}?(iNhm zLZaVs1v-vv)*@W(f54SKUsYlVG}#QjFC3nqsgWQ73Wuhik`}i};oS*Ps1m3=_-M1s zC6zQ|DBS-t@Xn52)T8*OhZ;*)g_g^=cfwbe+J$guJ_MDA7}9ZV+V;od}zdsNAtTkE~gWWx(bZ? z{j~DJ+rRiQ6wVCQgw2NFZq^sb1RZ>tHD9|Z`)}u@cVglbsl+4THp3SRX^EE+QW4^i z2MFRP!~wWt(t&R6IqiC3GZ)%?R|-+b6Aaq2i~zbIPRX_yYo2)FVfXHA?1(oGPE&G~Wm~>_kFk>9{}o?VCY?J0Momm4~9)4Pp=12qLI) z19ByTcV-3y3x?}N3sr2#UKD0%{tSL?QcQEnt@?cA3UcT9_PcZT_qKC{;RfU!PwoP~ z0(D%*y{nD3$UXnn%mB0`(00ese&<2Gt!Gog^B>1HY=lBLX zFKO}NbD=*p^Y6(DAVD^522Q|*W1QXrqYIneH}rGX6wvj`UD}I(TXs$jT-d>F6*#a= zKojujykds&cYrHU0lKfX`&fh<(ZLze|Ha;0hE=(>?ZQhbrNl&ff*{gLN`pvucS+|& zx)Bht=x(IDVbTaFDWIg(q`PC%vBz}bexK)E?|!#yfBQR*{bT*nLuA6Z$GGCW&g;C! z4Qwjq;HnS~^Zh3;o*(A%PTrP@c`3CSKlHD+Z2q}90;;Gw?%NqQ)9;{uZOP8I-%h~& za(-h}m;XxvmT*h`HT%DB#s4b$Wfy&t^TiekA|}`$J2;z8ZLnK?uh0CS@e_EiUjB<` zPtU9RTZDp7UwrF8BQV^5{Nex5;P1G{bGhUNB^r`{HtN4G=Lphsnrbs3ywkF(_%_JcW}9LB*^1> znP>cal@^2sSh#qB5X)aoHXHoDR9m`BmW>kNUP!30sqg>l2>$IUypNGxpG|A&zi@QO zH*lsThD=@pNC$9-v|L+3+`qgc_P@c6-s!-NC@XNg{}Q`Wk>o;W0l4%Q`5Yl{fFnG= z_YvnmTfl$4_!Z>KI~!`*2>$c0PC;J0<@n6=@*=R?UB8$*VFIWWhoE!UaV>Rr`io^JE57ZUeviUtz0rEj|bA}}5a zf%OyQZv3T1^Ox=X>2-jq1VtOhf8IlZhM&KuVx_KlSZ5Z?An^VZiaJCA6zA*$@#|5S zknbAS$Y|%SC;NiWw4o8w1bW@{?VmI+SMT}|9Gb}<=3gq2 z|1x5Pyax-?Vz-j{&rkDd6}XG@-OHo+dzJmapW}bn)_*qBP++yseN_H($>3kI57LLc z-NAz9YTd&B@?c<{D8IkXEq|KpzqA1VvL*jdulb*K{<#DHw`|~_{rqP?|1H=2KNh3@ zvCn_(^B?>C|DNmr@uPqI=pR4&$B+JnHTZv`2Kgs0{S%k|iA(>)rGMhmFNW>!aXA0P z&wt|QKk@U=_?gmkbvVEJiPnKG44Z4_9K#(#%z|j=Vu=a-!#fO(9SSEF`EdUxXaSAL zX9SSBvbxXuKyh97*P)YaUwKakwlX>DbJ7TLZ)U&$6vd#~oLAJa0{zH{#U`o%$mcMP z0OLzjLk+tyRqi`Dxbb z9dWem7w}xp6FaxYWi+y#K?%eT1PpS)c&fPI9gPH5dm+PO4@7 z=Ex8@7*v7?>@`;;>kd?DOkPK;Te4&qUmd+T)~nK55?C7L#AJ}~%L%w{udG+>mG8Ay zp4Qyh!&{w)sPP!-CG})YXk@!T@4pHq+8I1+LYIv4WRp5SK|$wb8G!i4L+felb`!lg z=Z^U(<({YTf1Y~N!cR0*bb(kc9I+_kZH^;z&ud5cCQXztJAH%>-u<{a(-ojRi$%@R z{I%d>SLl_12{=J6JG)EKV0IwoJ0eOo|B_f&KGUxsIz$jikwa#FNiLLgK&OeA&Bna=C|+`yg(FES><}!m%s#@sqn++H!p|E zt^k{@Q8a8Lgy+15Pt;s73};=6hPrgcw?y>1GlPjg*J~WO>){u5$2GpUb?E>v9JyAflJZUv-RbNQZnHL^h*_ZU)1=%U;c>U?^=D4{c^xg9 zO)qC9FFTtHqLcJz#_(@q+DBQVk z9wO+q$zQcGrr*ok=4AAt$p^c^VdQ99i0r(!aNy;2ZzZ%&TxPZHK*{D(syuWOuhWf9 z%;CwyM5VWT!YS-mm9dzs_Tz|J@J+hO2E6uS5}UKK+?l0firs!V3^!f_^OIVK$tPZf z)-~Jv{AiGb#|Gvx4#(Gh;daB?2Yv>@oYm`v(CYPCAgFgLKkLCjts%!_X`kA@Fxo6^ z$F!(R|u4U0M!MF{niHI_}XRoKN->Z4ty@&v~bTVbj*3^U$I-!T}pYkM}! za5#t;3@*Qv)%C%qzfL3YNoi`*3n~^!+dbF59iHh>V$c>wqv$WOG6280_#!AMxU-U1 z^zK-f@ai?lt3SXWTNJ3*n4NE~Xx+YoiYM^LZ~Z|L`G+8SsClh=e$cCMi0=#)W_yS} zultNxh_~#00?MmcuN^|Xx$ft{H%_O{QG_x+#PUVRmYz~yrDJwLrSKPcj>VjC}z~(@!H*Xw+w0-KNfQAO1lY=Sr>$-2-0N3IqdQ8aZAM z>M4PtT#367r~MYSwl}MpVpl5F?fLoWv;Y?JOkaU1Q(x1M-3?qV~O;HW0i}@bbEa+^9N( z17`6MNQ3X7;yZ!Qx3^S7n!4j*lm`CK`~_wo?nT!f**@nHF#aHbdI!YFtJZ{yBA1(2 z1b*69T*#Hbvp%~kKG;=46t%DVAt>`~PUmVJG0Q?lOTQKk{QM6~3Q2)anF7x-nPWH& zLa~=PM4XI9>|{*Sg|`MnKGGFGU++p?3{2JKcSYL8JT)R>#+yZv?J_ z9(79hi`+{~pJD;O&|RcM;PT%;&HsP%$EyZlB;y33+MlFD1T(*qbtJeP2N18j-ZIov zeODuJ7i@!^QJ4- z(|VFEqAyo(ZhZtln(wpWqf57Y^BB3_n1UCnzrQ{_dE_Z(bGOxbP)$8-7tnU=EGG|p zU~+G`9~ded2?@$`kdOWt5sUJEh2#C^jv-#3$?LC)WlB!U9?!TWzDQ76=EvMZrKo(> z=z~2}G)8Nsff)EgtCRW)n_%d{3n6AVREiL=%$ufVF|?Nv<4_8iVzN9l-meJqzu7`$ zkV#<@2)W`UVu)`;WEcWQh1E+fOHt9#swpVjKiwrtyefuV<)~DY&nrLVJ}wQAKUXRI zkzJcQ{lHB!G}UDUih5P&ldd4Tq|mSgj1k42_XoKO=PxZl-k+X@<7{#7jes+7QAphy z>h7;t=7kB;zpPcEA95kTu~zUcp$cF zcTT@XQVXIN{#d$$v@+Ch#-(>q=~1szwd4Q zSUJO^?co(@_tl%%n82rAMdsxY-r_R_QHmY)Wq;xUqbs>oiPMy?XwN9IFHTvi2ROff*^K6%syOJ&%98M}LlT3GZy1rMqQ6$wN zRG6&-#d$7Z#pYnYBJ;PaR!DgqR#cA=U)AM%Q7aBgUbGEttOtb2xuH{v;pyI@mVsQq zT|a%%;rIP6xS9kp>2?-YGd$=~G;uNN#b0$HkSZLUJF&|o8Af@1z8e-MNntgieJWp=ZueZ0iGD6jQEYGN`vk64?WFD~wEg=7{)>ZS4yfdv zb(rh~6PQIVc7F)sL452pe#~r>8M4OYT^_PR-A3{iyv^=-j*3NrJH4Cw;780=JT2-Z z+SZMJK3c!A=QJ6gp;hmyebPX3;66FPB3Z%hwBdSgt=MahNRWx5FZujtyObmP$(m${ zU`#RdqpQ;(2l(35^Ge}fCh2CR+dTF$Qv2=1jVCY_iVSF2AfP>JhsdX*mRgx)uZ_9M z<*Hg4x3ijx6-Ur3w?9ea_rWf-5JV&5u#6VQQt9+Y5v5x3E3Z z^dq?(^6K0}bXkXAeTT9SDiFQM$6bWR2tr^#%Y|2Y%f72Lns~kzOaD%>$3;Whd{!Di zKil(=d#@h5tmsWN9BfQPSKB=^Iv()T*lIx&f~~N1igyhm<|~GEo>VAfve(pQ&0d;Zy4JNc3WPA~~`7cr@c2A5h&Ra(9Hj68Dy}06Z z2pPUnx$R3SJgenL0*&k<_3a&_RU`GK(M5@YvTW&E|1iNZi~9Y5d!Ee3d-fy6`ti%~ z92c0yq?qk|&q^6*o;MhwS$A<{z|p2|3r=Ju(d_;xKTD`kuEuvA6Vo*}3W5@9FLj2u(;f3RNq4!L+*3)st{rA=>%_b$SEY4hoS8)1Qhpa;h`te=h zQyY1iL!%{jEHv7g#j^f;${|fd47C|%vx_Z{^B>0YiWC?+>1Ka5Uug}#qG z+JLIm5Q?DP&qi4ar|x0HnJXr&Q`U3ZI_E+I(d3sUu4>DIAm&Yrr2MQIJb9y(%s~?mZGlqWjP4u%@DpH5vHpOEx z#-{G?FHoK=fb#}$vUf)uJy?dPbu0FkY~43}Y&^gk%MU%Wv*5t&by3Q0h&C>e506vG zbNsR>!Km9nJ5m~9Q^6z}WaY(3+-#XL#NgKMj~K(29H=L$v3$4cyNR>v6q3l@z((Bo zvR|W50_*rXlQi!Qr}a}6HyL`iQ@5UOEjm>i1^{vnjfIwAYRU(}NEE+g7kA8cIW(K*h~MYt8JIi{y7dvIO*5Q#`hE)88Z zfY7q)wbe-U%DLW{IhC$-ucfuRlXrwsmyFF!_b1&dn&WO=a~o* zLG-2x&9_{8C)o^x@F=)6))Slly=Lm;J;F>ku_1GJhx;$r{i|Xs;4s|kg8vn7u~d>hZXnAXSkL+d9mOg(NA-8CmgL3aoT z@WVW9^nxm!x;s)|=%N3JUp#981B1q(gMG;9NXOIb%!fKyUdwQ+lmtGHp}{zXEKkXM z46&3YFKWFsPqi5CQ_Q^&EiAmqRy+xkPS-ihO}fAi7DQj+%t?xFu>K->CxpDkm4_pr z-xr%vr;gGOQz?|_0?w)hFKhI6BvC33$8=`4uo&(Q1*!@ZCBRdC~i;a>RIZ&ZyNW$*vT!@@-wd?J*=P+BZN#!kbpKI|h?r%&^RgsZ^ zEaZa3{&bgM2f~a*G6YVEY!7}9pCN;YF0$gFxm!Rh?sGZ(e3%dk^=E=67D_ErHg+SaO33uLkRtkRMA=JcR3;;L>G8 zhI)?06H7I4a0v!YoT`8D+B$*j*icag@5Y?5OA;TA;=}0qJmdB*Ceee_gKK8Bl*>{KN>Dd!PWLXHTqy7d@Ya=M9F>6hbUS+>XJT~kk1|9g zf=&Zw23fJ%oi4~(OmdBPQLBt9SbdAhYBRQmPVj@1(%J-9IzDI1&(%>PIZwU%MVkEz z-c0UhS)xDoD$N(kIqG%+-))l+@6iAdG$rCyc%=`%FO#3T9c)O(hB?g5b+Gu)IYaKEJ*e#b2oC1w(TpdDInEXg5Bb>l@b#icc#2RE~TJ z9DeGbg~QD^#mI8xM}fi2WoV!B1IR&V>igZ_q6q#x+TsTwJCIPBUseA^->%oSPZdTf z{;YQgq*KPbokJYyOMeEj4tC|ddlN>p{_8aeYai?ZP3yri>z2|Sp_gQydkwRaKd%2o zuXn!cj%-g`Kz*=DNpA7GFU2T58ve9hleE6Ilu}mYgKGShkUZJAd&ya+p{8NbZ)e_b#VP#ta`nXcu63F*7F^ zM(3oWx>|DEuo${2n4?n>o41YNvKqST81_(d&6LOCO^Mt&?M^R$Gzo%*E~(M9ZoI)k zb7jE1KvN}U%7od~Qa4$mo@V21b2i1rmb4{{0aecew!Tvz;L; zU-TO}Wi}L}E?Wo+Tl#)MR6JLH({M`ZgDWZpvQoY2bwmBiWtsC7AC!RA1iZgrQT%ZQ zj5!lLok@NA2Qpd?<;OEXvpiR~bGw@{UVI6nS?O*CbW&-?K#kFjkz&ty>wGcTU7N4Ez0EQECUwBBa)|ec(+|tz%W|KS!i8U&Q4|5c z#|@0(AFHxC zgsCNy)NWC}VOlxyI*y(!NBP>==}m^)b?VZ^(AEyfwhzfqKb3BDTm`!sn%0PS_m=*^ zfW9?CWn1luLA%j9WNF)gnk?EC1lGzB+xhq6tx{y2iQG=}Z78CKv#slu35Zsy0<;$q zjGE8G9!k?kGwFtI?w{)2H{8y?$WmwN{Gk4TSUqnB5P4ZA3wHC_8;b{UH&M6?N95SLbZk z99YhBmJ{=P)-9SdX;nQcGp4U}mvpYNH{<#Ea5{qkjUc-t`uvq{PEX>nHo9taYkMT8j~8LX@IC^g+?q_Y70e6?d6kgYsbG zCcR1OaCf@uy6x80orB2>=Y?9ECd_`9>?a2slX`B2UZ>~LbG@1!r8TP+8a zI(1KNm;3I5s~>eM7U$&U8*^mF-eZCnT&HEMeNXz*U~SZOH_{WOW(k+uq0{|nH`uP% z!|~$WL;dljGyeoSK{l4vc=5y@hsqfrgC?hTs#zn7u~pw^PG(Z_|Hw#(x z=Vs;W!Uk<=-`=7M`I>APasc;g+jW;~44}=L+h6Cl-CbblZJhKx6LJ$th%gwPBz2vX z2eEdzP&=BZx>NJKA@?NP`Yd;6Azqvc+&>{(FyE8Non#^)mVDE8XO5uXAt?E&+|FFL zvDvnzcabl)lE6DmiERhF9q#2-3l`F=-VXs4n6mz8^%qmi4WiT!`Be13k%+dQ0n&8+3MMO9d^$LkbI4EFV9YCl*HfzxF= zfM_hbrN@~>5SG%3Eq>D*>48dUN8bOSz<;M}Q5K!x4r7=o$cQwY{9Q9g=bUC)vdNK5t~bJq9KE1F3S7H) zZjIMRhU@cIsDNEW$(@QFb)fAGAY0}pX-kSXY1=3Fw^OxaPN|9VkSC^bo~EMl=QI*=#Z#v{w z{TCII6efk@xM`lXhL3zzs{+@xOGTWBYX#BqdvqhTIJ@HFUhl0^&eO$^ExFnLflyg$ zLTQU9)#**G@Ag`eLlXU;QKK)!a-we#3RmYGB~w`IWQQ zA92yPgq#mQ@8P{Hd#EivdG!JT%cI<2@y1laSB084xG(2^{)S7a>8Gj|n8CN1Nn*;u z9dR1T-ew|1w)TN2))$+U#~I>_{(@>UK1&!io zR9&1oJ}m*kk}a+ab>*14BgJM7vyEQ)&t6tq>Qab@QQDUq>S7Sw*VZ~?$UlELWPvDe#8582gL4J- z6bXgB5~?vTjp8*EIPvCT&&Nc+QN~_=%QXS;nX5L6>R}JAl!3YEKgscAq9T)nrc%>s z+LqO|AN5ioXG6Jyb$I9?@Jn1$fgi7EQAjNvT-&=L4>ZmFpx_vGo*5Qak>V| zUUrs$ymjY}A=|)g@5SkE9jo;Zae%zcMgstw28=+CsQ6`zquF3;?X=Dvx+GnH+|8r$ z#XnQ51+m`udK01?l?fiDj(zD_-)CiwfeGkOj`X->aZ22VNpo~z_0z>?7><$5M(>|C zwt;mxN5ME?A}2I^HIK+k^qA*$kiiQjqvcV@F7%=Y_X0Wzfq zVoRH${k6x)1Ha;1BfiY+m#n!>=9LhB>OxB>k^ zT{R46+95UHqWvZ27dR(GtMfMEWDR@9$T*JypTc<7n6WRq*Vxtr}9d>kY)< zArsDg#bEp-e}~#YIU|6yw`weN3sB%I1@p+FjhKlCl_0w#mVm1oKS|5f5Sv*JTE7Xm z3Zd7m>DePSAE`-VHPaZ|@l-;KX3`F|OpapBM=ap%z@U?%x4xJYl7<}^TWY>{6BOpK z9*>Z^a5*2jFy)G`q>nJ{2!9%vm!*sR-we6E-?kGmkDDHScBaxdgntaVH$tT20SfFJy@J zFO0O-MqdglXsBJ`Ui<&=XyG2Ck{Pra_NqK7llNmmv-4x?CDG)c9FKtAHUyVO33o)c z9OAUgz!$7p#Sue#h<(78!nX==i^t5su|GR@2-~^)Zj7MkWuS71;O@O-NtX5GiKyk- zW`8KJib1|MzoPx6VTt(UQT`_npb4Fe7Vjh(UIN@2%_;Iav~Xe9*YE?-~m zqMUlUP2_UDJhFJ@DX(4Un1mkNW|f-`NjrUg{`OXTW#aLP@hbY@JAd3Hh~mTEeumA# ztVE?kh0zVUo4JLiAI)u#_tYminRGd|`x>H0zqSh4QWQ1~jlrCe zZ{+@-D!jWkJTiG6;d4Ys1Ud=v_!2vJdYr2VkrvqVSOj>as9Pg0;I#l zZ!au)T2r@AeQQcie{tmRKfB3YEdQeQ!}OqIAPI|5>xZ~ZZjnDb&jyx((7T3md5*%% zeFc66CF6J0LGzodMmhEQ+ZS%8AV37OctUpXeJJA{;=j;}B34JVFb_bcsoFoS;W>iF z3KIWS4xeT}E=422CSsOv+75aDhmdgqE#tqakV=Da0ri#NUp2lVCzh)Se!e#zOrV-_C?5$F6$X&`6$PtzIe%fiR$;QJ&Tj+q}w zIhCDa?3er6n*kkVu5{9P1n*hwIN!|bFnXGBJSKRCGcC<>a`Jh3(hqbH%5LuoLtY@M z!zTxU>X+2vD<`n;&WobZ%cJ|%1^(~;`3bapQ6woauWA97D#hwVq%TF^LCAYrsN%8D z+hcvy+#TVY zl&pZ&HLcwa!ZMT&&?<|Zet;M@wI?a_^)aVs%bd6;4=e(=tCsgGX{-;p{8Np*-gPP9 z3QvvdfaWGXQzGT{Tc2TWC(bKhaZ6NlG&EfItrtz}Ox`Q)*B--d))SXM@?2h!a8&3!@ z|3+o^?KY(RIMd*l7NGsr2}LOqLbF1*t6BTc2`ajx3&kpBB?&!sN|ne7SSi&Gc9;9_ zb%GMffxqmw;bRk(Y!Cu-#u|~;O+HEAZY2qyyB2Lk0rcsI363|Kzg+BkE$l%&8bP^r zzW^ay&hnd1z-Z1bF{R5*k5{(6eDb;PQ}s1<5)wD>S1UqyE|VdpIxTQRT&4k z&&!>ctv4*09)$Q{6LPFkj=?;vkS8~Rsy{*yO^B+K4$2!Qg=C9MkNfog7NmVjxWi8S zzw@zwkC|^+ftNmyD=_|uj;zO#;tEF+!uZkHdLvB-R;~mdFSzY;zvRUq#fcDzXhtCs($o@ggM{}ss3N%@7Y$!yew@i;J69FKWI&9*lf8KO z7Nwkn+r+7yI`~~TJfH7{5?QaHHZ+cFAnItAqDBaS2a#vdvfIYajR*(VUYI4RrSltZ z5E>6>_$b;xovIu-f%3F_LAo~GrN1z!(N}kG{n1_8D4X%#WRe6@E!l`i-isj@qGa_< z%Y9j)fEH1m`Rp>7rO4;9^C99}^Mk#g8jOin7ad*b;Wu$+vl-%vm#wnI*=Ie5Wga*n z2;^L2F7}|4zwZr@;TwVYFG|0dKNGM&habYc{|6Uss zpnm~Kn65xC=*mzI2VpSj*g?gGOZ9iW*9+ zVU6ZWR<-RsuWFFaODgr8P?G~3LmbK62_)6Nc6|Ct(G<}6B8^5|$$H(hCa)Zf5<>Br~1 zZRN#@+D0UiQN)c48b)sGCv$&*O^yg}YJLkWdfMP|{3kPe3>9Oq5z7q5A|eg4cbz&&_F|L_%Fn6r(^%9D``mSXv)e>gQ0FC9Hc?@)b8)ovnt?Y53g6OqQ>!F}h znA=+}V>jMxcnv{WbVMbHiLcLw_#)%vb}AbKit50c0bu*{hI^tY#cy#nUeOTwo)nt3^LYL;S+#o*;TdJ<|itkfy2<79-G)Z4hQ92!!}vO!K%O%GEd!KvrDz zh7>ZT7_sijMm&9~gK$lza0_Yj#ki4fomd&wbW=x&{|RuA9yZ{W9BzP7S&7Z?QFYuL zHK@)(!N8Er>GPvsZPxV0j8<>7&XXeM*90hgwrqJGaA^^5Cl;TAE!jH zULrD`#JwUaBv> z(Pg*#g^O&D=3^PYoSywd%>~@4JZd1!xTw$(|V$#ib z_Uwq}&!T=h6Np;WCCP*~5@(%;o;Y_{5?)gQsD29f+&2&uyE6QnhFd2i{22lbok8p@ zvhX!#&zV0&J(?}H0S8Q^8cth@+ne>;Oe2)W-`8M?ri+XIZ?0RvPE+ zXeE@=VO9C15ifLu`6%_k1{nnLj%3`*oC*jT7@)mC+aa-is})0t0plCZV=U&Fr!FCL zor#0p#Wz!X=fv%deuTXBw{y7tbj!5(Qs`sf=E$;f_>#qF;7v}=ti#5rmichb+^GAX z)Opshk6U>ZsP5E*CLTD4Ak80UeF=o43}V3b{(3!&n-CB`NW~_&tc2I!_p{sB6i3i% zx0}JP$rs^nCUYI-5%V}JHJqCl*-Bt*b%J$Vje2dzG4qquVuM|2>p zP+JD#42@UfLe<-w(uxwb(DlkPGT9-Z@1USlwH#Q#*Nzc1=rdNaY~}n-4b6$wRBeK0 zan{ub`&@MK{U5jhF+zpCFbL>l8lSly5a)8!AUHmQPKy6+mBx$Jq29>XZ{ap)XYU@7 z4BBa{gQ~`iYd*v?G2Pv7CX)@>%1QOhT^^#8h!Ch;$Hq~m2b$Wvbv@>5hr&p_^Vsg@ zCEmG)grBd=aP+x;U)G1`3_gPjPb#G_x!M3IR@EXPcRw;eIH88|7(z}qT^%);TEoW#Zl|WblgwxG$Dld_!!0^qOvxmAdKXWa4UQ=$UUL7* zHX)AKTDo4X$Q5%D=MOus={yAWwG*#0a#x3Q9X!m&%cCqL2SY)K;qyW#I6Yq7RH%A& zZYSt>#}ZyDwgIoD7B1h6mKTsrsv9vn{d`4d;`Ys)T_-oskk&vh0#{(!VoEk2)N9?B z-x;2ir|Wlsnyh7xqq%@Z5Z!uyDL~*ea!z1ogM>x&(pnF|URA-;sQ*S7*OLTiq$za= ztr*~Y??hiSSJnXB^Eu9O%K?$V>!Ch=w&KfS$z7o5o=gYI+W$##v*D7C(8{NYY@07; zN+nSP8Ob-2G_mh>%X6n7scgp?3ex_Ac0RA&&;T{5c00^j@ z)}3)wU0#Me<>a?`UF~6~nP(5BV;%tZs;?ji=xX+utb5OgpJ8YCI<^xDDP;Kd;L(Q#{;u(#Wjl$?tVzSYWrdImEc6WeQYxy>{<~@ z?qK8vK!;^?R#O1XJ@J@9z1lbv*>!N- zINYx$1WFjt{*PEujwfJbwLiKe9?cl&aV=4z43;?D58r|7xQ*2&iiCKVgn>+fxllxp z)F~aj_$An~jJB4JmN_##Dn-;Jvt2Tp&TG7r8_{4SVR^p`Bu^k^>fMg%b(DjCFH}y; z*m!!Wo2jm8t#>;>HfvIo$cz~Po6qd^9rZ2I0h{V@Nxxag%wS*r7-XVvST~rC+mR{! zk$fE%TM5ezuVLU@f;;XiItQg4ij<*D987!W5=bWQhwcQ&%K6K_*5G)WG!d!6^}cEg zyBzJTu<+@mToP{Anh)R4mn)`73o={-ZKDi=FG);Iph_Hoz8l-$nidj|W{2rJ{iJpE z?#ZMi;m21phQ&NFaNd{TUF?i5C?cv#=Tr422O$kdHDGfBp5}P`law(fb(KDA$emQr zL$cbb&usQIl0$+NN))c=k)Q5!3Zi?aEj+vSnh2SCyHy_lif3DC00Mb_UQqZO;fxb0 z#z{Eo$-SV)1I=y_J@4K{)f*7`u<`&fA`Cz}=T`U`%uId{w7W_;#p+`yQx~%8Vlj z%05h@T04>J-!=S(WZxfq`7N^!G^rr`tsS!Y=*MJ5WyMDN9B`QQ7hP^e?PBGXbo*eh zkxm1&|ZLXh{-|6%Z>*0M>GWG0u-FQU5!g)^0Z3s$B?sg zkAQTI$V`8?Xl_~d*vDomc_$R94qS(`@;OQ$LpREmO}hc_Ngthl)rQ@pS`pTx+UOP) zUaYPMDBrDimA8b0Cm{(yyGB`+cg{OU$=bD0`bg-HE4Ps}#4pv^{{?BMQRltTbClYe zB!_nV2Syu~s~mfLZdYnCg5z0NERRK;*_u9C+@3Y=%)Y7UaAJQ6s!Z#s-?s%NF&dP6xiVCV zTIA@o{8*MxzAU#1dp?5HeXFl1e3mnah+9!4ctH0ctqGJ;ClKG0gH6fxxB|n?1OAl_ z@VYH%$Br_K{f*2#p@o&=YI(a8nEz~ihe&{nU37;Z7Ji1_N3AeW(Gc;jMI&o85$xpr zG4e|qyQ}FQgBBG~>#^q(u@olHF@^No5_{dP1ETfmjJoR_F1B*OTPxzVFs@jDJqJ=Osgy@*$ZE{3>FXZeiDg<*_vg8 zV`T`9vHiew!IqWE1F5@(8rAY#l{ZS(X7^w1M$!#a0*wexn<^Bh;*Abx1>O35^?LOa z&pr0UFfJZ$P*ETYIB4cZHgve>%m{d#zlZygiiHE@IKJrMU5!(jQ7=8TZo4L}`Z)J+ zs9TTeF3a@z0%!BrRE|E!La=&x-GqN_}bRz#t_rxx?aUbZYa zX$_1=${|bLM_juA#B1hj7x1Iav7t&czSr||dxnZeDdnBM+Ph;-gY{$1ut)M&yXtXQ zecsIzb$;~acVSHPNzf?IUkw)^$V<6V+xtV;>r5LHKij-Lg=DQ;ga4$LR?;U%X4ZK8nLEhvBljn6tzwX9;8{RiwOQ5}=9Au=ulD z4;UiF!2{jgG!7DgN2E4?;*peQj1Qxk3|Lg^wyQ0njS0uffPx8|sNGkCv*Zep=$zSh zT?Kx!NK9ZGJd6c5^LqTh{B3%cDVlsY)t~ z4+4~NIOaTIj3a{rYti2IWk^xO@w<4*b|6iBj>ah!_gE9iN>>RCdg`8}?k@|om7U3X z-&&dSC^wa7$T}F@*vv2qZnE8n@iSPEt(Rf4*z`5Kg?MXpg$H~>4DBx+JfBzuNVKNQ z>u~F%wlv3 z>iu^QeTN%|D|Yp6Y7@H1i6-RmVabax_VzS)XNt||qnV2@?)Q5N`6D7`sCLE(YsJ%g zQqT8U%~#ym?bVn%!a3p#w)fu2B=S7y&twFm%#_hzTFT(zTw$k?D*amPMr5{sAmT-y z>>k#%T_x)X$QL?3t_M?!z`5N!JM=D39#0TS<3WhNu>OAM6EcGYMlTP7VoyYnWtP^_ zi$0i_NfDzx(3bvG-V}SAFaha-074O}uL?DQnIoqm2-&(ixHmIhR|+~-)>rsRpVESf zi*m%mTC?y@I~WPcXFM2K1jUx!5%a%jxTXXGWTZ1pOX_y|B$;>_6`?X0X9taQb8q`g zS?vqf#B1cewhrtIoFvyI z4B~N=AGPY7)q}|RY533V6&j9K+&FVcQXTt1W~harAc%Bpjp=$1eqAzb}8H z)=8IE)s#{+h?s+3v55sF)t99RzM=}uS-IZV$ks()y35$@u(YJNwBrzw57EMYLOCWa zR1CxtXY5|P2%RpIT#Z-#kCP2X57L3khGDoc>7v41H6nk6S$w>zNPVMMR@Cbr;$Ub) zdy*Ib`5b$@-d4&svsI^izeU#2M&cdl!*DRn&s&(Ml9s>zi4NRW07b*Z+logbGbCvH z6MEwX0gJmP8sDV!`$RG1F@S2EGN%`y#V z#>wm3gH615i&JnXfv-0?Hb&5dcgM6X5N9@{4abg=$kDCR_(orBdg{4i zf%##fo4NG z_90C`v5@X0I}7{FA6HuwFzG=ZIqtP3Ad|>7>vA5;HV>q8Arl2%e`xNn*p!z(wzx?S zp0&|)V!xNfr_xVPA^r6IosQM(65l~*;k9;1Q-b=(J`Th5>5XjP9qpQm;)*XwVvP1K z5z$bthfb|$kD|VKCHlU8D3IFUU_v-&1FFChqlaf@00blTDm}mTWlGu5=U}dp?q#_N zm|Ag0%D3lMA}wsi-Bj|tRC?LKTmtAEhwWP>`l;p!2NDd+?%=nZS$F`_4vev1X#}jz z6uvRzFP3*2nQCk*$)zxUpGdnZ3qJE{Oi^V{>R$*<6O<<|u7PPYf^K0-#7j&KS)apON!T9B|Xuu%WLXqVODVX|6 z*-&RI><7hH!w=Atl4v<5NwBRc^a75nTBH*#%Ytvm>s22_%kyGBE_PIKx;Bi-2~E=g zLm{N;?d`0J$vln9AuE{JS>^<|xdJ%_GUf;IExykD)NUdF4vi_Xb*c{rJ5-w<3?~^o z(PhXM=`(}gX3H@$`hx}~C1_^t$28FIIsM6d0r5s8co{UOhCe2Ssaj)N8Xm1EzH{ae zs}S%0MqM&(Fb)cJeBW@b?kR}WItje0m$Pu*_|yU+P4CMVJO4(~7Dq;RN}_IN9JJG$ zhAE5odNO+T9-DB5vZXSdxLN7Ed(QAo$-4kA4BLk^XS!`c8bd%x_6 zt9=Sg;btiKi4^XO7b*ViC5mwNih@Sdc3r`Q403~83Avnoq+)q`dy0cCK$CVsqtZUn zetmp0G;3@IAB_Jk@H#nWzjoI@ZFR}A&?M#(ADA{A6bXur-eK#GPsBN!;oFh;S+ikUqCmQX4h{kkVNo%RIGlYx;< zCf&%O^+r5|ilc4?HbGy@6~0%!z0Bd&=1 zv|ysTn0O3$4A*^4&@bc!-Rk+OVDPq)$5{#(E@QCupVH9EocLy(_=T=`=tH~y!7L9h zhijpcbnLFY3n}DH3Z+UP+h)fbJVZOAb4*;I=-^!z;HHrBldNFNk-9FrewBh%$=S>b z9s|Gz%Pg-#Q1V^{Bj^9Y1f3Yjl*F6cfI{W%#Rp36VC0<9+uPLkJe4q#fsZFZxcXW= zyFc8H4&bxwPyR?=fXxW;fq>06S1O))GVf(R*QF}PMA`VTy5EEz+{6F`8K1BK%{Jw? zWB2kB$vO)HR9XjdW_*9yKKTvb2o(k4roC)9Ur85)8-aRZje6-()panll41KrB&wwv zz*&?$*kdO3It`J)7}}MPI*tOfve8lUfl+Yvh!WKQrVsXqqh<ML0NqaS8W z)GbjT*nq?raP~7x#Q;VVDa}U@{AJnesT06)dJmAp)miYnLIh{6CXkI`mK=^u@V@Th zS@ZpU`_<5-qDOLDEM_?*3SOWCY+Z9w*9$VbQFE0#a=KF003Qr$k5*bd0+p&~;RUGn zkgPtkuxKekVE}V&d!Vt;{Ne{??8?lm3Ri#oRk+0YZt`AmH#qc0HV=T<_c!`w-^F@v zW_90Z94R%iMR>?3#<8x@uWVAMMFD<*fdAzy6v+YA**011 zqh&Mw`2-U(vam@cEBYiYvx9Wq%VR{xi?@*V`*~2FLcxc;Z||rVQ+=dsoQMopp_01) zp`?+#)e2br|EshCKM60nk>v1TqWW%>Lx%b;7hfVG6^$+JVH&P%_qCzOgu)m9BK%qiv2Rti4qlt9h?D&9&?h zn6CZej|@$$9Oc^7GzXQuJ|&=&NFSrVr1sXg!Aw5`xUh+p=YEyr8L>EGKfbcft@MAe z_m*K%t!=~b78L`q6=_sV1f)CcAQc596_5_;24|yU5sC_egd*MDp;CgBba!_*^PUR^ z5yrj2`?_tju*awH{62?O~oa66J z?=hKd?RZO@>M<*N?M;wZ;#?0qLvBgu*V9?X5uT8lq1(|QY&T^r8kAxWK@}6mhkj-n zP-y9{jN%aJi}9c4&`#;OAz{Yy(CII0Zjxjkly_WF=9^rrY|uUSg0?%$zYv09VYQmSU%NIA^EmuWXfHU}!pg>ca>H%Icsc|`Qi_(sJ{`H z^kEt@V<$zu9rm4k^$nytlD+Y;{oWZ?imiSd z^N&YcN7zJfOg{CZDW_Cj_m&xt-}!G{wgaIl#8ORJ_Q!Ral1}L~r5uABeqYAkIOfEp zTK5(t^TZw8Iihpi!zpuMf&^~9J!8>GF*)6DMFl1V_xQAw_R;dbam82X65ACro^^U` z+njbwYsO5}OlroGeXRKEer=;5-<$0ljxgCcEyk%Czg zRxMQ&!&!HcZTp3W>(R6QR+q~R=W6PQa_LfYAPs(ahD`sK8E#$4`w}$oC+WHA8nY2P zyQJ|s&W|`8vKK@*Yyg9QcoVKn*_@%M-mQX|?sDxbV9OtMA9E!Wc9nWxE<5_29g0U^ ziQ!dVaXCHs+?lrg!e6Mrc7c=XFP4`_7bA{HJeSn5XtBy?E%wQMs9Zxa(gk4S9mNMp zbCeE-j?s(5%fRqG*RI>F{ixa+ho~4wNo%o}vcCFV>#+Zq;Nm*vU{u84k@NaVy;WfUv-IfiMcK@*Ci%6Kpy~2s`xb$>%-vYP)Wpu1E|YKOiOlv`FGr1s<_fPv#DZkMbFHLsbNZw#i0bXERQy z?F;ujIO1k8^s1aePpRO&-Wc>0tt)SR(?2C)7Cc&0P}M#?cRTeE--F*@rJ%MK?*Ddm zDq6TdVCfl@5?r2LC{TM7Z{gwv2Qi2kNSS(63d*5IlE;$XCUMn%sEnX+I3OGDjU>VUSM1m`!uW}52 z$SVew#8+9tu9I18_fL;@OIz9s## z)qk4-RRy~(X}ia?a&pgi2pB|JOV2GV;}hh~JBa15A=irh7NE;#DLDyH6JiV9P08nJ zy;&xV<>#& zu8Aj_Cl{bh$qI|tE#6M@kG#AL7oNA_Z6g5zI5Fa^TfO1(h|TX(7G1D?^H4ZQW1tRabgWf8s7hLuO<3*|Qw zCzp;1Q##?e&Gv3%$Zib}n}?Rl4R~I#O5z?+95Qz>fc-w-GWh%+Kgfa#Kf`7?4pxl7 z7e7%5R9iKWTlKuFFzn{eITezW6QR>qnN@nShZ$#+VRY~AmhT@x%bc6XdcK?*_2R9AiYz_~y%8uTa89nTHQWP-ccHe!~M1KWAO zV}Xb~pTL)A6$Z>$0`#}QaqtHe2*lHX7)O=hpl8}E;yN=^Gs_)QLMHO%pYMEebPJt} zY5pbBib^MclA`bK+oEjv$WxMCwMh3X)J-X8=qBjDxBo*9NE4Ad3_~Xb>Pf@)M`r>Ez#Cn>fCeDdK^4=*vXq{&}KW zA$gf>U?XiEUZ;M$&G}W#zlNcT>~MITlr^gid7M(($8hUbeLEOluO|4~{39Iafs~c~ zq#PHP+@S&V=2p9*du?DX904r2q-1Odxy5%LFHWGgus5>JQgi=eF2E%2fq`D;`@0)F6Ur7qEXj(uLhfi1+?6T$K4YZwBhk=k2G<)Sx$Ge zF>mAUV5`j3xzX$9gBgVM<C;e|#yzaU{v z$+**$9{N$afV?QM{4~8(|Lx|>ye`~6ZZYbKQ&Cxpdykp#wz3+f7*y*_E#P(CRczQz zte4Mz`80N~Gv;C#?+v%Vvv2@lV=pg@AkFj>7R-x>+l3iWo z_%o2Jx-g`@46sgEM{GBm_RBuF! zUbDOSM7^w3w?^-5x_M7xe?~<(MS5a?3Prv7tbzGZr!q~wfqboc%xwkK=BbPlQQ^{; z)qZAu;R^M1v&ok1bEBVa1{-afKThk{HXY}E7u(uz5L&6^Z&qh2Hxs2eKIUvBm4a?T zzn@`M{qgB7Xx9cQPHXG;)&A@%9$&?+w4~VaF)M8QL>(ncO6x)C6~@ zEYm2*w=`OByvQvSLy0#!zDP4Ci)#%y$JRX!44LwXL)TqydUWH-Sr=tT!SbgDi%1Xlb`CEg%0kC%&!{eM7uvEls5eqt&?|)HM65gAt%LE+BBsp zAX18!yL_06&{sQdF2=Z}@p$t)UpbZdD{f=&l-*P4Rl-r>ivFq8!ASzSt!-oGLq8JL zm@P(%vUIXE$J0m4>xqSV2Bo7LAx*W^D&|~Ja(+PgP)=@)v~1`|OKUZWZbP`Y-h^1! z)GHJuc-Zfq)4!7FVcViR+k14Fnhwp+CBqS0>Yi?tvERw=mY57}nWR~(A)cOUZ=!o_ zeT`1V?&;UHRps7ck6IEF@1(yO%*hSCRbv^^Z%{5nGgfOA>#UR68TjUQd8*Z9Yx=9! zTAhO0oo`Ni*taC|PgB*;zyYMO?dENr4DY7n!v(Hmx8|)A&mABR3_ML9EpWezF?=Pc zKezcGj@=a^!odh0H|ckn-A!58gJV=X$=5UHYOO}ASK0dZ$?&E3(!*xTJ5tXG@kX1g zq@m7_J?V|9Z{pO0ZWHvh2?Jeho#|Cy4#Z4m_|TwmYZC;e4D79vn^Puw`?iRamCJ6l z<7{lGxbMZ>?cN8Mtv&hR>p>A)rz>8oN9CmN_&i%ZDE>yRo`5BN`~X)N`qcjRc*T}N z3G=6q&=93YPj^(P+E`pmWk6e&Mx*tI?s_*o0=;y4>_NMS89ObBiG{S@s33E4c~wK} zTME)Faw8E}tBX9^$$>YAUA0rlj+66pz0&rg5!SsuyVIs`KZ$0NSf%RFP_Jg(+>T(` zgiysZLqm<;Y0o!k9-8V;ysDC}>ieEVT-x${?eJ({Ewy2_!t|?g7tI|^eq%DJ6FJGe z745ln$pjas2 z{hZ}wdD22a#zKJBUDjljJ$UZ0IfITYt*GzGp&aVD<2$CmK2?3}LmWAHOg-!D7Bq{J z^M^UP3!#RMlhtQ&3wVa*HBxKc{pkqNoh|42p%svC0OVn3rhnc-MrhAFCJ-$ry;OD7PBeZxTPKet0BP<*n`88Z(3vO+b> zqPix$*07$|a(Y@WnnM^s7aQ{}6gvIyAksCba{699ebsXJY))W-U8QM(WO+#`Etl{P z24m!4x#TUE651MJ2&N1|j+T?p>%Dhe@$)To6kBf+C#LhpRs+FIQmL}}fkflpz27N2^y94_$bOvoTQZ*Ou#?Gt<^JG|@_+TF&Ux4T>Thm02|MYW2N zWZu2p4UNdszTQmUt`KSkJBmD6os=YLAFbd9MWrc3q*R?N7)> zF_*i{r^rxp?U4=`j&^Ae8GQt0N<(#t-*CS^mfdw;m^W4IRY~(^q8W#- zzQj4PscJJmwXddI#(FA`gv8I)I9rTWs=0iuGMb&?H_AG6-p;<|MQpoXF%4l>(rjCZ zYL3^Ov81%=ATx8aXu%!m0_A670}`qeq}V4t2F&fHDztEVv*8hluLJf?#_3;f|Qc3nvJ-$ z62m5y7WQQFt+(D@9jyaSB&H6HQ!Tw?W6OG*)38Q0&{;i%UEW32XEMJA^2{`JIJ&Y$ zo8hQZF{ouM;NcmqJ0^Uy_sj5xExo&~c&1+=V(nhJ&{T13KWUMI4^dOGFt2@)He6+8 z8n~HA+Om>BC;jg6ThRh#2f2(zsAjLx8Vd7TjCcI-hEllHiKgeyXBu-4PWPD&b_IGh zXAsJsOe~kQ#wY$@v`w0Zu&Z2Jz4gbWM2!B)6!Gs2x!>sp%T*7@8?*I!4Gzu>(`AVY z^T>^9U-AaU&D_ju&eUqA_j6W`yO)$!N@P&=HR)U&s%5Di`GOiW3NDhH;DO0ef8PqxyCnKbnucX{Zn0jH{e zCS6MU7kZV#2hPa_8uYdLwF*_LiJ9q7<)UX&t-jTxT1Zo;y1EB{@LSmf(uS?sHxqr5 zXL$mYWv~qx^m!gXBDUbTv_{O70o*E{wQ=PnA#f#{yzLaX|?8zC+YQAStm>r9$HMNiE z4~`mQ&?#fjD(6zBp~L4?xPVVHE8f{DKGiz()xL)Ht%UB&fMUzh(o}vY_t57G_B>uq z6{czdhK=z*Yn&T-=VkQ$=5{u}5sj42 z{36MU^clR7=e6S%JYq7Mlg_4H{sF{-ZAl z$5F#hJ&)B^t@KDdQ))R+V)_e4q57`4mc!@|Ht!EYYp!#F&9uoH5~pJ( z(n`4f+7rPp5}z@3(vVZeLSArFQ0N%5OCmxqk*qBj}|Cl@%P^$lkx z-}6)337^|PR%g~;5fFW$%KnUHEm3cJ_vuM-=~SvhhAJ_D)f2iRsw25H<@>6jOYZidC(S z68d4&qFam4C_o{TDCDRXa;dX6d7Nus;*2T!8S_!6w1R`C`c$8fM)Q1&H=g*ArSR;e zPf+)4{>)g4jJnwtq9k-(s(i)`;|uBq*Rx1>xoX8|sSUwRd>K!(JctNo@88QXLTo77 zq?VBqy|O8p{-oTP@T`8r7ql`yS_Za?b+%>oJhEoJwh_&*Qg^n$H%$N~fF zBqz@#iC*JH-waZ)o=44FagUjiv-UM39x7&ZvS#rY*<-+OC`3K=tGouPDgxd)YEZWB z{wL}w0gfAyV%X=$>ggYB`enw%ld0d7R6Qz#V~^?;ySfF(FvIA^ao#Z$ZG!$kt z4sYdnLPv>s=ZYonc?(Ke-c70*p5``sR^Kz0TT)!6+c@b|tw}yj7A7UYJ$lo>J(Otx zpkk{Ta|)f?`)%{gbt9Sm+@{|v+6=nhd0saiuddxmJKHp4v7cYy?+axTdfuj6t7e3h zEzRod%mLKz^~#Rw={YLdhf&uXXy@MZb-2eK@`>!oK5kb`= z2fmLvGesMW6q`n*n3X8wy!&}|N!Gv#z9>?}Pt+pr83|Wn@wAMG_tLQj6Df_$*rX%J z<8<92n?9myjl`>YdWLQHy7mgQG3N7*M?{#BpSk}z4s2lgoRhvm@jfk&)I;Ohckpz? zMf8vL^IA#k&Bpt;2OGXK9=dRq?cAPMg|Y>~u{Hb6X6M2pii77O_cy(`dpWlJ26I92 z)?_p7o-N@&w!cYzN;Pq0+h3hQzKp5K+T}Iw(45a|)*vXX=Mv(JAZEM~uUa9SOG-XI3C_i#0ei@{WMyFfsMtgR{v+*pu;Z{IP1Q@(LZ_ z;I1!Rz}56kGt@aL)lbgib_dTsH|~vQ%_$Sjebl16_XP!7^>lPP$GvtT%e%9K$F=!u zt(gejS*whL+1lc)<$+7DaBD}SSnHWija3HDgeL5i)ZlxOWNsXNlB1`dwW8+0!X2E8y-Ng?FF3Zv`FE{OfZ?cz;$7_01j0CNuukAI-+K zG>1kQ5RfRshAByu12J0HB!n&Y42xf+sjL_6paNgPHHDHl;@B?s(PR#PTL| z1U_17uDT`KkjIg|FBzTC!CZY>)mOb-$F?w$*F#VB{fuv9Zke0(jZ}r3lOhg=kJRo( zDB&|0_fyl%5F;QjW#{It2I+E)@tSLQxxg_*k3y?vllwI1XQ0gp^q1F zlZFE58lJ8pXYfDX$ddzwu_%lDpsPlLP(ZvI(MTqVf_$)trp(|Q%h@(NFMG}t2X23| zqA89s(eN7S^E)DJ%TE^{qmhj04i)IM+G>rWx7%Fkvl~K z$2deMnHAf5$=4^_pWqax*{~l-DC+LUR+byRB>wmMTHn@D^32?qt~5;)E~l}ZX`Txo z;|N3)kxC`0z4Mw?7ARUBY*LIEW}8Hqt-h{;XpPi!7+`ai*dHIL=LQJ73(7J+mJ7nd z^(L2iL9(&90CVY0O%5Zl%P!QI7yCu%AsmAboD(n^C}S*Sxq)Z$=!BhdnXE$hL2grl zK+&BC3WT;7Sd9*Ia}l;s(%&)NCCt-<>=&_ug%^ z*TRaTT5~$lxaFm9)r=d}UTNJTW}T7izHi*rUF9^0ZDtzBHGM4RCdK6=ZH)rhgsU7L zsMQ-(ndE4G;SBwW zh2S7XT<*3-#}n5Uc=bdfF@pJU2FeE%(?XN8xS`2omx5x)=yKe{P1-t1VrzIJ^4j}f zJLW&t%TM{#!=>zQVIGu}!{A@$2YTcYYy3;^tuDU5UlVq7S^)QGY9Uxjc!>Meehx2> z0&i~Qc#&^`hJU>h1NulrzEC_ z8rAvaxqFxosp89;yFDBJL_i6yEnhd^noCuT*$tJ-vM*>@s=bfJQhho)N#gMEJ(bnQ zHupqr0d9lpzwfG5J@|~s*Wj@yh?hglo~q`~ zK*L$Y#yFTX;(74QozE;XYFe-Bf|I`Z&>Qwl->bbOZG7!?^7keKDC~NE5s!hbrI1^} zRg+bfQO0cZuBdXZ*6nHql-7!Kpt>IcH)a4!B>{Po%4zBCtOt`yJl}>nw)FpvSi774 zYY|Q)21E%By~!-nh>vDd>Kq&{;|%XDGrO7eS}yRGF3O}gTHKb*D*E2{YVAHrIeWFU zxXi*5&3LM2C~(wm5=0 zBy{{M?q<;_yt~KATIf}~onbfZLYEdMZzqW0UN}xY&x5X~zcujc+E7M0fCfap$Ay<$ zfGtpz)=a*U;L_p0w8J*TNrEl!rh)zBM6)pB%g6*3CDhDLmo6mrGqKJ9g(U^VcFuR1 zfR*Q?X5dL_Jw+O5VNaK$s~zyP8usu!8uk!zDWX2IAb|~${sB`zb`XOi!!|Z?2(dap zS!B#-UHBmZNHP^!OfmqmEPVYME3#oN`T?w41|F~DRJ7W(bst2hkS(;Q!WK^djeo44 zkv+2A&FprK-gx~F4enBBp)`?`ZBhzP+IDR>!%PYVTV`>!a(2P_93V8}tW^CUJ1hMl%?DZS7N4q&&ePxt z>>ux??@zbh$wNL~Hyk_BO*Za*(yNr7+idJfH=5zFX&wuIY5XRln@6uP!0!mR32k&&HUcj@=aL{CHJAC$W4VDt6QzxqN&MgVACa=C6 zDqBj|dwf_dks_|lHhaxnY6*Ub^D4?Ljg;Izc_>O|oEI2cv&z{R}EEDQ+k0ub6oxP3K6R<}&f zvNPIv@R4|Pe7o$keHM=tGi zQ{ABo-<^#l|0WNK@8oa9wX%n}+o`^kZtcNqCwo3sMIxqRE&o|M z^7+F|4p7wFt;&Lt2J|2em@awryjt5nal!vtxDYCKLAbCRymhTJEw3yub9r61e;Qq0 zkMA*rTzx+# zO5ANR7hsm`lx$5MXh8}#WLC1}CMuy$l6VXq+1mZn)Ad@__0iJ$bmNN}Mb|4EjB7Ze znYB{ijSZp+q6N298>+n@*p-UY)F&cn&hkj2DJ4b}CDhi|1JjF2WSD(Ne3!qkTJDWH#3DxZ11;aDS};aXhrwJqAzxl9uojMZ zz~=+vlc6={AV^|0P}O&VD=#!%iKPE#ndTgXhY8S(ACDDBS!Y>{=$wu$nc8oYIxxgd zpRrH$6BN8=-AWvI|B#!Cuz;k|q}^@2iItN=Wbkh*-KUc%o4FrqCvATu%JqgBaZRKt z+*6;Nd`ptqc)73GpQbwqAa*fU+2QlOBcb+3c7iIej-DINVlMZnRvK>EGgl_nCuZor zVI$#-z!3K1^YDpzNYKKZO^KRpdQR8ua40KFkaaHlV{u-r>>gfsqmY|+3+5UJ5K!m) z7f8|;?8${6s6cO2lzEM^SOgy5;VO?f`X+c`q}|#nlZHX@Q)2fDE(~?I+4ETP3$VAo z?zL1pCg`$nqh-Ri43qx&{wn9-@u1!mE$+Qyi32roamCfyZ=n&|3D+kFp0(6_SoVd| z=P?!E{G|4}t~auLx6ZJjS5Dc>O~Ox`}uApuzYp`Yh69 zse5V<>)edLywjPBcX|_iWLsz4IFN8cXF|CtX_clq;{Txi2&%8U@l0ifQeZ7Lu?#o_ ziXcFz$slcJ8>}$WL4U7(qEtvKBW1eZMQsk$WyUQ;RD6m398`Uz23EHNA!AP^D6y`~ zpOj!eUr!(C`Ug7^Cfkk43AWJI<*T*^iycs(jpWLavShqP6iO=?X>K^TX5)0|jX{AP ziG+hmayidGN0SHD_gUVb8MT|vNqIX%Y&;a$U}79V#4PD>Hrn(R-dwVhtM{#`OC2)0 zS2^Q@WI8J?ZD^VvSdVo?9T5xONjBMQk=QYY&j3#M=Mow(nNPXw05wng{-7$tT_vq^ zv0EtY$ztmRn-a4~jYKq(zE%0Rg|yZ8oW)J8oO}@1-k16&dNBYh)T*)zsD0}vB)C|fP^3TQ!~Tc!Y4kei;5zN^x$x_`G`ws=+_O)dEvFz& z=G~$=+27v7BNH3fNJj{vi|MG`g#MIiSt_RqW%u~YrxR=T__qfkme$|+LhPOI+1h*f zCCAuQ!Z(E1&m~6BXiIrOd}1$ey}8qT%*Xc{?dWl*=|FA}w=}G1L9W>my#2XXySRK#3Ivg;)^iYJ zo=BcHy3w?)lTeB_Hg=5a1I`xGFf$E_siUJIGQR%b;-f#8S|)Sf9{=RH)BcV4ZJ$17 zIjdeGkDaDYAm&9wCv9Zc=T=@euzruAA;tecq?)0RVRg&At^ob`x^j}mL&|Uxu(b)wWW;&xlVM6fUSpw?hU^uSQ0hlq`0N7} zYAxOmUfolumebfX{D!u5ysx%9wfVT9OUa%v-PZk9PrE}Cqr14&-_nkGm`=UCm1SYZ zS7(jim)!oLqP2WlJm};$Qp5uwaR+5dW64;+C92=equJTdH|{L|?1^xuRn^d}6(o4k z`|QKjnKg(_hk%H`ntloWme=RF%Yr%b|3akCiYkjdBwv$#%5VGHB$F4*AjB z!Rl*3+ou7K9!Raa+i%FeH_Pq*{Qx;hkEDu58~1%ka#2^bBVH07O%&gEreb`0i%uLg z;@_Cb@`#eI5S%lc9c7hFj;hCpME`KLgKSp2bIdZPTDiv{ zM?r)x{(|LKIoc;wR3G0S?@xA>&V4c*`ed&ii5R~sv#loVH9|z$!t7fW9DWYpIe~I3 z%!}oa_?G{-h_cVDb-Fqu-K<8zq1zZv9AVL)pbxL=$}QLE+&qt8@PBwFyu{?M@(qJ7 zuae>(fJB{F-w^6OV#eM+uYov(>Op@WsBLzbIX9_o#LEUI)@K$sM~L9R%E+`wGZ{{_ zx(|MV{8iOnCOX!04xc-H-3gKWIYD+!a>TBf7@o9xHaFWIsvg2M-dDYu3@ksL%Ixm$ zfbc4QO#+6F@7keWf8+0ov`U&&>ItirMI2hCTh-^rsmz;480QYcSr^x4B2R+BhqkIXo^n#JJ6-knbgSfstm%3mPayr|b8 zz;2u)!qh1-y#c)XsQJpTQGg-YL|ld$?uY=R0L1cgZF4*(_zXOlRIi?ojPi_bBBD}1 z>SQI%+ndCOuF36^;V3ne(u%%IYM9RBpLxtWK*l%)lj0{@;G}d%cf*Y5M!ToJ9+rpl z1`@KUQWdT8iNSAIGmT^+Lqw4PhBj=r05CT&LSywVT`%(Pev1 z54P+r@UGK#K|RgjnV$6-!Rt{kQ@pO(moyquV~Kb)*jiikBsHp=Z);6{*2xU>nh!-Q zBxFxjcXv=)Z#ue7^~yP_R}Wr;pQrqo?|hn@=#*We{<{Rh;hWPToSfNrbalR&aO+Jx z(y0zMiuJG4r91vMwZ`(fv#JkKm4((`By5>xgm{A%dFOxP4NBr}bE~*B+k0fPwY#4; zmp1mod)B5Fmo|P}IfGVPosL7TR)ZE5@3PVZ0%_!i-#f}JW=OrYKsz_@cm_E;iGA_Z z$I`oms#2L5LrV(H)V~?<5LudG$QXgbv9cjZ0`@S1YlgZwof+ za-o}y9^5Z3%^`-aeCCZ7dxGdQChk-scP8(#1W63vDu2IsK4T~;I%%M;VrNs|kBsS- zp;^ee5ih?tP?v1>Ccj?STTWK)u$Z)JXTs?pee86}>YAz0q1Zldq)ENmuDahpSI_&6 z)6?MC%D9Y(Bkn;d$<6j;#Dp*6A~d!gp`#$TK0s2a)oKChy>X2RQc^fK+-YaIuR?Nf zd7D%ag?e!EweM`rBdT)h2GZ*F2C0^MS+=p#(&HRg?|)UJ*50j`rj(?jH0+maF#z8><-O z7u2`SZ%n058+GCsy#AZ;m7Ii!NgFx6LZ{VU`}p=w61{@jSa)xT;U5|4%VVv#^Yt+0 zsWWfxebqWKVO(<@w3w_x$lbmWt0lw#VW*6jc&K}kQ9ipoQeJ@CXhrh^z3iCdP9*CK&-g?!bKfO(T&ix7vxizK*b<}Mhsd7kS!U+U6o_i6`I!?mT1{xL2O3u3FU;le5*Gf# zlV*)3w+`aKjvYURRo??1JzUJ*|8tMtvc*!0!`Y!*y2BL{reHu8zB}sPvWNcBQE&om zIP0b{+18clhm$rRqpSSq;kM<nQ8qxna=&>xofRaYkuUniNj~C|3Mk-=26~0|#RcIXS>shtg8%(f!39@je zZN%*TKR?r!h64;cPy?Rg)ok)GU?V~nzO{;B*+c&b*?maFS;s6?cO|cYU9XHGng86b zUruwn;Hab&?+wGSI^_{qIMG=t41||~eU`(wG({*9`=hgP>!gLt~{$JKiBjwI;E#?BOYpLs6>bjN+eue+Ijma{xvTI#S zUDs0AwbXSjm2chT|4({Ctqap-5cq#tOI_DY*EQ4s{hBFC@^AbDQ=Kz9BjH>25%OaN zCQ!%rBDs}F=Y{6cBJCK-O8sI3d%XhglT)MJ)k>(7KF)`gobNuqGFQGBtXa{$Y^4u* zrSp0FQ3sZ6%Cqlc)XO`#%|g#jo_M>`-&^<{2MR?DlBV;g=?4QtC22&VGpYwp^n6w> zstLUCCu9q5tua?S69=x&Q%qvc#pLw<;=FIU03LcF;=3f6ut6dc_$R#NxHe}rpJxPk z@_nsWuAa}+1)@G`=jIk#-|bSN0{@Y135^-15POx-k>??ZZZRoVYq+c&_?KRWh}6~( zgK2i)vT!dG;s3n$rTECN1DAq7{^s7Hg`R^C_>KT@RX%A|Qm<`L0;DhMp=zb#U!Xd_ zf?ta#;1AF=6~d@z!aA`W_bXpqnD>{c(=XuiL)yH!I9Orge#A(}+#?3LvTGYugH>%#Q z5gu1=+{trcZj?h$^`FtMi$33t9Yl0OtA6rx=(fo5G zm=F3w4fW_b8uQUoH2%FlgG0Ey=$T=WKHY5?YV_QJqOhDe^xd61F{`(3UmcS5T4Pq*}aOps5`h8UfzWi5Q`O>tc=F}$_&4(vgC9aZFWNz zg;h{|fbQa!M+qh1rm_m1EHZvNXUH#rTub|Fslyuo@?xP zvgsJ`(w$d#cowM}$uyYQ&a?;`0U-9Q16tDa>n}V96VXUNLvrmGH~()R&OnS6HI7Mg z{RC7)8ExC?w6OInNRC1mNy$QD;1#6b!4xOc&prJEd@%EpK^jV7_#={qu@oU(Olf_T zcs@e~8U!OD=^NcYPR|1*8!0Y+tIoV{5nBH~GCSleW}74`Ei}M3fe>Z3UZ@X-Hmi_a zh2+Gdg%anEX8`FCjjH#*;O}4HGGA=(dW(3WtF1oL(^pwcQ)GcKJdXksNk(kdoF4$S z16I*7Fl37r8vQM_`CQ=TA2qHa^Ad^A2@!fG(@GeOF6V_b2|!`p#?mwNL+v%oM+mL=l4SA?ayy8 z4ahU$U>G>DMsjm-285&^@R3=7>94}e59uYE*N}q|5Y2G>81Gvf-gaFCAd1)_8S4_s@^_T5T_@I&|`RSZ7>_y`tZqy}kKB8+hu0g%Q9&>~-B z%Yl_B1Mp#TQ=pC#sLGE>ntcI0ciscs?J=4DiyK;80T#rc0wS(x+^xcB697I;*27;Y z7ofKi{1DOw@SG6>xL?Nb{67x2DB98i5mYf}dNF-X{>D#Qq)fg%0HzwQIHtAx!Q%jT zuT_`1FfN}wyt_xr*${I?1H~_Ly{8fYli8a3@&duV00M8gzS=S|Yx@6;Y||1bt>r8y zkA{atV>nI!_MO(8H+K_zW2leLi~JTx;a^2QUwm37i8g83X5xv(R{cy!w)r*#=C!FM zl)Fxb8TM9XlaMZ^GnE`4s5Pp8L=#&R5!LX5i1CZKoW-pvx1B#pA!qZ$gRe;@F%;tm zcs^?oqlKl`tOiUJdTS6KgENb!q<;qN8=530jBrw5zZE3~6C{p%L1U($OIXtfDoCEE zoZL^mC{li&RA){C?j4(k=oe{hktnd9{P_yzg8Eg9&!#_75 z35)a`rT#&=axHiKfOa3}bTa(uws%cH-}jB$SPWf=REX48#j386Fn;b`1ZnJB^=&^^ zuL>rp^YOfHnenFsI;6sYGe#QcR&MRj4yB(k+{X^>Bbp1@MLH%76k_*ie?0{IVPq zI3KgsJ$$gz317nxC-x3;{_^bFwtoR$eA1-nypqBk;M}%u5%anGr=<7^$<_)|T}V3XL7pl>E~bmLT;thPs=v&|(XExXNoeoj)D01vv`PWUd62 zvey@L0g!(6%P?>T_y#rpQ|ztz!y8zX-|KR0XI2?tPNnu56V&FenCjohMkOIxiqXQw zOAyA8at{3PdfOz%wX-^X{}hoQ;l&Gs>{w2#E6C}sOI?g5mR4Kx4@5wgrRZbyl%8sVF(6vK-&pkSvm7TFbC7j{s0>bL!z$1LT=`CV`b>_bpy7dw2l%lx+s^o2~sTWjtWjz%J?^`SYl~4jH?1u zTv3-xz;Z{X0~FY2||`2KeFLIm<=kV9jeqoq!jwoA1C<$zCC@gqj>CEK#%y z|Dd9PDLzHh)naKA^1w#v+c~gw@>K@hfU^-^G^WJbvKCNiM_Gy>mS|gLKvWfsS0WTb zxe~gb*8vu`L)3rDeW)22uq9PtzHII%_K^>n2+5PL6}vy>l_zqo)0?3LEDA0}I&<6#4-yE=}(L z(-rc~!GJ^c;oGpbtbmaG&Xpv;l3;%l%;EI+E!r}PeT|l+L0PdBT+%RB6`g{`_mOtTET#m z{S^ z-KDdH#U*xH6k03(vhLDZI)>I=I!mxvm4wz^I!luM|9>tWETw7Pjk796FP-k|Zk#1S zuVRVZiO zjkDwnL9M%Se&M23gwMJgXUUWDzc4dL_Ae>l#aw`&>h5}$&Jt6sXX&i)ApYAyv!121 zbRz#xvvk&7I>3bMnK^6czV*zUC8@o2Ju~O$X};=*^~{_lslDlcab^zhrnY=Hk~+BW zDCeSBs4N+D8h-PGL)2G@U<>JezD}dB6Aft_cjDs_(voK0>cb|RiRTc16~;=bUrj=h z!Oh`Cm(Pcm;{}QZcfC#vN$exObm`KUx#|9T|9Aqd1S3BrDMIE)*J@6*l{Sp$Bb@g4 zdO~r{cASzGw+(1yjA{)UfAG@On*L#y8zXDj)E-PjvP7CIMHk$>hnMfYd@Qid`{!7zevEv760q5I^xoD-cX-Ut=}ok zGpSg%XC8pPG1U?7MfX>ZgFFxMv4*l4R&RD};F(HjY0Vh+l$ju&p zJn;o!C?mKb7CYl(2FiER6tGEfmA{~_qwwgG&eWI>=iOEda#ioEiNBq%gt=5`3DA7i zNNTC(ktwWX?NxxrcOHjYENE-8EM3xICJBLoh+w6H9s99;7k9HjvAo*$xHrGza2^f~ z!axCB$mP?kjJ@K`iSrHloc;L99u|fyhov;aGgO{@F1k$NmM4IVwdyFO#Gsn>6YrnS zQgR|ptu&ypfBfqad#)P_rCrx#?tk9g=;Nvt@H?j2^hX7VOJo8tDBvEiQE~nZcM!gd z`pz@mv-jD@t%?09W<}@lV)eRHJj5tve_( zfVu&@S2ijYNjts!XGj6^OJhUX^Gux>F-;!Gp$?_;*ZZ>VI6}%$fc9Py?Shq;_X)Yj zq_wy6kF(YHZ?7?`w`hzi777eI$1JWLT`J~v2-k+f(wKR3&9x2h>h@opT@rj-|I8`P0etr5ZkOp&%t-lt?x;pgt5+Z#gZp?;_hogSAwphYyxW zkwLP(y)|92#nA78^%IY~ap1BLQ;8Uj+vx5P(;a$a89EQMa*{jv7XAiii%V{VPAIyckyF-rZ0&>R0!nvc67Dn39hpE zWwQW%phkB|BpK_(^+e>BH7hb-_7Qlu2gJ>B4|Cn$vyLi|wc|0pKb&R*PVN2)xYr6f zJqviIHK=z9agUbV?@u0&`A8^;Em)A-2shIGd3n~cqXQKR_O_3SW=4vI9XVKg?2SN& zL+EV>*Ff4`xn3SDszPmr9ql%@!#-HCm-XvkJOgps-OaS(X2+^Y$gGM!Uc6hEWMVt! ziCran~`!0nq<#EK@0Dt!78B z3EFXV`GI6Z3ZcCXq_HxrDR&{2Hu(jrSfq}<{^fs}uulU+V1GVGcTmo0mTHa2qFvSs z_S`WM#I#sv^{#_4aWLu{O#yfgQY?r3*2l9h;1yn56q z@io?1caZB79(Q+Qt_ofoR*-e*i#1HPdr%NC!ofrLSS_qv*6b0e9`0s+>?LM0nBEh= zAVI_ywxcFpi>)pE`zeYN+Agh=vHvazfb(t^oj<%AYxD}py4+|NtLvBM_)iPp`Pw(} z%uO^SddE;}t_{O9^m8EuA?>P_&?(ZVx7ciE2{wGA0JH#Bu|JldZhH2ZfL~ZXf{)(S= z+jBxXyM(WIu?QA51)5EXcF5tiQPz?;j36|gY<0T)6`yCa#c|ZdAa!;O4+KE1VYOy* zJ|}j0Wg$`;+tzano6P@-iWlbME5iX70KT}4L8)n;@p!F~4P!o=LUKOGZ>B&}xs_&b zVI{UN5y)@n;)}uYu$nXJ7@ux@L@4WA@f!?xKL|MM|Di+&cca)w9dp?(9WyD&-Z;5yb7-|RN;2!m_-cGU{VO`nTSAejYjeIaIO@0v_ zX<@Jve5n$wo0V3b@QhG{t9A+z!Aaw`cgk~O?XN|J0RIly@+BL&Bny|H31`(Ie_0o@ zy&JoXX9lx?TP)!}-sr?)Ax_)J2fw>8Q$L~~!73G@6gdnIhrL*qH5N=4=>!8TRMjT1 z(v!mUJAd$&N`c`KHI*7`L0}SD3j7AX!o$PbmlPV0(ZlEcD);_G9K6i z?S+P7XEsoItOgydnbPiW-oeq~S%l|AC&yFsycYY&DvSe(k}2+q_3A1lyH#KKPR6tS zUgyEZ)K^PVm%ehhFrZR;GAB!JA!^u$T*Q^W#3-@JkmJNPPdc495#Nb zXS3Oco2Mxc9KI-`Al^evJr=V2NcgeLx{UtsZAU20s@}WF7#jA+(}r|U*Nj`Vzngx? z-rizA&bksCziw3$LHU8YJ5HD`M85&iZx4~*Q-llB;Y?JGlknFm*2V$Yv#2zJLLg~u zE%RT&jmkA(O+o)&>3@U9T9@ki2<#P=Mgl{V|H^15fuNbZWAxTaH@^q|!s1Z}kj@p4 zSSwopE2H^<`B(V5D*w-ojNd@!|1Pmf`ll7}qDkwm(C4X>O`TRcHf|mt(1V*QUz8Fs zKU)N_=WPVfWxdz2kKe^dmP;tf$7!tf<|MJThT6Gt2gO(R9%FjOR~@6N;3!yT8>8u~ z{d$zqw`!x7Sr2^(FUS`cY>)EVT4eKsx! z)Z$8l5s49~k@$RtqU;ajemcguXmAv2AoEn0op|wkxGxU(b9FT5VcgsfufP>@#g+!v z7yc-Cu~c6LDLWTb?iKj?=D&YXd4mY0d(|>b%SGH37?+ay-8RhIC?%vnV`a>xyZ=7i z&(*0AA>&@6kXfN*t7yRbY-uzsFq#WrG1Ae6LtS}|`YT@`!oa7h`&JMKpBjwo|4m?V z0ZdZxJuilNJGK_M_{g%OfiD;7YsxUyacVi}`4kY2(YV{aSoiCKRM{5a=G?m+UcVg_ z!L6h>UlpY_k&^R=TO9E!%k{NF-OZME6jn3-O|9D){H`c2(gGzb08h90)T1@J+$cS8 zRR6|T(kiEAsnd5em-P!+B;Q5!eZ=9N8BnOvskRvGwdZ}ke~)4V?jppaNC8wdzD^-n z#jq>1;6=#f-SC7hu{`Q(_t18ao33lj8{*ivQlOR`8^|D(%be=gqVTYsyI2YIUecz% zsN;CDgF9BmPUiZW!RUaT>m>qCD|%_E0op`1x}03x=zBm{w#mjfi~R79cv;vCstq|^ z;*GAXusS@E8%dc$LQ59`nTOnys@L<(Wf2Ig@Im3*VuYE9lx5;ZGfl;6-PbiX9?;6~s%h?d;!T6?FjaZS>sCT8I*P_5rP+7<4#5=w_-*$t>Imo8=5k*TviU!;r;IC)5SX}zw;lB+Cv zQLq={01ZT?`6T=w_TD?H$+UYHe#e3paYR5mDn+Rx(wkU7rK$81kRlyI?`0Gf1u23Q z=@xo3^bkT+nn71KjyD-To9i;_rCYO_O-9Q zH}4-GDdrl@{NLCvowRB;<6a!8(uVoZy>%X`Y`5l&`2FpDpp7;fZ#(|S-~HRKbMh7- zC3p@dy#1qHWga}L%MRx8T9H8o|Lhy^Jodf(Hg6s#Fz3$2?tPDKa0grf147VJh10( zrfHE(iS*&lKYTOOwAp(uCONKu{P~y{;38?95!v$xKlUc6!~XaJ|K?c_pZp36D4{zW z8jXMac^-9ORz?oS5kGu!3 zRs7gOEZX=_J$wlG{Z+IC(;u(hBVk~o)_L|KKi!TeI)W4c{>i%gWQ7O3NFtCn!T9I! zYNbdyTQ;XvhR5rho#1)IEV7J^R&KNiOEuhN1NCe6Fs^Z-nKYjzX6MPN!zYuZ_En8v zmRhP=+btC!)by0XJffYmH6L}{$$Sn(_f>lp&CCs2=`u*s=T8*!UpV1Cp4^T$D_ry2 zqBW>qSU$=KCSBy$N;TBZ)J&PPe8!p${iqS0wi%t1;a|5PC%;hrFx9okf?g@{;NdH_ zj|eELQjMn>%JKy+J>;5G&5%D+GwW3z?R~dnnmd)z)Z*J;*;VNZl*6S=IdCy}{xnW7t)= zW+V%}jHJ|{YdhVXE~E8F$_bOE7XrsF+np?LX*Z)4M?5;@&q|G$#;BA*bN3Z6`{L4$ zz*gwwnK&^XRf|)zR>Ts2k^StnU6&TYHrnjqwe&WP8SPQ#y`YBvxxCNEi~rs?g8iUs7OKben4M zwcUB*yV7WYC4^Ab0!bO2Q)`{5mrxW%6ztn2Z7m@PR+U3GMPy>i7u5C)+1Ycc*3dIK zBz?wDCI8%2o&&7aM-E@1iLSHVyc1?Hq%^nQv(2SEb0?{wsYtoz1iNs+u4^iYLuOHZiN|S{W$kF_+<~)SGaIW04<^v0e5^KYvm;m} zQK?X%ziv#U+X}tZUFkfcii`#oRl$-*_FtF0em34)BGL5{P{CKQGZ!L%yz{>`!yn&C z1Q;`Tl&Qf0uBc$!_2?snx(p)~u+i9dp|W`sT-GA?pfY`%nLS*>7x|;L@Q&pe79Z+p20!V?Hmx3bmXQjbyi89uMGVRtj5s z@j_Ws*pFMZYUe)868+G4ENK35N(uP(Gb8Nrd)gm1TF3kAFRnKmW}~b{QDREe%Vxpb8~NyJ%Vk;E@I0h|3(E7; zz9H~nUk7>}8iB!7OB^nzEfb9k5Cbdmlnxcw{yN@%kl9yF6x z4c3>62k$(I#UBMK7Z%t@V|AxFLwoiO3K7#RDCGPz&8xLAioqJrfgS1O=5R>jZ9UUcKd-Pw z|K

T4T?2o>1LXI>z6mvmcm+X(#Ng^5cX9KxiS#x_sibbntV(1 zTnug7N81GvU9ipe(Maf3Ja}i9;6xy*B6v)EbEE|TMB1Al|J7S5DU-9P9?k(aK^layoB4k3V-|*D9OV2HPc3p@yL}L@C>Q~-j5&CaL-SV z27t)qfji+KYxy|tQ#|_Dm16P|dtuv;CM!U9g+UWuViTvicLIvMP!Nwbm zzhqF}l2M|puicU&dM*qqWdj(OiJ`ctyTp+B zd5tK5-_F{kI1eOwbPQP)!*S1P5x?z9@5_q@E<2OlL0cuhyW0jwD?&~IN$1L96^6;w zHrj9Ijl5jDvNnVw^4+dTg$^t-)l(oYsIOSOMYkv>a~u;{M{Hrgph^&8ak#vT(X|Tb zisWh8ue5fENNJ3({P=|(GN}M+ne8pnw6oU9-YPsIYm>TSP!W4&sP+Y;Koc$_=x6G7 zr>$2;BlsdlW7IT-{VhT1ruD*QZ5+phFPV>_fM=I9a<7+7t;$z9=ZX?Mgj^vW+)MdB@^WQqU&Gx^leS%+8pOmA4b> zj-ld|Gn#U!+XPC+4wW$^`HXXj9ba9&s#1p%c8%d!BX}(cqoAoEl76S%;kZ7;%}yqirBJDA#M{!!C=t zujF_T5m|#dL2GfG^eEFAv+W{KFNN&P8?;m9-wrrtB&-2zQV+uI-C>PCBhkOR%|9%> z%i-5cU65$*{l2FCO=Hv{E;dNjWbIkC>yM8Elw_x{Ioo?v8xu6r{(dBZJzI1UJU?d` zxBvZaKj)+DgPU{x=k+1ZPy6uv>>G5O-1j}ra=v7vdpl(0Hj?A`dD(qk*gR}OyWI7a zEh}ukv29U>!3&WZ=aY^lWe%RRU3K}g^qj8`Sia=gM*D7k7MS{e?YW9%v(%V$WV@8P za!ql$Q`@EMQYp=GoiW!>$erEQ8Jv~dSPA=Lv%#n(S7>KXj0&pmsxJ^6NFQAKh}DOY z*dP)GaJGV`GjVz`pS{qdC#%Ngr1W02JnO#BfM;qILFwlEwMQsW-v*$a#v&A zZiZ1o4z|)(&7v;aUxB~epFR_U^`3(}>#4{q?{4WVz(>yBL_jHF1xWWxRzNXI9dbF)F`Myc94$c`>j2v7 zXe+UZo!)1Z?mIQ4+scR2mePUNw#a$aamst&l0@}QxCdPz!cz~>je26!-1=jFULiR` z;|uxb0AML%3F98hIoZ}F9+#YB%6lZ(cL9o>+9h*Ef+KwA!suqoe)tey%?3%v5Y5Cytsgw zH;GeloS7hNpWZj`S2tP0^$Z|NQiMtiVfgep$qE_2U8?L`->ZgMIPpbWi`5Z()PC<0 z1KU+r*CpA+?BbA!FJ6S|Uj00rUh;BJL`h?kxKBe;cUAljhC`e)u9E%TG5$u~8$00(gh@n$xLEA175E`)iv% z0E-^VO1OYL;yF*28_M(^&SSZG$~tD|mK2)4cKziRWKy%kPqFmqWtjrZr(05}Y{l5f z&=%yIO#pd6#j=;HMb;@KEY!}5C1{MN2AWy)5@ye_pJ`1af6$3~?p!sZFkEgQSJ@DY zU0XHHK~88N{d~5dXjEjeJh@rm?1laV4Z0+SYVW~c41=F$Q4N|?pi$9CZ{@=L$a!3< z&$YA9A0qwHAHOpr630Bv=ih}vLfnKArnqE{*vQ31h8ocgoMBenBC@li+mSP&XN{6AeS1jd&FLwj9L-M@HN|cI2d^omso>qO)G?j9i@!vlF(M#cpjTFqFz+C&5yXTipaefHC@$vK6=cQpi5+We1WtOpfP_cmZwB0 zEH%;JEboZV*!ETMd*7bM=*k(L@~(iMz53qJP9qDhLsdL-3o-jxC_+n~G)Q@ma~Yvb zK|xnTkg1}lZfbyc&E4l|K67R)c3s6|8usc}>i$Pq7>Lx@iAmJh>9Wq+y%U{ddx-EpAmg!6xf3nlsqzOHg?WlE~%Npgd^`p%VX@=7__KQ)-Q5hmw+JZjEz< z%zhTIsk~USc0Z!g$d;%{;s1U|GWyIeT4u7-)__fa15-6_6DKoMz29=?jbq4r?_~P2 z7MphKUYjDdRp#ZN_G?G$9fi7fV7uACYNUYmw&4Bw{>MCFT>Ql8IZ6-out=r8SvuZ$ z>3af5oW87;G`J`-6qC$kakbcEDs*@>)?pqj63g(bSoioQdrWljq9~iMv2g7&!O<-L zexwc^E0|wY^|Zaoph54tYF}U-@ASDNh}?}^4!5p7iLLr5y>a#{PukY^M2G>4RJWlT zK}iw&OXy~$fB^!T{-#MW5W9;cK@5T%ulyw0nby zTOg(^pDV-W!D{x{bR>da5fE-?f}#~AnqJl+->UbgWYpdZXvkF&M~`~+m3wCeYYbmX zskI=-ggS&cZoF=UD6jVPL7j`|rY@)V^@JY(1~F&*CY+w4pn$g5$mU8R@`QpU&Bv*t zap{$*T7{a&k;}Kn*~YUxC|934l)O)NYe~U0k6x+nR!)p_oGT;1R=(D2>+0yYh_}p4 zBAQP`e^@G4D?NhnDS5B{j4=x$w&<%uH`h=~N)_`N*v~L75qmY%A!>ljdKpXvYJNoK zH1PP(Rava2w27FOA|=-j?ULC=ljiasO7_Q#Uvo%XnjZnhJOwFV2o zBk7@ufZ1w%hF`qvw)3;vW|ZRQFl?&&_I|UF#iCo|pCI$qD>G+dvzEv7D#j^9MdPYR zrLZV#51gj7IaAt9Mvh9341l=U@YXO%yGZvqgs0KD;<}}GTm2=$@g$D^1FW^1^CmF8 zsvbr4fS&2d@9&SL1UinHCT<2AMM7It=&qNr-Sa)a{)!Q@z6;odl94E~K~ zZl-+}M^QyR2fpYYNOSnqlv2n@<8C!Gu7fY}GJy1S(65=&lc49mGe}l#s9mE-m2DVf zuYnBD3Jv+uX5B?2Cd)VFKW+R``1`l1aONxU3s){L>$YYDPWi1QT1Yc1+Ly`(Xjm}r zYDlyXmfzHLt8{1Y8!)r&ueQF6%6DX!AZ^NQ&PoVInbR;^-1HPZq27l z&L279JC!$LNtzRa{!)DU`6VxvmXvH3lbvX<6bgpYtc(RCSn~2`ZZbnI6mz@XZckY% z@JiLyIF)NrVh8K+34fHM-ckq^*o|g-%KEZ9OB}`A!`vYu^s0zGMsXt0m2+ zbQ1?9bV^KIzS!GxaE^Flu52Xx`4#J!59%_ma#$~Sh6JBf<8*Uycs#&t9rGVZ;2bNg zqoyFMGJhSu(^Ei1E0(no)f1YFs>~TfE*yBJ8^Aj$aQpC`VXGxL?qww^c`~GzmJYV? zeLHxh-Ed0@<@zb_DWPpuQb6U{uc6a}7h0q(<&XA%O@{b(_z5%smMhU=PJk)*?mh`xS3_u4umE$uYhj;Yt$S){5X>dZeBs&<;dkkJd z!8W52lI_|Od7Z((x?&B9EElINo=_%)C?jGa@M<8XUpfyhD)|uA zx!_&+IFkZ#v~^|bSP3(-v>1K#5PI{wIkPrT3ezjQSTgNeTl?PZjHRxW)fN499a_a zE4DzJbF_-0;XQo)`YfAPBZ#WCX3KFjes7 z*%-q(^-_AsZu~7N<;0O+GE#Zw`oFS^sza=@lxVbuTjv-96GVFMGqZ`)nUEdq<8FYc z@lCZlv-KNKPiEiG_#VeB_r3f)R(r(7Ob^-r%#AlgJYWHSUAXou0b7Mi6AE5SF=wH0 z#_ovT3g*@b;y@EK2ZNhM-aC)9d_JVdB-6+PSV!?YLD77VepVNS+X>eUURxn!#7>sA zUH0H5-VfVceAo5y3zF&;xU!wNLc)iXkTvhm`RKSe@lFdKK?wSoD!AH>`Vh|F40}xy zO}!$sXgdkgd;Ke2__Z%y5brrj8cWh&fTa+X1^tTXk6f17czq08Dm5d|5*L|+CYE(0y zFVwIPg+Kj*jN09}Jr<-hPo(lbw{FkLfS0|C_$dpx*J}Aa3abc=EK1!r$<1 zd+z#b9Ifthf64dlM?W`&@`hkQk2T};z2*fLh=FmXeS}b|$k5&Lol^FA1;U~ay^zzb zC0$tYbe(ZfyokCBPn!QD$1wWm-wh0FrfOP#aff0Qe;{T((;U+W*DuQs9rjvqJEVH* zL5uKyci0LsOOaa*?ImcCuQghNZW`>rafzesE5n3(h07_LFweH=pY_Bkg z$~yXXKkz$2{oncYtyD2w%|yk5h15gbtc)HVvH|^g{{4<~*H2w2^C?NQDkzc`Wjh&n zK*rQ{{QIi|m*eGPmAL%YgZ282m&yc%ffaJLv=FM;Qt z6cty~tI$-u74zBp6&Ot_HSD{1Yu^Wb^Y@NzQX_?VPH}f%>S)P{aRq(wJ$$=#umj;4 zT^FKsp}$7w#JDp$6uZ*g#FVBCcwxhu)+xyn$YO)Qu?%GdD1L-}@Jip??&-{4cy+MIf1Ky06Yc&^*;s<}=Bv z{rK)3&X9nqgjkeV!J>&Hm%!IdNgqtb4{%YW2h7=Vu@?VN&6$x_0Y5i;Q7g`ATvKXA zUoN)ll?!5w*(;@?$7Q^*+#8M}lwZ&A1rhCL7%%je_V{bFxm)AwHFHghg7jnzhC#u% zb9O9eb)*ipvsz&22G_h(EDvf}u_+nZspYt(u!J!MgI2n#>Bvt(n~K@i&i2w{At0ZD znI`rOwD4ER6Sma>4g1ysXFXv=p-UKh?oZhN-ZI^9Cf~pP3cF2QvY1${h3pZ0?u^V* zQm{Db*~py}n(2{`5>w6E@3&iOI0A?N<&qY`M?){gm=;*7mxjCf0@kL4h*`sD(!+2y z7hM_@4zd=)X70G{90^lhl_ECDu$>2{HMYK@Mva=YO;WPSph(k;lC#+fFW*Ni6iv&u z*qW{yCC=PhgQpfEv`e^P)JFj~Mk*y6@#ACIwFsxbc)SIzh(|&BIs*AeVGO~aMp+POU?45`)Y}z>Nlv5avD=T^tgYC zJ)rK1@$ak|Pmn9FD-J0%yy-gdVHYXO z;G}cg+lBYaAL+mkPQwEn{?s`3cW~qC2^v!x6c<~i4y_(Pk*AgFbi&MMtlzSt-{9r8 zoMgwd&f5neo}c4iIVlNxFN|8H)JXFh$f-uw^6dtiQmQndRTO5oRuN*~$ORf-D84=% zAt=HQ<_w!I)U5r)*Q`kGK{82O>L0y6=%1oFFJ*~#=Y>Aj8b1tKxHTRg(BIFZi*(A9 zR@XM3cqtKG6yV`KjHQ+1y$0sZ+{=bl4iT8hn-{6sn2Vi8i_eCv8Rvlid*fg=hN4n3 z23;wf-&_hE+p1b~DvGYuWgTMW@YBthg_FI-X@2%yE}49YJMc8Va62c~iU9ZV?a%N5 zNVMRw{X}N%0oH|Kj}e)7uAOan4fDchz7_oledJD2)yv3w2F1MDEjTV+VkuFo(Gk`VQjrrWlo9SUzRHf#G)a7*vA655^0r&C-o={%9 z2a)|%g4>7-u$r|cR0D{s3CY4o{&V~B)jOQ>gdRoG?sjHAx=8A4CJke*2yn4+%9WS+ zFaBO2S+PwYla7_-{GTujjTC+ei1q8J)+o?Dvb{@vXHd6<#Kb%#7GOaK~b&N6Ok+U~Y#l-MvKw0qyv z4wuCoG5J)wLmy!gIDbtEUNi!;GlSME zk++}th;M4RD3F%%!hSx^R^ct*AyDnuEN%7D;!6mm3d3fN`Ea~YYjdX+W&H{p!06M85HOVTPtWoPD`^kCim))J6|Zi|R-<*(_4V30ej`0k*Bp3g`7 zpS1qSf5#%sdY#JJ*`gJ^J@WBs{>vvume|2$WOt+_v*|~jQE!}AceZAVF8gey%BJhqltV?th zr~GThP6r{M2;c+C$CIp=;-9u}Cz=I%AyM?dkw&Wz(TdZVj8lOA6_T5Yso#7N{3=$VqPw-t zEsF8AKf#CJ_W;*`?3OlTMUf#n4v9OB)x>e~r2&(GkysBX0z14#;bzXYU(8PLyB~VI z7!I5(fLF;fRil*HSaYp1MT z(P<0~Du;I9vwSYq-NtSfRGs^f;H=K?yrwfX7W;L=&hXw0B+cPqchK$X13KVjf{03| zXu)xot%dOBn5dj=|Av;L%+PF_)0U{W!q(R$TFp_XNbD;QlfnGw6sKyPUo)jzb|}}W z2+_*B^OA8#M8v;N^y!Gc#23Tg=Bl0Qb0b6Q9ZHk0%njL^hjUipA?}gZlxc;2j`+vN zqhv~b7GUV8eqlXm8wk2hF`w%rI+(2QGR{%?k6gA(${5-^S_N8J+6vwGr#|34`26Q+ z@rVONnWV~gwt&uh8g&=$Lee%dDzykiELJ{W^cl^c*Hq2wfH@O`rW#qyL`b-|Xwx$^ zGXzQ2YFdAQo5I}7BSQCo`({x4# z{KIwEfLmCej_YhJmgl~^K3wAs;eTcpa4#QU+!qETMn3n$k)87;1?YEaVzM_`17fmO z$z=S1NmJ8gSh}ufc&f{GXeNRY}|8E1HYLg8uayY03&^BCzDlzHh+?=s1Q z8Fc;Wv7sQcw{<%0Ap-n*5)wFmQn zitO9hI#^GG3M-@=9xp`}fU0PXKU3I%&Dr1^X&NXfmBJ01Yub>$$j`nOM^DO%idH81 z6v9aZd{nc=8L~TjP8=y#j@|ur8Qy2W4fb81UC*?xN41p9U2}FOJ)k2T|C;@-XyH^b z3~dlZ0NKt+Or%5HJSH#>G6krui~h2S$LCpS6<4DO2BobF#cT@al&CuqbZ<0e;Xz@W zZoZSODfZc{1!iTyrS_Fx^u6=35H#yAn;HbYzvBA9q$l!( z8kqY@RF0SW#%N~|nk?BOx8bI9ofnda2GC3_AW z)ieh1JaqV;n>(B**_b3b_XJ$q%u&MIdsfBI`4UY(yz|NWiM_BYNW+&%c~{?oTK+KT z8|Nh`a*s%)eK0p7WPQ{bkw0)z3aA>|J(&b(dYs><&SW;y(7c<7m&%{-0K!r}7H3xfG^IDcC32&WkloXTzAruZ$I}rexE^b+7@pk=KRTMuVjYFdM#3 z#f!`P>utA@BCCkvR|oF!X7_VM!Y#aewi)CmI^BSyJuQ-x%oECz9>P~i)+uoi73fb& zfpW4P6Wbx@;{f2*jt5i`7l_r+*K{YGI#lS;C)iK6mVETwU-FSO=Xd0??_z(IWq}Jq zdW-Dbvk#nO>dpVfA#b?QP;1XcHC@c~x%0#^T(0lLE{X~AJ|S`iV8Fhp@Hhqlva8pk z$P#$;ho|2TvL5G_y^yd}>f1QXCO6R{kRAyM;4t)jqi0}pHkK^j4%<5Cn82|+ao)&TmsMx6yl>B7_!av5^P;Ss@!xzw)4NLJt(i4q;e|%BY>n#ics>2 z#i=|upVy|)ig-jLn2>G^U79H9h}P4G)GeVBhid}?xeO3Lf>{v?*PIC2#IqjaD7V$q zY86A=qp_Mdo0Ya)Ef@z)=|>LeyVPUN0tlzWIAPF6xwu^c=$MGNaP@XWOB`#(fhVjQEiJc6VNUw0HtN%ia2^Nh?hr4vVu|590;MvPu>5z<|fQGYS zOFHEpG$idu`M&RDwprmQUGsR5KNzvIs3WVXxW!HN6?rk${8AK_#C2NHd(mveIE&8g zM<(zt#03bR+P}kHTs;cFjHJ)jx!H#=(}d)&YQ2JXMhL2>uC0OPIn7UeFeRlX@nIDp z$^tG`P~X%gE|w*v-HT%NlnJ5Rbn)`ktFVmc$W58r=~3f-5eHaL<23e3aQQF8YRJ34 z62$%Ico~H+wJ?gPjxik5lviR8Q)o|2lPXFDf0*#=Eq(gxEjJt(!1Wv4M?2;cJ^9~;&B=2~m zCuC=z_+x8mB{Ob6`)-foO82U*={W6(-Nlt0mk1-9Im7mcH-UOCpV{tHCWumO zcdzN`9AwpPJpK6iIo01p4R&4+ZmKTs(Kfhfnkukzi@U&Bo}trAk0tgqjoSU0UE(WP zT~YU3U5v~4%4>m8sa@!cgfrGLrlZ4-p3%Iyd4n`g*>XM7ps7v5fQVGGj|3Y?#46`2 z1BNiFVyMllv{6QS;5_9?CBC^#Lf#!uon19}nNS9-}ghD1R8q zV%=3rnseC0j{P8O$W?7Q^8=b%o1xq2y? z{pd56gb#0kP!#+8J*k0tOzJr;ya`*ZnruR&l{j-!JY8vPmeEq!JD9(R9|~rMGAAm6{D-2a%+arXvVg@U~Of9jq>YA{h;o_iwa-lZtpm z32XS}3(8XM)NsO+s{fJP_^V1>zVHf7(upK0D5M9^Z^uf2AY)MOD6JDOr0N83T%w8A zm^i6B>O@t*GVTzdE!&CsQj2aFC^qskL!924?<@l8RWzXWP~%&n3`6q%8{^+usFc;# z;s}7Rbv+k8+pL9vWq#5#DbhTBs*FOxiqWrJ6a>n6+nXfe7O z#tDi(voJ^E9d+Fua^wCmRqC-4VY#KfOuM?NZ~r%EI&MkQs$uEcyF7I26^k5BQiBB6 zOjs_YO*7OA)<`w%9|pmq-R-y1W3kT&S%EOj6H)xl!)Qtm!|e`h(-jHT z+yIAnOVqnz8P#+oLq#c(RUyGP3D$Ea-7g2fLelE1y@ z0+bG$RH^JCR#SPWtHP)+J@klAr_0KYU)}*XCn06Hr%SSll|a;YWNUQHaZd^+VuGOD+#naj@0_Uo1cfIxI>gURjNZCv6NCtlY~Q$xM;*roFN zx|PBA+RTu(esnswvSHxcn$8;)oYdv5URb?%0E=_o)ScEF!{!y*K(e5W+InzS!7|n% zOlWASP(n0nJt%9?WBF}BqgH5Tu0xdjS-voiN`r-J9WU(Z6pa`aJ-*z6S3IFLgPwci z0?R9Y;R&r2&1n3m0+ zSHDT!v{lBeEmsrMyBRAKmovw#aFD9>SxnBc;>I29b2YGMX z7?rF`@dyGtt4Eu-Nrk%5kjtz^bMppzOn)7xMqT|hXxTbNg=0mxvZjpn9SkBLz$XT${-?k<&*;W%#Y zf}*->^&ZyZ;0wHnM+kw1Ai*VNGFDbNL%Ur)buHpoY?aiyH_4rxyYANo9Hr0r%GHIc z&Q~|9P>Y)>&0XdTIzBJV{oOR2YFaYiQ4&oZx~tu%WhEmac_$(RMGgFg0?%9J5Iz8w zaYV*ui**GgE9i0@EV37~TrprISvl$umjo7B&a+v4(RzIRosj9pr@~AD!Q^H7?kd7d zFB55if`LpUf=nPoy1mjo#$iC7FVw$xY{?!p-@*2ugx~=PCd_+m`xoCWpJ(&5X^pbgHu`OeVw0uSg-H~Q|0s4xW1e<~Xd(!pyYK?6an_o|LsO?yp6-(K$U`k?bpZ_+KZPVpeQM0w0fOnzb zO#AoFRKX+b@xvZAm+HAGL)W(i$%nG>N({rGNv5q=EZn1`t~__-XEpj4MO7Dfr9ZOS zsnAh#)`=+8&mdo2y%CaQVB`hA6~d13!%?Aul*vlBX#FWTH=_`WOe+x2&`qqefU5`VFnx&KVA?wh zNkjJL&PpD_fy-m`L_5%$FT_}3pWX904H>C^WJE7gcMZ36;_?NS3vQoO5Y3_pm$5GI zZ~b!gfonyH4MbcU>p0~BZ0>=y)C@AW~R#%9GRwo)L(ZJ{qM7+RT^usHjl!3 z2Y?P(Wr(NMhH0NRv`iCPA+kB@*BLL4Hl-j$IkF=f7?r@iv7DrbHC{h_f8>6mG%g(x zGU`T*ht#LJjt+@WO%({RAZC{WWA(vtiBJh|CPHOw74 z#woRvxz)nVE@?HK++67C27guMk<(baIgE#m50AVyMQc{Qe7?<+R5Ig5yaBuqV}XxB zj0$4M%+_m(&PCyZS+KoE_uTzk8b>4Sn{?*ZGSfnj_k1V4G8of+y*RBC{gPhFw9KW) zJu&UiS2JXHn+4Wj=@@USecsC4>wBd5Laq)!n|y&fE=x*J^y>p!myJZ{uAb%w>&O-$ zk)lEwILu0+1weYbJu~uZ-_vkK3NA@<2@ahi*j4=U`j|(xUBg8fh>2c@|J)?40{q1koCmmc_FHtsI0t(m_b9eW>AT{QpkqzauLS1hw5 zKWL&pYAO5UK0Z1Qcya4roR0p(1b3R2-`eU?Tg6b}+`^@*Et(LIv2EBO19QH8FX)!C zD6AfBx=H>J^Z2yB>&jDu#uoyq^7m5e!J)l0ZDcFAQgNJ=Yx zY2x2s2U!B1^m$kaaqEV13Gvi06N;6oJ}gbYXChh~!xTi)xEFU%f{hy3S&tnLP-Wrt zhks8DR~HpRhS?P6^d-fMwn?$oxVAiZJO@z~-uQ4S;}Kb5`QsKlUMNq`f4{%koY%^Zf-Q0@^IQy^YlS+BLtt7CqNbdhL%O#_acw$T%@B zb>hrrVHd>4_={)Am6@MmpB}Hpr->pXWsvc{UvS|C9Z^{cX2SZ$!EwF>Bm+NbyCh1H zS860M)VS)DRZ}f9dyzTm%N9`A{Y*n{?O1Q0FvsFLzNnqX7kpug_*5$(w$fi(vUlVv z>1q6aGW%ZJlHyf)(U^M0CF5ewbAj~QvWqBn$?Lk^Z$}@JovSbk&vq>{1XV9$ zcuRgg=rPwv1spVjH@a5~nQ4u;idGhuqICP~Md=5X-N`t#$YFg6T-vF8A*gUT4BdGM zSVM?I5Lju191NWb_<@xE;-Ep1gQBBHMtqNG;D%p3Cp-!iFwMB zaayQIA#(<%6Xtm~1mS!qB%?t3WI;lsC$KeA;a1B`sJiIc{;ehx(HDeZqI`vLS-~Px zqB(bch@XE;aKIwc1IT2x^r8V;amY__xBzB8e6tYWa~K*lhw;Vf)IW6?py^u0yF&R# z(DBr)1`e#@qdC`^GGa!>2=nr=V+m-2TRKH^2eDQI9-lAKdyk6SHfAN7N_1DVLrb;5 zfRZl5fOZk=M#zpwZAOmzOvo0NQ@n*Y?)8|}QSn!UDZOw zzyKdQCJAn|5{YW zEM&}?FR>ILh~~T;Zph;OfZDN8hMhWmk2_4DUp#HDg+Hb6t=Ej?*Gx!o3A>;ReHype zlbMC;pt%PxPuqEHRN#C@aLt2RdcT43vQCblZJBm2ZhnXunET=-qFobH3uMkL$Xewk znT^_&y8E2-6w#Q0en3gNH zdoSrzb*KyMdy|{zS%tUhxVnH4gKAg5!5a`<3beR-KH0pRyIP_tt;fBS?$hP!TICF!VFk+>HLpM;*8ick$^ zKl5>PRlSifF-?EN7X+>-`MWg=veUn0ctO~NiIo$cEi2F83fwpfzd+oXAG{7`p9m-g z=!q#|pNS!5_@%}^tecGJ4A$3O4`$QRlzccQ)an?cvd=LQgRhA&x!&yg$mcuLp#=KM z+x3g2US~_(7u+bIyiDq6vr_bbv#&eQXk~2SBy3ZzK;Kh?rM**;-1BboYL*kzc#`NKoP_sTVoUaR(>)_h7hAg#NT#^Lh| zu&evjr!!(fClbwO4nZ*OGf7sJ$+r^C+{a=a&3z}gt)?q*Opkr}i)3tSE`?10ERaB{ zlUw4s*ue9YwU4~xwETIcD>VA`VjYkKpWfX(5w)IHiO2x3^cG&-b}sk4mMEgHU*B9j zip%?IBem`pmD6`93$4GSmHM(nfoveT0=Tyq1rOQ4Y=<}Z4SyehF98thn|mpHi1m+@ z@?SHOZCVo7VxnXs+XYgAdMo@+JQ$< z1E2+u1=B1FI!gV*I73d+YQ$g=#+8TYH=@;bTVKql7@m45?I4s-@A?JSZnhu4d`AA> z(FbQ_T*rzxIxe@iJ&o{|@TSbRU*l;es48_XyGpA}`7p zNel^>cM*@_oD;S>e0C94prpf23k-TAUp;<>#|C;|UFi&_T-rO~EL=xqU(MhgcOzU%9QiqR8=*gC(x4{s>N~Xr-X+t;#V_ z>16^wC}kxYq(h*8^MPqVdl3_-fK$x12i_w=VM$18p}757Q`>kzN{Nx^m6CJy+6uFt8Vb1v3#uM}#0X<`#_)K{KRnI1xk5yt_tyVVe;o zzJwz9NOo*uW;Wq7u@`CH!mkWuy{J@ zBG2TfP~vkibHKM&iaT)mUhN7=8NpF3_(WdM*Z_9qeo|w&kVx+a#rNA6(u_IK)+%y` zEaVNkk%RJGGJ?@FNgkW;CPjNS_e9S%q#?7J%A-gRC`m>|Bsq zs?Rvwa_JSF{<`pkEuA1y>O^{IafIx*G^oTObqMMu)DLcp)InE6$>TI{yuOLfgQQm?d-@J>4Y4|8D0{O#6r^ToK*e&Ln{ut0ElilY4{9}Ij(1Z8u$js12Wm- zd|2;;L{o3$51sS(wSO~1Nz6|@2e*w14xhfmKlf!*;~@17spDi2x#P_K1d~!c)n!_i z^fj*FXk`AwD06dPO9fYIJ%nW^LJ^oC$94oGHn{+r_wXXbIfObWa#L(MCnM`qAt>YD z#>CfAk$zKnXkFe`(D_J7K%I&&tKq%Us1E6;lVX(A9Q*{IUecAM`c_5Z8hrmePL7O~89nzAS{Wy7u>C1przMm+tptuTJzAJK%E@F>9 zv!+eJ(Q%3Urxrw87E)TU{q_(yqx86|t@r=O-g^g9{YDSKO)c#qWVAylLnDA_WZ-ZD%mxpyhhpAc}=3ewHX^fgtEeInAgl55k+6J}y9Va0j9dy@?qEv^UsjIE`u%<(8vZ(}*#rwx?6aE}z z@}P(}I*5H;HV7w42O)=?(mT=5EWs*xMk9ecn>KlL{M&`8-Bt$GVgKpdRgGr4T}WTC zA-`Os;WlR>$D`QmTB9$#G9ZO~V=xLfTm0JZRxqWOM|TBIm9=4o#>R`Y_h;9onjmL3 zCyXLx_sc%(w!c#|C~hk%%$LxiFj=LQOxY2VC@AIfE=i`t#$D3h{M)avc|}xHan!cZ`*TqP^Hq*6$GsJpw5r6IUKaa=*x- zU<1wr<&Dy9?+<6w+KtX6(6FMaBN2RB(XeAtAu2qoKQWesVT%eA@hHEc+jMfYWWOS) zX6f<~*mP0o=!IOWNz$raIFDkcsZ-;j#a@V$f&@_#SiR+aX_M9&tr*@{Iq%v&l{QJZ zllSLyNW^}T$fL9<05P~RXq{Kih82I5S5t7R-z+npKwek`12Yp`r1ZicN4+^*ML#v2)sxf+^)We}XEu(&XkIaPz) zd|^^uJ*Kjl{JYq}w8_m`%O9okAyHc;H<<}oG`<)Yxjoz6G+6?evb4Dw!5z{5cF;fl zrRdP;kUYkq!~9X2w-1ATjVc@(_zY(m)vJ%S+uN98?Md3kzXiB4*;q`Dm9bS@PW2nB zC;iy8akXS;^l*N7iyXH(w^k&`j$yt=Y~}vUXT~AzJaF{r;z}yBx}G>V8yZ9%dHwTt zAqonJ7V~5IgfQCd7(Ex8ju4J)TEUk`hrX++WN-?E#P5XMofI~y0bQZxwVyIHCvGJv zj{>Gbxr#>rQEIt(<-We1&*3iCL z&x-M9YILBFRRPI|slMC1-mB&Um9b8>ev8$KL2144)eSD6H`}Zx8-uC~SE!3SG}@OJ zRu4JCt}$uRuSoGZ_=w~!9=ek6u-!1QbVIM!bUEgxN%dp|)i+qP2r$yUU z4Pi*7 z2ARIrG0F=vokAi$C(}qBY*~FX!4-JKVZ+QDR6fY`z?F~1(&pGiL%oTi|1LDtewr>D zf7Piifw_}Qr{MExbvUHPn8pf@tBJB3H0|Wjll^dXm~{7tvod3Dtam-9X{JZKLStnl zBH}blR)=T5-B5DMBAN=xH-%o-GpshSEYBD>@oIV{PhTcy>U=}X>IAY;5N7z=X;RL( zsT68>q#IJk&r9rNx~A@}rz|e3KYBy0OKih*@HWh3x8Ys6J5X4rxW*E8^XdnRnVw}) zn@7}}wbj=_)}N|MJy!Ax@2DX|j8-g3PW^LG?Usy5bkJ;TN@PG`01D5cVn}Y3u}c+; z>^4;-_GGpx6j(gU^Ra?H4a#p;114x%XJKY9IW(M>Bph zVx)GsIn=aMn>!{Cs~@W#^NF?%TkyitjNNmxctbC;>1H`GX?O7>Mbjt!$9q0V|Io^d z+3DhvA{w0ZDa}by)^sv#ziexMJLgnIWWCeY@*N)CxzAh9CVY{@zSzUe_{_XUKURE_ zJgFchG1J~E<_VqO>!i-8Hf&w#ek~imop%RZT&B6cwS0n}K-7qq%{iW1`roUYFBP`G zL;0PMsM=R+*5CEiLZ;&!R_`0{WODLgb7CToyT5A!wN8cH^9PUHjWrW`Lr*q(%Zqio zPUUZcdWZ_0AoRI24~j;wv_w^~))$E?LPb#M$qT+DbcIcxi8Sq87s4i*w0gg=7LbM1 zOm3Ey7#zOOmiZ_(WnXvl9X;Q+L<`RqYd4)Ta=2mE`-mY%*h@GTV_{h?y?;3{-oyDoQkja^e`2LqQ zK1vxj&C34W$p5WkXj~DC_O~aZcPYX|8U~EDVK*<6%CK6#cYGjDQ6qXVZRDFWW%}k_ z@&QFV#HJ@IKN*(nf9!cRYVvyv^>(%3c%4#3!HOQ(ElR&-y+=A~`gj(VR7KvHzJtfG zJyf4ttmyQbQHu*G>wyv7sfy8KB_X7#A!fAD+K@XJ@6nM9LE>KS?~_6r-xHkx*P zHB4X<-I;jcWcQY~Pj#oDY$zx=LMAw>FCx6~6NY)rpv4n&Ydo|LQgXInaEf=T^pr_s z)3a#Ix51WQzjnDFG|Q`et(l;zSlQ$EiJlz zjpFa28Iu{gLa<07D{{c6L!(&LqnIo|FRJ*8>?7#UdNORz6BU02(6_{x;FLo6Q;*VvY*o)4@~^`oz3=2gL73|!8_&fH0g_f%AN{sjmT<6EOo9(tgTaRyhIkSmD1Kd z()2+zFXhctyIKLZEVhs%LfITRxUd+eG)Y*|j5~O$#0;^KsV*z7Tj&DY+A|j~ifOtX zEbM}j5!8Zs z#@u4c_U%^(&hA3c1053F*Gs#GYQ~?$b>y$Hjlt-Kc_@S>8-|)3-H6~M2fpTtPZ&Bs z>jE8t&YWpE3xp(dB^zizq$vS?*vEBxNg(?6%;6gWnch{aEK*v2Xk&SNZ0!xplO^En zaDJ_Zt{s(1`nml-PhW6#H}lmVdrYHyFSbAx1=|i$h^jFNc0Gaf(I}9Txz}E`3#c5# zu(v2U$>C}Ne(qrW>{-75^nKKRSRKW;Vx*hz=(ZasIraYB16>kBo#iV?!9T!2Jl*NqcuIF4pRnvNgmOJ1ZhM0q0}@Gd-r zp0(gau)XzX2DJ6xX`XyCCHWI9!MLf?Ll{iX9*+tGCycmoiMM&JV4>bM2r^7phs@e&+N+6xjLNSAivhMXEv%jJhMHldn3zJsf!WcEbX<_v+>{No|PNtm^ z9c4T$v6qlJbCEgYxyo>gTg4ukGmc`>`e6z-anU|=7;^MYJM1;VozJCsR>maf#2dk% zom{5YbW`gV)bK@e3c_vRXal6fo=|Co`0TP!!+^I|>I*&#Ng!_dsCB?0_9SzE3a^EN zegXR;!CCVK*bRLY$rSykzUf!E3lk8M z#Ub9_Mfp!C}< z2=pu1Rx5P69e!kX7?ddBfX%tQ?$_D>oLB+HKu&@eQ%VQ$x4HG=Ew|1|1aa5L&if5kuA47{#v!^tks8EjAIZNB1QE+c*b{r9dd1>G>n2L7qke_rZ8FZIuE+59NrpO^a2Oa14i&X)+VA^!sZe}VtM!2kb5 z;E#f0mB~A92cdR^MdjD9`aWvSIy0!pQ}h{(b=b^1^{zA2&oxlE+N9%2Yq7uZ=R_>j zaYFB6wv7&o%WzRX8o7|Tq{WYHetP0B(fr!$bXPT?a8NTBD?}YMaS!FZUk#UU#c8D| zt28)?Pvt{na+G&^EGQyxr&8gj(x~&ZbE1$-Mgw(=a9O$q4S)NN0Js$~pH2_AErQF@ zaG@aOv1Z4&T{wWJ;g-a-YdAP?Kg0c(0A0)ekaR<3AxZhyB9(JTCLo0Yx2i5Q+zbZ) zkaKL^4QVtgQ2|O^X*zML@y`hr?|3AU)uE<`quT6Lbnu$X*J+4xYyay-ytwrer|+Ps@IG%NZjN6*U?nkY1rSHMeTE!|%4#r|*jEi1V&kW;jzN!e*4O>&e z^$$!3+jojyIesp~fMRxT54vNe*F`f2%e~4OF>8v3ZB+f<__6-iiIbB;5+HY__r+I> zY!HPuARB?3Clv=;vl4Dow(V)A02^m1uMlX7cdaT_ac%B;AEWf?qC{lRUA`&E~(em{c)V^?F8H-aM}XLs4AiGck>vne=B zW>@Je9FpdQ=l2i4*2H)qyG5c5YVtpS?5&S@YML6s&t|wK+Zt$TR`Q)`k#H9tM^v8Q zOZL-<8u(dP?4wXcKLhtxfSXZdZQd;Qbbyw$vA(g|vogF8e?}p>{h?qtF(e63u)oTu;; zfvEXvDx08I_ZgIHr9GWR&VsZ=#~^#v;!P1V*OeC@gpc`WKaM~)8l&Szaf39#Cds{h zxW9hS6?kU%4ngEVEdJ=sHS~H2lW&>%7#$4kp~R@kJB!$~5d_U^|DpLO_Wm!RnRYd~ z*+g%aMzr#*`Y|TE$WH>c$?)9c6!Y;+hOi`&a1WAM9zzR&ExFnL-aoYDOTnB9aXkPk z=hBDAxK>HO+V&aW3D1sDmeIV9;WXRGWtUQ~h6h;SRuG zED~xx3)1_-S9#7V(H0&6K^A;);wbS13%r?-fK`7v+3;*9r-cl*hq^_}us94EZKFE7D~`vo3evNvOO`Ka z(bWO7!i~xUC89FAO_Fxrl7Ft$TN;#t9)thK#R50C{+p)(nEV;5HgD~;@}O1v#IzC@ z%OE(2P|ffm%VCbaxEDB+;(Y-?95|A?*yhf2+*ddXBXXr?8W8z(yOHvu{<$A6`r(f| z$x=dKDe|1tA1oD(g^~!2L7oP<@~k;j1|aO?}Z$Xq*1aP@w3b1nFg3%=bw6cM^ck<(0JCRL1c zlP~gt1!4_H&iHji(#C`MNEb#07wvW8)L%Xly^NlSIYYSUv^ZF_`x?U6a|HO)!ymVz z3Uy#Wsn7$v2r3zfutTVv(D?{qBnP7?34uW!1nG2sIN|;$VCMLY@PPsua*J0!(OfY| z(X+w9$eV<7Ei^?GI8IhWfi9&)wd@o~Wk!Ja6yaP8()_A82=L0Ee(L;hvyqw1N~<)9 zxM2RT2v-bfc8rG)zvKuKX^PfsfJdHOEuEzL~TNA!s5qM|(DA2AGX zRxeebc_$+ttweJ0j7K{U)Iy|730r>k)# zh;yGT@ZcQ@=+YDC>3U2E<5i><_TXN=r4!~c49S-6KYL3sp1r)g5GIh#Ir^G#F8pui zJd%}->NxoRrIR&9iygro}12Oa-Q6A;ru#F+P(`Pu?i|3C-v7ebe_hJ69a~s>&_pbnaFAB1FvQ%ANR<+@IN_Jh8`hFv z7wUdQI4N3c^+VFTO~XqzkLhGvSe~RR67&2am}!I>Pg6oj2qBoIp!fCVd#yx_sffHh z75Dp&{0-vur~mNbA94BwaJ5Cv%MZ7wFb9azy0zp=>qfc%&O5(ZLF2Y9EZG??w+QtE zs$DTl?WeJMl;6}#afL!VJe1JW5THxQbk*K)6pu`tt48r-epv_ zxAZvslHGE8pmTtG^#&r5j0V;&$;CD;nJmme7RxN+#urz10n79J9#MZ;HtIbHpKl)* zk&Z1q2^^IflK$v7l>F-~TL4$IWxRq!5nVPy|80GSOD0M-u%e@F!Dm8Tq04|3qcm?b zEjgewKt5EH*Cg_EvKe41iNb!usTO4RVRv^7K?dFv|>zt|xSqR8DNT>rAvt zS2^R!h;-szVC?{BOdb(OEdcTsc_7P_J+X`b`Y5ox=_0*wJlJRvP<;YT`b6g+ytRR& z?4+M=SgJ!si{L8Q+?B|mazyBVuo1h!3W=4tBf^SgUe-jo3faDeMWrTJX6fz}@UTjG zN;Q!Mag>0m!n|9ErdkN-oA2&BqBlRpBX)+>3K>ECG`p&z7W$r0fd|Nds?yP6ChCk+ zLJu6pkm|BjUz|1t$TC6YM(m190?Q8*V|}4FzM%SE=5`RBoIo{zI;V);Mus~L@>ex8 zZx+;1z}1a$wvB{RN{i6{ayDkkM4@$oH8b&UCc>4}VelXloa2uXPDMxtLV2o0T#r!m zcp?iz8wOL!@fQ$HwUFLTySRMsN*Y`p!QA}b(ja~{m9eTzUG&v>0Hmo=jwlBZAO;*I zZo$0Na0X=tWEtURC(3Bvi~yF$EyANT4%8owI2kWLk3m=my{_d`Ojo z&?KP{RrJa+b;(3QF~OQ;%&3W6nJ6JZqCSJ}EyAe?1%Do2|NK`J;(ExA>kx%iC^?ua z>4E1`$+8Un99GRs9RA0G_$5SZ6%(191vt@L2LQ>$PALdS*zROy zTrI%gP=Fo*V0#VKiE;~RO2Gb@l}nYwwJ#AhNFVl@NIdKin@}wvv)JaPb6gk>cvI*q zW}AC4`+!E&($T$^ODB*FtT}$<6p>q_;sFTl5O4lOIMqT}P(k!r;!slz;fLrXn96uH z57Ax=q5dM`f&F0q&1i|n(*#k}Q^WWXx#SBdb5s)m;{3vtNLhG`0~V!5lZhNuLO~&% zpceqF$5uQf0x<_>N?CgP`Us*1ugh5z=>!VICd4_%ZCQv4gg8|IT%}j~s}kW>5+Ia3 zJ@q@e`J1dPUl9+isMBjq3xwsDo;3sJ_5DO{jki7^F+}>!1|qJX`}Fq@|B^cMi25(7^BXL5{7dTKaj}2{v3y0>zogEbGkxq|QfCeq3qJfy>fllIFR6pa#auG(PY?e~ zlRCe#%5(ALzeLVFSLRCp6$nG3u+M9@|ePoF<| z3T#*F-~#N6lNNl?d)|CwlB}@=7o27+&UI$UGey53O3P9~!Aa}Lnww_x(ogdY5Aot> z-y|^h6rR~Em`=(&*6JgK>WnPlRXw@Kk7u|#a(h386CqNrT0>5gs=aoR_vFms4NbD{ zsAR+eS@XftjS1I`B_yNoib*9IX&W=&W10IA?g6!prDy9B48>2RdpE4;C=0oqEXNG6 z>;8App0oKi+n!CuU*52uDNsF0h!#{0&|Y6FZJY>`ge1g4HH(VEWoSyRq~jhsxpW)j zE^$g!Sd4ca-bZp_kM>zk=6f@z2IpftO&DRaMW5=M`}88ltY5Hwc)Sg+1|xkRu9V{x zWj5O97)g#hx;w{1g=~UkttH|K{q8G`Jty(C7}{*h0!W&JZSJAxMcP3Z87HRHiN34*IBJa)x!T^nIQ>;=HxXfwY`bd` zl_BB5{P~d24Lk1vm9auAc~Bfd8C)nAIP$eAN%P}_)d)8Wa@0h*lbs}P!&^s&5NEM> zGUHitvp56r=G4X?Q;mU_#j< z{?}D>n!{czn*GZ(rVQauHvijsucD1t84_(ML_rafx3ikADj_l#n&Krx4_sO4FBj$l zS8{ySk-uKlwuaj1CZf>%Jq+mEHrf;K=Z!#x%1X>!yWoYUm|OBhVA@Uzndh&VWGe+c ze%yNvYPljeF_DcxzEIv>Kobp&_xO^x9uA=4fF1MT_~bx^qJ#6mV;%dhK@-(uyI<BOHD@EqKP4>ddEIzkf+zFy_g6}3%exR&-<*Yt z)F*LbtV=D5@Oi>( zfdS>dvdh#Me#cZ^Acw95rxn+2(0nf=+#TgT`$=}t^2lR?zjHPA!ph;VQ z0Usu9d#Zh+!MM5yR8vtVzIj)g_z^9z0;t}#`b ziNB{19qgN4dGm#!Au9pw^SB77=UQXZ^vh*kg!m>0Dz_?sb#*4O;^%@3ZSSVqZXo{o zgclSKg)O~!$nQW;lZ(6`sJQOr;aWN#i2(;PW;u895Gk>N@O)w;lMR)?j@t`o+lVj3 zWq3GS-=@LsHmATO^nBi|Ms69FJS6b>$FVM$G&%`$nV7LGq@j$i9M@)L@rHr&z`d!_ z7XPL^7p=lbV;ZS=o!f|K*iYR+T=tCK2G&{trGJ2sLl&Y=0&UM&N0`4ws+Xtv(073> z4?ar^icQw4aKUcqK(ZWRcOGal;CbKiqmhsWuBGqd*OR*MUa=sD?+anxcosLXss{TM z?v-4-AT}h#Ok5E7+7+fLNt#$}Q*S)uA6f^O=NP^(@9^dBj`P{(0xjeZhujE%>ttxW zjtDzxk6~Y2{k5C_-=!bN$@3Olhg~5I7xtX}Qs-eca(BC0M!3$1rIs(;#6CauM& zH?)B{>6ol`#?D8cZO4dIF}e@vk{hW{9Gxtn61Wccz#U}oKyqr08thIhdvR#VA(G=F zYe3g{${MdQaO-&qmHk&!!a0cl^Y=I2qATF4;M)nUZ*AAV8GR+KdFinGz0-T|a1zxN zqr52qUw7S;A1weo5w$$F8ck0Qi-wh7cHkXT34PvgdOrDi#XTh()}2$g2*QvxRCNYu5r&T6xe)koT|Z&>dL6pYR^+rd#Efe^(Ci*XHK6FdLqVn~I$h*k@Y zKjdNB9j{oxu2C6<1iTz^L>gO(D;!I&|E&i+4Fg9LE#WU<8B`|s;R?M6qdl?y>C0&WO@&f1mG5sLUx#{JEY z-qa9R95O*YnVxosGO;_nz%&^v;BGhru$xWUv2dHCbK8RrOaUXxa>QQk)hNhze0%#F zFX8V~EJMq$P3p^KKvXB0yjib={wBVO9)viXxI0m}t~_|udm}}VjPl+cOAdJ$SHSgm zLbhbgQyKcP)jD~IaE515SG~GcO?(y7&4=JZ6<95Xvwryv{nnB8pfHhCj4)(Y3JPis zp*f0QM_6i#6Sonu?L>{jVwxyTmtLYfAzSzS0`(hE0zDtsY@fd4z%z6av7L$7lxM^| z`(W)_@>P=WjuZdq?{5lsp*Jwa(aP$Vifu2K4OckF)#9#OsiQwk6uWKNeFl|%lk@-| z(YY{Uz4GfDbp5KbFnO=$d=GBzx&-}>qGmTOx#}N6#3B&@A(i*g&bVI?{`UpU@J+(u z4+dS8PyYkO+}gcSOMy@kqV9pT*KJ^@UO*xK3iuy>9DpPk1T?V3@Gl?;zZ>r(=!XZ) z6-G<-5`H(8w*ah?K04WU$@u#Xj#ohrb#2PchNZ^pzw<)S^oS)a8Db)&%l`z>EpWDn zcI1H_v4+Cyklz9EJM6Ctgk(X0NLAu*5U?m-m`{d(O!iw8{|&YOivv@tK>qz{f!R4@H(n=g_p&cSDRt#czK|Fhxt6!v})Ju z6Kcw14Ky^M9Fi1$=9EJ^1UpY+MYqqr_+`Z3h&j3v+`PL!!}C=2El?7lLd$N>&4-2; zE11g(yYT*Iv{{sS-vtF2n30TkDu|9>p-#b1jJQt_yJ~+LHb4;6J-Z1r-nH5y4jQQQ zE^_zc%*0!6z>6LoySWz&YN9|ms2m_wJ&q>|(P8+1C|xQ_cXKFxXp0go;=>LLi^&(v zL+%z8$29rr@vt^w%Q4-tDXnR{vBOG*-oEkc=Y$P?9Jnp>VIM1AK<60o4-d4`H>({# z^1-HO!lb>}_cdd1mFe71Z>>%lYiDkYv*hLpneMK7&bprb;p8gPITrb!@C+=l$DvBY zZK~nTcuu^2i-x>qUr*s%++Du2l~w_iDL z?A^eibsLrtk*r6Oa?gtR@f`hW!!t@2uxjT`CVCT#9JW44nzlHl7!(qdYx->dLH6t| z&|2c@LaUj_ua6*Wy5oG?yoOvq5Ca!haer=dDzE~rJ$-~7!sjh;zJG}r8yooIh*XL3 z+z_kkK~mCdLUQmQ0saZ@Sp1V|Lq$}U8@Q}mS`4YBCP`5yRJ-Wt)KbeX$0=3b@z)p)pI?5X6;7T&{S#;(A z{T9Bk*`<$<3(;{fjkcj03vTht;qMgO41Yu9>~Fk}0aTxkP~neZ(((OOUo0|6=28@`A7Bn^7cGMB{eN-7h;vz6kk%F5nu2ro83h|s9Df;t@LxL)LFRh5 zuN59c50MBuRROsmd!Uf-h9Awcr>31bVYU-+NZfb! zx77Iw#qTuWTJneT;mhZ^kqerk6#i(UT>J^j9iWG=Mg{ca7oQIK;wOpHFYu6q`rP*+D?|0iy$p~zo%HwaxZWZoUYc=dD9vN z(eFMyX)Q7t?|AbPl;An&>Uxz;U|##N zm&pKq1V&-Qob?OHf>w#`z0J}~Fe@=Ih=Oe(-b{O&At=DsO3jPo_({5P_*l?NLla09 z0K?||`+0tR1T;^+IwY-*oU=UUh@;+-^VXqO(4<)+m(2mL}1-W3Q67z5{dlYP)8 z^lFN!+HL%|tH|Tl;1}~3D1ZJ7{T90L9-;6(jUOOa4xs<86~21Tu_#f52E~I${ftYn z*vMtp;pa;6IJ}yIpukWoWS*-=yK;CDq@Qys*#L}lKG)~D=-&Z}N5&ar@Ueu+Q4k7h ztrXwIJLw9@ATa?Z^H6|Xtu)#l;ylm2P^zQGIa&)L71-Jau8#3mdAS}xz!9X0|LxR_ zU332LRR<7?l7_FbOK>dJVUUbnV)GpJQE2~r1d|*+FQRxrTD_FW=Nt6B-C-xP7q3}v zBfVWaV=Gq7si*dE5DJr|(N~M_mtuolcTn-ReI5$r0s5xISn+vYup`p$iC&vX6%&vW&*UpFz*AgrC)X3mnIaO?BqZ_!oj!lA~lEWGp$ z)AAMi{B^aae(8;u9F*Pf_G_>^uxo4%+>m!X%VZyzeNXkM+j#f!GMN2AohnAxMLT;h z&x3|jl@U9L@*dhS0Y%>5)L+y@2o3ZxK^K2!%q;9m)z1#{{x0lb?Ds6>U`n&K+{NFgD3&B+q2i_0GVGi2mE27WR zmeX40k+@Sb4)0XDdO7ARn++|LP_Zh6)i_*{d@nnG#^*vo{<+=fp2~n<)%f`S>GY(;;6K!xB|GDg%x1 zGo&egmdPA}bj$cjP8`&5S3n#?KR+qFTYDF|x}-9iMwzH>^dCLj_9*y-E7|;z@O{(? zSkLv9!sT3uV>hJk1!F~$DLW;?FRDYL<^o3AtL5;+l4vScdAvu72Lg|Td2aMoTO>Zz z)K&gEMxXgCWxvIgvCuaXNweO^;hhnA={k9g+ZjUR%+%w4(7f#xv9l4E|8H#nu{-(h zyIG8`=dKQm6ndc&kJY^Guy@99ErtsbU$0^PVL#sB>@+9uWFcKz#NdO2l8@AdhnV_zAO;^^cSz!t?F@ zusA(wNl}<8?B=w%>DhA4!|8!Rp)v`N-plL)Wb9Kem^#j0V^khIZaliPC6kv?T1mry zIXVGE`ev=r?e#3X4XX-O651XgtSM7_{LCgOG-+?cZox7cMrwDKn0NhG-BG+SPT#j8 zeD7uyG#ymB8atGyJ{L?7fkwa`s1PJ5Pv{~y@2C0}hIRI(q!nz+ynMnYXpQWaDveYz zI|q%l1Xxa;rKvuaM^quxn#Q*#?(s%4+x=D4J1#TDpRM^W!+OvWuEPCz%KHjGiDK4f zJ3%*RcI4htWpT63JUjTN2XrfCs}%D5!u9*VR+q23YX^KR6}j^eez(!P6&7P76bNEZ z0O6k$MnEdUQ?bK}=Y^m27bL#bTdDNkY_M*FLTrtpj7kG#oBG_Cur7#J40;I4}%WuuxNIyyM z9oqTQcut!yBpPTgM2Pg<1}1dF&c=qCD-LyjceXN{8g(IGBYo>p6N|-E%`hg5L*CM@ z{2@oB%4D3zr@`>-eYTCI!VP^$N@vPc{n4r-z{2ap`?J$@Pt#h0bd0*S;g9clhk|?u zFmT`Y#3N||rt;o|d=f8cGW3RQKj*PG?NWC<4rxy}9+y1Ks#Yd(Tro4N_Xpn;`F5=P z4hP=8>t(#3AItBm!WN!Vts*yKU)u;#GOZ;m4}Rv7o$z1% z+x}mO>w*6i;C<6g{WVPlrDq4<5u`4enir=7M~9r%)V?&qA{YgPe&Y4w$e3l(fP3jO@E2kRe^)5(CfTdRE@?4H5 zU>HVgpJZJ2r^OQU&a5Gf6r&e&HXleY7tEk_kL>Azas|^Sq?2}&dlVHpy zHPqurJypqy{jucQ6+c33A}YKrr#PorJAy{)Z6$k~T&CZTa0K;PP7kNbU$7$CsPOdQ zE{EH%B)Q6@)a-IC?Og6&f2qBbE)*rZi3O_mu=UBQQ#?~rz0C2$F6vQdgX5dq!@oDX zU9Yu_o}~A`qtg6ExM8ro_Nk@ikTD`C&IRK%Qy(-ZriMGxbAy6!_((sGvluKbpPsH^ zV*ni;uF?>e*ew-aZ<9wBQu~Q1>X;R&Qwzsv7l6mykjFeVOzAW+?PWQ}Nx_tIBZD>R zY;a5^eRx@=phBsbgv~iJ*{F9iZyu0l*08g=YD(4eljP|3wH@}#`0^$vRk#6;az6E? z;IN^w9HSGzaV!3YX8i5?VapNO;HaYY2WzZP+aB(>oQ#fbfHQbDmeb?5BXFFAeyYmn zQj=jJwoI0FmweLD^r0OILyx`-gOw`bV4vedbP?i}goL#(KoGp9^Oi%XAK%4v+mS!Q z#=}ru)_Cpl($c1ZhK7eP?CDj)<;@2%Mn6U+8b({>o|em*Gx!Oba)xo`@MkyDw#u1e z;fCxK#ffH)%T1-0nhh6djJeKN-@BZfLa7;LG0^%w-aEnH%RtjiPJ85dX>@;R)dg$C zO?io$I!A`1@{>h|q=SDbXpi34Rg7r`)+QCmiN@hkOO zvq&>*Tc1iQk@&3dp){5gboLsSCb`NR88&&y>0K(Iw^n}fxxhy&WxpnkrEt>p)U%i7 zFU}0)P?o${8N5M`$5iIVH|%G1(ect2J4z1w%S;_&#;;?!Bs7d4?~*y=XMV#lIl7^` zKmTHU=YeB4>pfm5G(OSp?dC2nE;=y&E#kIqtAV(`&Ak_x>(<9^V-B2ZdgCwu4Ax5T zX{I1miA_}?HOolrr%(ONBFmgQab8CIdm+7`xRi0mNPoVi&7^eKwVvzeNogn@cuz$O zOp9423b>cFwc4z#Qfm@R^m{-Gy*)(9xtyL27hTp$hdW%ivhq%x42us<{b&+iV<4TG zGLGE}tr{%k%v;!nJf|)5FY;){V4}=YH@Im<8oQebSkw1kvADpT+F6;@k}98(;Bd0< ze$x2uj-Jd8Z2H4>o6{e1cL$L^%rVfo-pid>oL>b)c2ReTnepxDNML>QxocRAF81QN z`x$L_^qwhyWf$NqxiCE;L7HH4_KNF(O6KU{;R5m+p(h?wNgCmP!9tJV3bR;zeHZ#S znR2||Ce};v#yb;9&+ajPZ$-*QZK!;zcO;UItR&_0f8QoMCpL{8w$=%w;o_q9>{Gh- z+#XwTh)Z9S25~*)^ySTdM62kg=ctaK8tkkIH}m|l>{8E}ZOfi_3v5#08?QDGuTa?7 z=h{(n*gr!%OYd@3%a1J0AhQOe_hAKm(=0IR!Ar zs220h+`p55hlkK9Zfqsu)m0x;K-Eqb>AybJ7QXwGiV{D@T30Qm+A#KH_&(HrF_kMR z+mn^E1LE3qDMbt}udu0%<{OaknuO?3yCI;ezVCAXhDR#8*E@1iR_Ewac^M}F|5#8bj~OZCAfycNcjXh{f{@>VTxX%7s6_#^Ia&+1-lz6qul z5sdk;xq3=lw`!Fs0&-tuqWNOkPc(=@n@-%2^H_!X!-+9yBsMM>zqG} z3|;!P)zh*UeM9N_xxPTjiw!z!S&X_$W8a!5GI1s!KXp7o9fh@_wWT&lCgw^I^Xap8t!8q!YQXrC%7r+(gd6el6n zYwN8gEWdzR0?+#zHnov%}}SAFq(W`nZZbskc= zkabLjoW^Q{51)QkbQY7yjaN^M@z0D>W%gIcjFu?YH|BTghB~u#)^s@S=Ii!+W}e?( zOUJdx)JRTWxU+(X+H|1prTI{`T1#ACV2W`mLzK4cW|onGV#}=Mw{Q#OIUS^OdyDrRf(iAZqtJf@3VyX29on4-4%62zOiAnmJ zuV5%x;o$;M2Mj9DM!EI5IM;nV8B?j>j%*tZPHy^OfkQ7^2Z@gI6V)^pZ$lsdRAojw z%VHy zg-SZ>%NsA{&d3G`X!SoceU0yi1EUH-j6*hBDO2pXz2uS;&$`8|X_5)!+SsAv_;Hss zdkE=N_Hdnv`FfTkjpVM=7P+8ARCOVhq|o;+D^QnVs)!?g_{AMsua0r7EH+?57a)h;^=zM#*4m-w=B)NP=d=I+g&3M9r^rxEh3@kl*~f zY6m`H@duWi`{V=?(U3S!TRs6bH_%~v`&r7U{mTtpoju~;z(?d{jyY6&h|iGaOla~k zgYWv|?#=97-(B9;T=VzU7_W45NLR2uk^R1G4b7J)$p(BZ{xM-mQ&*3sjMQ^Rn@>-Y zhYwS?bqKvad1@-|2Ua&wtmeEvXLg+zST{YsNcq}TgN)g<%X3@EU1`{)9Y0cP@lhn3 z$nDwQ9mj_?&o22)sGRq&L(3PEcrf2h#M)A zd!$#|G7Zccw-axjf3qRKAjROiOYi3F%T!ADD(NgQjh77=bZxey=HYHhs(^HWn^yQG z^{8)S;ZtKBne;o?JaQQmY`Agv{rT|pZI{!b$q0?S<)p?$N5h-m_8_fuI`>$MfBaB7 z?Z!5#i0E$j=Ao|~n9NshU2kH#(i1P7)%kG3rNh1oYpa`|a>T{&cyrm_=fT`A9grb~ z5V*xxy)y1o+xM34JWln!F1;+#mo^1@X`6VBwEDaebDf+hF6eD`!}@i3c3w`A*mm*x z9_6nFx4BW6$l7~PAG8;A4W`axOw^kgPQ|2;)0mCq?Jd{iClRGKVezzR zAALF4or?VtrPvfX+)ox3QcyUd`z2;G;`^Q&sN1eOd=t7OJi$y`c&J1)w>xX_22@x} zGi<6le2e-`Xg~8whE2Rm81>joO)c?{wGR|b9?zntw!ATI*jt4O-Im9ks-F9~OHs>X zx4DVD-0e`ToWw7KO zrON3~y54a9TKKJ1~$t0udyR+W)KQT+`DbeuIj?iQ}=-}zY!VZHcH2ev5O3%R)$}-KYHKmZlut9YtM)bTq*buK6Q<8BnPoNk zft81bvp9B6%RX-xuyBd3(hRzx)^+H4oaNB>7UyBXKKDBbPOi*JY;+waY!@NiPpg@i zg!oNO3rJ})tpo@y7?B8#;h>)+7%A& z@A+bz&s`fS*s|k=bgpt4yP0C;T$DQdM@rU(!(r#<>%-ZfxqZzO^-`y5dIUkH z$69C)%f8UPTQwUS<-XVOi_O9&DH8$)>2J_Iykn z7`T0-=0f^*RD5jg8Zoy%M(cKs$Ycx`eA|gR^FH*n6=`kITG|RNFCSK+z26;{OAI~L zh^g79nD{-?^4YchSs6_(a&FKx8ZLpvwj<5;5{Ie9g<|>>=Pj&pXiYHN@wDxayK|` zKJKy8dXH-rW#Nl`IUjq3`9=-dZUplO$JO_ho_95BdDp64wpz6VN&GkQm&=4UUe(o! z<1BR!J}#*i!yt*-WO>)Q*Rf&ZgewQ;==mBmv6u*FFPfqR#doHk4RwsTIn!k+Llbr= zeE{2j7OR_hzK?xaM8+2&`C3pY^Vtj{AJ0N|E-#ZSZ0d10GBqx?Q-6>jkJ7p)Jk+0X z%cVKWxk@Y1va*HEIA{#Qjg_V+ zvE|Mm_vKxGXmd2aahtJpK4$NG-PVs(#kIm6S|8-DB$=N5sHilPYL2pQ+CY8mT$Tu2 zeZ9W)l3!u)_w(9FI<-kmXTw&3u>&8sg={_*qoY+U%V7`sqS^$>{8OW=$Pc70Um3>B z=hVVhb)pS@!6)y1axr_N{zSAhN$4l=R(CY};ZIPa6A<&x)ak^DPo*v3uA;e+O|EA4 zK*$%BZ;C%oBFA~OOW|&NNYNX%;hOP)s5RGwJN5M3%bMcc+4mc>4u?}E_^G=kU7MWB zQH&@XMHJF_XK9Q;;@8-U1Bm~HBrt-^hUyt!_+0Zj$XYfvHBO@t>6hrMA?mhCsLYwx z3Y_t6cMPyQY{eelec4Wb&XJ$4St|IBN_Vx+MwW{!R)z+iJe34mR9CJndHBjxP1%CW z-z^~BV}HRbjz=v-GBU+RBUbZGOih3r$$8kYE08)YW_2Lowm;RTE8kA54yACS?W44Uud{fz+tGE) zEQC-N;grT1x#bQMeq8Y9?oSZF0t~;|-r3L}OCH#y>C7+li!~ zk8vd9jeN;!kRknBE?=JiDYs5Ulaj57HjTaJyPgHQzZf>utt_@)c3{meFZ1pcC+bxN z=d^JyExU&Ky*$L*X1cx4xOlisy3-@3tGJ++DvvQ$JyR+cW1uzAZmjLhE}Q7FWh4Cq zQl{iaS9-4|9hEW2%h{iiGQ7e)6r^?Ky^)*wXZJG6_VfCCvuVBV+qN5(0%;U@&gh2d ztYf*Ml^m@&lFgui#3QyN;3L?Tt$8;sX9CJLvdpxlt4%v?ib^B~NrNl2vl`wGdH(+6 z4{P_`VM%?;&WA41=9<4apS92SsFQ>_KZ&t+Q|SnF{;*@@sAARdvZkh{RAZB540F|` zbWwEt2>B8RPadW#9ok`v2h*L}u8x8KKqpEMTv3wI69xL>WHw2el-sfHlWsrqA7JF@K%3B`#r`($z0_j%erZQYuvXTB7<{3v z6Cbgf+}*hBlJ*zv3ymUy0&bU?DE1)c@wIPf4$7a2?Jxamdb?>Hg0Xs(F#coJCJ<~7X9Df_vFf=X_!x@sNt*zkiqbsNQp0aF+ z)=C2NdfP@y_M<1x+@72zlB8h_treZaGuzVg5ecYl9CsxumTk)yCK z=t8=;jpchLeiBX%;mY$5NCR8^Iq;%Ui4>QzW9{SdHH}1C=~qLK=0Y@GGy73dxSmWo z+%kx#zW%bQbD)`=KE|RW`Q(Sv<8ixt+?$fniM<9jl^0;Z*R#pe^)@7HMkuzJOaDHffJ5bxNCQ ztu`=qZe0^y>z^6WF5t+2-0Qzp9MX>b`kS`g;cj)m+yw#99ewN$Dtn$Jsp0H22J4LI zGn!W<8y;_6sQ_Y?8**D9A z!xXAQr2VM6qd91vX6#aP?CW1=SWSau+?yh)3@ZVQ@JidJPsT&3txfCG=*G z9R;H#!_dArXEipl#2J6_uFwe*RQnPb3Jyd+xxhU&Q^$|{Hw)Vd9rpC-<2^a>VX{7{ zzaY4b$EllB*k=9z!`@eiRk=Ok9z`%vFpw^f2?$6@mmUNa1wlk<3F+<@If^uj3Q8&^ zARyf!Dj`ajQX5GT>Fzsg3+(MlfA_ifzw_VsY-R8Dtu<@nop)w9zo@ge$ytq97>ou_ zy^3NwPm!i>NsN-{%HuS7`susQr-rIGIhnM+H@9k&m-h?YVsL2a{XnbPa#;OISEsMP zU$yVsKgkr7HvI1Bw2w!e(Bp~pb*zQ^4x@W$uz@OUY^KS1X*@>spUJ$q{l-~ad?7`+ zTL(dn$fV|>tw#*I4GJzt<@8k3XbxwFJTS`Px9sm#5aj>eStC(PZU%Ogk*R*+W=}U5 zw+q)yyE_hQF7IkSKYwknX29=M$L+#ENmz+YyH4gibnW8M9(&Ggd~wYadSJ~pYz zK1e|2dc-5vZr}k`#kHrj&J1%gnowElR;~o?;^PGj{MVG$hHz)5Ryu2?N|F4mj|Yg< zkk$y#3l63dd2jV5RwBU8MNe$OtEsXYbhy zPu@`#J)#pdqHF6nLq}2-ANv1#&w2K12Nb+>d9~jec?`_0-6C@uXAYVAxU7ycluZpX zymcI17QW#$XI}S}!lHIH?R>H)&7F?>79`8;0)iw$dZP~_h6}WYg83&Km?KoVrn*1c z2Z<`I2;0B6n#dX?Op*48lk}scpit*K))!1CV?+~YJA9QpMU!l=_6eEPBM`y$a9sx5 zxw42!(Hdfv6D@x?(!ss(^`pVi4MJfO`G`>Ra=HdqV@!F(3p>MQ=J~=*wE%I0>Ru7Y z?r~jaSHYE)Y}dC_kccS0vUDe!_}($?(`a*TmTEs{T(c*nDwrPWxxHI)&~hE-ZU!?) z)~%!p0AErkeIO1VmSqLo)zsba_@}Mi?qHz6faH?KkZ=N|VPL*AZrmN|u3V<+t*~nR z-t)tYYwDob&PZ5D6+cisAWj5XeJijAvkw{sx+@5t*+wKQh%8P8x|UxQqzz81(UNH& zKR@^8D3_?W=%}4+r44d?so9&JSL$}ue50_v5E`0RQ#-`&i84$~+b5G*0r9xTCRCI-FJHAG|*u_uq$<{zWCkH$|^+A-8Yv7wS}Zs`vv_=vA&(EIFUl`{a1Hg zoKvt4MUYOB?}khQJ12hTbbxq~t-gIGr25qs^?7hNxF7ftT`vD(b2jW1Jgn6rTqAzS zS<#iYX`n3Jaabke7k6zAgdZ-1x$0cPJP9L-4`6f$k40uFe!ht5ya_;K=8Itp7_#Mx zH}X*pp1O*I>92RZFKyHvS!lvE&_&X7eD(S`BcpsJ9>7b-%CQ<7SoXVp0GI{?GEvy0mgOpv{AEFc7_k)P#t)y zumJhw9a>?mzg9$6n}m7d%04QXfu8Y$z4>eXhZlq=0}H_7VS-D(kvLJ5DOIRVfMH55 z$Nkf3gUQK|TkH|cieEXjTKqagSKZ4-GVDr*!>1kl_i6_;8fB_`*v*CwGQBUJtL)Wl z)O)AyY*X6TQfhtLG`Zd-rO?)sg(!SBvDg+6-F6;xi-%c|f-$lZ$n8j3SpigzPT4fo zw$lCuZ4ve#oM@o3*R_YKq=TQCI z9^&rrT4|9^^C@sho3F*4Z5OqdZl%V!EUJFXdjIsHhlRWOt#$eq(Z$zn8Tq*%P{1&nZS^3a42Xj4dT9w8jb4+Px1J zj53Ybq|j=TK1|LrQO4prJqxh2u%A$Ye5HMcp{pKB^Y4Cie`b&N3IFVm5NGyLB@jct zh0T}7(Kd83==}Kwp%1J@Z6ktZP44W+^p1-Yt!mNmSg5Epy2^^*xov|K=0)I=!5`fg zx%6pqJ7r;%^cwBng_b!jCe0$uJ=#cF59fuX_22ru z1-c)e=5Eu@eqbzL=(g<3+v)30D#WIQ?d^4bJ>JpNVH+D~!~&Yq8!j(7+%AWV z9R`OgA{kGH;UuYXJ1Bo^%@FB7jllR@oWF4wHrA180_=mNd$g|mF0z6df#DMsIai&1 zG2{i$5uSH}x0Aa9v?iLCKHVA-kTz^+Dzev`wYf_%LPwz2`F)O|W_s1hl^ExgaEkKb?2eGMnI4&o zcONQV<1kH;vwdDAPQ>dEWtt|L`tjRc;?+Mey5~*pY>HuY*G@+uQ8Jx{*4Yv7en@_} zxi6FguT|a*Lj650>bwF(Dkr&G8zmy8EK< zBYohou!D`C&9G%+puq_g;)sj;f-n0vcHf4{a1%HHVtLUh@a)fnVR`6J`e)+vK$4}8 zwwt?7eKWt_dX}NlAtI;iH9a9ab3xT?dQwBa|(qatc!E4qTxs(QmM>W+d7>ShWk?j@`-Uh#W3s}vX5 zR$ezul037_R>9cq(@^8RI1+Z>!ZgoD@BpwmV!ND`DZvPsP*YZAe=6wWA81Vt7AN}j z`tlK(T%KkX%W0LkM_H<|zeG${i*k_&AGfZky+ue!b=i@H{2YiT@$HUCoY^+`4O|u9 z6EuJB7K}4KIK_z$qmdLV-!(uBlp>)YEgZOq@Uw=COCyUWJ}8TGi+twQvj5w`xUi5k z(~u}7$&}*IE3zHY^6`LP6`9HU&~mW#6@)vEugq1MK1x{n_HAUjr+Pc-W&M`n7lGX$ zd;Fw6xq@MqES}tYW!?z*sXmFj^^a^_=K^e1mz|%L_9!70EKrylbUagXBW5J$^MYUu zUH72=?B${1smJ}{!@oEK#qIg|8rdx8W86lJpBCjHr;<7F;qgAwi!MS7v-!-xWXy;x zkG_`ftC=lqdQbz_q&C&e4L%Gu4m5Gl*gfaq?W2N1m6)&{Nn5p zf!0yK@GbuD@71*0HHA zwa23@wrZv2M#<1{cBeOiGM#+iD9ekND$>sV$(6-NJ!}G7tu1Bq;0!?$lPFDM0a{k z(cK7_C5|g9=JQvJy6shg&Uet>gjYXL+$dKe9bHIo7tgfzK<5ODh!3c zhfxm&f^VSIOPArofC9Vz60{C4C9jfm#qg*lTq+o=k1jB*#yq_&P6Y8ZC2}eI+8rRb zW86xAImv#YJ{OGbl z70EbD@fU{!b{0Vb`CGjpnxd^Y&NN*_7)3^4G2s383e1HtEc}#CL#+GcZSt4AEVUvY z&C@*!E0&FQe}dA$KDpLXMGZ+ttECj_n)${v=Raiwj#%!tb(ju@0s#~BQ#eyw!A$=_ z#MzQ_d32Q*V-WGcG%I}3W?Yg!oEp)WbXK><`S>0&OukZ^XYfouaarJP{-|_~o}!n% zwxF1L5E#^Yt_Q{p28ID8tXd;JMb1Q*b9oHE*4pRk{tCd5_2wHRPx$!rB0jMXM_pCE z1OI;LrbZ;b9UlD3|` z#r$%rw}})!s2c*&qB}!=<^H3-#{(l({Kp~UiXTm`Z-kJ7T2TQHXCwkelX;!u1Fq-V zzukuio>&Z~LKE&fSGCPuGngcB_a3j> zp4c$H|Mu|Q6|s~}YP_jH(hmu}Y)Zv4K-n}##21~e1Q+xP*|*szB(9<5^J)>!Gxk{g z6Ue#^Hpb0HQ8{oY<{yFolE-UsRGh%`4RF26b6s;Y&Mm8ScDa-f&zAD*s$Y&7UBg?i z6fp_gYc1ST+`AA!tCCXHQfp}9#gdXEGEBx^kfTd$)}Yr>6zXRl5ZksTM|aKKOB)uDBuuZfqwnqTk0r;w*Don#2Zot|eoRM7>hFmY}d z{}G*G>t_AE0HFt3w-eGhaZaYsP5Nz(8J=Csi%ljww#_+qvk$1;PgOrqY->q;Wa~s5 z{U?6oWdhPxu<=$los-pZr@@82k7>iEZEkD(j}|y;A5VSTJujV}HvA>T#2**~(rqb| z@#Sydg|!W+00LiqIWyrYlz(K>9l_N`MLvh^_Nt7h{I_%2aP^;Kum`k?4(P)|on&~z z&TUe*`z>V6*JG@fcG;UwZ|}c(5GEKFIMFq}WSy{>HDYDTY6`HM-RGFI=AF4gQHLE%r07G>LR?d0r8v2>U4a)|1`W(0LJ zrtx zA2-YiRF~9w@{nGY2}I>e+}gRDcW3@#!-zxNN4EPj^)3MYUDNx<<3*CfmHQtDYud== zMB+qBffo;^Ni%Mk)CVzMhv&*|jrKwEEudkk|D*#LFmof1WU57>rH{s`tpBYoW_!|bD!p)iAwhgub5_`2euF0*nYM`z|528&{jL!kI4#7lhfH$k^&=h2YZm3 zgfTi<$G9qOZWgg^rD}}PJ=P}D2#FGD(_1o|H{XxEdE5T5M>+4O6VtOL?e-mZlM1Mc zN$w)oydRb0&|6Bb8>gCeEmk()hFthEuZrlhEex$NrlwG9=R&?~fmAjitQnRVy{PG) z=J6J!9(9r)(*}!X&&DVe*)~{9pW1ooc{Q$3jl^%YwDh zCV5xb7&qHT6_-BA)>dlooL|bEnEW7BbpiwQb!rBnqCIFjwtep10EmqLm0^7rC>i{A z`!UXd|GAIB-}%Dpe}nBo@uY1@b1T@Lh=tw^zL8)PDvCOk;)78(KGrVTH+1r0A|d~y z^OlUuz<|F?GJLV-D!cupeOr{WWKWr|i$1U8jQ{v}IakjcaF>f4M5;=ysm8^zDsUeJT+yaG~nRVZR zYQmI5hq?j!$#a|MX8}@q?$9UTMf%hSvs?pLonRQ^}6p_ zd3{flVnhv-@I#l=#>AWzRw+kHe%*J3q{e|!aH#596;To?9~RK@QMiA4*0mLgN;(f8 zLb*rLi@DCFV`_=pqV4S}0||ZA^a8}!9T2|$BNtXF4PT76c?~$ntG7-I4Kzv>5zDDc z(swecIgC$d@C4rcoh#qg3kdZK3L#ho(6X%jAxXARF4s_j+^&G%uNh@8UqNW5XAEa${e+$b6xaWfG6vo&4kJ-|Fuzjr3YR{Ix;@D!x){)Qr>bh#zwNH0`rb zbCUI>CybvGe57LGsUEwcBOz5=ID64E#I%4FIseUvJ5FA|YE&@3aILKh1EG?dN@i^8 z|D$R=1Cvnz(E>h*w3XBmD)IrircY{j#BGZpfV`;K=Gyi9?x8Hn8K*vk&g(b3-#?pb zct?$FAk_KN#mvB&gQf+XS)XjYUrYwKMXF<1w4k7_w|&LSZ2S$V@yFBRF@$&q^ zd6IJ^b8&e)c5(8}vImuc5g!n4i3=|j?Ax>wEt@uT`7;|a$$i@J)iY7jW}4rAUazp}*A^LP-Bai2GWV)AS2@b7#@S|ODL$+`3s zRlF5lMPAuwfJHg-d6SHgwQjY?BV8yS&g#h1sXkP=Xytp*Pl$0~hB*Ivk@&8`eio<| zfO%y)$v zP=MaE%V;fjR`ZyZzYu#8eC5gWn_cclM#!lpk(y8~FW9o{ZG*gMD(lq6TRX`Y$b)fy zx7&SG14@u;N=ld=%IMN=?cr^w4pI?16j!QE4EVt?gHx^fJ=(9w z%Q6Sl1k3jm)FcX#Ee#%B^(&ka;*4{DHcv$5G*$OOFLm+&{{?$U=y|_A5HS?cOoz(S zs^j0U6CN%a8=jB4-s0~G*|998hCP5O7v)XtY|3PGClv|a<2dZ1ojFpcBDiWlAgVzB zK@GT@7Q++g^9?=PDG5?&AK4ZY3Wj!OYFP=T8uvw@YuR`qe7^Tn%|Im?JTuvJy`5`I z@djdgs)d)QVRy(d^PvjH_;rP&!xAw**$T8g=^3w0fUUQ5sw7#*3>6r9)1i!@FAP0> z7P)Y1=MGKfFJW7#j!&`T`__k189t}d?f*e2(O+0Ps#P+&W07;wEM*~{>G>DLfVKsY z*{$W7)0!)rBLUy&zH^U2Gd_lTwSH=i_p38R4Lf^?&=x{DtafQ#cXKj3mUdYPi?!Ls zpWzsuUj(WPk$qFjE?)-3NdYwbqWHdekXeoJbEy(sDAUhgn`j%vmsaKWP+a0R)TZxvsGPG58?EAs*Aw?x41|YrUlT6;n?2tU>93Em z0p%Ew9}gvB3nmwyMjhlQ3m!y;1B0tTjxM{V8>(J=y}FlCcQ##6^1ZWiv`}pX?Q@~k z0+#N{nqq0erc<|eE=&~(m30bm48?XrEfKO@$e?uP>a(Metg7{>z2Gz;8M?-b$}~<3 z?}~exl}CK;9W3vo(}QC2mVBkQh^Kj!+G8oM&U^E}S(*6?i(oN=yuk#$k7lU_WlIy@ z*Xjn^-)q$q`1d!N2FAMjOae#KwS8>1_^To)FYN#XJJU$|`oCw(JrbAO519iX!spmj z_;P5Q^<$!}2v9}S7l$+D2&TTGKQS1$>bEIqm#^Sap#YnrrtO@;i;fPq61(5r{hVF4 zI9gNjPRAsw6)I3ZjH3En6`rv>m9p+%RS;QH#pxZt!brm@11Plk&G_@|9_^Q7v#)k; zZ0xoN=fIlAYd8IQvg}68@`s0MS(H^ZcCff<7E#z5OM8O9KwxEN$cyuFuW^00fAP_k zm08lB!r7IT#OzzV00If|=@=c_%4(T=pV!-;nuEgl8!{(wC)bmW$<207eNHSj4 zg1K^sq+sEz@_38w>XpMMHp&))^jGTpA1ZeGydmZ1FpL1+MX0q4G5I`#uEtKwcp>ms zYk7@KawF`tv1!1!WpDNZ@)U({H9$Ztub(>kl*6(= zPT^dyW33>+UIeXD@j&uBj-+2@qhnLP3N@heaN+7a#-Rs+qy5Rcp}RfkI+@9pUx+`P zdAIzyJuW_ZPgL?<Nm+Wbfm&_zg-*-{N>h~GgjFuGVhW%TI9hpu+VB~y3A~M*!)|=tj`OcG@dya zBg;}WiHV=1cj8iW81$`Vyos&C{aUM)ykNT=`+*|F_gnWvtZ zl`q$U;$h04E&lS&EAyMG-k<|UW~~v)y5v0gQz7{Jzx=J$=Rqw*VoQhm?cTW!@T#To zeYj?RcQxHB`+802{56;_&s!G_p7@Nw1w=!6t7Mq62Z~NLkHY{yYs-5#E=2ymIsEBs zv%oPQ1bf+H9*3ui?fvEDNS!FfaD*OY%DGr-+rCb) zv|OI2IdYxcby0aQ$(T!le5&8zeyx*wwTxGk^yjbYG(FTBN(w2x5n@W~%^t4ICng?v zwIU34Cqbna!I#W6R?}rf{b5{+5b|lS4%iy5jLvE$@n}|MUhyyUrD5%T+??_`F!D}u z(c-M#%DiGX%-r;57g02jJ>%;-98T zZ~TuxK0G&tzxdkbr_2seib3%!C?I=QevRVtot?++5RfcgV5p6SD_9S0KhHNYc2R$5 zdf4^~t;Lrj2^yILC?BE&%dobe{eWvhDTWx5BfH@raeMWTg7-rUQL?id>kw(0(yDj0 zAGm?}QU|M88u}VLIe;`S-z=PKx%kEDD~AMwyf|8d1X_Z5%Lg1sMa%@=%fhn$Ph;Y7 zDBmBqqCy;whD7QKTC^`(}&o8;H^9dhl6^+kC zq1-LGvk0mx60rUHIBjGlY38ms`>?_k$9|}o6H`TwI)!ajD9(-Q1&Sjh@6n{6JqLIZ zTHq4&-i*c$v}+80g5olltZPU+!BzYue;Ut|Ky9AS_(XS15DnI?-Tqkec%eq-CG^#BBrp z@ih;;#k?Z-ew;>Pgs#N|wz#%6@W1|97=K6tdL1&enO!j-_UiS!<9TsR}eTn#2D8$^as8W;{ zGX))v#XiABJ{FRcfu{o%5J`vWpI?6C_u%1&{=c%nxv|B~_?;ycQhMt(A4Gj}DeWWF z0?*qvqB)j2i2Urs+fu*r?O#!|Xa`r~U;c2zHa35?yt7c$UZK-Fe6_a2ig$`owj}b| zTf6NX$J938@vikfOBF~N_3I^p{QeK2PZB2EE{AbVdPrBv$jkEt8b{rFYkWN0v##iu z&1Hhrqn>-Ce#<>=dm7_7AvEwYGo5{p_IQk=vwEVz!&9z{*M{tchdk6&U(Dh%z3cCJ z?4npjB;WaiSb;O&9CvY7nd^ebD(lRMbAFC^jYjn9jO$X+ochWnf$kWc2n;%Q`wG)o zp8Hv!JimT+ZeP(PziMk zik$@;W+y=$KB2zyiFV_Y4Y~ZA2eI35Ak15aPvBN|ju8e++>+oX#J%0B8%z*6|33_F zU7H|6fV05I3U5O5t)P!vHkOuvMss*kU>Y|*`I|Lv9O&9e7HYgs&-O4(rZPY42445% zidQ`AQvMU?u{J}*4fop*U?xlC)On*@8(X3P!#QM2y-ojz20h=0vfvHOj4S}@>r++c z!tr}SVyJ&&h3lRizQlZg!Er6O~UT9*nXH+ba}ix&KDE$U%i4_rJi;F{8Vfrus8jbFfd*&71+HxFy0S;le8 zdH|ztA`1)+Z*0gETsxKjr6KwEQB2f$RSko%u5-n2kKlTzmx72X6wJl`eCf#AY%9D` zxRs#DWIHo?@MiLzB1&FAw!eAdbrD4`yf%z!7v8LgDOgvGy5_!(?h?;6LByEVoaBFg zCc*cSECzVft@>cx&9TweCwSu%4iL2b#0uAa;k9v0L^$gx>j3MjXHVU}LG-(v3L>_j zy(k{%UjNILU7K&kgFle~=7l}5HLk+z@*m)4xW0^^P*(q`Q#hAr691{wwTt$jI{iR$d@t=44pLhD7cZ%*EU$FmQu>W7MkA)5X zuY&!HyxO(xe1a>Js|)GRNKNqoiY>ACUe(r`Es3tq9^~NUn6a(Ni-}2wYEAm_fX>5E4O06^tyK7CbRr2IvRkkQc8 z{MCVCTW*Gr^CTv z|AzZKkkPQR;_kE`2>UWJ;@8>P3GK0XqmoDNPh4p9!Fz2!QRZ@TuKCZyNx@*jsJ%C;AXMS$KSua$a(QuVj@d9F>qmG_*|Ce zv<2l%Jvh)f4u(scwO$t4z!v}cSK$~FB)j0{ z#`7`DY#zi}rWkq#r?C?491T6aW01&LQQdjK{cG--4-YoZNh}6s9u5!l;ZE9XA0T?w z^-{P`@D2vIVBA_XT6dtg)s1j|^oCF$Q|M?*%WrXrXzNzXS8&=>8U07J&6K1?a8TsU zS5(_zM>jq4-$3|w2mcBuF0Xwcln756|9J_|GhS6xNC9&zkzb{@t&PUCaQccLd9*O$ zPHfWV0pz%XKk(uS$=G4|4K}7TCF*AxZ*TXb<=-nTENqWS z)smzYvNPjU3wTYWo8Q#f__n}4D6IL!V0w^>#aR{WCIxfg4V*cB`c3hC(dW;f8>ruV zZ0u%&B;&Hm;=7{}Z--Kf(MgGidPh(h8X86w6^SS*DRqZnmTsunc35*jHON=-a7`{_ zz32XZevX=DK2*BSH}rj)o14?=%YVV!rX}Z12M82VGJ4}@{_){h>Z>nb^a_?|+Uhzw z=n4x9$6F0kN?*Ma^P|{FLQ*z2XZJZhB`Iuv)bH_YLJBpz>n~JtIj^Lsh4l~)*7*AR zasY);N_{m**+DERB_(BSl8bTuw_iX>It z#3kLTC;O|as^$k;B9?lOrW!OQNIfM`?%QHuaAS$*&?RXnK$k3r`f+mDgl4UG44KaS z5<*4~VYXbE=%+=Du7<)zZ{dS|4*hs<2SFIZ2sU>1oyxnG7#Db#&fm9ySj)(BG!bPse+ zO&ac?RxvN#Zw?LC`;NTGwi_O`Dn2YB3lF z*ZKGA-Q(p9{^j(J$0ZBBIt>gBEkjwB+w)zP7e3~gYqdl3^!ZKpZH-_!f)@;XcW&s~ z$^)?Xe%9Q?KPyo^FDh z+uTf^-EMK-Mc#M^MRZ|oY(GnccR-0^?4BRI zwr}dr^Z0nr`N@IuJnJEg0*$5wh4~sLmD-OVDYcg#OgpX2LdC9#i8mj!8IKVd)R9x-s<7u!Qya(>EcVP!FoMI!}p83 zc-sRQ($0Opl@aHWTs;6jfygx7+GKi0S-Q=Gx>JEiW%?r;W=A?g+=-Zs0$yuMnC{xO zi(k)dFea!Bs^|96oHVLfHBAgf>wZD!xh^J=d1&2^%T?j)pZuFlF*BYxd6FDdi1$Fa zBO7R_?wBAoFF1Nwx&t3GR=w)!jYr)YQij#B&(?0&W0cqdM;rJCUF-SJaqO=NLH_S`E-1yb3h%U@ zZc;2?m>!BsN@6uBn(tpC|47CrH*@3JMma2n4`<>PsD1HE>Nzx754y!td%XV04P8;rheSgKJJlWcy}!cXy5xCw51;Ea)4xWwDM9>aIS^ z&dbY#QnU74%brDOQDXG*<$*`+>S|Nh6I_H2xF-~E`DMdPyetKaKUGVDE4KcZ#rN%_ zq^I{&RCnenew+z*uG3|47}n?TQD0N@nPy-zTw|yO5Nd60waDpeRyOs8zJ=0d#9(?^ zY}h2|r79w&E@*AADMEc;ef)SeRLGw5VkqCe9v$T@BTvU7kDxH(xhgu&tokKvWhhL(B)fd=P&oWUb3 zUzXNoxsOb0_7|jBKYK7>jfCgX@Vjq3NGU`UR_TDhAKgxU5#FM;w)#X0i? zeX#@X21>@38wDYJ5hwxR7i&4WfIv5%i$nX+l&evn*#jhD8gos^W66`yZS zjmg!SsxLb-^6>B=oqjdjMAeVtg<7EiTfx|CS~e+DqYI?`4~_S69&7V@Lb@(YDw_vg z4s&zpnwe zzM=#;8O4W_&bW_o_vEjR1bhTfPftGc?%%$(=W-#31Np5`anir0Qw2uJj^@B{2z0AQ zk<&^7PSew;2jto#KZFE`KUQpMU;l-^JyNrK23?+}q_B5FUA$fIJ<0C)xNxtPm6g{= zuYrXF@7sL5l%l-D784dlczC$od|!~|2S(w$+z@sT4n1tGKg~1QU**kX*!-KLqhq^Gn{leyXY4^JUm#^w zXgH!Rdm+&{d2J0Soc8hQy;*_+31p*_l(YMD#Osv3o>YYk3qq)**;o0{e06yitM8JN zlfRsPXaF}`jy3Mx#x6@=2h+_|z<2Sd`xaM+y?PgT6uErg?KFeS+;!M)XFEH-dKv|m z%%7Zch(b}Ys%YB1p}W#)_e47ED%RKdRbxWT3RTe zsrEUePico;7TYlWSC#6N^KA7@O#CFg$xC5&7R_vjt-8~&p*qXLi5NFE7qYDk>`aQAFP@sf&`d%wZIk;ua8anAyr-wWr>l z3smfUQoQLj%=Mb5Wt zSS0G@Y9liJR|HY53Rr;eV!r0TWpsp7(SIf8!z-P53)*b5H~ON zH;jyod>J10&BnMma;gM$6Atc*f7ohZVDM|{j-qW8C~`qzaxhjY5lCjavdF&U>BbSU zyHtpyUnzlwM&|8RYkyTpPwqgtcWP?tDbldldJxK@``n`DXiP$lj5PcQ#V_WuJsQu< z8_b(Rxi+F&E1=s3`z7|{l^NhR=&#PA3$tH}w2%QDSV>~Jf-b0$@+a6z@|zcVsDL%| znKNgYnSl$25ZBXO0K-gkR3`ibC{ztuhaUZyEEGDt)DX|e%gxKX#mFk(Q{EB3c8|LkhEi(8-5p1AkHS}b z3HhYrUVk@Z0Fs<-_%HNV`@L?jPb6)reu>Bzoy7mC{?{ppv} zOoe+=;ueF+xTOwck#R{~azA|jQRp}y&Z9!>SiJ|7UBjQI?8X*|Ih-D3fKZv1?aSbx zXOOxJzi4|P{R9;)t(% zb(4koAO6#R1FO8qZr|WYN4{lFBsfAM3tytZv@VW~nMK!JhFY>DUx-0Zf)8g|(A6Je z>et`j5C6W&eQM1A2bC;A9K9HhVu9x+2pA(3o{|+Bf4gsf)T>jjfU#ph#paU^R@p;o zHzl%K3n%c1vtp6wAm&WaetO|&N8QS+YB)Iw&5U9gYJ_K1{3yPCN%WJ zrIg~00dT8pY$Rh*O!k=`YC$ns_r!blh@BL6g8DI6UgPij+$l!F4kYI3H6q^XD-%K3 zZ67V1-LduD(=0M>J!9jl*;90Mbmoi0*^)a7KH;4hqgft`?pgXQe|FPlbHp5W4*)IQ zZ%seicG~NH*N?+dU}xV503acek)186tgQUvYU-~L;O|SnQB|4mVZ)rc*ALIleTCU4 zwI^o{WkEhC+)o%zTI^}%sxZ|IfhR&)zyT^FAQcLjB_t*%bEd?j0W->;0)g4fmcWF6 zfz~hMU&JyR3CQCtao-BSRVi`(Y2K|Qw81_UVCgSUH8z~)e;>qN1DYnb4w`q~;8dxt zt=-LaB!k zFLxiZDCX%hQ@7#~ZO=hLf$XzV?)^Wh6Qw2G0Q9i~TMrhLaOVufsu+3!KEB}Dsgrf* zjKRM|9@T)EIJh-0lrotSq(jRN+5!CDD_<|;0!Fkkw-LVAxA>x`+#lIyD;t~s#gwU8 z2@|H7Mz{R`YdhSaF zrxF&mx;)h&W0`?61{^{{Ds>GP%x}?{guSLdec3$IvOT4Fu>7FFB6=Ot-6?{|p$ZNl^4gTq0-8!S6Q zdGIX5KgoLR12Kp916vuK0^Se;;yw<&M|!vF))R0uX~<3~i>-F{Hqe}6hfThke&YhT z^s4zM*2aCWDH*I{g#6zQ(PgqgLjwaZ*n20; zqgzC_?dFmnLiy9jw5Wb~1txd}o|e*UKdWHQVS&%{?1f|i8>Tuh&e%c3X_3P?j73Sl zU5ii3$~u{x)9r;2o~*2_tErk2A0BfZrKX{=e8uS8u>t*KZNmvZOx2(F7V*I=KiD0t3DPfbBp!VZP09rRzn~bjZw{ad6ZC50g2hw6yl*L* z$;85f;52sMB4)dLE&WE{%@WvsKt)LKQiZ>`8SIssbs1C}TT@(LzJ2q-tjuKJ8=>;< ztQS^0fBw7*oW^*UJ1G_tc}>iI{6~kNO9+_%p^{D>KbhrwHNQJJIQTAHu7R!c5Q0y- z&W>Utq6p(IhIvh$tUhM~s3vGV5Skj(9+f;R{qG@oNgF>)E~THuy1oUWL7>Xw8^{G< z)6M{f_(?K2b7OeP3!9pnBtTh`eC&W+I9QZDfXyEJ-==R=foTt07xuSQyIsr>zFt{TFYwa@uX`%m*2f`9lznJ&TJws%H23 zHlNM6s~{g+FP@QN*Q`sw?;PA(j2c!3%>c-MaB;0^~@=P zY^tlP5r*O|_-d7ssYCH3503=oiBX6*J{hqp24!Yxll7rz5tgX6QU}ye4*7MrWGC^<@qGo=L zfFcvTa|fZf*cQE51^)XPwE5#@G~>0WNlW+12;DolRl;<7dKv}VC_Ro~Sjk=W%W-(# zzgs+5*b~+*Wq5UOe`TIFEs61;D|_q^II@kEqGfdFE;iF#G)45>>chlR#tCk zi)IU-Lo#sb>JO;KHwZeat7~l6(@S`Q^jGWe3dLfTorR8;NIzZ(8cYgeQiIGi8Iy@D zp!eKqfQMlfWaUGa9;6^4(9HLc{DaT_i(CBBfDxI7<*%Omj&|RsP^%DkkBe{-z~qw` z@<31s$`L3oeDnax%zdhHc{HksKbl#37kKRPsU+1uTO%KcuBiFa+&J=NNGQI2Og#u; zQv^0pLN4T`ByhQ|W*J?BfCHMRu&L%*eRtfMOz?FBI=odmaQfkYcSA_-i*o4){e|`d zvcWU&bMWB`P2wfY2l$Yx%tP*Ac_Jc^B0o^EQ>_^s@~P2BZ-L(doLn z3<{=t{Fb7c{bA9udl34|sHZeOqMykbdrjPv)n@X3{MHl(BAi}3afcqA9Y6ZNVhCLa z!iyw;Nuhk^zhXvhY;4Ye|NeP4cTnwQM|Kt@N-|s2XhKdJd%;XGpoC0b9N>1ogVP#r zx4@k4AmX9@OFi;u(YYvz2xJ$-g{Y7VFn$Z=z`>F{_->N`ACroRZ@i+YNOAtraZhk$ z3NTg;7a(BerecRQV*H;p`-97j9h0$o7(kIINkx~;kPj~c9I4m3AtUDUwTu!ANTUoq zFM-J(Ds$#Laa!f(D_1DP?fUvxGQDvpaSu?~T(5jg6u<{)OFS^4d`umwM3*HyP>CM= zNF`bw*)w?I;owt0g~TfoC};u?o}5*Qn~F_OPw)B1Tt0jv-Ii^agHV2C3P>dYV)j5f z${LxaaAC(Cqzf^Qm`~}t1B)1)_m8j$80atlc3nK>)YXnW0cCZ(o?!ps0l?c5o z0ev?$H7x)Kn_nehW-1dfdavyW{_QUH2J<=$v8q3KukY-{7xI48E88xgW9--$x7Y(- zfK&03|LUB7DnO^S%PbCwDJlMdf#l3}d-p&Fy6TcU;3HXI-caHytABA@MM*)qe_AD; zQWtaE3?7y_C^5i~z=n3@+m=I0XTqIoO&xaC6*)ZzR|`-d7Ob1xua6p;PD8uBe}oeS{e_lKswdi(abqBs$hR_VxxHV5A7 zy)VV{%Gn&wyA_jh=X^_hues*70~6v>od*XVi!uTASE$tC#Y_4Bh4J6GwAE)Ag)gK0 zCBU4Lpd%rTgLEWA0#HVL;Hsumt@sr47V=D#(U|(o%*>)~)l zeFZkYaNBM^%;v$BJP13`9YvXCO#lJMOSUqQxhO$)86i{9RP5cQSAKqePX1vlop^`v zN)hOMa|R|w-aqci-(c2m%=;*5Xs}o(HW}O1q^Mp+DjyBmr-l}m%$O4;5)`UrD3k5- z5@}_WO~YdDfW2Rfmp7;VVd0Es)u^X}mWBo+#zPbqU-#(~RWT$lQATl0D{k>ClK-y> ziQR5n>F-7?f79h~U0HhVuZ5@Obx_gz;*Jo8ANS<%ZiM>TA64a=8)<=sIqr4tcq}3x zp9E~1qUj{lKHk%@%Ww=IOueN^uObi?r1}paD*VnX`+ZWgeap+sh(E?pZ{K^bz;)u? z(c2L+d89Jp?jVSz2x0n|p)U{YxU?SvZ?S8j=_~Wn`tiepzkicgRK(G|;LeSg*EKcm zM}P;Sa{4idhQA>k6!(Ncfs1}J(dCT~71uM!0|OCHn2H@mnn&LdLVi}=S`V|)=HVM@+)=&* z@nd9MCIV@BP)d~e2dwD<>cX)zQI7=oGI&?&PvR4rCFa1@1GJ)N`T2t2Mh>^`_aJ4c zhU@?jB^4F_aH`jwh8Gz^P`?B3imKL4!1IF4Ykdd zd^u#15PKcq@Mp!vAmf0TLR_qQlS$gFPJ*IO4~zd^OFzX z{@u+)XWS(UAmXOq0o#Xc-OO-XkBsYrJTRs`c0-z%*$Z4)3Zx8Bgoo6k5Avn}QM!4c z@NpfUNx|OuP*=ApL3c9I_F`98qmDctdY8G+b7OBviA7TZ)THGOhWU9;qmCGFut~JS z(wlz6!KiL&hyv(*y9&?G`FoWp=D7v6<>~Pk^;_d=P0*0}W79KC8o=VZlKLsugJk`X zRbHBON#RtOB+N)IvffxLGEpd>UII75fiBe9;q>fpY1Ebi<-dNgbA6sbfg7tKgWjF6<$gox&iNa}^+ z=7=A}J$S(j!Vn!4Fxiz%^u3=vy>0ON?;vGT>e+w9IU8gcmsb#-1I~_O-ET)1hfL(& z_Y83L9(R;IM1T@zzS{Oj^gYxR!oA7D&3?G7_&=@x6=qv>_5l}QPXqe_@ZWsfQ9t1D zAc=SmP;RuQCU`3q_ipWHxdPc$loF%C%$2R_MBN{9iJ%h2_|ertmjzO5l-Zvkz|z@JWE~H&GD=JUd`-9$XkU4d;0T3fXCM00vcHm1($RrO4u@3^y*;Ty zcuf&MEz``0OfeMtduC*1l_CGXw#!3w={jKbKZ3n{EntEMls?Yk1pc44UE2*f6bM*H zh}Y;K!_w^RtV|g(+*y_*4_|MY9H>F$N$}&pHYH9flNR5Ftv>L_HDmFB+f*{)LXV?} z5FHi?2S7%92nYynpN_E;M~S6BrhS2qi-ShZk`Vy&@P#>Ew&_nsenUhq=ZY++D)Q+LRuY8vV5dqSIAP6Q+suwQ){`9qW{ zb^s*i_6h2r8X_k)y(3zxWYlFgpOy{5NC=({{Cw-_)29HsKc~FtK=YZmXxtZ}>z{A+ zy$>32?E-QJyn&KVy5$;aO*~y;8-3gQKJVh;@vKfDP}* zJcWGl{vA`LqY`p&%^~-T@<<8YzP?!jok+sz9^m78p%+ z!uskp;U-e2rf{ms%^)^C?bgGwLX_~FmBj)w+3h!#iz;? zfd|X{{n}+Eu!tk?5GzSaa zYX9i5><&)Y41fXnf#7)BEeytKK@^>;TND0ThIiRd8!)-A9@lJlbL_ejANrvzL>+dp-xs@XGVmI62De6tO{;F2lM6;GTs-&3NQ9X zX0_&Jj0Dsg=Uou&X!Prd#jqK)4O+GO$;TyLIlDV3!8)muE%~`ZV$Ok>=XalzrTy~B zHP_aKGwVpe?=q(z4cH5f5KLQ+EQU@BF|6i>)(riVU;QO+^ShGyL(dV{0L#jSat+|* zIvARX1D`Uxawp{pMiPN9k-;L)4$@%)JV!2u1{aB+*v=-kd1qRBdcL&?(Vw=E7JEL&e&N2fI4!0B!%={fIC z94q~Juj98=NothNWDG+x!7k33CxJvhs8x6DVv;)XwlB=>+6%a zbm@{0o#4r8{(;bAtgOBOfa*F>PH&v+w%-{E{tso}9gp??{{N|rB&j4Lt0GDW$zG>Z zNRgu`w~-NLCbGx5sZl)AJ^SUm*_5c3Z#bo_Q-2486t2T%D_yW)}FWbpMK;;8>%5CY?IlaE7MSbn+$^n@H z1JoSe{{H@t4qyIj$IhJ*AIWECX70Ph{yQxtn~jnKpU8X(_1q*+Hkdts_G}O0zV6y^ zmR;DiX_G-u`O{vTC-2_9JA6qyz>*zEK` zba+rZ`OpyTm^hc^=E|(=rw#Z=bJA>dbTlJ$WU{~k_CB5NVivX3Mkk(rY2V$0nd;bw;(h9gnM@IkRJqkmX+dNN{f{G@vjF8eAXz z86n;tg#pWUx5`TXlf^jQM5ZYPs<_Jz9|1Q;O6DeJ?b8^{uEO@IA=AR(xydG*vT;5) zr7Ir=^H~Bin+3#o;BYwh4HTPuVqY`<;_J)%$&<|Mx1T+GHr{EXFBuwP7fBOPrkS|t z6bc7_`t*rW#>FATwo*w=LnH8}y6MjcmDtNs5H4&wv{GcUs;!{E@-~1RMbr7&iFoL~ zIGm1d>7P%G}4WV|2tr;767rKoPI1PRJXhk&`CW^!;h#} zgb`poQR_(BHDfS}Tfp^;MX2J~xVX3kp)r()het7++Mkz7wEWleNLA&a%8ZVURXMuZ z5|$?M2nhHh5pgG7!ROB>a2x39>2uW-Sm^<*xC2Flxa+!$k8c?~Y zMtG_Hz!$=Us5c7reBE_v_U8ro^@Nsxlc9G3;p-qM0hb4YCa9G(%xU-`XTR6Q;bfl} z5)x7e9AZ_Q2RO%Z8s{4~Zd|@1zx{&WDz0(kxHcA2l*8qVnuTl{(LawJJ9bbnQ>v2= zIDMa`fTXhFP|@el9oOkpZmruuVdQd<{6`VvgadPL!J8QW97nL4u`Ioi@*;95ZVdn| zLooWe>E_1&z;ZsifZQZNbx0Tw z#Li(zs_|g^kS=319|i?6D6lyiG3%cG>#yx}`%Wstv-8dzP}B?MxJ7%rKb zp4dPG&Ze?k1N^L@RZBXQ{>42;{wAlCE*PVvfL&JRgtBrc00ut#**7oRvY?UpOQnWW zEZ9$2nyB%wuXRN&^4;;57m)!Ehq;e+69*Lg9hsU{m$X6?5|h5im8 z!-X5#^(HE+|5HV)t^^gg*mRqxVMD@Y_(Gs1GlYr-uI*K>b_(WY>-!l1vG`4hlel*6 z8d9kYK?;W)=G;)4fWL{}V{?dYz3<+Bf#cJ1CbV^Y?5n#Pk7n9ki599^mCgUx3f9u)Fz-e|9Ti+xP6V=9&dvXU7+v zX6D?`e-3e^bm|Fx$FC!WBE8fl){>^w_^kM{*&`jCiCCWL@PBccktX>4xsR1 z5AX1&nl=xBgYRaAT4D~0i;KrYv7euCxyqog`n5ImqeXaS2EcdxTv|HB^(Nw1IJI1z z94xX@&J*#%Xo3LB&!i^n44H72qX*646{=}#v*feboP6-`VJ_%X{tY3*=e3y>@hFe}w;>Y*&s0_2wSHIOZE*xM&UW;uRns;e-dY8W|wMp4Tq z_;y``*Ob`*Mfs!4Cl|4pGC>Lrv5(1DcELg0@#{m>Bo;~HtKt(75P+=505ZB%MP%p;?E| zk**o|XhS&m-iPV;EDQX0Uv`jpb8~|lD|}VcS-1YR+$b>`Y7wM$O&&_^H-KpqBaon8 z)aHi&Ag!IIFZI%c45S~g1)TE-^37NcRchn=K;df3E%A=pcaYV zny;jmKTU2QtgSHmLycyYf9Bsth1K1SniLR&gRTILfCEI6s-v}lzp8B5?0>Yb`3sb- z@CzkyJFF=EG03?E-$hndmSPJ_osPQTD!O2-3RQJYO$3%gAamLP=30oN1`dIY@xLNX zE&3xMU3h_|$i7MA4PdDtglB`%u0keu1^MO2#TKKTG9fQd{QF^-zu-@o2fq4bIKTwSN6 zIUEC6Q8&JB{eQ5cd1Vgq!x=C^CK)_*Rdyu+Qr;+6Nk-7reHRE^;^(Aod&kDm?Ikjy;F9U&g8)^?kw#vjVNkzj4se_JP zJ(r5)U;+;>ud?USA2mHTY&T>LCIg=5m*eoShX3<71Aoh16`Ng{Blv>kEC*GFAmpoC zstf^5lRTYai2nv9`8rCLt*9i2j_f>CZLz&l`2^X6q-2^Q`NS&P=5lJ}JfEeeO4P*Z zv7^RG^a{{E%#nwj`p?M8$<@xBc_8Dhyq?DYf+wfqnI9=zog*r2!!qvwhqEV>*pF_Q zSxq#`!+5C#r$G{&g!~R?v(8|NXC<)GEzG)y>;~$_!)+m32oB!0y2o_iq4>w~0FFv{ za}Is4BMktNvxcfFf)v&pD21NV4jN&^#)^dvVFp7yFm^^O;g1G%52tG{|B=4QvFErBoI#56`WRjt-PGu|lFb0xD7gxb=@l;&=QYF)ryq znPv4~24Kng?ojlg^50ORbV+`@E}F4{TG~0Ek{9l3@;_SETt7NC)>*LE_hdHpi4!Lb zK(PsRVv@)Oh((HC5x7&lKF3~;;cUGsGICC(t#39fVCw3hpSHFyBzfp8gk{sx*uqI}e`Qipp9flLYJt@@4o*QHBs3`0yb;iX||D z$kNQ=<14l2a6O1bVnIpC;A;32$}mZK9F8iFq=dB-P0yk}3_<&$CM1gx8WO(n;cqCf zP9ELdLRy$ofRy>^O?Wigt@Ead>>t3~UO@^3c#`3md_I>PWv|U;q`KM#5*r zL*0Z1{XB!(7HZhAyRxb$*Q-*}vW3WSqucO2A>pu!?ELuQuAgvDPY9SzX-dj}A$TwB zS`Tm&8Yc5d*4>R+clg5w+8ory0%6uMSPO*r_!%xQKWe~AA%J7Dsq=hT(?pUvL`6mY zWqxE<%ZIU8SE+MQ{c$RcZ{Jf2)U{d+a}W>=HU8Kzq7gLgRdSy9_bTLh$&5cm^1PFe z4(+bWezgpm^^BpDC+@^>tZ)Ep+}LnuvcA5)4%EB?3ZRHu&}(PFlTisMZrNq8Sp*;k z#CHoCeuvt$7J8`0Zv%?+Qd31mW%YWHY@^X>4l1RXH*fBsPFj$8vHm2^j1~c4LX(_nd$qS)Xt2$SB zI%~9WR|P8M)FV|+#X;eIEQ7Bx$hJcU?i?z9Pqf?# zWZ|q?KJ%3y--BDPRBpOG{mFG^gmR&Hh581Ar1DRGI^zws6|`LYfJy^kDPaSMCi8SH zZvy?%=fIQT{}|Q$Uvm4FIep1!_aBco_$b!^c+p z^iI~rI4jX{Yj36J2dkS5MkXfqwP)_G=nVhyhUEkh9CZi$!K>)#lQ{RlprA;1V~MvS zz{!Q_Lqh+uOf*2w^L?oV@6F9jl||&ImaU^)9G*MW#)jcPSi2@QrV0l#< zTqW|(OSyanLNNQ4w@mMoCx^V!2l#QIut4f?8^Y9ho0YDv?&|0<*~W1lY}bs*cGI_4 zzkYu8>eVgO@d%kh;0QS_@QgHv7jY=NhRd*Ixmb)ioGmQlN7HddSzGz~SpKRTkM8U8~R0S8dY!)ae zEbLwDqAqZu$!`#>N1zjr55ZA~tJ|PrD4Q0p7Wk{mD z7V&EntV#d(c)IY`O`IRe3LA6$;pS;UU*jwRm?*&ho+0eg!r#wBDPSKQH?R%XAJ$O< zBo2PryX$n^s@NiSXuD$A(|u*i0jE7d#*sfz|Gx9)E=x3k&e&xW@NsI8QUZ*O39-&& z8fm9>7lXNkSu5bD@JP6&J^Ll~|ARgQyLlrbdT=CS_af}7mB7R1P8@;e7gUshykY-_ z=LvCtLZglok0=$N;wNe!>B%}oj?E^;b5>sf;m#oMi`9)Y^&AJ48%V}|YW3WuEmM0V zP=W^J@t)4-`^rv1$bJTXa-V7#3%ahAO5BdRPpmJ0NAR(suul4d3E}UNW!JOPh5gF` zNpkq53m$ZotV5&jkZuYlisZnQt;%wbu2TkZXQ2}8#P4e-^J29-2gL{(BVx%=7KGU0 ztBRV-PU0WNDW^)W7?!fH{VlQ{0EqHXph5#TXVXO>vp3cPjuTxVl-VN~3d9jBV5ko& z0Oq_^ucLw8lmFM%?MX)&CYrUp$mTkFe%gzQ01{X-< zh~lQzua*FiwQF#I(vFk+hu3x0_ctV(b;5XBG(jx~NEsoC<9{7of}#un&_cK<)ZwT+ z-gL9%2ZS$YzX{Ap#o|{Y^4F*$vD+_w-9f7T$#ie=m(UIONz!AVLXE&S7zt6$Gzf!pTtSLIu7ChDNs0HU;SfAWHuU<^c$k^kSfbAst|^MlJ)KoJp@< z@gU28ByM9I;yPI$4{4~e3(F4*NCzz>kGk>YKP+jp{ewfCaSrhu#F;U~c#fbn6Ev)l z#)B%sws2j2Qp95fzRrIY3fs^E9vQx^4#oy#lt>xEEHgDB_*Ym zj&Qr>3c0|_?=RQ=1Cj@nMpbI$Pv%Rg!ysZe8-iBxxF@RfPXuHz}-8zt{txT#c z;HZY@SH7TsKc!rFKJwl17()Yaq)+8cJT}9Zt~~l0=2x2oJ_;~2d~W^XU8=nytg*(} zT8TYC6(hX~#8SjRqB(Kr0IpCtkq~9I-3bGE2&!9AV>ifTcB0_KS@vKV%$3tb+5uDj ziQl@fo&+dKRjN|%1Ltwl)BM`D)pQ-V`%8cGuUMJ;HU5A*n!Er0gEzHm

ZZ>{MTRZujumxvk1CY70cn5V$+^`Yz`R8)2|{k;LD8~-x}yb6EmT6-qX zsnr5MHg?CNq~Ow90Nt0f>8QBOCnLKlH#2SpRt0ezi}(Dr=Oo2|v5U}h_3o+#_XyXb z>%Ht?S2NV|G?cXt%?mrPCzIeFuG#RszP>&l!2Ns}R#epwvtaEvvq~HW`B7}whu6#B z|6jJ`ssMr$K_Gw)0n|b=;1^FR(1@JFqM|0Y_fg^IFx&D~BA?Gd$ z7FB>ZF9qrqG*%xGwN-z6p2RmbH6fXT+VkVNP)dZ|WJZMlPc&y-7?p(P*?d9&GN+Zt zA!miy#9+H3ZK|yW59F?1u!WKsa3%ynzpm_C?HxekC9ngWy5a^Jw59`E@D{crgaC=C zI(Z8L_yPV$0azOp@6p9!pZ-9($I&uoxk!>Y0EhS7VD@)s$5CzphnIS<0d!X599ZPh z@3ZXuveF%{aJU~ZKRoy{sR}C=F29u@Z53*Ui1Q5PQjlbc!4ZP^3cSuwiU72O@Hn(q zu`idOZ?%7Lv0Up`_-xV1iUX^E z%cbi-t^^O`dKJTW=YQBigr3l^LYJY;t#sq+bfw7&i?J}EEB}<2m*31TBc%c({ZO_J zT3nMK*)FyPCA;YwF^t&hOsY1}%_@ow$Pq0AGvPPDJW!;9RfPo|m?KUV578O7a zb)+NrK5^<~5)z6YzI1vAu#nJv{D^`%1V;RVnjoZ5zxq3#?(`abrEaQq#Hv2&2KzxoI@ER;g!GjMV?syK2x<>T5ZE%yUK}nN~Ac)tanEuTyVuvsNhc_e0Ske9FaUCYoTjSRC)_woMUlwnvmZaBYIixhG?j`BSm1s`fxbKdX) zLVSpWLBKbN!;)e92iz7)HV2NX>_0U$G(gGnCm76Zx+K+Mv59JR!}4%>CU#}{CDth1 z1O>$UIYYbOneS{OoSj?7{7zMX72wa~F;?xX{`sD(SZD%ANFcIa)UO29tTj@~LBW)l zUs_UfY6A@n2*!)`N56jtIQ&0hf^uOLDT-YMd6%B<*Dow{_axV{7GUxJYC-NZ%?ueD zJNm2nI(Xw%|Eg^k((9tU0p8J0)X0GHFa$B&RpkUB6eu82P)9%lGGs)+|C7*j@_{1= zd(U9JYE8BL8b2WW8GZ=vL>8TsZ<^)ma$?|QfecmysWQZfc%Uj56_99hGBozyRXqR| z5VD`9WNT|si06Qy0hRJU>#z&m@Y?EToG(zU`WlvlMFP;MA2dBd=E?)6Bs-KUvg%a~ zH`xfj?{N`7` zf0m<=DoFa-?v@KLLwU6g##DaQztD3HB~IvU5Hq)eLj(R>C^Hc0O24yci|8Ii2SZ58 zf1XXaGgyLc9DWsn_zI`k^EbTDEf+4nH8V6+ha@5^#=y=l5Z`80et!S@#cZ~D`4s;d zPqAT~h+=!SR6i>~sfmOfx}XQTt7`q>?{%n{gJwNnT9>vBD3Av1JN0>5Y&l_SMhU%h z$i3fMksLQF<<|3Uz`GD6gYw>&MVlv9y3Z3yi7afpo?z7;fPF2-oL#FPAV)dfKT2f4 zCr~;MKvb2f+@w#jEC4qYv}`P>N-o)7sZ#n=yFc7_7HDMCH3@Q>;3tDHnR0Tmq~ ze61ROACI+WaX_cQcI`c`!K+B;*$&tN$qEu~}kcgd}z|+?9euudc3f zSQpnrvjI^34{tIyL3b%CC>*BSy@X|Szk5%}iV)ceN`{WE09Bv#^z^&FFCjfdpXbK} z-}bTfnN^tJp9vh6f2*R$W>eE6xy|-`_r67ZyX$l4LL2a@EG(Xsw5HlX-NEL=T_hKGpJh)jF^|hzv=uzsvm=Y3fT?(12f1 z1>^-ihAs{Y<^f2}Py&XKzPl{qLO+c(K@W^{E@u3acVy0zZHC|_ zIr3t^b?Myz!?q9WB(JeG18M0w0@r0k$5MkD1=#|WAMl&?pc zt-UKCjPO(lBhYmSu)Il*2@D^o1L>&H4>sh(Bz(4ctKw?HyPwy^&R=f3(ILW+bEkcf zURHqduzNNz+6pcs>AtzI)Y1mVQ*0-Y$4Y!VOO^yl-v`k(nn!2fAp8`fumYq5NLB|q zT$L>B!4OXE`rhjUC=SSl@)$CQZ!pTbxg5_w{k>7LE(xV$TUU+l%V*;hEvLFkNYM{^ zHnz29Os5CplQ$2=8$W*Zh{N+F&l~x0M3qZeb*rrYDUg;SdEZeQjaY3al+%@n)aHPZ z3T6H+3Uw1;3b`;eW(F06LNYf!mJaAcBYHg=%a5=k#Qbzl<%Z~OQ?ff8In5aqL|qN6o-27Qt`c7@#5;EHV;`U{Fyk z7QyNC&pvq^k%d{`pz8PK!% z{_@BI?E^q#tOhs>!bOLkh);2WlXSf-8ncF%Y~Tf9GwQRZ5kceqko>_ix&0mz|5tb&4?GK>mzw@z(e3fe+Uqi#qr(AF!g*1Ro~JKWyyx5yQ*p zZhB1nYDHP&!3A$UJ(e3cJS9aOu3bB&Ejg8R?ht9gq6H_*Bfvk0BOJHXwT#T`?G>dG z>gkmIEy0%sU>PMt0L<21$ydIMRCb=;!<|wZF>sQFHsv=c= z(MX4Qs4MMy+(MVU57q(#)G*EJHQ4uW1>l*jz2C>+t!1)PLDQwAxj2hdm#*iL`BVhS z*!+gUf*c4Hx5AvM29m*oSVhnLTp#m~pfP(>4!Z9VgMq*aXkS~5ztD4w`e&Ii7vQK- zTOu0jlMg5gO7sj9>6c2V`SWlB?k%onzhf`Tv&ro={Nz847G%5o;E2Va!U+9kDE(o`=9NOczAH_}oGrzRKExoo`{}oM$AXf%){vIf_?%(Iy*G`U9O^BO! zU+8wv1MWcRFU_SjkmWeIisRkQc)Qi__tJ%w*1lju!Nhr({=L;5NlU$^h)Mx>8|xiA zHkZCK7}aP@tY>lDj-%-t3nJflQHGKOVg>ePu~tvpieeC&zLDLxWR84N5aE%d?i&FP*##B=;! zgGlp~k&kNz7-PSr`5GH&-tI-2GoL&D^kV7^LPErDqFHWz{r&bY%$*RW4ho8WXi?5I zObljI`hfk8x7i}~S$9*@Z%13niEbPi;PBL}iS~{QA$TIGpEwU@m_T=!nqaREo#8p2H31~wo&F+1kn0!+k4aa`qS7Xez$Q#mK!F9Q*1YrA-I@O zHj^3kviy6ZO%q9TUR(G~>x;5GUMYDcrP+;U%zWe`Rhg2Yr#4qX*3CEy$MtdD)WP#R z-OZ_b&t*8B3hv~}gf;_*VjgKONQA4094+Duw`+_H2n!@=^I|65uceY$FBi%TyeHI& z&Guw>+mF+)QLp^|rIiuE!8ntV?? zvXSTz?EuL|v!3^UZBky$&}L)cj=QBz>{MAjVOtDL;oa2eUH#efDUNtZ*X^=J)VWBU zqd|yU-kb!@W8zlVkHoo-K-ps7iGESr)KbBKRwnj^9wtx`m-jMTWyAw3)8a61WnEM< zhH3E|yW-_RorF)`i*c)7xbGWUarLcvz6Yy6$8A*?VpPnQAYw8}G>CM;S^e_Z*m9tY zag&*s4(K!_*=nSjakt`pAB46VlSZT5N0Z6`B5l=ibCsGJ&})z`9d19`sh2t2E_Q*~ zGME{e=))UEGAqg~Gou=Gxa!qM>@0~4IU+4%J3F^W)c!(Re@o+N^BfMRnNTlFg>@*S z%1=sbnUvV~lodBqE!sfLB#m{S=&ZA6Pf5JX;W>DFHsl{p@MnxBW-PX^0#*TZLdPB6 z*jpd~P5(-0ts!hxN0$X@zGO+n>G4QeR)7H|&wTF>4$ne0td*qYZ#QZ<-Ir6{D3shj zWuHe=ONu|6*yUAfkul-sTnt)_GJ(+0%!e{`e2&WVCNdaiFBO;kEkXT#9G>o^1%Xb` z4Ar+gCTVa`F;5rE1|8pST3%nn;JLZaw7(;@f9RH^C8qj(;B zxe@%wKwy<`KCkU3?|f!rtw3b;y?qV!kRZo`Ho*4E+9yFSmx}-b5Y8QIo7s`<>Ik~sFrW! zIf=W^W{s%x)&hZIuaM|O*O~8IY3Qyj7&qSmyEX?7W42#71X73O(a*ewz`BRVb{=2+ zlyV#-)Z>xONg8W>=wh7AI2k^{;YrUYPhpW&FI6Q^;qEm4dV0jyt?Eq^mU56?kMzw% z^2KaJs%VFq-n?4Sb;fk@`(ymmkz&MKo|1>-@ODGg@)U)>L+<09afx#ZgH}53dYgm* zXuU&Ph>J3)Kk92gJ2zajOVy#(dgQ)uSWCNBGw_QiO>wUIdG?u8FSDr0FPXhlm7V`X zo7haUwBdXCUWSo7!~KL;Z9@Z1x9iBWbG4%+H#0t_y-fWvr~KrP*R26IuUmhgj2RM> z92oSlEelBZ&UZ!p-mr7_sk#vKiJ=CwJlLCI0CS2%-?Z=h|2rjaGNx#Ug*X^HH=l4e zC1bKhm_N0PXcq-zUUNk=C)wjCAJ#TpQyn!V0!qSna|@pjc*VRYB5_HQ|JyyYjWpzZ z*SuDYRQFndjEU3Ci9~q<<+-d!dU)k2-ggsCh_gX9hJ_to66SAXb}eLlO-odu%)&I& z8~GK_rN_DK0SR;XV63=!@^r5IjAaoCvrA}{WRKa9`Oa9!Lt$X?UlOH_TkYX{XY;OHNUJf zY}g5Df8+m^_V-Z9QqF)%RXDahCzKPh%4OL1X_ zy)lpG>`1=kPKCeBFfq?5ZTxgzbK@^T{IIUIm|9@_h1JW@a4k2L>_845+-dj@sa&hMk7tbbWUXHZU5H__64>Wc?!zAt&(|zU)~W6?R-&c<{T!= zBYTx{%dOPen}NeVe0*M;M01d{z_Ga=sEKhl3^pV{NS_`$re|48v`lS}Oje#m)^pxKY$Ml=!FbyO$lBVD*$3Gc)e1%JUBt5EgyL) z;JP2yQMTyEgg|FGXjwZ^Q~_ede%ftmeK~dk!2Iy6frM+z66l}t=w}t#b7Q^q?t%*# zD|Le6IXS3MTzaWn&1Tf>EP^GiKfkW(OrQ<*Tkvys9{d_q1Jj*EL^Y&HwcyMnzveg1 zB@thxJ&#F)S}y$N^L?zK0kFPOw99PrUQ^%)51$0i;x>k$lG|Y8366~nS;UG!!F_fw z%u^L`)6<%m3~s9bO_zL??Kz!+w{siD=66)$bn5%&t6GJ{WhPZk64UGeGj(|}K(w1u zmDs{Ab67>(!U-jLeERFGNMT&q4YfKpm?pQzXGi)oNgKEX-wz~gxi?qC;n{503LQA# zLapocDM6Frb9-PQi?ofDw29j+)1>g|NU)yH`;rm&1=-enyN`M&N#?_-GwD)NWv<1f zWOq}5dK~Lz26saD$oMFIOyDDl!AH}Ps$ugMm z4>mP6G~K8SWWR~49^EkFlaLkD%7`O1;TzLmK9{}g{{A#XrZXBEkzOBfZrFEfAJD#4LNPMR$g8wjP$9JB!q?>_tGWvlQ`zb83b1WnUUM7wmrH_b*!8_;vU)U>Y3Mg4~se2_+Qw}9Y(|8 zhz}!!)vyOS_qLI2(zGd%X5rbA*C4hU4257C(g~uPL=I?uk~o8hTvX!lV>{c}N3QBk z)^i;i&O>-o^7N#AR<+LoQtit)a;7eTBn8}h4Xq2Fb~X-PA-THW!Ra}jjhctSugs*0 zF;eZ2md=-vPl5mQPWrS{X8P$=-eVIyVNjuw`dD(8m)`Ao!>OKXAvTw`_~daD%_K*{ zSIq_Iu5Vjh8oL2A${k#aIRA9TDA6w8zu0~TTa7#XmHBV;#wPCp@UTILn@Sj|khMYj zj3y~0&B?GXp38qfrtL;Bx{eMv(-RGif}nSX!=T*1}`PBj$?EnJSpMXswB>E@Nh-if__iHAydy zPNY5?J0;pgU#n-Y5cN_yf{hh7T`fMyY=@Z(-68fhq1U=Jg&QALBWpLCdy)P=8COD$ z&tqcgbW^u%Qy&yGzdMi1DBD4Ee6(#!L`Gn*jvx>>4LZD3!gb)(J7A>Rz3eTL(alr6 zOT9z0sZh;iW@gtcH?*u4_`(^e#~*TdDzGis5WDh&@Tqj6Gf(Gbccy;p!*m7)cjL84 zoj5Vxh*P+xr&jV-)IxR1@dsq49$O`*%!^OpkMCu@z3ePMn+(aN}&bX4~(@M9yS;OKZu4{AwwFf>;RDi_!}mv5Ola zE`zbbAkp(;bGn2WZD{kT7@D(P0*+k~+M?H@W41cpw3JQ5kdWCEejgF7z#BL18kJ_< z^OSJQeZC>m{!-+(vNVC%>A`C;HPhux1aIL|sraK4&KN&=5cY!i_Bc}OaB;?0a(wSN zMBm{mNOIE#grbi+lZ?A(XKyZM#osbmX}o%>Ig@OvgjKV)GPq7LK-_l{?cgB zhxlBl8NbQl`Nds_4!L2i=GqN;1lHEsNrr}uZZsQjA&B4ST7S!>iLlPdlXp~IjgP1G zbFs#SI%7~!h-tB@lcc>%y)Y4AQ3IsTZqx6G-!G+*Tpl?L0_sF zq2^EK02vJ-VUF#)`_Mzwg{FN?>S|fT^3@q%hpqA49OkRcpBi2AWxk`9K|#O0?QYD% zLy`Ut-fs7-FHQ)U(Y7s|X=LsH+}ga=zSU7RYTo!k7&E(=W1pRwc~o|hK+HYrtkGFK^&*{Y|r8G;3EbnGNk&UIulBJvch4GRf2aT|rsHA4cYZwv{C2=~(sO4D+f zK|CLp(UEmyPI6nivcVv4T%r~~)iK3S+Zs&4e=LMvqx|I*mWuR(gvHTXFc)HR0u8K8 zY1DB83S$Hi5{Xi=&bxN4&ljVXvWK+ivKC-#k2k6_J7Tq#P~qi+_?b|l-(Y3-pgQwT zAcrRopYkb;(dbIOdzsJNkZZyharbs*_IpZ%C&@=81Brjj&g^zKi^dg}E8*^sCO|s;lbTdgi zq^C3I6hivy-8kS}FObEMn|s5;jlUpVr&wYQ;S!dg0cmfMP8yAY0Tkd;tpk#`IgR&B zL;Au<$!dE#ZKz^t55xE|gsfX@#{6zAgB<%dRHpQYM4t%LJO#B-kC+K$Fr2dE?z6r0 z@ktk3YtxCQ>DBM1`fD;OMs6or=dbIW^09KAqh^hT6MZ0rMv@)zZ^yxZy8Qk9J zh!8T(E^9mH5-@|3%O1p{22PRRICKqLhIv0QxCPC(?SOQ{s;Jd4#&FWcyvs?5Y?p3tZKN-9$BqXI|j&jbqg8x1ze6STILw?e=>D z{W4~E)=z%BwsqA#`+QbBU*Gf#i7N^wAX5HtpVQ$*j9u@=Rv68bcwr?;ey=FoDn`-$ZuI%AzzrVIV=QcLP@=Su>D0E`7Mn8e<$zXEug0zUZw*4S1Om zLbT*sZ$^_Eq+xlmtCS6GdT5lc1_a0uCdpZs%Tp%)bXI73h^Aeo#2O#7loHB=5ld#i zmgXx6fA>zJbguGP^QhsZ=mZ=n(fL6yhvza@<)iu{z~1&q0S8m8!Q?6H{6TLFt0PKw zXx(kwkC;phzmv^ZC5?@0KwMg?^IC@90KplgNV$edfOZ;M89QM+lsD?&9b}dT#zRGV zqBk;2K(zd~O@Imus0!ynz z3ckX9T^i&VwSU>SmWMEmhpx<_oe_?fMov(5u(=JM_c} zbN8>Gv(;?8&*5n?FN-U7cP7#PNK8_znS@nu(}oCHq-_QeO8LdVwvGJogLV7Y7q;4G zz*xb{VrZ9VgNPT*YfAnahyjebi)2VB?HmXpNdN5~peVHGnOeNY>Bg8NF%7kqyUu8x zWq5faN;q)OF>;GPkNv?JxG(Yg*5W#+isSSa$LQ}hysXwR8&oFScG%l|NXjNo_iJ&8 zuyA+rSV(tzS^qUX{8TAnW+Ah6YD$TuRBCcUg0R%RUEmFQU%GiE%TJ>DS1Y;7<97qn zK6b|gDy)*P!!2Ly1zPeJgj@Eu#OLnRi>;gVXUlrmY&`fz?=^>KV`MW!Kv~wi65Y&{ z{$?i4A&Qu7l-bGM#8$4J9pHOg~mJ!sIM z)*7?$MwiPv)lM9E-Oljj=XSS+ z`^@)#9C=A2tC?_IlkL?RzmL70{I{ST;8`0FZ=4W^&wSy>_{z_`wwJ0m?7E4c{b~(< zgPTv&4-K?5B+dI=PQ;er>ke%ZyF}=zii~YO1QeyQ8JOCFAcE$I@)@2;RYeZe1o9|@MpBC)fCU7I%1w&+K_ zl5J}|Hc=)^2(r%Ci(rtl?OMN24Tw=qAElG*$11YtB&t|jIJ5rNJrrh}*EOD;(_pAm+ zzdRF39hKwq*bM7uL&b=1)yVVDIX+yc)@Sv`szl!JBlpF3TaB&|q}{!3N>dZs8ti5p zl1Ap)2U^-S)BNQrl+-QA{mc_5j$7CHW=`F12`InGnf|oAyDL81ASO{m;Ii)T-!?rO z4~i@uY0%IHg$i95cuEfqE4M(suv5DKdm0EsNIa#?D>nbm{I4E3EmqLh%P9FRU4vVO z^hy1hRjbeZ%_(07i~gdi!uq3LL%T3m@0HZ%`{U-+iG6Qc8Km&pKA3!3=E;ML?|)B0 zTZKZ{9rb*b17dmKFy@S2>?!V%$D6Eh&$V1LNBpavX%cj~YH_lJc}0(Hn_T+>hgcaz z!nCf&__C*u`?uzlh|a%k8}qcUJJ3fvZC9AcAfUT_j$m&a)%_k$vE;#P>p>Aw`T;>l zLcmnkbKD6^CaHxfla2=gWfqAUg$%ylGOm3K6Jw&rne+;*;t_2#AmYtS>Bj9Sw89+t zy0;*F2bamOesS?Pa5r&*LUX0TvB&l}QZD_uL=YIfnxyGl zZs7j4HU${dhkO$}TNR5@`D~DP5tC85#{c9$xs^ITf96i=AQkkK;hX6gPGzRHMfeMd zsfHYu0IwDH_>=~mU|1Ua-PDKaQ=mRz?udd36Pl=SvpnGpycG;zg0V-}bwtiB+iSnB-^j-~{gv9jE*u?eY zvueRDCz1MgTDN_4ws%N~iX-YYU76>Lk z&DQ^L_Vr!bS2L@9IXwS*8L}3b&`XWvSZLO5WT>51g)yj}b_ScjQ(AOQWfDsU^9D&^ z60J^?etRVk`hg_0@qNo}^}LW>!n)4S&o(ztHHq7`cA9bZa%bKC8ot5D8%0cqh4*H( zcaiIrb{gk-t^1NTRQ#!6L@P=0qnVFXA7y;6v7V_t^;F9kUaUJ>nOdf{LLgKCGH8B_ z)P0s2Ux$v&rM&8`eihZPbF~b%-`>4B?_SwAW2A{ZdEvx@#Qgn7wk-mfW|G$pQ^+l) z-EYd=nJ<+jKxJgN zn2N==rKG-e&L?LGtBjRxh4M8+f_$wz8AQeD&M-aOABQK~kq)%pF~T6oexzXXK}mai zKf|(ndu0qs@0WDxj8zrc-*bn86glR_=zc-lrQ(Z)Td&lN!RTWX+*a2)e)Um`eK_}v zO)@bPt}!`#@4z%OBpFVaTIsweVKH;P9jE`L5p*+)zgnLFn?jvF$KZWpVj+n=^tXbO02Zpi(*7L%-~!$H*+CgpgQ#jZ~O znDcql*Dn_ZyFd;7e;>OhIaB&%UvZ$ofmUZiYsceAJ)SqIQ!;5eqV}xX=oCP^tZe=1 z7L|p}`eupV8qhgdKqhH-#l2!8c{oot> zF?PZ&<>1)M6OT90wn+NRc@8zF1!;>4%1riH$Aq;y7TCqNPTBKn3Ct*5s9JEbB2Ed! zSqYnWJioDJpoF#{ZDzMt)OPrImXC1psp@NCxAF7980ZGC;bi5)i^z@3!dQ1%ChNm;`9}BF zN5uI`7--r7;izwvO=k)1P5ldeh^A@UZwD=5?Wk-y3oZm(h~DnPKT4Q557T#x!{&9N zOmiLq06Bam43~ z21eXz{F3Cswq|=0ld8;!IdPs)mXl#G%UDR7uTWL+*o;trM)$m97L)aHdaaDfd8YBO z{C%FcylqVHoIp}jUlBRZnKVys{ejl4!MJ2FEA<$$mQBwat=u9>Ou_QT!-T$O2g7gC z4&xP(9jYa}so8Pyb$hl~HBZ%v*PJu_((@(C#HI{)M>VcIt0X@*bJX5Cdjg-}Xq+)o zdnX28 q3QYGlVFb8Gl`;IS~y1rdSbF4F6fVL5QrCAO0Lu&Ws>$c7uSLVr4Af4pG z(pzQD*cH3X$0QS4ygHIF1WVD&qbAp2nd4o0ii54A-Io%}qMKN@zq3v2hvn2_Tg0cQ zHAv0|9WN@Zi{Hk_ED)bXs6UU5wND$O2MC7WYYox{W@e)CuV^Z32n^&tHg_HfjZT*w7S?RfM&FDWXw z%;K#|5yM>2`3Tj6Uu<4K61CTb6|GIv-Ll;|Fj0XHMUoOHRw^MlW{h?9eZz(?CRZH_ zYVqE#S$IrT*~9H!eo`T1G|`8`-JxGbK-banc!iAJTwJI@O?18WT*BO)uv1$G;=4=v zuv8YV{vU3?XuaxY*XSB~&UNCfR!nd{hbO0B+i>>rhp>T*jP@YD>D|a=w7r4xnB=(u zoAG$cyc-PKXa5>}QF9ANa}NToO8h%=cejbNB_DUzCbF8V^?bZ1I`aq1wefX>nE-mH z6-up^XQAx&F9yZ+sgW@2J=h}YJfy$lJ=>t8RXfCGwD8!EV2i-+L`#*{-vwJ!ISyrc zifhVKJ`hIhM~{t{y0E$R+!mX!rj}5Drc-9eS-_Ff=AXBJBr=#_UaOM}w(dOsn$iCA z3%f4|?HsZNthQ$Rh;t03O+9_&FnKZ82Tx3Yz~Pze9h5`0H!t5?AXDqF5(BTKMz=As z;kFFStT`XYZt(B7i>x9}-fPviQ5Sq>H}67lwYzOKB$2E`xQy7L?SJ@hwjJI*m!p}) zyWmSNE0fOQX_v8O%Nnr`Tf7lT7Lw`=ywMoPhJn`@yk$HrF3g2RacqU|li%$O`X>GI zW1jpL>r^3o2V_RBz=8tHcsAir($^qf?}5RpA@9O&z4L)uxp!<27hISeu=O;gkxl}4MRteHYuZFYu#BAQ!>0U9%fw$+3AIqTGfQ&YkISze=-FIsExe7S; zk9N_Of-gtc}Xi0LpL#)*xIWRm%nCZdVl=JN%$d@q@Nj63ANc$eROO5@3;Dn2FSMAN>a;AlSeIIIQJw0kw9D{FSy~i;Brpv^eoQd-W zv_P_Rv&il?PMW;w&1TkfU4B-IMf zG`ZG#mbeG<^J=BNhXPbF4+>p=r!p@}8DNXVE*GnD;YdC5z(yF1tvVSHt`JHNCf%U5 zpkoY2a^ZYR0WM(c0P6EofgY3UxtgV_^VM~zI#0ZM^Xv5L6?a+gJXs~Q8Dt*J81ox6 z2so9+sLc1}`N8))4hSI+p4M-54~CgM9N+b|v8rHS@D|f8`qNG>--LPb-SMg+t}`!d zpN(|rDU5Or8Q}f`%7ht)7MBJ7eZ6-|_OEE8k2peRcPWqxRwOGuW72TjSXl;3(BV_J zO~TxserXt_5`y&+O4_8x;La!e)f>NnZqkk zb}8uMRk4w#Dd*NZeE0?)DB2cochl9P6vPp)HHXmD*Ul&@x$K@Px|3hK`syjn`+@mT zosQsE=BAw-H$Np^O(gG~>wqZP+#Xe{-7g%E^3sx|y0=y9DA+CFVhUCf+{MCNCto^D zJgn_}$)M-`Sh#iePn_(fI$^sy>wf>athrc9txQJU6N-QQHO|{;QNvPth|@nKaYAV} zqra3=>!6Ae82*i=3>7lpHH_pXY_vPxX?UaE79 zBBR9~_T1}e(g-7o{&Oe3u{aeJc<8n0#fX3CNDy{g1Q4_V2_a4o2fz&6dfcn~#2GPy zM}XuRNypmA1$`~zOp^17cPII0>})s`w)YSpCS0;U*c=%v?xJ7c(}-6c*NK>M4;-Z9jg#Wg&~ttGOmDoj zr(iJ?8p#j4ecr0fr`{@S7a>D5@*+&UV%o|pQkGPCf;VT=hFJw)HtD}uch6jP-`+Mn zsx15@n??5?XjNWbq#E*+eGpYjK=_38+!{E`Ice<%NXwHvDi1i;e?=7(}; zshiwek6PCV@b4GPUWPopx`9yEm!MtaL$D_|B1J)suJfP+Y%FUSh=ko}f-n>W?Z*+W z!0%fEhQtByc%ZJ%w??2@@_C=p=!fW#JKH!;AICx%Wx}hb#a+m4-@E0Wz~%!Bm_RKv z1=#4x@Nx&FHmjAzit-m=eidIk84R?v7@Gu)cyW9$j9oL>q?78u=y}g*fQPu~diHm{ zC34|(sDBIFt+t-*z`jHFLqxIZzdN;JT5ao@D&BYh#hR%HT7zDx<(afU$dB(o2)#6`ZW^@f)`RWv-u=g+S})PHe%@{F&2&dXD^JED_N zCD^Vo)cQIYeCD09>{U;LLyqGb7EL2V`%6HhZ4#Ve+h4<{0R(^psEGa|oc|6+HKBim z@6FHc^{XB4McC?a`pAhJ8@KWVd?} z+F|x}cW1j7?oyT2a#0a^51#eO>D7)My;;B153uCG5K1m@SzA?-PrJk!5Y0>v{2Vw(_y@$nR zzOXFm$Q*PO!U|BU92iQAGtJ^(y5L_ym3-P#ZN=5d;E{JxYvE(*IYAmO?+qO;MM>lHk{SCM<5nde!6#o3=oWL zLooU4U5qjbw6-e?9Yx@*wy0BIaLeUr)!hfUX|ZG_Z=5IcUp>=cYnqQk5nM2lJ=pBl zT6t9ku8!>gsR|VHtN`x;_rIU-%d?erU%W|dS~xPEw;3?(tWsXz0@E|4YC zw_rJaYBOdwn7+AJw%VXMd;InClCm?qz=uV-r^`p+;N`B#Fpv9Gz;pYoo6wGG-i2NCbisksEsO z`ENip%vbXK@Q2$zd#KPA036#N(8E~KZ{PH2I}e=7$^9KUc9)NGei;z(5HR{o>!kYo zm#0aD{b$RdaE4P@$ljR~^Y(7N=SHBq?dcbxF*9C#CHGLi7)w@NuVWtbRo3o zg!U}55ZSo$M2>TV-uc~sp$Edya?~(Y&o~o8qcGtR^%m`YntKU7@Ja|gPupa?a6^tj z7ZJflk+;MwX$6D-#kM$)T7Ynm>LW0dy)ICuxRAKtH&M9GqAl_{;(%aD_z-%LYcu5U--5V#e?~^6duiOzL&$I3J+J}$2$G|n-trgD zN{En!i={HSoi~U&;drVz2acG2)dr0yl!2=qscstNz_b42T+IR+OSC7f4T{}SK6DTd}$ z4!rvHu>1Rw1$e2rYNG(IDN<%Gd;>T;n;!L_VT+C2z-?HSGeMHy%YE4y%rF*E&%3

+xSu#F~c-ZenZ25OLoZTC~2l`hx@;&&m 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

N6ldGW= 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 + iTriangle architecture overview + Input contours are normalized, sweep-line triangulated, optionally refined into Delaunay, tessellation, convex decomposition, centroid net, and triangle index outputs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Delaunay + + + Tessellation + + + + + + Input + contours + + + + + Normalize + fix intersections + + + + + Sweep-line + triangulation + + + + + Raw + triangulation + + + + + Delaunay + triangulation + + + + + Adaptive + refinement + + + + + Convex + decomposition + + + + + Centroid + net + + + + + Triangles + and indices + + + From b1042bbe98c6524a8fcb42eb0a41a754bd54ae48 Mon Sep 17 00:00:00 2001 From: Nail Sharipov Date: Sat, 23 May 2026 18:33:51 +0300 Subject: [PATCH 5/9] update images --- iTriangle/readme/architecture.svg | 507 +++++++++++++++++++++++------- readme/architecture.svg | 507 +++++++++++++++++++++++------- 2 files changed, 778 insertions(+), 236 deletions(-) diff --git a/iTriangle/readme/architecture.svg b/iTriangle/readme/architecture.svg index 151add7..3aa236c 100644 --- a/iTriangle/readme/architecture.svg +++ b/iTriangle/readme/architecture.svg @@ -1,23 +1,113 @@ - - iTriangle architecture overview - Input contours are normalized, sweep-line triangulated, optionally refined into Delaunay, tessellation, convex decomposition, centroid net, and triangle index outputs. - - - + + + + iTriangle architecture overview + Input contours are normalized, sweep-line triangulated, optionally refined into Delaunay, tessellation, convex decomposition, centroid net, and triangle index outputs. + + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + Input + contours + + + + Normalize + fix intersections + + + + Sweep-line + triangulation + + + + Raw + triangulation + + + + Delaunay + triangulation + + + + Tessellation + refinement + + + + Convex + decomposition - - - - Delaunay - - - Tessellation + + + Centroid + net - - - - - Input - contours - - - - - Normalize - fix intersections - - - - - Sweep-line - triangulation - - - - - Raw - triangulation - - - - - Delaunay - triangulation - - - - - Adaptive - refinement - - - - - Convex - decomposition - - - - - Centroid - net - - - - - Triangles - and indices - + + + Triangles + and indices + + + + iTriangle architecture overview + + + diff --git a/readme/architecture.svg b/readme/architecture.svg index 151add7..3aa236c 100644 --- a/readme/architecture.svg +++ b/readme/architecture.svg @@ -1,23 +1,113 @@ - - iTriangle architecture overview - Input contours are normalized, sweep-line triangulated, optionally refined into Delaunay, tessellation, convex decomposition, centroid net, and triangle index outputs. - - - + + + + iTriangle architecture overview + Input contours are normalized, sweep-line triangulated, optionally refined into Delaunay, tessellation, convex decomposition, centroid net, and triangle index outputs. + + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + Input + contours + + + + Normalize + fix intersections + + + + Sweep-line + triangulation + + + + Raw + triangulation + + + + Delaunay + triangulation + + + + Tessellation + refinement + + + + Convex + decomposition - - - - Delaunay - - - Tessellation + + + Centroid + net - - - - - Input - contours - - - - - Normalize - fix intersections - - - - - Sweep-line - triangulation - - - - - Raw - triangulation - - - - - Delaunay - triangulation - - - - - Adaptive - refinement - - - - - Convex - decomposition - - - - - Centroid - net - - - - - Triangles - and indices - + + + Triangles + and indices + + + + iTriangle architecture overview + + + From 6c7c1f13de98f759838bac752bcd48dd791a0989 Mon Sep 17 00:00:00 2001 From: Nail Sharipov Date: Mon, 25 May 2026 10:19:39 +0300 Subject: [PATCH 6/9] fix area sign --- iTriangle/src/advanced/convex.rs | 12 ++++++------ iTriangle/src/advanced/delaunay.rs | 2 +- iTriangle/src/int/triangulation.rs | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/iTriangle/src/advanced/convex.rs b/iTriangle/src/advanced/convex.rs index 1a5cafa..29161de 100644 --- a/iTriangle/src/advanced/convex.rs +++ b/iTriangle/src/advanced/convex.rs @@ -263,8 +263,8 @@ mod tests { assert_eq!(polygons.len(), 2); - assert!(polygons[0].area_two() < 0); - assert!(polygons[1].area_two() < 0); + assert!(polygons[0].area_two() > 0); + assert!(polygons[1].area_two() > 0); } #[test] @@ -274,7 +274,7 @@ mod tests { assert_eq!(polygons.len(), 1); - assert!(polygons[0].area_two() < 0); + assert!(polygons[0].area_two() > 0); } #[test] @@ -297,8 +297,8 @@ mod tests { assert_eq!(polygons.len(), 3); - assert!(polygons[0].area_two() < 0); - assert!(polygons[1].area_two() < 0); - assert!(polygons[2].area_two() < 0); + assert!(polygons[0].area_two() > 0); + assert!(polygons[1].area_two() > 0); + assert!(polygons[2].area_two() > 0); } } diff --git a/iTriangle/src/advanced/delaunay.rs b/iTriangle/src/advanced/delaunay.rs index 151e476..0ac4266 100644 --- a/iTriangle/src/advanced/delaunay.rs +++ b/iTriangle/src/advanced/delaunay.rs @@ -271,7 +271,7 @@ impl IntDelaunay { let b = t.vertices[1].point; let c = t.vertices[2].point; let area = Triangle::area_two(a, b, c); - assert!(area <= I::Wide::ZERO); + assert!(area >= I::Wide::ZERO); let n0 = t.neighbors[0]; let n1 = t.neighbors[1]; diff --git a/iTriangle/src/int/triangulation.rs b/iTriangle/src/int/triangulation.rs index c43920d..b68a441 100644 --- a/iTriangle/src/int/triangulation.rs +++ b/iTriangle/src/int/triangulation.rs @@ -368,7 +368,7 @@ impl RawIntTriangulation { let b = t.vertices[1].point; let c = t.vertices[2].point; let area = Triangle::area_two(a, b, c); - assert!(area <= I::Wide::ZERO); + assert!(area >= I::Wide::ZERO); let n0 = t.neighbors[0]; let n1 = t.neighbors[1]; @@ -418,7 +418,7 @@ impl IntTriangulation { let abc = Triangle::area_two(a, b, c); - assert!(abc < I::Wide::ZERO); + assert!(abc > I::Wide::ZERO); s = s + abc; } From 8ca90cd3a724ab0dec9092d346f78ee72c8b04f7 Mon Sep 17 00:00:00 2001 From: Nail Sharipov Date: Sun, 31 May 2026 22:35:10 +0300 Subject: [PATCH 7/9] clippy fix --- iTriangle/src/int/binder.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/iTriangle/src/int/binder.rs b/iTriangle/src/int/binder.rs index 8ad4a08..7897542 100644 --- a/iTriangle/src/int/binder.rs +++ b/iTriangle/src/int/binder.rs @@ -46,7 +46,7 @@ impl SteinerInference for [IntShape] { } let mut points = points.to_vec(); - points.sort_unstable_by(|a, b| a.x.cmp(&b.x)); + points.sort_unstable_by_key(|p| p.x); points.dedup(); let x_min = points[0].x; @@ -92,9 +92,9 @@ impl SteinerInference for [IntShape] { return vec![Vec::new(); self.len()]; } - segments.sort_unstable_by(|s0, s1| s0.v_segment.a.cmp(&s1.v_segment.a)); - v_edges.sort_unstable_by(|e0, e1| e0.x.cmp(&e1.x)); - x_points.sort_unstable_by(|p0, p1| p0.x.cmp(&p1.x)); + segments.sort_unstable_by_key(|s| s.v_segment.a); + v_edges.sort_unstable_by_key(|e| e.x); + x_points.sort_unstable_by_key(|p| p.x); let mut groups = vec![Vec::new(); self.len()]; let capacity = segments.len().ilog2() as usize; From d8917babed2c250dbf1b225b4edf49daa55dbb80 Mon Sep 17 00:00:00 2001 From: Nail Sharipov Date: Sun, 31 May 2026 22:35:20 +0300 Subject: [PATCH 8/9] up ver --- iTriangle/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iTriangle/Cargo.toml b/iTriangle/Cargo.toml index 76b10d6..e94e799 100644 --- a/iTriangle/Cargo.toml +++ b/iTriangle/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "i_triangle" -version = "0.44.0" +version = "0.45.0" edition = "2021" authors = ["Nail Sharipov "] description = "Polygon Triangulation Library: Efficient Delaunay Triangulation for Complex Shapes." From bc889fe7747214aaf92cce2f6fd7a2325cdb39cb Mon Sep 17 00:00:00 2001 From: Nail Sharipov Date: Mon, 1 Jun 2026 11:54:24 +0300 Subject: [PATCH 9/9] fix dep --- iTriangle/Cargo.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/iTriangle/Cargo.toml b/iTriangle/Cargo.toml index e94e799..edaced7 100644 --- a/iTriangle/Cargo.toml +++ b/iTriangle/Cargo.toml @@ -20,12 +20,12 @@ serde = ["dep:serde", "i_overlay/serde"] [dependencies] serde = { version = "^1.0", default-features = false, features = ["derive"], optional = true } -i_overlay = { path = "../../iOverlay/iOverlay" } -i_tree = { path = "../../iTree" } +#i_overlay = { path = "../../iOverlay/iOverlay" } +#i_tree = { path = "../../iTree" } #i_key_sort = { path = "../../iKeySort/iKeySort" } -#i_overlay = "^6.0.0" -#i_tree = "~0.18.0" +i_overlay = "^7.0.0" +i_tree = "~0.19.0" i_key_sort = "~0.10.3"