@itwin/core-geometry 5.1.0-dev.9 → 5.2.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. package/CHANGELOG.md +58 -1
  2. package/lib/cjs/Geometry.d.ts +18 -10
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +13 -3
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/BSpline1dNd.d.ts +1 -1
  7. package/lib/cjs/bspline/BSpline1dNd.js +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve.js +7 -1
  11. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineSurface.d.ts +4 -3
  13. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  14. package/lib/cjs/bspline/BSplineSurface.js +4 -5
  15. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  16. package/lib/cjs/clipping/ClipPlane.d.ts +7 -5
  17. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  18. package/lib/cjs/clipping/ClipPlane.js +9 -5
  19. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  20. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  21. package/lib/cjs/clipping/ClipUtils.js +5 -3
  22. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  23. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +1 -2
  24. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  25. package/lib/cjs/clipping/ConvexClipPlaneSet.js +13 -25
  26. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  27. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
  28. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  29. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  30. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  31. package/lib/cjs/core-geometry.d.ts +2 -0
  32. package/lib/cjs/core-geometry.d.ts.map +1 -1
  33. package/lib/cjs/core-geometry.js +2 -0
  34. package/lib/cjs/core-geometry.js.map +1 -1
  35. package/lib/cjs/curve/Arc3d.d.ts +54 -32
  36. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  37. package/lib/cjs/curve/Arc3d.js +56 -37
  38. package/lib/cjs/curve/Arc3d.js.map +1 -1
  39. package/lib/cjs/curve/CurveCollection.d.ts +40 -1
  40. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  41. package/lib/cjs/curve/CurveCollection.js +90 -0
  42. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  43. package/lib/cjs/curve/CurveFactory.d.ts +3 -2
  44. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  45. package/lib/cjs/curve/CurveFactory.js +6 -5
  46. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  47. package/lib/cjs/curve/CurveLocationDetail.d.ts +27 -25
  48. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  49. package/lib/cjs/curve/CurveLocationDetail.js +30 -25
  50. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  51. package/lib/cjs/curve/CurvePrimitive.d.ts +9 -2
  52. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  53. package/lib/cjs/curve/CurvePrimitive.js +11 -0
  54. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  55. package/lib/cjs/curve/CurveTypes.d.ts +1 -1
  56. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  57. package/lib/cjs/curve/LineSegment3d.d.ts +2 -0
  58. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  59. package/lib/cjs/curve/LineSegment3d.js +4 -0
  60. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  61. package/lib/cjs/curve/LineString3d.d.ts +7 -0
  62. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  63. package/lib/cjs/curve/LineString3d.js +15 -3
  64. package/lib/cjs/curve/LineString3d.js.map +1 -1
  65. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  66. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +37 -8
  67. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  68. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +34 -8
  69. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  70. package/lib/cjs/curve/Query/PlanarSubdivision.js +129 -33
  71. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  72. package/lib/cjs/curve/Query/StrokeCountChain.d.ts +4 -3
  73. package/lib/cjs/curve/Query/StrokeCountChain.d.ts.map +1 -1
  74. package/lib/cjs/curve/Query/StrokeCountChain.js +20 -9
  75. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  76. package/lib/cjs/curve/RegionMomentsXY.d.ts +2 -1
  77. package/lib/cjs/curve/RegionMomentsXY.d.ts.map +1 -1
  78. package/lib/cjs/curve/RegionMomentsXY.js +26 -41
  79. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  80. package/lib/cjs/curve/RegionOps.d.ts +74 -39
  81. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  82. package/lib/cjs/curve/RegionOps.js +146 -46
  83. package/lib/cjs/curve/RegionOps.js.map +1 -1
  84. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +36 -27
  85. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  86. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +161 -55
  87. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  88. package/lib/cjs/curve/StrokeOptions.d.ts +1 -1
  89. package/lib/cjs/curve/StrokeOptions.js +1 -1
  90. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  91. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  92. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +2 -2
  93. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +6 -6
  94. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  95. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
  96. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  97. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
  98. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  99. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  100. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +0 -1
  101. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
  103. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
  104. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js +34 -0
  105. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
  106. package/lib/cjs/geometry3d/AngleSweep.d.ts +25 -18
  107. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  108. package/lib/cjs/geometry3d/AngleSweep.js +32 -18
  109. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  110. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +8 -7
  111. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  112. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +19 -25
  113. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  114. package/lib/cjs/geometry3d/Ellipsoid.js +1 -1
  115. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  116. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +1 -1
  117. package/lib/cjs/geometry3d/GrowableXYArray.js +1 -1
  118. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  119. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +8 -3
  120. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  121. package/lib/cjs/geometry3d/GrowableXYZArray.js +21 -3
  122. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  123. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +11 -1
  124. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  125. package/lib/cjs/geometry3d/IndexedXYZCollection.js +21 -3
  126. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  127. package/lib/cjs/geometry3d/Plane3d.d.ts +2 -0
  128. package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
  129. package/lib/cjs/geometry3d/Plane3d.js +6 -1
  130. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  131. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
  132. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  133. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
  134. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  135. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
  136. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  137. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +18 -10
  138. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  139. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  140. package/lib/cjs/geometry3d/Point2dVector2d.js +0 -2
  141. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  142. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +4 -4
  143. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  144. package/lib/cjs/geometry3d/Point3dVector3d.js +4 -5
  145. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  146. package/lib/cjs/geometry3d/PointHelpers.d.ts +7 -7
  147. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  148. package/lib/cjs/geometry3d/PointHelpers.js +66 -26
  149. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  150. package/lib/cjs/geometry3d/PolygonOps.d.ts +49 -2
  151. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  152. package/lib/cjs/geometry3d/PolygonOps.js +38 -2
  153. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  154. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
  155. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  156. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
  157. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  158. package/lib/cjs/geometry3d/PolylineOps.d.ts +5 -4
  159. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  160. package/lib/cjs/geometry3d/PolylineOps.js +5 -4
  161. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  162. package/lib/cjs/geometry3d/Range.d.ts +18 -10
  163. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  164. package/lib/cjs/geometry3d/Range.js +32 -10
  165. package/lib/cjs/geometry3d/Range.js.map +1 -1
  166. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -1
  167. package/lib/cjs/geometry3d/Ray2d.js +0 -1
  168. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  169. package/lib/cjs/geometry3d/Ray3d.d.ts +7 -9
  170. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  171. package/lib/cjs/geometry3d/Ray3d.js +23 -45
  172. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  173. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts +39 -29
  174. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  175. package/lib/cjs/geometry3d/ReusableObjectCache.js +49 -35
  176. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  177. package/lib/cjs/geometry3d/SortablePolygon.d.ts +1 -4
  178. package/lib/cjs/geometry3d/SortablePolygon.d.ts.map +1 -1
  179. package/lib/cjs/geometry3d/SortablePolygon.js +48 -43
  180. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  181. package/lib/cjs/geometry3d/Transform.d.ts +21 -2
  182. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  183. package/lib/cjs/geometry3d/Transform.js +32 -13
  184. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  185. package/lib/cjs/geometry4d/Point4d.d.ts +8 -5
  186. package/lib/cjs/geometry4d/Point4d.d.ts.map +1 -1
  187. package/lib/cjs/geometry4d/Point4d.js +27 -16
  188. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  189. package/lib/cjs/numerics/BezierPolynomials.d.ts +2 -0
  190. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  191. package/lib/cjs/numerics/BezierPolynomials.js +11 -0
  192. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  193. package/lib/cjs/numerics/SmallSystem.d.ts +77 -36
  194. package/lib/cjs/numerics/SmallSystem.d.ts.map +1 -1
  195. package/lib/cjs/numerics/SmallSystem.js +129 -73
  196. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  197. package/lib/cjs/polyface/FacetOrientation.d.ts +1 -1
  198. package/lib/cjs/polyface/FacetOrientation.js +1 -1
  199. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  200. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +55 -40
  201. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  202. package/lib/cjs/polyface/IndexedEdgeMatcher.js +83 -75
  203. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  204. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
  205. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  206. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +47 -38
  207. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  208. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +26 -19
  209. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
  210. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +51 -32
  211. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  212. package/lib/cjs/polyface/Polyface.d.ts +19 -5
  213. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  214. package/lib/cjs/polyface/Polyface.js +18 -2
  215. package/lib/cjs/polyface/Polyface.js.map +1 -1
  216. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -1
  217. package/lib/cjs/polyface/PolyfaceBuilder.js +6 -6
  218. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  219. package/lib/cjs/polyface/PolyfaceClip.d.ts +19 -18
  220. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  221. package/lib/cjs/polyface/PolyfaceClip.js +39 -42
  222. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  223. package/lib/cjs/polyface/PolyfaceData.d.ts +1 -1
  224. package/lib/cjs/polyface/PolyfaceData.js +1 -1
  225. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  226. package/lib/cjs/polyface/PolyfaceQuery.d.ts +119 -78
  227. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  228. package/lib/cjs/polyface/PolyfaceQuery.js +315 -231
  229. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  230. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
  231. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  232. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +3 -3
  233. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  234. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
  235. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  236. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
  237. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  238. package/lib/cjs/serialization/BGFBReader.d.ts.map +1 -1
  239. package/lib/cjs/serialization/BGFBReader.js +2 -3
  240. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  241. package/lib/cjs/serialization/BGFBWriter.d.ts.map +1 -1
  242. package/lib/cjs/serialization/BGFBWriter.js +2 -4
  243. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  244. package/lib/cjs/serialization/GeometrySamples.d.ts +1 -1
  245. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  246. package/lib/cjs/serialization/GeometrySamples.js +3 -3
  247. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  248. package/lib/cjs/serialization/IModelJsonSchema.d.ts +3 -3
  249. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  250. package/lib/cjs/serialization/IModelJsonSchema.js +5 -5
  251. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  252. package/lib/cjs/solid/Box.d.ts.map +1 -1
  253. package/lib/cjs/solid/Box.js +7 -0
  254. package/lib/cjs/solid/Box.js.map +1 -1
  255. package/lib/cjs/solid/Cone.d.ts.map +1 -1
  256. package/lib/cjs/solid/Cone.js +6 -0
  257. package/lib/cjs/solid/Cone.js.map +1 -1
  258. package/lib/cjs/solid/LinearSweep.d.ts +2 -3
  259. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  260. package/lib/cjs/solid/LinearSweep.js +11 -7
  261. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  262. package/lib/cjs/solid/RotationalSweep.d.ts +2 -2
  263. package/lib/cjs/solid/RotationalSweep.js +2 -2
  264. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  265. package/lib/cjs/solid/RuledSweep.d.ts +1 -1
  266. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  267. package/lib/cjs/solid/RuledSweep.js +5 -1
  268. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  269. package/lib/cjs/solid/Sphere.d.ts.map +1 -1
  270. package/lib/cjs/solid/Sphere.js +6 -3
  271. package/lib/cjs/solid/Sphere.js.map +1 -1
  272. package/lib/cjs/solid/SweepContour.d.ts +1 -1
  273. package/lib/cjs/solid/SweepContour.js +1 -1
  274. package/lib/cjs/solid/SweepContour.js.map +1 -1
  275. package/lib/cjs/solid/TorusPipe.d.ts.map +1 -1
  276. package/lib/cjs/solid/TorusPipe.js +4 -0
  277. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  278. package/lib/cjs/topology/ChainMerge.d.ts +1 -1
  279. package/lib/cjs/topology/ChainMerge.js +1 -1
  280. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  281. package/lib/cjs/topology/Graph.d.ts +64 -14
  282. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  283. package/lib/cjs/topology/Graph.js +149 -32
  284. package/lib/cjs/topology/Graph.js.map +1 -1
  285. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +3 -2
  286. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  287. package/lib/cjs/topology/HalfEdgeGraphSearch.js +3 -2
  288. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  289. package/lib/cjs/topology/Merging.d.ts +0 -1
  290. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  291. package/lib/cjs/topology/Merging.js +49 -46
  292. package/lib/cjs/topology/Merging.js.map +1 -1
  293. package/lib/cjs/topology/RegularizeFace.d.ts.map +1 -1
  294. package/lib/cjs/topology/RegularizeFace.js +2 -1
  295. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  296. package/lib/cjs/topology/Triangulation.d.ts +9 -14
  297. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  298. package/lib/cjs/topology/Triangulation.js +29 -22
  299. package/lib/cjs/topology/Triangulation.js.map +1 -1
  300. package/lib/esm/Geometry.d.ts +18 -10
  301. package/lib/esm/Geometry.d.ts.map +1 -1
  302. package/lib/esm/Geometry.js +13 -3
  303. package/lib/esm/Geometry.js.map +1 -1
  304. package/lib/esm/bspline/BSpline1dNd.d.ts +1 -1
  305. package/lib/esm/bspline/BSpline1dNd.js +1 -1
  306. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  307. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  308. package/lib/esm/bspline/BSplineCurve.js +7 -1
  309. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  310. package/lib/esm/bspline/BSplineSurface.d.ts +4 -3
  311. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  312. package/lib/esm/bspline/BSplineSurface.js +4 -5
  313. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  314. package/lib/esm/clipping/ClipPlane.d.ts +7 -5
  315. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  316. package/lib/esm/clipping/ClipPlane.js +9 -5
  317. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  318. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  319. package/lib/esm/clipping/ClipUtils.js +5 -3
  320. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  321. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +1 -2
  322. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  323. package/lib/esm/clipping/ConvexClipPlaneSet.js +13 -25
  324. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  325. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
  326. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  327. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  328. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  329. package/lib/esm/core-geometry.d.ts +2 -0
  330. package/lib/esm/core-geometry.d.ts.map +1 -1
  331. package/lib/esm/core-geometry.js +2 -0
  332. package/lib/esm/core-geometry.js.map +1 -1
  333. package/lib/esm/curve/Arc3d.d.ts +54 -32
  334. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  335. package/lib/esm/curve/Arc3d.js +56 -37
  336. package/lib/esm/curve/Arc3d.js.map +1 -1
  337. package/lib/esm/curve/CurveCollection.d.ts +40 -1
  338. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  339. package/lib/esm/curve/CurveCollection.js +90 -0
  340. package/lib/esm/curve/CurveCollection.js.map +1 -1
  341. package/lib/esm/curve/CurveFactory.d.ts +3 -2
  342. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  343. package/lib/esm/curve/CurveFactory.js +6 -5
  344. package/lib/esm/curve/CurveFactory.js.map +1 -1
  345. package/lib/esm/curve/CurveLocationDetail.d.ts +27 -25
  346. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  347. package/lib/esm/curve/CurveLocationDetail.js +30 -25
  348. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  349. package/lib/esm/curve/CurvePrimitive.d.ts +9 -2
  350. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  351. package/lib/esm/curve/CurvePrimitive.js +11 -0
  352. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  353. package/lib/esm/curve/CurveTypes.d.ts +1 -1
  354. package/lib/esm/curve/CurveTypes.js.map +1 -1
  355. package/lib/esm/curve/LineSegment3d.d.ts +2 -0
  356. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  357. package/lib/esm/curve/LineSegment3d.js +4 -0
  358. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  359. package/lib/esm/curve/LineString3d.d.ts +7 -0
  360. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  361. package/lib/esm/curve/LineString3d.js +15 -3
  362. package/lib/esm/curve/LineString3d.js.map +1 -1
  363. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  364. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +37 -8
  365. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  366. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +34 -8
  367. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  368. package/lib/esm/curve/Query/PlanarSubdivision.js +131 -35
  369. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  370. package/lib/esm/curve/Query/StrokeCountChain.d.ts +4 -3
  371. package/lib/esm/curve/Query/StrokeCountChain.d.ts.map +1 -1
  372. package/lib/esm/curve/Query/StrokeCountChain.js +20 -9
  373. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  374. package/lib/esm/curve/RegionMomentsXY.d.ts +2 -1
  375. package/lib/esm/curve/RegionMomentsXY.d.ts.map +1 -1
  376. package/lib/esm/curve/RegionMomentsXY.js +26 -41
  377. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  378. package/lib/esm/curve/RegionOps.d.ts +74 -39
  379. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  380. package/lib/esm/curve/RegionOps.js +146 -46
  381. package/lib/esm/curve/RegionOps.js.map +1 -1
  382. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +36 -27
  383. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  384. package/lib/esm/curve/RegionOpsClassificationSweeps.js +161 -56
  385. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  386. package/lib/esm/curve/StrokeOptions.d.ts +1 -1
  387. package/lib/esm/curve/StrokeOptions.js +1 -1
  388. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  389. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  390. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +2 -2
  391. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +6 -6
  392. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  393. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
  394. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  395. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
  396. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  397. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  398. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +0 -1
  399. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  400. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
  401. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
  402. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js +30 -0
  403. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
  404. package/lib/esm/geometry3d/AngleSweep.d.ts +25 -18
  405. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  406. package/lib/esm/geometry3d/AngleSweep.js +32 -18
  407. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  408. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +8 -7
  409. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  410. package/lib/esm/geometry3d/CoincidentGeometryOps.js +19 -25
  411. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  412. package/lib/esm/geometry3d/Ellipsoid.js +1 -1
  413. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  414. package/lib/esm/geometry3d/GrowableXYArray.d.ts +1 -1
  415. package/lib/esm/geometry3d/GrowableXYArray.js +1 -1
  416. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  417. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +8 -3
  418. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  419. package/lib/esm/geometry3d/GrowableXYZArray.js +21 -3
  420. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  421. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +11 -1
  422. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  423. package/lib/esm/geometry3d/IndexedXYZCollection.js +21 -3
  424. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  425. package/lib/esm/geometry3d/Plane3d.d.ts +2 -0
  426. package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
  427. package/lib/esm/geometry3d/Plane3d.js +6 -1
  428. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  429. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
  430. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  431. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
  432. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  433. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
  434. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  435. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +18 -10
  436. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  437. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  438. package/lib/esm/geometry3d/Point2dVector2d.js +0 -2
  439. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  440. package/lib/esm/geometry3d/Point3dVector3d.d.ts +4 -4
  441. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  442. package/lib/esm/geometry3d/Point3dVector3d.js +4 -5
  443. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  444. package/lib/esm/geometry3d/PointHelpers.d.ts +7 -7
  445. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  446. package/lib/esm/geometry3d/PointHelpers.js +66 -26
  447. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  448. package/lib/esm/geometry3d/PolygonOps.d.ts +49 -2
  449. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  450. package/lib/esm/geometry3d/PolygonOps.js +38 -2
  451. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  452. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
  453. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  454. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
  455. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  456. package/lib/esm/geometry3d/PolylineOps.d.ts +5 -4
  457. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  458. package/lib/esm/geometry3d/PolylineOps.js +5 -4
  459. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  460. package/lib/esm/geometry3d/Range.d.ts +18 -10
  461. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  462. package/lib/esm/geometry3d/Range.js +32 -10
  463. package/lib/esm/geometry3d/Range.js.map +1 -1
  464. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -1
  465. package/lib/esm/geometry3d/Ray2d.js +0 -1
  466. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  467. package/lib/esm/geometry3d/Ray3d.d.ts +7 -9
  468. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  469. package/lib/esm/geometry3d/Ray3d.js +23 -45
  470. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  471. package/lib/esm/geometry3d/ReusableObjectCache.d.ts +39 -29
  472. package/lib/esm/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  473. package/lib/esm/geometry3d/ReusableObjectCache.js +47 -33
  474. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  475. package/lib/esm/geometry3d/SortablePolygon.d.ts +1 -4
  476. package/lib/esm/geometry3d/SortablePolygon.d.ts.map +1 -1
  477. package/lib/esm/geometry3d/SortablePolygon.js +48 -43
  478. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  479. package/lib/esm/geometry3d/Transform.d.ts +21 -2
  480. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  481. package/lib/esm/geometry3d/Transform.js +32 -13
  482. package/lib/esm/geometry3d/Transform.js.map +1 -1
  483. package/lib/esm/geometry4d/Point4d.d.ts +8 -5
  484. package/lib/esm/geometry4d/Point4d.d.ts.map +1 -1
  485. package/lib/esm/geometry4d/Point4d.js +27 -16
  486. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  487. package/lib/esm/numerics/BezierPolynomials.d.ts +2 -0
  488. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  489. package/lib/esm/numerics/BezierPolynomials.js +11 -0
  490. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  491. package/lib/esm/numerics/SmallSystem.d.ts +77 -36
  492. package/lib/esm/numerics/SmallSystem.d.ts.map +1 -1
  493. package/lib/esm/numerics/SmallSystem.js +129 -73
  494. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  495. package/lib/esm/polyface/FacetOrientation.d.ts +1 -1
  496. package/lib/esm/polyface/FacetOrientation.js +1 -1
  497. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  498. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +55 -40
  499. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  500. package/lib/esm/polyface/IndexedEdgeMatcher.js +83 -75
  501. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  502. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
  503. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  504. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +47 -38
  505. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  506. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +26 -19
  507. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
  508. package/lib/esm/polyface/IndexedPolyfaceWalker.js +51 -32
  509. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  510. package/lib/esm/polyface/Polyface.d.ts +19 -5
  511. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  512. package/lib/esm/polyface/Polyface.js +18 -2
  513. package/lib/esm/polyface/Polyface.js.map +1 -1
  514. package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -1
  515. package/lib/esm/polyface/PolyfaceBuilder.js +6 -6
  516. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  517. package/lib/esm/polyface/PolyfaceClip.d.ts +19 -18
  518. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  519. package/lib/esm/polyface/PolyfaceClip.js +39 -42
  520. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  521. package/lib/esm/polyface/PolyfaceData.d.ts +1 -1
  522. package/lib/esm/polyface/PolyfaceData.js +1 -1
  523. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  524. package/lib/esm/polyface/PolyfaceQuery.d.ts +119 -78
  525. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  526. package/lib/esm/polyface/PolyfaceQuery.js +316 -232
  527. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  528. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
  529. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  530. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +3 -3
  531. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  532. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
  533. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  534. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
  535. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  536. package/lib/esm/serialization/BGFBReader.d.ts.map +1 -1
  537. package/lib/esm/serialization/BGFBReader.js +2 -3
  538. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  539. package/lib/esm/serialization/BGFBWriter.d.ts.map +1 -1
  540. package/lib/esm/serialization/BGFBWriter.js +2 -4
  541. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  542. package/lib/esm/serialization/GeometrySamples.d.ts +1 -1
  543. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  544. package/lib/esm/serialization/GeometrySamples.js +3 -3
  545. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  546. package/lib/esm/serialization/IModelJsonSchema.d.ts +3 -3
  547. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  548. package/lib/esm/serialization/IModelJsonSchema.js +5 -5
  549. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  550. package/lib/esm/solid/Box.d.ts.map +1 -1
  551. package/lib/esm/solid/Box.js +7 -0
  552. package/lib/esm/solid/Box.js.map +1 -1
  553. package/lib/esm/solid/Cone.d.ts.map +1 -1
  554. package/lib/esm/solid/Cone.js +6 -0
  555. package/lib/esm/solid/Cone.js.map +1 -1
  556. package/lib/esm/solid/LinearSweep.d.ts +2 -3
  557. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  558. package/lib/esm/solid/LinearSweep.js +11 -7
  559. package/lib/esm/solid/LinearSweep.js.map +1 -1
  560. package/lib/esm/solid/RotationalSweep.d.ts +2 -2
  561. package/lib/esm/solid/RotationalSweep.js +2 -2
  562. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  563. package/lib/esm/solid/RuledSweep.d.ts +1 -1
  564. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  565. package/lib/esm/solid/RuledSweep.js +5 -1
  566. package/lib/esm/solid/RuledSweep.js.map +1 -1
  567. package/lib/esm/solid/Sphere.d.ts.map +1 -1
  568. package/lib/esm/solid/Sphere.js +6 -3
  569. package/lib/esm/solid/Sphere.js.map +1 -1
  570. package/lib/esm/solid/SweepContour.d.ts +1 -1
  571. package/lib/esm/solid/SweepContour.js +1 -1
  572. package/lib/esm/solid/SweepContour.js.map +1 -1
  573. package/lib/esm/solid/TorusPipe.d.ts.map +1 -1
  574. package/lib/esm/solid/TorusPipe.js +4 -0
  575. package/lib/esm/solid/TorusPipe.js.map +1 -1
  576. package/lib/esm/topology/ChainMerge.d.ts +1 -1
  577. package/lib/esm/topology/ChainMerge.js +1 -1
  578. package/lib/esm/topology/ChainMerge.js.map +1 -1
  579. package/lib/esm/topology/Graph.d.ts +64 -14
  580. package/lib/esm/topology/Graph.d.ts.map +1 -1
  581. package/lib/esm/topology/Graph.js +149 -32
  582. package/lib/esm/topology/Graph.js.map +1 -1
  583. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +3 -2
  584. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  585. package/lib/esm/topology/HalfEdgeGraphSearch.js +3 -2
  586. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  587. package/lib/esm/topology/Merging.d.ts +0 -1
  588. package/lib/esm/topology/Merging.d.ts.map +1 -1
  589. package/lib/esm/topology/Merging.js +49 -46
  590. package/lib/esm/topology/Merging.js.map +1 -1
  591. package/lib/esm/topology/RegularizeFace.d.ts.map +1 -1
  592. package/lib/esm/topology/RegularizeFace.js +2 -1
  593. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  594. package/lib/esm/topology/Triangulation.d.ts +9 -14
  595. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  596. package/lib/esm/topology/Triangulation.js +29 -22
  597. package/lib/esm/topology/Triangulation.js.map +1 -1
  598. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"PolyfaceData.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceData.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,0CAAuC;AACvC,mEAAgE;AAChE,qEAAkE;AAClE,mEAAwD;AACxD,mEAAkE;AAClE,6DAAyD;AACzD,+CAA8C;AAE9C,mEAAgE;AAChE,uCAA4C;AAE5C,2DAAwD;AAExD,2BAA2B;AAE3B;;;;;;;;;GASG;AACH,MAAa,YAAY;IACvB;;;MAGE;IACK,MAAM,CAAU,oBAAoB,GAAG,OAAO,CAAC;IACtD,0FAA0F;IACnF,KAAK,CAAmB;IAC/B,2CAA2C;IACpC,UAAU,CAAW;IAC5B,+EAA+E;IACxE,MAAM,CAAoB;IACjC,4CAA4C;IACrC,WAAW,CAAY;IAC9B,8EAA8E;IACvE,KAAK,CAAmB;IAC/B,2CAA2C;IACpC,UAAU,CAAY;IAC7B;;;OAGG;IACI,KAAK,CAAY;IACxB,2CAA2C;IACpC,UAAU,CAAY;IAC7B;;;;;OAKG;IACI,IAAI,CAAkB;IAC7B,sBAAsB;IACf,OAAO,CAAmB;IACjC,4BAA4B;IACrB,iBAAiB,CAAqB;IAC7C;;;;;;OAMG;IACI,WAAW,CAAY;IAC9B,6BAA6B;IACrB,SAAS,CAAU;IAC3B;;;;OAIG;IACK,gBAAgB,CAAS;IAEjC;;;;;;;;;;;;;;;OAeG;IACI,aAAa,CAA6B;IACjD;;;;;;;OAOG;IACI,wBAAwB,CAAC,CAAqB;QACnD,IAAI,CAAC,KAAK,SAAS;eACd,IAAI,CAAC,aAAa,KAAK,SAAS;eAChC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM;YAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,oEAAoE;IAC7D,gBAAgB,CAAC,KAAyB;QAC/C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAC7E,CAAC;IAED;;;;;;OAMG;IACH,YACE,cAAuB,KAAK,EAAE,aAAsB,KAAK,EAAE,aAAsB,KAAK,EAAE,WAAoB,IAAI;QAEhH,IAAI,CAAC,KAAK,GAAG,IAAI,mCAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,mCAAgB,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,iCAAe,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,2BAA2B;IACpB,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,MAAM;YACb,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW;YAClB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,KAAK;YACZ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK;YACZ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO;YACd,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,iBAAiB;YACxB,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC5D,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC9C,IAAI,IAAI,CAAC,aAAa;YACpB,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2DAA2D;IACpD,aAAa,CAAC,KAAmB;QACtC,IAAI,CAAC,mCAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,mCAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,iCAAe,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACpD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,yBAAe,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,qCAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YAClC,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe;YAChD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,gDAAgD;IAChD,IAAW,cAAc;QACvB,OAAO,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,+CAA+C;IAC/C,IAAW,aAAa;QACtB,OAAO,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,+CAA+C;IAC/C,IAAW,aAAa;QACtB,OAAO,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,2BAA2B;IAC3B,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,mHAAmH;IACnH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IACD;;;;OAIG;IACH,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,6FAA6F;IACtF,QAAQ,CAAC,CAAS,EAAE,MAAgB;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IACD,yFAAyF;IAClF,SAAS,CAAC,CAAS,EAAE,MAAiB;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,CAAC;IACD,6FAA6F;IACtF,QAAQ,CAAC,CAAS,EAAE,MAAgB;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,CAAC;IACD,gFAAgF;IACzE,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,sFAAsF;IAC/E,cAAc,CAAC,CAAS;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD;;;;;OAKG;IACH,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAW,QAAQ,CAAC,KAAc;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,gGAAgG;IAChG,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IACD,IAAW,eAAe,CAAC,KAAa;QACtC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,oCAAoC;IAC7B,oBAAoB,CAAC,IAAmC;QAC7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;IACD,wGAAwG;IACjG,WAAW,CAAC,CAAS,EAAE,IAAa;QACzC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,yGAAyG;IAClG,YAAY,CAAC,CAAS,EAAE,IAAc;QAC3C,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,wGAAwG;IACjG,WAAW,CAAC,CAAS,EAAE,IAAa;QACzC,IAAI,IAAI,CAAC,KAAK;YACZ,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IACD,wDAAwD;IACjD,yBAAyB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC9D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;YAC7D,OAAO,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;mBACvE,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;;;OASG;IACI,iBAAiB,CAAC,KAAmB,EAAE,MAAc,EAAE,MAAc,EAAE,OAAe;QAC3F,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;QAChC,IAAI,OAAO,GAAG,OAAO;YACnB,OAAO,GAAG,OAAO,CAAC;QACpB,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/B,sBAAsB;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtE,0BAA0B;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACpD,uBAAuB;QACvB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxE,2BAA2B;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACvF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACrE,0BAA0B;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,0BAA0B;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtD,uBAAuB;QACvB,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpG,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;gBAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,WAAW,CAAC,eAAe,CAAC;gBAC9C,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACzD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;wBAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACzC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;4BAC9B,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;wBAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;4BAC9B,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;YACH,CAAC;YACD,6BAA6B;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,6BAA6B;QAC7B,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,qDAAqD;IAC7C,MAAM,CAAC,SAAS,CAAC,IAAuB,EAAE,MAAc;QAC9D,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;YAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IACD;;;OAGG;IACI,kBAAkB,CAAC,MAAc;QACtC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACrD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI;oBAC7B,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QACD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IACD;;;OAGG;IACI,eAAe,CAAC,MAAc;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;gBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;gBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,MAAM;gBACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM;oBAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,WAAW;gBAClB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;oBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU;gBACjB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;oBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,CAAC,UAAU;gBACjB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;oBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;gBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe;4BAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;oBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,IAAI,CAAC,aAAa;gBACpB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,MAAM;oBACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM;gBACb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,WAAW;gBAClB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACnC,IAAI,IAAI,CAAC,KAAK;gBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,UAAU;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,IAAI,IAAI,CAAC,KAAK;gBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC7B,IAAI,IAAI,CAAC,UAAU;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACjC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;oBAC/D,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;oBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACzC,CAAC;YACD,IAAI,IAAI,CAAC,aAAa;gBACpB,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;QACvC,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,mBAAmB,CAAC,MAAc;QACvC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,MAAM;gBACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe;4BAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC3C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;oBAC/D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,oEAAoE;IAC7D,KAAK,CAAC,MAAgB,EAAE,SAAqB;QAClD,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAO,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;;;;;;;;;;OAcG;IACI,mBAAmB,CAAC,SAAoB;QAC7C,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU;YAC7C,IAAI,CAAC,MAAM,CAAC,qDAAqD,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtF,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACtE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAI;gBAC9B,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,IAAI,CAAC,OAAO;YACd,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;;;;OAOG;IACI,QAAQ,CAAC,YAAoB,mBAAQ,CAAC,mBAAmB;QAC9D,8DAA8D;QAC9D,MAAM,YAAY,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,oBAAqB,CAAC;QAChD,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,gFAAgF;QAChF,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChF,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,oBAAqB,CAAC;YAClD,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9E,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,oBAAoB,CAAC;YAC/C,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,mCAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrE,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC;YACxC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAC1D,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,mCAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAChG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC;gBACnE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,mCAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACrF,MAAM,UAAU,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;gBAC7E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,0BAAW,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAqB,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC7G,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,2BAA2B,CAAC,eAAyB;QACjE,wFAAwF;QACxF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE;YACjD,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9C,OAAO,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,cAAc,CAAI,eAAyB,EAAE,OAAwB,EAAE,aAAsB;QACzG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAClC,OAAO,IAAI,CAAC,CAAC,aAAa;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpD,IAAI,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,MAAM,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpC,IAAI,aAAa,EAAE,CAAC,CAAC,+DAA+D;wBAClF,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC3B,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,CAAC;4BACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC;yBAAM,CAAC,CAAC,cAAc;wBACrB,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC3B,MAAM,EAAE,CAAC;4BACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;4BACpB,MAAM,EAAE,CAAC;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,yBAAyB,CACrC,UAAkB,EAAE,eAAyB,EAAE,OAAwB,EAAE,aAAsB;QAE/F,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAClC,OAAO,IAAI,CAAC,CAAC,aAAa;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM;mBAC7D,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;gBAChE,IAAI,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,MAAM,GAAG,eAAe,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBAC7C,IAAI,aAAa,EAAE,CAAC,CAAC,+DAA+D;oBAClF,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,EAAE,CAAC;wBACT,MAAM,EAAE,CAAC;wBACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;qBAAM,CAAC,CAAC,cAAc;oBACrB,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,EAAE,CAAC;wBACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACpB,MAAM,EAAE,CAAC;oBACX,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;;MAQE;IACK,cAAc,CAAC,eAA0B;QAC9C,IAAI,eAAe,IAAI,YAAY,CAAC,2BAA2B,CAAC,eAAe,CAAC,EAAE,CAAC;YACjF,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU;gBACtC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;gBACrC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;gBACrC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACtE,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACtE,+CAA+C;QACjD,CAAC;IACH,CAAC;IACD;;;;;;;OAOG;IACI,yBAAyB,CAAC,UAAkB,EAAE,eAAyB;QAC5E,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3F,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU;YACtC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9F,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YACrC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YACrC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7F,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC7F,+CAA+C;IACjD,CAAC;IACD,mCAAmC;IAC5B,cAAc;QACnB,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;;AAjuBH,oCAkuBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Polyface\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\nimport { Range3d } from \"../geometry3d/Range\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { ClusterableArray } from \"../numerics/ClusterableArray\";\nimport { PolyfaceAuxData } from \"./AuxData\";\nimport { FacetFaceData } from \"./FacetFaceData\";\nimport { TaggedNumericData } from \"./TaggedNumericData\";\n\n// cspell:word internaldocs\n\n/**\n * `PolyfaceData` carries data arrays for point, normal, uv-parameters, and color, and index arrays for each.\n * * Normal, uv-parameter, and color data are optional.\n * * A given data array is defined if and only if its corresponding index array is defined.\n * * All defined index arrays have parallel face loop order and structure, and thus the same length.\n * * `IndexedPolyface` carries a PolyfaceData as a member (NOT as a base class; it already has `GeometryQuery` as base).\n * * `IndexedPolyfaceVisitor` uses PolyfaceData as a base class. In this use, there is only a single facet in `PolyfaceData`.\n * * `PolyfaceData` does not know what index range constitutes a given facet. This is managed by a derived/carrier class.\n * @public\n */\nexport class PolyfaceData {\n /**\n * Relative tolerance used in tests for planar facets.\n * @internal\n */\n public static readonly planarityLocalRelTol = 1.0e-13;\n /** Coordinate data for points in the facets (packed as numbers in a contiguous array). */\n public point: GrowableXYZArray;\n /** Indices of points at facet vertices. */\n public pointIndex: number[];\n /** Coordinates of normal vectors (packed as numbers in a contiguous array). */\n public normal?: GrowableXYZArray;\n /** Indices of normals at facet vertices. */\n public normalIndex?: number[];\n /** Coordinates of uv parameters (packed as numbers in a contiguous array). */\n public param?: GrowableXYArray;\n /** Indices of params at facet vertices. */\n public paramIndex?: number[];\n /**\n * Color values. These are carried around as simple numbers, but are probably required (by display systems) to map\n * exactly to 32-bit integers.\n */\n public color?: number[];\n /** Indices of colors at facet vertices. */\n public colorIndex?: number[];\n /**\n * Map from facet index to face data.\n * * A \"face\" is a logical grouping of connected facets in the mesh, e.g., the facets that resulted from faceting\n * a given face of a solid.\n * * Face data remains empty until a face is specified.\n */\n public face: FacetFaceData[];\n /** Auxiliary data. */\n public auxData?: PolyfaceAuxData;\n /** Tagged geometry data. */\n public taggedNumericData?: TaggedNumericData;\n /**\n * Booleans indicating visibility of corresponding edges.\n * * The `edgeVisible` array is parallel to the `pointIndex` array.\n * * The visibility flag applies to the edge whose start vertex index appears in the same place in the `pointIndex` array.\n * * For example, consider the mesh with 2 triangular facets given by `pointIndex = [1,0,2, 1,2,3]`. If the triangles'\n * shared edge is hidden, then the mesh has `edgeVisible = [true,true,false, false,true,true]`.\n */\n public edgeVisible: boolean[];\n /** The [[twoSided]] flag. */\n private _twoSided: boolean;\n /**\n * Flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2).\n * * A boundary edge of a mesh is defined as an edge with only one connected facet.\n * * Closed solid is a mesh with no boundary edge. Open sheet is a mesh that has boundary edge(s).\n */\n private _expectedClosure: number;\n\n /**\n * Optional index array for moving \"across an edge\" to an adjacent facet.\n * * This array:\n * * completes the topology of the polyface.\n * * has the same length as the other PolyfaceData index arrays.\n * * is populated by [[IndexedPolyfaceWalker.buildEdgeMateIndices]].\n * * is used by [[IndexedPolyfaceWalker]] to traverse the polyface.\n * * is invalid if the polyface topology is subsequently changed.\n * * Let k1 = edgeMateIndex[k] be defined. Then:\n * * k1 is an index (an \"edge index\") into the PolyfaceData index arrays. (The same for k.)\n * * k and k1 refer to the two oppositely oriented sides of an interior edge in the polyface.\n * * pointIndex[k1] is the point at the opposite end of the edge that starts at pointIndex[k].\n * * edgeMateIndex[k1] === k.\n * * If k1 is undefined, then there is no adjacent facet across the edge that starts at pointIndex[k],\n * i.e. k refers to a boundary edge.\n */\n public edgeMateIndex?: Array<number | undefined>;\n /**\n * Dereference the edgeMateIndex array.\n * * This method returns undefined if:\n * * k is undefined\n * * `this.edgeMateIndex` is undefined\n * * k is out of bounds for `this.edgeMateIndex`\n * * `this.edgeMateIndex[k]` is undefined\n */\n public edgeIndexToEdgeMateIndex(k: number | undefined): number | undefined {\n if (k !== undefined\n && this.edgeMateIndex !== undefined\n && k >= 0 && k < this.edgeMateIndex.length)\n return this.edgeMateIndex[k];\n return undefined;\n }\n /** Test if `value` is a valid index into the `pointIndex` array. */\n public isValidEdgeIndex(value: number | undefined): boolean {\n return value !== undefined && value >= 0 && value < this.pointIndex.length;\n }\n\n /**\n * Constructor for facets.\n * @param needNormals `true` to allocate empty normal data and index arrays; `false` (default) to leave undefined.\n * @param needParams `true` to allocate empty uv parameter data and index arrays; `false` (default) to leave undefined.\n * @param needColors `true` to allocate empty color data and index arrays; `false` (default) to leave undefined.\n * @param twoSided `true` (default) if the facets are to be considered viewable from the back; `false` if they are amenable to backface culling.\n */\n public constructor(\n needNormals: boolean = false, needParams: boolean = false, needColors: boolean = false, twoSided: boolean = true,\n ) {\n this.point = new GrowableXYZArray();\n this.pointIndex = [];\n if (needNormals) {\n this.normal = new GrowableXYZArray();\n this.normalIndex = [];\n }\n if (needParams) {\n this.param = new GrowableXYArray();\n this.paramIndex = [];\n }\n if (needColors) {\n this.color = [];\n this.colorIndex = [];\n }\n this.face = [];\n this.edgeVisible = [];\n this._twoSided = twoSided;\n this._expectedClosure = 0;\n }\n /** Return a deep clone. */\n public clone(): PolyfaceData {\n const result = new PolyfaceData();\n result.point = this.point.clone();\n result.pointIndex = this.pointIndex.slice();\n if (this.normal)\n result.normal = this.normal.clone();\n if (this.normalIndex)\n result.normalIndex = this.normalIndex.slice();\n if (this.param)\n result.param = this.param.clone();\n if (this.paramIndex)\n result.paramIndex = this.paramIndex.slice();\n if (this.color)\n result.color = this.color.slice();\n if (this.colorIndex)\n result.colorIndex = this.colorIndex.slice();\n result.face = this.face.slice();\n if (this.auxData)\n result.auxData = this.auxData.clone();\n if (this.taggedNumericData)\n result.taggedNumericData = this.taggedNumericData.clone();\n result.edgeVisible = this.edgeVisible.slice();\n result.twoSided = this.twoSided;\n result.expectedClosure = this.expectedClosure;\n if (this.edgeMateIndex)\n result.edgeMateIndex = this.edgeMateIndex.slice();\n return result;\n }\n /** Test for equal indices and nearly equal coordinates. */\n public isAlmostEqual(other: PolyfaceData): boolean {\n if (!GrowableXYZArray.isAlmostEqual(this.point, other.point))\n return false;\n if (!NumberArray.isExactEqual(this.pointIndex, other.pointIndex))\n return false;\n if (!GrowableXYZArray.isAlmostEqual(this.normal, other.normal))\n return false;\n if (!NumberArray.isExactEqual(this.normalIndex, other.normalIndex))\n return false;\n if (!GrowableXYArray.isAlmostEqual(this.param, other.param))\n return false;\n if (!NumberArray.isExactEqual(this.paramIndex, other.paramIndex))\n return false;\n if (!NumberArray.isExactEqual(this.color, other.color))\n return false;\n if (!NumberArray.isExactEqual(this.colorIndex, other.colorIndex))\n return false;\n if (!PolyfaceAuxData.isAlmostEqual(this.auxData, other.auxData))\n return false;\n if (!TaggedNumericData.areAlmostEqual(this.taggedNumericData, other.taggedNumericData))\n return false;\n if (!NumberArray.isExactEqual(this.edgeVisible, other.edgeVisible))\n return false;\n if (this.twoSided !== other.twoSided)\n return false;\n if (this.expectedClosure !== other.expectedClosure)\n return false;\n if (!NumberArray.isExactEqual(this.edgeMateIndex, other.edgeMateIndex))\n return false;\n return true;\n }\n /** Ask if normals are required in this mesh. */\n public get requireNormals(): boolean {\n return undefined !== this.normal;\n }\n /** Ask if params are required in this mesh. */\n public get requireParams(): boolean {\n return undefined !== this.param;\n }\n /** Ask if colors are required in this mesh. */\n public get requireColors(): boolean {\n return undefined !== this.color;\n }\n /** Get the point count */\n public get pointCount() {\n return this.point.length;\n }\n /** Get the normal count */\n public get normalCount() {\n return this.normal ? this.normal.length : 0;\n }\n /** Get the param count */\n public get paramCount() {\n return this.param ? this.param.length : 0;\n }\n /** Get the color count */\n public get colorCount() {\n return this.color ? this.color.length : 0;\n }\n /** Get the index count. Note that the point array is always indexed, and index arrays all have the same length. */\n public get indexCount() {\n return this.pointIndex.length;\n }\n /**\n * Get the number of faces.\n * * Note that a \"face\" is not a facet.\n * * A face is a subset of the Polyface's facets grouped for application purposes.\n */\n public get faceCount() {\n return this.face.length;\n }\n /** Return indexed point at index `i`. This is a COPY of the coordinates, not a reference. */\n public getPoint(i: number, result?: Point3d): Point3d | undefined {\n return this.point.getPoint3dAtCheckedPointIndex(i, result);\n }\n /** Return indexed normal at index `i`. This is a COPY of the normal, not a reference. */\n public getNormal(i: number, result?: Vector3d): Vector3d | undefined {\n return this.normal ? this.normal.getVector3dAtCheckedVectorIndex(i, result) : undefined;\n }\n /** Return indexed param at index `i`. This is a COPY of the coordinates, not a reference. */\n public getParam(i: number, result?: Point2d): Point2d | undefined {\n return this.param ? this.param.getPoint2dAtCheckedPointIndex(i, result) : undefined;\n }\n /** Return indexed color at index `i`. Index `i` is not checked for validity. */\n public getColor(i: number): number {\n return this.color ? this.color[i] : 0;\n }\n /** Return indexed visibility. at index `i`. Index `i` is not checked for validity. */\n public getEdgeVisible(i: number): boolean {\n return this.edgeVisible[i];\n }\n /**\n * Boolean flag indicating if the facets are viewable from the back.\n * * Default value is true.\n * * Set to false only if the mesh is known to be a closed volume with outward normals,\n * indicating it is amenable to backface culling for improved display performance.\n */\n public get twoSided(): boolean {\n return this._twoSided;\n }\n public set twoSided(value: boolean) {\n this._twoSided = value;\n }\n /** Get flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2). */\n public get expectedClosure(): number {\n return this._expectedClosure;\n }\n public set expectedClosure(value: number) {\n this._expectedClosure = value;\n }\n /** Set the tagged geometry data. */\n public setTaggedNumericData(data: TaggedNumericData | undefined) {\n this.taggedNumericData = data;\n }\n /** Copy the contents (not pointer) of `point[i]` into `dest`. Index `i` is not checked for validity. */\n public copyPointTo(i: number, dest: Point3d): void {\n this.point.getPoint3dAtUncheckedPointIndex(i, dest);\n }\n /** Copy the contents (not pointer) of `normal[i]` into `dest`. Index `i` is not checked for validity. */\n public copyNormalTo(i: number, dest: Vector3d): void {\n if (this.normal)\n this.normal.getVector3dAtUncheckedVectorIndex(i, dest);\n }\n /** Copy the contents (not pointer) of `param[i]` into `dest`. Index `i` is not checked for validity. */\n public copyParamTo(i: number, dest: Point2d): void {\n if (this.param)\n this.param.getPoint2dAtUncheckedPointIndex(i, dest);\n }\n /** Test if param at a index `i` matches the given uv */\n public isAlmostEqualParamIndexUV(i: number, u: number, v: number): boolean {\n if (this.param !== undefined && i >= 0 && i < this.param.length)\n return Geometry.isSameCoordinate(u, this.param.getXAtUncheckedPointIndex(i))\n && Geometry.isSameCoordinate(v, this.param.getYAtUncheckedPointIndex(i));\n return false;\n }\n /**\n * Copy data from `other` to `this`.\n * * This is the essence of transferring coordinates spread throughout a large polyface into a visitor's single facet.\n * * Common usage: \"other\" is a Polyface, \"this\" is a PolyfaceVisitor to receive data from a single facet of the Polyface.\n * * Does NOT copy face data - visitors reference the FacetFaceData array for the whole polyface.\n * @param other polyface data being mined.\n * @param index0 start index in other's index arrays.\n * @param index1 end index (one beyond last data accessed) in other's index arrays.\n * @param numWrap number of points to replicate as wraparound.\n */\n public gatherIndexedData(other: PolyfaceData, index0: number, index1: number, numWrap: number): void {\n const numEdge = index1 - index0;\n if (numWrap > numEdge)\n numWrap = numEdge;\n const numTotal = numEdge + numWrap;\n this.resizeAllArrays(numTotal);\n // copy wrapped points\n for (let i = 0; i < numEdge; i++)\n this.point.transferFromGrowableXYZArray(i, other.point, other.pointIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.point.transferFromGrowableXYZArray(numEdge + i, this.point, i);\n // copy wrapped pointIndex\n for (let i = 0; i < numEdge; i++)\n this.pointIndex[i] = other.pointIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.pointIndex[numEdge + i] = this.pointIndex[i];\n // copy wrapped normals\n if (this.normal && this.normalIndex && other.normal && other.normalIndex) {\n for (let i = 0; i < numEdge; i++)\n this.normal.transferFromGrowableXYZArray(i, other.normal, other.normalIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.normal.transferFromGrowableXYZArray(numEdge + i, this.normal, i);\n // copy wrapped normalIndex\n for (let i = 0; i < numEdge; i++)\n this.normalIndex[i] = other.normalIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.normalIndex[numEdge + i] = this.normalIndex[i];\n }\n // copy wrapped params\n if (this.param && this.paramIndex && other.param && other.paramIndex) {\n for (let i = 0; i < numEdge; i++)\n this.param.transferFromGrowableXYArray(i, other.param, other.paramIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.param.transferFromGrowableXYArray(numEdge + i, this.param, i);\n // copy wrapped paramIndex\n for (let i = 0; i < numEdge; i++)\n this.paramIndex[i] = other.paramIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.paramIndex[numEdge + i] = this.paramIndex[i];\n }\n // copy wrapped colors\n if (this.color && this.colorIndex && other.color && other.colorIndex) {\n for (let i = 0; i < numEdge; i++)\n this.color[i] = other.color[other.colorIndex[index0 + i]];\n for (let i = 0; i < numWrap; i++)\n this.color[numEdge + i] = this.color[i];\n // copy wrapped colorIndex\n for (let i = 0; i < numEdge; i++)\n this.colorIndex[i] = other.colorIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.colorIndex[numEdge + i] = this.colorIndex[i];\n }\n // copy wrapped edge visibility\n for (let i = 0; i < numEdge; i++)\n this.edgeVisible[i] = other.edgeVisible[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.edgeVisible[numEdge + i] = this.edgeVisible[i];\n // copy wrapped auxData\n if (this.auxData && other.auxData && this.auxData.channels.length === other.auxData.channels.length) {\n for (let iChannel = 0; iChannel < this.auxData.channels.length; iChannel++) {\n const thisChannel = this.auxData.channels[iChannel];\n const otherChannel = other.auxData.channels[iChannel];\n const blockSize = thisChannel.entriesPerValue;\n if (thisChannel.data.length === otherChannel.data.length) {\n for (let iData = 0; iData < thisChannel.data.length; iData++) {\n const thisData = thisChannel.data[iData];\n const otherData = otherChannel.data[iData];\n for (let i = 0; i < numEdge; i++)\n thisData.copyValues(otherData, i, other.auxData.indices[index0 + i], blockSize);\n for (let i = 0; i < numWrap; i++)\n thisData.copyValues(thisData, other.auxData.indices[numEdge + i], i, blockSize);\n }\n }\n }\n // copy wrapped auxData index\n for (let i = 0; i < numEdge; i++)\n this.auxData.indices[i] = other.auxData.indices[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.auxData.indices[numEdge + i] = this.auxData.indices[i];\n }\n // copy wrapped edgeMateIndex\n if (this.edgeMateIndex && other.edgeMateIndex) {\n for (let i = 0; i < numEdge; i++)\n this.edgeMateIndex[i] = other.edgeMateIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.edgeMateIndex[numEdge + i] = this.edgeMateIndex[i];\n }\n }\n /** Trim the `data` arrays to the stated `length`. */\n private static trimArray(data: any[] | undefined, length: number) {\n if (data && length < data.length)\n data.length = length;\n }\n /**\n * Trim all index arrays to the stated `length`.\n * * This is called by PolyfaceBuilder to clean up after an aborted construction sequence.\n */\n public trimAllIndexArrays(length: number): void {\n PolyfaceData.trimArray(this.pointIndex, length);\n PolyfaceData.trimArray(this.paramIndex, length);\n PolyfaceData.trimArray(this.normalIndex, length);\n PolyfaceData.trimArray(this.colorIndex, length);\n PolyfaceData.trimArray(this.edgeVisible, length);\n if (this.auxData) {\n PolyfaceData.trimArray(this.auxData.indices, length);\n for (const channel of this.auxData.channels) {\n for (const data of channel.data)\n PolyfaceData.trimArray(data.values, channel.entriesPerValue * length);\n }\n }\n PolyfaceData.trimArray(this.edgeMateIndex, length);\n }\n /**\n * Resize all data and index arrays to the specified `length`.\n * * This is used by visitors, whose data and index arrays are all parallel.\n */\n public resizeAllArrays(length: number): void {\n if (length > this.point.length) {\n while (this.point.length < length)\n this.point.push(Point3d.create());\n while (this.pointIndex.length < length)\n this.pointIndex.push(-1);\n if (this.normal)\n while (this.normal.length < length)\n this.normal.push(Vector3d.create());\n if (this.normalIndex)\n while (this.normalIndex.length < length)\n this.normalIndex.push(-1);\n if (this.param)\n while (this.param.length < length)\n this.param.push(Point2d.create());\n if (this.paramIndex)\n while (this.paramIndex.length < length)\n this.paramIndex.push(-1);\n if (this.color)\n while (this.color.length < length)\n this.color.push(0);\n if (this.colorIndex)\n while (this.colorIndex.length < length)\n this.colorIndex.push(-1);\n while (this.edgeVisible.length < length)\n this.edgeVisible.push(false);\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\n }\n }\n if (this.auxData.indices)\n this.auxData.indices.push(-1);\n }\n if (this.edgeMateIndex)\n while (this.edgeMateIndex.length < length)\n this.edgeMateIndex.push(undefined);\n } else if (length < this.point.length) {\n this.point.resize(length);\n this.pointIndex.length = length;\n if (this.normal)\n this.normal.resize(length);\n if (this.normalIndex)\n this.normalIndex.length = length;\n if (this.param)\n this.param.resize(length);\n if (this.paramIndex)\n this.paramIndex.length = length;\n if (this.color)\n this.color.length = length;\n if (this.colorIndex)\n this.colorIndex.length = length;\n this.edgeVisible.length = length;\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n channelData.values.length = length * channel.entriesPerValue;\n }\n }\n if (this.auxData.indices)\n this.auxData.indices.length = length;\n }\n if (this.edgeMateIndex)\n this.edgeMateIndex.length = length;\n }\n }\n /**\n * Resize all data arrays to the specified `length`.\n * @deprecated in 4.x because name is misleading. Call [[PolyfaceData.resizeAllArrays]] instead.\n */\n public resizeAllDataArrays(length: number): void {\n if (length > this.point.length) {\n while (this.point.length < length) this.point.push(Point3d.create());\n while (this.pointIndex.length < length) this.pointIndex.push(-1);\n while (this.edgeVisible.length < length) this.edgeVisible.push(false);\n if (this.normal)\n while (this.normal.length < length) this.normal.push(Vector3d.create());\n if (this.param)\n while (this.param.length < length) this.param.push(Point2d.create());\n if (this.color)\n while (this.color.length < length) this.color.push(0);\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\n }\n }\n }\n } else if (length < this.point.length) {\n this.point.resize(length);\n this.edgeVisible.length = length;\n this.pointIndex.length = length;\n if (this.normal) this.normal.resize(length);\n if (this.param) this.param.resize(length);\n if (this.color) this.color.length = length;\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n channelData.values.length = length * channel.entriesPerValue;\n }\n }\n }\n }\n }\n /** Return the range of the point array (optionally transformed). */\n public range(result?: Range3d, transform?: Transform): Range3d {\n result = result ? result : Range3d.createNull();\n result.extendArray(this.point, transform);\n return result;\n }\n /**\n * Apply a transform to the mesh data.\n * * Transform the data as follows:\n * * apply `transform` to points.\n * * apply inverse transpose of `transform` to normals and renormalize. This preserves normals perpendicular\n * to transformed facets, and keeps them pointing outward, e.g, if the mesh is closed. If the transform is not\n * invertible or a normal has zero length, the normal(s) are left unchanged, and this error is silently ignored.\n * * apply `transform` to auxData.\n * * scale faceData distances by the cube root of the absolute value of the determinant of `transform.matrix`.\n * * Note that if the transform is a mirror, this method does NOT reverse index order. This is the caller's\n * responsibility. This base class is just a data carrier: PolyfaceData does not know if the index order has\n * special meaning.\n * * Note that this method always returns true. If transforming normals fails (due to singular matrix or zero\n * normal), the original normal(s) are left unchanged.\n */\n public tryTransformInPlace(transform: Transform): boolean {\n this.point.multiplyTransformInPlace(transform);\n if (this.normal && !transform.matrix.isIdentity)\n this.normal.multiplyAndRenormalizeMatrix3dInverseTransposeInPlace(transform.matrix);\n if (this.face.length > 0) {\n const distScale = Math.cbrt(Math.abs(transform.matrix.determinant()));\n for (const faceData of this.face)\n faceData.scaleDistances(distScale);\n }\n if (this.auxData)\n this.auxData.tryTransformInPlace(transform);\n return true;\n }\n /**\n * Compress the instance by equating duplicate data.\n * * Search for duplicates within vertices, normals, params, and colors.\n * * Compress each data array.\n * * Revise all indexing for the relocated data.\n * * [[PolyfaceAuxData]] is compressed if and only if exactly one [[AuxChannelData]] is present.\n * @param tolerance (optional) tolerance for clustering mesh vertices only. Default value, and the tolerance used to cluster all other data, is [[Geometry.smallMetricDistance]].\n */\n public compress(tolerance: number = Geometry.smallMetricDistance): void {\n // more info can be found at geometry/internaldocs/Polyface.md\n const packedPoints = ClusterableArray.clusterGrowablePoint3dArray(this.point, tolerance);\n this.point = packedPoints.growablePackedPoints!;\n packedPoints.updateIndices(this.pointIndex);\n // for now, normals, params, and colors use the default tolerance for clustering\n if (this.normalIndex && this.normal) {\n const packedNormals = ClusterableArray.clusterGrowablePoint3dArray(this.normal);\n this.normal = packedNormals.growablePackedPoints!;\n packedNormals.updateIndices(this.normalIndex);\n }\n if (this.paramIndex && this.param) {\n const packedParams = ClusterableArray.clusterGrowablePoint2dArray(this.param);\n this.param = packedParams.growablePackedPoints;\n packedParams.updateIndices(this.paramIndex);\n }\n if (this.colorIndex && this.color) {\n const packedColors = ClusterableArray.clusterNumberArray(this.color);\n this.color = packedColors.packedNumbers;\n packedColors.updateIndices(this.colorIndex);\n }\n if (this.auxData && this.auxData.channels.length === 1 && this.auxData.channels[0].data.length === 1) {\n const dataSize = this.auxData.channels[0].entriesPerValue;\n if (1 === dataSize) {\n const packedData = ClusterableArray.clusterNumberArray(this.auxData.channels[0].data[0].values);\n this.auxData.channels[0].data[0].values = packedData.packedNumbers;\n packedData.updateIndices(this.auxData.indices);\n } else if (3 === dataSize) {\n const blockedData = GrowableXYZArray.create(this.auxData.channels[0].data[0].values);\n const packedData = ClusterableArray.clusterGrowablePoint3dArray(blockedData);\n this.auxData.channels[0].data[0].values = NumberArray.create(packedData.growablePackedPoints!.float64Data());\n packedData.updateIndices(this.auxData.indices);\n }\n }\n }\n /**\n * Test if `facetStartIndex` is (minimally) valid.\n * * Length must be nonzero (recall that for \"no facets\", the `facetStartIndex` array still must contain a 0).\n * * Each entry must be strictly smaller than the one that follows.\n * @param facetStartIndex start indices of all facets. Facet k starts at facetStartIndex[k] up to (but not including)\n * `facetStartIndex[k + 1]`\n */\n public static isValidFacetStartIndexArray(facetStartIndex: number[]): boolean {\n // facetStartIndex for empty facets has a single entry \"0\" -- empty array is not allowed\n if (facetStartIndex.length === 0)\n return false;\n for (let i = 0; i + 1 < facetStartIndex.length; i++)\n if (facetStartIndex[i] >= facetStartIndex[i + 1])\n return false;\n return true;\n }\n /**\n * Reverse the indices for the specified facets in the given index array.\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\n * @param facetStartIndex start indices of *consecutive* facets to be reversed, e.g., an IndexedPolyface's _facetStart\n * array. See the non-static [[reverseIndices]].\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\n */\n public static reverseIndices<T>(facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean): boolean {\n if (!indices || indices.length === 0)\n return true; // empty case\n if (indices.length > 0) {\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length) {\n for (let i = 0; i + 1 < facetStartIndex.length; i++) {\n let index0 = facetStartIndex[i];\n let index1 = facetStartIndex[i + 1];\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\n while (index1 > index0 + 2) {\n index1--;\n index0++;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n }\n } else { // reverse all\n while (index1 > index0 + 1) {\n index1--;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n index0++;\n }\n }\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Reverse the indices for the specified facet in the specified index array.\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\n * @param facetIndex index of the facet to reverse. The entries of `indices` to be reversed are found at\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\n * See [[reverseIndices]].\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\n */\n public static reverseIndicesSingleFacet<T>(\n facetIndex: number, facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean,\n ): boolean {\n if (!indices || indices.length === 0)\n return true; // empty case\n if (indices.length > 0) {\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length\n && facetIndex >= 0 && facetIndex + 1 < facetStartIndex.length) {\n let index0 = facetStartIndex[facetIndex];\n let index1 = facetStartIndex[facetIndex + 1];\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\n while (index1 > index0 + 2) {\n index1--;\n index0++;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n }\n } else { // reverse all\n while (index1 > index0 + 1) {\n index1--;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n index0++;\n }\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Reverse the indices for the specified facets in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\n * and edgeVisible).\n * @param facetStartIndex start indices of *consecutive* facets to be reversed.\n * * Consecutive indices in this array define where a given facet is represented in each of the parallel index arrays.\n * * The indices for facet k are `facetStartIndex[k]` up to (but not including) `facetStartIndex[k + 1]`.\n * * This implies `facetStartIndex[k + 1]` is both the upper limit of facet k's indices, and the start index of facet k+1.\n * * For example, passing an IndexedPolyface's _facetStart array into this method reverses every facet.\n */\n public reverseIndices(facetStartIndex?: number[]): void {\n if (facetStartIndex && PolyfaceData.isValidFacetStartIndexArray(facetStartIndex)) {\n PolyfaceData.reverseIndices(facetStartIndex, this.pointIndex, true);\n if (this.normalIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.normalIndex, true);\n if (this.paramIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.paramIndex, true);\n if (this.colorIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.colorIndex, true);\n PolyfaceData.reverseIndices(facetStartIndex, this.edgeVisible, false);\n // TODO: reverse auxData.indices, edgeMateIndex\n }\n }\n /**\n * Reverse the indices for the specified facet in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\n * and edgeVisible).\n * @param facetIndex index of the facet to reverse. The entries of each index array to be reversed are found at\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\n * See [[reverseIndices]].\n */\n public reverseIndicesSingleFacet(facetIndex: number, facetStartIndex: number[]): void {\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.pointIndex, true);\n if (this.normalIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.normalIndex, true);\n if (this.paramIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.paramIndex, true);\n if (this.colorIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.colorIndex, true);\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.edgeVisible, false);\n // TODO: reverse auxData.indices, edgeMateIndex\n }\n /** Scale all the normals by -1. */\n public reverseNormals() {\n if (this.normal)\n this.normal.scaleInPlace(-1.0);\n }\n}\n"]}
1
+ {"version":3,"file":"PolyfaceData.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceData.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,0CAAuC;AACvC,mEAAgE;AAChE,qEAAkE;AAClE,mEAAwD;AACxD,mEAAkE;AAClE,6DAAyD;AACzD,+CAA8C;AAE9C,mEAAgE;AAChE,uCAA4C;AAE5C,2DAAwD;AAExD,2BAA2B;AAE3B;;;;;;;;;GASG;AACH,MAAa,YAAY;IACvB;;;MAGE;IACK,MAAM,CAAU,oBAAoB,GAAG,OAAO,CAAC;IACtD,0FAA0F;IACnF,KAAK,CAAmB;IAC/B,2CAA2C;IACpC,UAAU,CAAW;IAC5B,+EAA+E;IACxE,MAAM,CAAoB;IACjC,4CAA4C;IACrC,WAAW,CAAY;IAC9B,8EAA8E;IACvE,KAAK,CAAmB;IAC/B,2CAA2C;IACpC,UAAU,CAAY;IAC7B;;;OAGG;IACI,KAAK,CAAY;IACxB,2CAA2C;IACpC,UAAU,CAAY;IAC7B;;;;;OAKG;IACI,IAAI,CAAkB;IAC7B,sBAAsB;IACf,OAAO,CAAmB;IACjC,4BAA4B;IACrB,iBAAiB,CAAqB;IAC7C;;;;;;OAMG;IACI,WAAW,CAAY;IAC9B,6BAA6B;IACrB,SAAS,CAAU;IAC3B;;;;OAIG;IACK,gBAAgB,CAAS;IAEjC;;;;;;;;;;;;;;;OAeG;IACI,aAAa,CAA6B;IACjD;;;;;;;OAOG;IACI,wBAAwB,CAAC,CAAqB;QACnD,IAAI,CAAC,KAAK,SAAS;eACd,IAAI,CAAC,aAAa,KAAK,SAAS;eAChC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM;YAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,oEAAoE;IAC7D,gBAAgB,CAAC,KAAyB;QAC/C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAC7E,CAAC;IAED;;;;;;OAMG;IACH,YACE,cAAuB,KAAK,EAAE,aAAsB,KAAK,EAAE,aAAsB,KAAK,EAAE,WAAoB,IAAI;QAEhH,IAAI,CAAC,KAAK,GAAG,IAAI,mCAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,mCAAgB,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,iCAAe,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,2BAA2B;IACpB,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,MAAM;YACb,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW;YAClB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,KAAK;YACZ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK;YACZ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO;YACd,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,iBAAiB;YACxB,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC5D,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC9C,IAAI,IAAI,CAAC,aAAa;YACpB,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2DAA2D;IACpD,aAAa,CAAC,KAAmB;QACtC,IAAI,CAAC,mCAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,mCAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,iCAAe,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACpD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,yBAAe,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,qCAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YAClC,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe;YAChD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,gDAAgD;IAChD,IAAW,cAAc;QACvB,OAAO,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,+CAA+C;IAC/C,IAAW,aAAa;QACtB,OAAO,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,+CAA+C;IAC/C,IAAW,aAAa;QACtB,OAAO,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,2BAA2B;IAC3B,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,mHAAmH;IACnH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IACD;;;;OAIG;IACH,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,6FAA6F;IACtF,QAAQ,CAAC,CAAS,EAAE,MAAgB;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IACD,yFAAyF;IAClF,SAAS,CAAC,CAAS,EAAE,MAAiB;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,CAAC;IACD,6FAA6F;IACtF,QAAQ,CAAC,CAAS,EAAE,MAAgB;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,CAAC;IACD,gFAAgF;IACzE,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,sFAAsF;IAC/E,cAAc,CAAC,CAAS;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD;;;;;OAKG;IACH,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAW,QAAQ,CAAC,KAAc;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,gGAAgG;IAChG,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IACD,IAAW,eAAe,CAAC,KAAa;QACtC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,oCAAoC;IAC7B,oBAAoB,CAAC,IAAmC;QAC7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;IACD,wGAAwG;IACjG,WAAW,CAAC,CAAS,EAAE,IAAa;QACzC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,yGAAyG;IAClG,YAAY,CAAC,CAAS,EAAE,IAAc;QAC3C,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,wGAAwG;IACjG,WAAW,CAAC,CAAS,EAAE,IAAa;QACzC,IAAI,IAAI,CAAC,KAAK;YACZ,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IACD,wDAAwD;IACjD,yBAAyB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC9D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;YAC7D,OAAO,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;mBACvE,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;;;OASG;IACI,iBAAiB,CAAC,KAAmB,EAAE,MAAc,EAAE,MAAc,EAAE,OAAe;QAC3F,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;QAChC,IAAI,OAAO,GAAG,OAAO;YACnB,OAAO,GAAG,OAAO,CAAC;QACpB,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/B,sBAAsB;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtE,0BAA0B;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACpD,uBAAuB;QACvB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxE,2BAA2B;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACvF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACrE,0BAA0B;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,0BAA0B;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtD,uBAAuB;QACvB,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpG,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;gBAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,WAAW,CAAC,eAAe,CAAC;gBAC9C,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACzD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;wBAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACzC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;4BAC9B,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;wBAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;4BAC9B,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;YACH,CAAC;YACD,6BAA6B;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,6BAA6B;QAC7B,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,qDAAqD;IAC7C,MAAM,CAAC,SAAS,CAAC,IAAuB,EAAE,MAAc;QAC9D,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;YAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IACD;;;OAGG;IACI,kBAAkB,CAAC,MAAc;QACtC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACrD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI;oBAC7B,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QACD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IACD;;;OAGG;IACI,eAAe,CAAC,MAAc;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;gBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;gBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,MAAM;gBACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM;oBAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,WAAW;gBAClB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;oBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU;gBACjB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;oBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,CAAC,UAAU;gBACjB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;oBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;gBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe;4BAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;oBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,IAAI,CAAC,aAAa;gBACpB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,MAAM;oBACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM;gBACb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,WAAW;gBAClB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACnC,IAAI,IAAI,CAAC,KAAK;gBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,UAAU;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,IAAI,IAAI,CAAC,KAAK;gBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC7B,IAAI,IAAI,CAAC,UAAU;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACjC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;oBAC/D,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;oBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACzC,CAAC;YACD,IAAI,IAAI,CAAC,aAAa;gBACpB,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;QACvC,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,mBAAmB,CAAC,MAAc;QACvC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,MAAM;gBACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe;4BAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC3C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;oBAC/D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,oEAAoE;IAC7D,KAAK,CAAC,MAAgB,EAAE,SAAqB;QAClD,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAO,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;;;;;;;;;;OAcG;IACI,mBAAmB,CAAC,SAAoB;QAC7C,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU;YAC7C,IAAI,CAAC,MAAM,CAAC,qDAAqD,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtF,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACtE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAI;gBAC9B,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,IAAI,CAAC,OAAO;YACd,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;;;;OAOG;IACI,QAAQ,CAAC,YAAoB,mBAAQ,CAAC,mBAAmB;QAC9D,8DAA8D;QAC9D,MAAM,YAAY,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,oBAAqB,CAAC;QAChD,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,gFAAgF;QAChF,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChF,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,oBAAqB,CAAC;YAClD,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9E,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,oBAAoB,CAAC;YAC/C,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,mCAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrE,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC;YACxC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAC1D,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,mCAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAChG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC;gBACnE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,mCAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACrF,MAAM,UAAU,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;gBAC7E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,0BAAW,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAqB,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC7G,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,2BAA2B,CAAC,eAAyB;QACjE,wFAAwF;QACxF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE;YACjD,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9C,OAAO,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,cAAc,CAAI,eAAyB,EAAE,OAAwB,EAAE,aAAsB;QACzG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAClC,OAAO,IAAI,CAAC,CAAC,aAAa;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpD,IAAI,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,MAAM,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpC,IAAI,aAAa,EAAE,CAAC,CAAC,+DAA+D;wBAClF,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC3B,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,CAAC;4BACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC;yBAAM,CAAC,CAAC,cAAc;wBACrB,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC3B,MAAM,EAAE,CAAC;4BACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;4BACpB,MAAM,EAAE,CAAC;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,yBAAyB,CACrC,UAAkB,EAAE,eAAyB,EAAE,OAAwB,EAAE,aAAsB;QAE/F,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAClC,OAAO,IAAI,CAAC,CAAC,aAAa;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM;mBAC7D,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;gBAChE,IAAI,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,MAAM,GAAG,eAAe,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBAC7C,IAAI,aAAa,EAAE,CAAC,CAAC,+DAA+D;oBAClF,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,EAAE,CAAC;wBACT,MAAM,EAAE,CAAC;wBACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;qBAAM,CAAC,CAAC,cAAc;oBACrB,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,EAAE,CAAC;wBACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACpB,MAAM,EAAE,CAAC;oBACX,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;;MAQE;IACK,cAAc,CAAC,eAA0B;QAC9C,IAAI,eAAe,IAAI,YAAY,CAAC,2BAA2B,CAAC,eAAe,CAAC,EAAE,CAAC;YACjF,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU;gBACtC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;gBACrC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;gBACrC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACtE,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACtE,+CAA+C;QACjD,CAAC;IACH,CAAC;IACD;;;;;;;OAOG;IACI,yBAAyB,CAAC,UAAkB,EAAE,eAAyB;QAC5E,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3F,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU;YACtC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9F,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YACrC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YACrC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7F,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC7F,+CAA+C;IACjD,CAAC;IACD,mCAAmC;IAC5B,cAAc;QACnB,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;;AAjuBH,oCAkuBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Polyface\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\nimport { Range3d } from \"../geometry3d/Range\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { ClusterableArray } from \"../numerics/ClusterableArray\";\nimport { PolyfaceAuxData } from \"./AuxData\";\nimport { FacetFaceData } from \"./FacetFaceData\";\nimport { TaggedNumericData } from \"./TaggedNumericData\";\n\n// cspell:word internaldocs\n\n/**\n * `PolyfaceData` carries data arrays for point, normal, uv-parameters, and color, and index arrays for each.\n * * Normal, uv-parameter, and color data are optional.\n * * A given data array is defined if and only if its corresponding index array is defined.\n * * All defined index arrays have parallel face loop order and structure, and thus the same length.\n * * `IndexedPolyface` carries a PolyfaceData as a member (NOT as a base class; it already has `GeometryQuery` as base).\n * * `IndexedPolyfaceVisitor` uses PolyfaceData as a base class. In this use, there is only a single facet in `PolyfaceData`.\n * * `PolyfaceData` does not know what index range constitutes a given facet. This is managed by a derived/carrier class.\n * @public\n */\nexport class PolyfaceData {\n /**\n * Relative tolerance used in tests for planar facets.\n * @internal\n */\n public static readonly planarityLocalRelTol = 1.0e-13;\n /** Coordinate data for points in the facets (packed as numbers in a contiguous array). */\n public point: GrowableXYZArray;\n /** Indices of points at facet vertices. */\n public pointIndex: number[];\n /** Coordinates of normal vectors (packed as numbers in a contiguous array). */\n public normal?: GrowableXYZArray;\n /** Indices of normals at facet vertices. */\n public normalIndex?: number[];\n /** Coordinates of uv parameters (packed as numbers in a contiguous array). */\n public param?: GrowableXYArray;\n /** Indices of params at facet vertices. */\n public paramIndex?: number[];\n /**\n * Color values. These are carried around as simple numbers, but are probably required (by display systems) to map\n * exactly to 32-bit integers.\n */\n public color?: number[];\n /** Indices of colors at facet vertices. */\n public colorIndex?: number[];\n /**\n * Map from facet index to face data.\n * * A \"face\" is a logical grouping of connected facets in the mesh, e.g., the facets that resulted from faceting\n * a given face of a solid.\n * * Face data remains empty until a face is specified.\n */\n public face: FacetFaceData[];\n /** Auxiliary data. */\n public auxData?: PolyfaceAuxData;\n /** Tagged geometry data. */\n public taggedNumericData?: TaggedNumericData;\n /**\n * Booleans indicating visibility of corresponding edges.\n * * The `edgeVisible` array is parallel to the `pointIndex` array.\n * * The visibility flag applies to the edge whose start vertex index appears in the same place in the `pointIndex` array.\n * * For example, consider the mesh with 2 triangular facets given by `pointIndex = [1,0,2, 1,2,3]`. If the triangles'\n * shared edge is hidden, then the mesh has `edgeVisible = [true,true,false, false,true,true]`.\n */\n public edgeVisible: boolean[];\n /** The [[twoSided]] flag. */\n private _twoSided: boolean;\n /**\n * Flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2).\n * * A boundary edge of a mesh is defined as an edge with only one connected facet.\n * * Closed solid is a mesh with no boundary edge. Open sheet is a mesh that has boundary edge(s).\n */\n private _expectedClosure: number;\n\n /**\n * Optional index array for moving \"across an edge\" to an adjacent facet.\n * * This array:\n * * completes the topology of the polyface.\n * * has the same length as the other PolyfaceData index arrays.\n * * is populated by [[IndexedPolyfaceWalker.buildEdgeMateIndices]].\n * * is used by [[IndexedPolyfaceWalker]] to traverse the polyface.\n * * is invalid if the polyface topology is subsequently changed.\n * * Let k1 = edgeMateIndex[k] be defined. Then:\n * * k1 is an index (an \"edge index\") into the PolyfaceData index arrays. (The same for k.)\n * * k and k1 refer to the two oppositely oriented sides of an interior edge in the polyface.\n * * pointIndex[k1] is the point at the opposite end of the edge that starts at pointIndex[k].\n * * edgeMateIndex[k1] === k.\n * * If k1 is undefined, then there is no adjacent facet across the edge that starts at pointIndex[k],\n * i.e. k refers to a boundary edge.\n */\n public edgeMateIndex?: Array<number | undefined>;\n /**\n * Dereference the edgeMateIndex array.\n * * This method returns undefined if:\n * * k is undefined\n * * `this.edgeMateIndex` is undefined\n * * k is out of bounds for `this.edgeMateIndex`\n * * `this.edgeMateIndex[k]` is undefined\n */\n public edgeIndexToEdgeMateIndex(k: number | undefined): number | undefined {\n if (k !== undefined\n && this.edgeMateIndex !== undefined\n && k >= 0 && k < this.edgeMateIndex.length)\n return this.edgeMateIndex[k];\n return undefined;\n }\n /** Test if `value` is a valid index into the `pointIndex` array. */\n public isValidEdgeIndex(value: number | undefined): boolean {\n return value !== undefined && value >= 0 && value < this.pointIndex.length;\n }\n\n /**\n * Constructor for facets.\n * @param needNormals `true` to allocate empty normal data and index arrays; `false` (default) to leave undefined.\n * @param needParams `true` to allocate empty uv parameter data and index arrays; `false` (default) to leave undefined.\n * @param needColors `true` to allocate empty color data and index arrays; `false` (default) to leave undefined.\n * @param twoSided `true` (default) if the facets are to be considered viewable from the back; `false` if they are amenable to backface culling.\n */\n public constructor(\n needNormals: boolean = false, needParams: boolean = false, needColors: boolean = false, twoSided: boolean = true,\n ) {\n this.point = new GrowableXYZArray();\n this.pointIndex = [];\n if (needNormals) {\n this.normal = new GrowableXYZArray();\n this.normalIndex = [];\n }\n if (needParams) {\n this.param = new GrowableXYArray();\n this.paramIndex = [];\n }\n if (needColors) {\n this.color = [];\n this.colorIndex = [];\n }\n this.face = [];\n this.edgeVisible = [];\n this._twoSided = twoSided;\n this._expectedClosure = 0;\n }\n /** Return a deep clone. */\n public clone(): PolyfaceData {\n const result = new PolyfaceData();\n result.point = this.point.clone();\n result.pointIndex = this.pointIndex.slice();\n if (this.normal)\n result.normal = this.normal.clone();\n if (this.normalIndex)\n result.normalIndex = this.normalIndex.slice();\n if (this.param)\n result.param = this.param.clone();\n if (this.paramIndex)\n result.paramIndex = this.paramIndex.slice();\n if (this.color)\n result.color = this.color.slice();\n if (this.colorIndex)\n result.colorIndex = this.colorIndex.slice();\n result.face = this.face.slice();\n if (this.auxData)\n result.auxData = this.auxData.clone();\n if (this.taggedNumericData)\n result.taggedNumericData = this.taggedNumericData.clone();\n result.edgeVisible = this.edgeVisible.slice();\n result.twoSided = this.twoSided;\n result.expectedClosure = this.expectedClosure;\n if (this.edgeMateIndex)\n result.edgeMateIndex = this.edgeMateIndex.slice();\n return result;\n }\n /** Test for equal indices and nearly equal coordinates. */\n public isAlmostEqual(other: PolyfaceData): boolean {\n if (!GrowableXYZArray.isAlmostEqual(this.point, other.point))\n return false;\n if (!NumberArray.isExactEqual(this.pointIndex, other.pointIndex))\n return false;\n if (!GrowableXYZArray.isAlmostEqual(this.normal, other.normal))\n return false;\n if (!NumberArray.isExactEqual(this.normalIndex, other.normalIndex))\n return false;\n if (!GrowableXYArray.isAlmostEqual(this.param, other.param))\n return false;\n if (!NumberArray.isExactEqual(this.paramIndex, other.paramIndex))\n return false;\n if (!NumberArray.isExactEqual(this.color, other.color))\n return false;\n if (!NumberArray.isExactEqual(this.colorIndex, other.colorIndex))\n return false;\n if (!PolyfaceAuxData.isAlmostEqual(this.auxData, other.auxData))\n return false;\n if (!TaggedNumericData.areAlmostEqual(this.taggedNumericData, other.taggedNumericData))\n return false;\n if (!NumberArray.isExactEqual(this.edgeVisible, other.edgeVisible))\n return false;\n if (this.twoSided !== other.twoSided)\n return false;\n if (this.expectedClosure !== other.expectedClosure)\n return false;\n if (!NumberArray.isExactEqual(this.edgeMateIndex, other.edgeMateIndex))\n return false;\n return true;\n }\n /** Ask if normals are required in this mesh. */\n public get requireNormals(): boolean {\n return undefined !== this.normal;\n }\n /** Ask if params are required in this mesh. */\n public get requireParams(): boolean {\n return undefined !== this.param;\n }\n /** Ask if colors are required in this mesh. */\n public get requireColors(): boolean {\n return undefined !== this.color;\n }\n /** Get the point count */\n public get pointCount() {\n return this.point.length;\n }\n /** Get the normal count */\n public get normalCount() {\n return this.normal ? this.normal.length : 0;\n }\n /** Get the param count */\n public get paramCount() {\n return this.param ? this.param.length : 0;\n }\n /** Get the color count */\n public get colorCount() {\n return this.color ? this.color.length : 0;\n }\n /** Get the index count. Note that the point array is always indexed, and index arrays all have the same length. */\n public get indexCount() {\n return this.pointIndex.length;\n }\n /**\n * Get the number of faces.\n * * Note that a \"face\" is not a facet.\n * * A face is a subset of the Polyface's facets grouped for application purposes.\n */\n public get faceCount() {\n return this.face.length;\n }\n /** Return indexed point at index `i`. This is a COPY of the coordinates, not a reference. */\n public getPoint(i: number, result?: Point3d): Point3d | undefined {\n return this.point.getPoint3dAtCheckedPointIndex(i, result);\n }\n /** Return indexed normal at index `i`. This is a COPY of the normal, not a reference. */\n public getNormal(i: number, result?: Vector3d): Vector3d | undefined {\n return this.normal ? this.normal.getVector3dAtCheckedVectorIndex(i, result) : undefined;\n }\n /** Return indexed param at index `i`. This is a COPY of the coordinates, not a reference. */\n public getParam(i: number, result?: Point2d): Point2d | undefined {\n return this.param ? this.param.getPoint2dAtCheckedPointIndex(i, result) : undefined;\n }\n /** Return indexed color at index `i`. Index `i` is not checked for validity. */\n public getColor(i: number): number {\n return this.color ? this.color[i] : 0;\n }\n /** Return indexed visibility. at index `i`. Index `i` is not checked for validity. */\n public getEdgeVisible(i: number): boolean {\n return this.edgeVisible[i];\n }\n /**\n * Boolean flag indicating if the facets are viewable from the back.\n * * Default value is true.\n * * Set to false only if the mesh is known to be a closed volume with outward normals,\n * indicating it is amenable to backface culling for improved display performance.\n */\n public get twoSided(): boolean {\n return this._twoSided;\n }\n public set twoSided(value: boolean) {\n this._twoSided = value;\n }\n /** Get flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2). */\n public get expectedClosure(): number {\n return this._expectedClosure;\n }\n public set expectedClosure(value: number) {\n this._expectedClosure = value;\n }\n /** Set the tagged geometry data. */\n public setTaggedNumericData(data: TaggedNumericData | undefined) {\n this.taggedNumericData = data;\n }\n /** Copy the contents (not pointer) of `point[i]` into `dest`. Index `i` is not checked for validity. */\n public copyPointTo(i: number, dest: Point3d): void {\n this.point.getPoint3dAtUncheckedPointIndex(i, dest);\n }\n /** Copy the contents (not pointer) of `normal[i]` into `dest`. Index `i` is not checked for validity. */\n public copyNormalTo(i: number, dest: Vector3d): void {\n if (this.normal)\n this.normal.getVector3dAtUncheckedVectorIndex(i, dest);\n }\n /** Copy the contents (not pointer) of `param[i]` into `dest`. Index `i` is not checked for validity. */\n public copyParamTo(i: number, dest: Point2d): void {\n if (this.param)\n this.param.getPoint2dAtUncheckedPointIndex(i, dest);\n }\n /** Test if param at a index `i` matches the given uv */\n public isAlmostEqualParamIndexUV(i: number, u: number, v: number): boolean {\n if (this.param !== undefined && i >= 0 && i < this.param.length)\n return Geometry.isSameCoordinate(u, this.param.getXAtUncheckedPointIndex(i))\n && Geometry.isSameCoordinate(v, this.param.getYAtUncheckedPointIndex(i));\n return false;\n }\n /**\n * Copy data from `other` to `this`.\n * * This is the essence of transferring coordinates spread throughout a large polyface into a visitor's single facet.\n * * Common usage: \"other\" is a Polyface, \"this\" is a PolyfaceVisitor to receive data from a single facet of the Polyface.\n * * Does NOT copy face data - visitors reference the FacetFaceData array for the whole polyface.\n * @param other polyface data being mined.\n * @param index0 start index in other's index arrays.\n * @param index1 end index (one beyond last data accessed) in other's index arrays.\n * @param numWrap number of points to replicate as wraparound.\n */\n public gatherIndexedData(other: PolyfaceData, index0: number, index1: number, numWrap: number): void {\n const numEdge = index1 - index0;\n if (numWrap > numEdge)\n numWrap = numEdge;\n const numTotal = numEdge + numWrap;\n this.resizeAllArrays(numTotal);\n // copy wrapped points\n for (let i = 0; i < numEdge; i++)\n this.point.transferFromGrowableXYZArray(i, other.point, other.pointIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.point.transferFromGrowableXYZArray(numEdge + i, this.point, i);\n // copy wrapped pointIndex\n for (let i = 0; i < numEdge; i++)\n this.pointIndex[i] = other.pointIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.pointIndex[numEdge + i] = this.pointIndex[i];\n // copy wrapped normals\n if (this.normal && this.normalIndex && other.normal && other.normalIndex) {\n for (let i = 0; i < numEdge; i++)\n this.normal.transferFromGrowableXYZArray(i, other.normal, other.normalIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.normal.transferFromGrowableXYZArray(numEdge + i, this.normal, i);\n // copy wrapped normalIndex\n for (let i = 0; i < numEdge; i++)\n this.normalIndex[i] = other.normalIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.normalIndex[numEdge + i] = this.normalIndex[i];\n }\n // copy wrapped params\n if (this.param && this.paramIndex && other.param && other.paramIndex) {\n for (let i = 0; i < numEdge; i++)\n this.param.transferFromGrowableXYArray(i, other.param, other.paramIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.param.transferFromGrowableXYArray(numEdge + i, this.param, i);\n // copy wrapped paramIndex\n for (let i = 0; i < numEdge; i++)\n this.paramIndex[i] = other.paramIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.paramIndex[numEdge + i] = this.paramIndex[i];\n }\n // copy wrapped colors\n if (this.color && this.colorIndex && other.color && other.colorIndex) {\n for (let i = 0; i < numEdge; i++)\n this.color[i] = other.color[other.colorIndex[index0 + i]];\n for (let i = 0; i < numWrap; i++)\n this.color[numEdge + i] = this.color[i];\n // copy wrapped colorIndex\n for (let i = 0; i < numEdge; i++)\n this.colorIndex[i] = other.colorIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.colorIndex[numEdge + i] = this.colorIndex[i];\n }\n // copy wrapped edge visibility\n for (let i = 0; i < numEdge; i++)\n this.edgeVisible[i] = other.edgeVisible[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.edgeVisible[numEdge + i] = this.edgeVisible[i];\n // copy wrapped auxData\n if (this.auxData && other.auxData && this.auxData.channels.length === other.auxData.channels.length) {\n for (let iChannel = 0; iChannel < this.auxData.channels.length; iChannel++) {\n const thisChannel = this.auxData.channels[iChannel];\n const otherChannel = other.auxData.channels[iChannel];\n const blockSize = thisChannel.entriesPerValue;\n if (thisChannel.data.length === otherChannel.data.length) {\n for (let iData = 0; iData < thisChannel.data.length; iData++) {\n const thisData = thisChannel.data[iData];\n const otherData = otherChannel.data[iData];\n for (let i = 0; i < numEdge; i++)\n thisData.copyValues(otherData, i, other.auxData.indices[index0 + i], blockSize);\n for (let i = 0; i < numWrap; i++)\n thisData.copyValues(thisData, other.auxData.indices[numEdge + i], i, blockSize);\n }\n }\n }\n // copy wrapped auxData index\n for (let i = 0; i < numEdge; i++)\n this.auxData.indices[i] = other.auxData.indices[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.auxData.indices[numEdge + i] = this.auxData.indices[i];\n }\n // copy wrapped edgeMateIndex\n if (this.edgeMateIndex && other.edgeMateIndex) {\n for (let i = 0; i < numEdge; i++)\n this.edgeMateIndex[i] = other.edgeMateIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.edgeMateIndex[numEdge + i] = this.edgeMateIndex[i];\n }\n }\n /** Trim the `data` arrays to the stated `length`. */\n private static trimArray(data: any[] | undefined, length: number) {\n if (data && length < data.length)\n data.length = length;\n }\n /**\n * Trim all index arrays to the stated `length`.\n * * This is called by PolyfaceBuilder to clean up after an aborted construction sequence.\n */\n public trimAllIndexArrays(length: number): void {\n PolyfaceData.trimArray(this.pointIndex, length);\n PolyfaceData.trimArray(this.paramIndex, length);\n PolyfaceData.trimArray(this.normalIndex, length);\n PolyfaceData.trimArray(this.colorIndex, length);\n PolyfaceData.trimArray(this.edgeVisible, length);\n if (this.auxData) {\n PolyfaceData.trimArray(this.auxData.indices, length);\n for (const channel of this.auxData.channels) {\n for (const data of channel.data)\n PolyfaceData.trimArray(data.values, channel.entriesPerValue * length);\n }\n }\n PolyfaceData.trimArray(this.edgeMateIndex, length);\n }\n /**\n * Resize all data and index arrays to the specified `length`.\n * * This is used by visitors, whose data and index arrays are all parallel.\n */\n public resizeAllArrays(length: number): void {\n if (length > this.point.length) {\n while (this.point.length < length)\n this.point.push(Point3d.create());\n while (this.pointIndex.length < length)\n this.pointIndex.push(-1);\n if (this.normal)\n while (this.normal.length < length)\n this.normal.push(Vector3d.create());\n if (this.normalIndex)\n while (this.normalIndex.length < length)\n this.normalIndex.push(-1);\n if (this.param)\n while (this.param.length < length)\n this.param.push(Point2d.create());\n if (this.paramIndex)\n while (this.paramIndex.length < length)\n this.paramIndex.push(-1);\n if (this.color)\n while (this.color.length < length)\n this.color.push(0);\n if (this.colorIndex)\n while (this.colorIndex.length < length)\n this.colorIndex.push(-1);\n while (this.edgeVisible.length < length)\n this.edgeVisible.push(false);\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\n }\n }\n if (this.auxData.indices)\n this.auxData.indices.push(-1);\n }\n if (this.edgeMateIndex)\n while (this.edgeMateIndex.length < length)\n this.edgeMateIndex.push(undefined);\n } else if (length < this.point.length) {\n this.point.resize(length);\n this.pointIndex.length = length;\n if (this.normal)\n this.normal.resize(length);\n if (this.normalIndex)\n this.normalIndex.length = length;\n if (this.param)\n this.param.resize(length);\n if (this.paramIndex)\n this.paramIndex.length = length;\n if (this.color)\n this.color.length = length;\n if (this.colorIndex)\n this.colorIndex.length = length;\n this.edgeVisible.length = length;\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n channelData.values.length = length * channel.entriesPerValue;\n }\n }\n if (this.auxData.indices)\n this.auxData.indices.length = length;\n }\n if (this.edgeMateIndex)\n this.edgeMateIndex.length = length;\n }\n }\n /**\n * Resize all data arrays to the specified `length`.\n * @deprecated in 4.5.0 - will not be removed until after 2026-06-13. Because name is misleading. Call [[PolyfaceData.resizeAllArrays]] instead.\n */\n public resizeAllDataArrays(length: number): void {\n if (length > this.point.length) {\n while (this.point.length < length) this.point.push(Point3d.create());\n while (this.pointIndex.length < length) this.pointIndex.push(-1);\n while (this.edgeVisible.length < length) this.edgeVisible.push(false);\n if (this.normal)\n while (this.normal.length < length) this.normal.push(Vector3d.create());\n if (this.param)\n while (this.param.length < length) this.param.push(Point2d.create());\n if (this.color)\n while (this.color.length < length) this.color.push(0);\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\n }\n }\n }\n } else if (length < this.point.length) {\n this.point.resize(length);\n this.edgeVisible.length = length;\n this.pointIndex.length = length;\n if (this.normal) this.normal.resize(length);\n if (this.param) this.param.resize(length);\n if (this.color) this.color.length = length;\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n channelData.values.length = length * channel.entriesPerValue;\n }\n }\n }\n }\n }\n /** Return the range of the point array (optionally transformed). */\n public range(result?: Range3d, transform?: Transform): Range3d {\n result = result ? result : Range3d.createNull();\n result.extendArray(this.point, transform);\n return result;\n }\n /**\n * Apply a transform to the mesh data.\n * * Transform the data as follows:\n * * apply `transform` to points.\n * * apply inverse transpose of `transform` to normals and renormalize. This preserves normals perpendicular\n * to transformed facets, and keeps them pointing outward, e.g, if the mesh is closed. If the transform is not\n * invertible or a normal has zero length, the normal(s) are left unchanged, and this error is silently ignored.\n * * apply `transform` to auxData.\n * * scale faceData distances by the cube root of the absolute value of the determinant of `transform.matrix`.\n * * Note that if the transform is a mirror, this method does NOT reverse index order. This is the caller's\n * responsibility. This base class is just a data carrier: PolyfaceData does not know if the index order has\n * special meaning.\n * * Note that this method always returns true. If transforming normals fails (due to singular matrix or zero\n * normal), the original normal(s) are left unchanged.\n */\n public tryTransformInPlace(transform: Transform): boolean {\n this.point.multiplyTransformInPlace(transform);\n if (this.normal && !transform.matrix.isIdentity)\n this.normal.multiplyAndRenormalizeMatrix3dInverseTransposeInPlace(transform.matrix);\n if (this.face.length > 0) {\n const distScale = Math.cbrt(Math.abs(transform.matrix.determinant()));\n for (const faceData of this.face)\n faceData.scaleDistances(distScale);\n }\n if (this.auxData)\n this.auxData.tryTransformInPlace(transform);\n return true;\n }\n /**\n * Compress the instance by equating duplicate data.\n * * Search for duplicates within vertices, normals, params, and colors.\n * * Compress each data array.\n * * Revise all indexing for the relocated data.\n * * [[PolyfaceAuxData]] is compressed if and only if exactly one [[AuxChannelData]] is present.\n * @param tolerance (optional) tolerance for clustering mesh vertices only. Default value, and the tolerance used to cluster all other data, is [[Geometry.smallMetricDistance]].\n */\n public compress(tolerance: number = Geometry.smallMetricDistance): void {\n // more info can be found at geometry/internaldocs/Polyface.md\n const packedPoints = ClusterableArray.clusterGrowablePoint3dArray(this.point, tolerance);\n this.point = packedPoints.growablePackedPoints!;\n packedPoints.updateIndices(this.pointIndex);\n // for now, normals, params, and colors use the default tolerance for clustering\n if (this.normalIndex && this.normal) {\n const packedNormals = ClusterableArray.clusterGrowablePoint3dArray(this.normal);\n this.normal = packedNormals.growablePackedPoints!;\n packedNormals.updateIndices(this.normalIndex);\n }\n if (this.paramIndex && this.param) {\n const packedParams = ClusterableArray.clusterGrowablePoint2dArray(this.param);\n this.param = packedParams.growablePackedPoints;\n packedParams.updateIndices(this.paramIndex);\n }\n if (this.colorIndex && this.color) {\n const packedColors = ClusterableArray.clusterNumberArray(this.color);\n this.color = packedColors.packedNumbers;\n packedColors.updateIndices(this.colorIndex);\n }\n if (this.auxData && this.auxData.channels.length === 1 && this.auxData.channels[0].data.length === 1) {\n const dataSize = this.auxData.channels[0].entriesPerValue;\n if (1 === dataSize) {\n const packedData = ClusterableArray.clusterNumberArray(this.auxData.channels[0].data[0].values);\n this.auxData.channels[0].data[0].values = packedData.packedNumbers;\n packedData.updateIndices(this.auxData.indices);\n } else if (3 === dataSize) {\n const blockedData = GrowableXYZArray.create(this.auxData.channels[0].data[0].values);\n const packedData = ClusterableArray.clusterGrowablePoint3dArray(blockedData);\n this.auxData.channels[0].data[0].values = NumberArray.create(packedData.growablePackedPoints!.float64Data());\n packedData.updateIndices(this.auxData.indices);\n }\n }\n }\n /**\n * Test if `facetStartIndex` is (minimally) valid.\n * * Length must be nonzero (recall that for \"no facets\", the `facetStartIndex` array still must contain a 0).\n * * Each entry must be strictly smaller than the one that follows.\n * @param facetStartIndex start indices of all facets. Facet k starts at facetStartIndex[k] up to (but not including)\n * `facetStartIndex[k + 1]`\n */\n public static isValidFacetStartIndexArray(facetStartIndex: number[]): boolean {\n // facetStartIndex for empty facets has a single entry \"0\" -- empty array is not allowed\n if (facetStartIndex.length === 0)\n return false;\n for (let i = 0; i + 1 < facetStartIndex.length; i++)\n if (facetStartIndex[i] >= facetStartIndex[i + 1])\n return false;\n return true;\n }\n /**\n * Reverse the indices for the specified facets in the given index array.\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\n * @param facetStartIndex start indices of *consecutive* facets to be reversed, e.g., an IndexedPolyface's _facetStart\n * array. See the non-static [[reverseIndices]].\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\n */\n public static reverseIndices<T>(facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean): boolean {\n if (!indices || indices.length === 0)\n return true; // empty case\n if (indices.length > 0) {\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length) {\n for (let i = 0; i + 1 < facetStartIndex.length; i++) {\n let index0 = facetStartIndex[i];\n let index1 = facetStartIndex[i + 1];\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\n while (index1 > index0 + 2) {\n index1--;\n index0++;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n }\n } else { // reverse all\n while (index1 > index0 + 1) {\n index1--;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n index0++;\n }\n }\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Reverse the indices for the specified facet in the specified index array.\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\n * @param facetIndex index of the facet to reverse. The entries of `indices` to be reversed are found at\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\n * See [[reverseIndices]].\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\n */\n public static reverseIndicesSingleFacet<T>(\n facetIndex: number, facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean,\n ): boolean {\n if (!indices || indices.length === 0)\n return true; // empty case\n if (indices.length > 0) {\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length\n && facetIndex >= 0 && facetIndex + 1 < facetStartIndex.length) {\n let index0 = facetStartIndex[facetIndex];\n let index1 = facetStartIndex[facetIndex + 1];\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\n while (index1 > index0 + 2) {\n index1--;\n index0++;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n }\n } else { // reverse all\n while (index1 > index0 + 1) {\n index1--;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n index0++;\n }\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Reverse the indices for the specified facets in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\n * and edgeVisible).\n * @param facetStartIndex start indices of *consecutive* facets to be reversed.\n * * Consecutive indices in this array define where a given facet is represented in each of the parallel index arrays.\n * * The indices for facet k are `facetStartIndex[k]` up to (but not including) `facetStartIndex[k + 1]`.\n * * This implies `facetStartIndex[k + 1]` is both the upper limit of facet k's indices, and the start index of facet k+1.\n * * For example, passing an IndexedPolyface's _facetStart array into this method reverses every facet.\n */\n public reverseIndices(facetStartIndex?: number[]): void {\n if (facetStartIndex && PolyfaceData.isValidFacetStartIndexArray(facetStartIndex)) {\n PolyfaceData.reverseIndices(facetStartIndex, this.pointIndex, true);\n if (this.normalIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.normalIndex, true);\n if (this.paramIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.paramIndex, true);\n if (this.colorIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.colorIndex, true);\n PolyfaceData.reverseIndices(facetStartIndex, this.edgeVisible, false);\n // TODO: reverse auxData.indices, edgeMateIndex\n }\n }\n /**\n * Reverse the indices for the specified facet in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\n * and edgeVisible).\n * @param facetIndex index of the facet to reverse. The entries of each index array to be reversed are found at\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\n * See [[reverseIndices]].\n */\n public reverseIndicesSingleFacet(facetIndex: number, facetStartIndex: number[]): void {\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.pointIndex, true);\n if (this.normalIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.normalIndex, true);\n if (this.paramIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.paramIndex, true);\n if (this.colorIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.colorIndex, true);\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.edgeVisible, false);\n // TODO: reverse auxData.indices, edgeMateIndex\n }\n /** Scale all the normals by -1. */\n public reverseNormals() {\n if (this.normal)\n this.normal.scaleInPlace(-1.0);\n }\n}\n"]}