@cesium/engine 21.0.1 → 22.0.0

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 (244) hide show
  1. package/Build/Workers/{chunk-LPKJSIMD.js → chunk-2D3GLFZD.js} +12 -12
  2. package/Build/Workers/chunk-34YXP222.js +352 -0
  3. package/Build/Workers/{chunk-UKA7OISV.js → chunk-3GL53OCU.js} +17 -18
  4. package/Build/Workers/{chunk-WQZL6CA2.js → chunk-5B7VZQZY.js} +6 -6
  5. package/Build/Workers/{chunk-FE565QHX.js → chunk-5T5SY63I.js} +2 -2
  6. package/Build/Workers/{chunk-RR3NCT4R.js → chunk-5ZF53EY6.js} +4 -4
  7. package/Build/Workers/{chunk-PZUZCAX3.js → chunk-6HBKE43B.js} +7 -7
  8. package/Build/Workers/{chunk-5YXA47QD.js → chunk-726NINF5.js} +16 -16
  9. package/Build/Workers/{chunk-3RKX3UFI.js → chunk-75HAJIDT.js} +1 -1
  10. package/Build/Workers/{chunk-CBPNIEGH.js → chunk-7KAXDKRU.js} +10 -10
  11. package/Build/Workers/chunk-7XEJGXX2.js +2759 -0
  12. package/Build/Workers/{chunk-U2GR5FDL.js → chunk-A4DPJIWS.js} +18 -10
  13. package/Build/Workers/{chunk-G3CKZ34K.js → chunk-A6JAFSZT.js} +5 -5
  14. package/Build/Workers/{chunk-2SI7DEW5.js → chunk-AARZSH4V.js} +5 -5
  15. package/Build/Workers/{chunk-W6KMV4F5.js → chunk-AOM3FHBN.js} +6 -6
  16. package/Build/Workers/{chunk-VVALNLSH.js → chunk-BJSNGGBM.js} +4 -4
  17. package/Build/Workers/{chunk-3YNW5K6O.js → chunk-ECHAJNQJ.js} +12 -12
  18. package/Build/Workers/{chunk-KZ7GDSAJ.js → chunk-EJO3NKMS.js} +1 -1
  19. package/Build/Workers/{chunk-UFSYRVC5.js → chunk-EZ7NJXQN.js} +4 -4
  20. package/Build/Workers/{chunk-P2UKEFCK.js → chunk-FA3SCJDX.js} +2 -2
  21. package/Build/Workers/{chunk-MXOGBWMP.js → chunk-GYRDA3XK.js} +14 -14
  22. package/Build/Workers/{chunk-KVB73ECP.js → chunk-H7B7FU2U.js} +7 -7
  23. package/Build/Workers/{chunk-XJVRYJVZ.js → chunk-IGX772ZQ.js} +1 -1
  24. package/Build/Workers/{chunk-MQPDOWGH.js → chunk-JDJAPBZP.js} +1 -1
  25. package/Build/Workers/{chunk-DDXI6UYW.js → chunk-JZFU2LEM.js} +4 -4
  26. package/Build/Workers/{chunk-DAJKOQW6.js → chunk-KGLDJRSO.js} +9 -9
  27. package/Build/Workers/{chunk-CSDYSXBI.js → chunk-KUB64XW6.js} +11 -11
  28. package/Build/Workers/{chunk-X3ZV3XNO.js → chunk-L7U26FFD.js} +16 -16
  29. package/Build/Workers/{chunk-YZ3RCE45.js → chunk-LEFQBK6H.js} +11 -11
  30. package/Build/Workers/{chunk-KEPPNSBL.js → chunk-LWJXCI3F.js} +5 -5
  31. package/Build/Workers/{chunk-YNOVMSUX.js → chunk-M7HRE4QR.js} +8 -8
  32. package/Build/Workers/{chunk-ASVODZNK.js → chunk-MXHRZHDF.js} +6 -6
  33. package/Build/Workers/{chunk-PJAA7QSC.js → chunk-N52ZRKUE.js} +6 -6
  34. package/Build/Workers/{chunk-W6I3LNPF.js → chunk-NE5JTQJP.js} +7 -7
  35. package/Build/Workers/{chunk-XG54SG4O.js → chunk-NGKF5NTR.js} +5 -5
  36. package/Build/Workers/{chunk-42EJCSIV.js → chunk-NHZNMTIR.js} +5 -5
  37. package/Build/Workers/{chunk-LU7DLY2L.js → chunk-OE22564R.js} +3 -3
  38. package/Build/Workers/{chunk-A2SP2EJZ.js → chunk-OUBBMEWX.js} +6 -6
  39. package/Build/Workers/{chunk-J2XQVKVH.js → chunk-P2H75UV5.js} +67 -33
  40. package/Build/Workers/{chunk-J3KPR6DJ.js → chunk-QCMRUVVF.js} +12 -12
  41. package/Build/Workers/{chunk-RVRN4KDB.js → chunk-QSMIHPUM.js} +2 -2
  42. package/Build/Workers/{chunk-EBDZDBJN.js → chunk-RCCYW6E7.js} +12 -12
  43. package/Build/Workers/{chunk-LV3G32QE.js → chunk-RQRODXVN.js} +4 -4
  44. package/Build/Workers/{chunk-OBS5EMZ6.js → chunk-SZN34LQ5.js} +10 -10
  45. package/Build/Workers/{chunk-IKUOV6DO.js → chunk-U4XMLGSR.js} +7 -7
  46. package/Build/Workers/{chunk-NYYQZ3LH.js → chunk-U7CX3HHE.js} +8 -8
  47. package/Build/Workers/{chunk-QNOIRRJK.js → chunk-VCVA7BMD.js} +4 -4
  48. package/Build/Workers/{chunk-TGJQMEL4.js → chunk-VVZ667H6.js} +2 -2
  49. package/Build/Workers/{chunk-DBHL2UVG.js → chunk-W4PIP5PG.js} +2 -2
  50. package/Build/Workers/{chunk-2QPH5QDK.js → chunk-XPVZWY4A.js} +8 -8
  51. package/Build/Workers/{chunk-4CORGH7N.js → chunk-XQ347YWU.js} +13 -13
  52. package/Build/Workers/{chunk-T7HU6E7G.js → chunk-XZO6F23E.js} +1 -1
  53. package/Build/Workers/{chunk-DTKSVIH5.js → chunk-YLILBDWK.js} +2 -2
  54. package/Build/Workers/{chunk-JG3C3LPY.js → chunk-YLXWC7OW.js} +4 -4
  55. package/Build/Workers/combineGeometry.js +21 -21
  56. package/Build/Workers/createBoxGeometry.js +15 -15
  57. package/Build/Workers/createBoxOutlineGeometry.js +13 -13
  58. package/Build/Workers/createCircleGeometry.js +23 -23
  59. package/Build/Workers/createCircleOutlineGeometry.js +16 -16
  60. package/Build/Workers/createCoplanarPolygonGeometry.js +30 -30
  61. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +28 -28
  62. package/Build/Workers/createCorridorGeometry.js +26 -26
  63. package/Build/Workers/createCorridorOutlineGeometry.js +25 -25
  64. package/Build/Workers/createCylinderGeometry.js +17 -17
  65. package/Build/Workers/createCylinderOutlineGeometry.js +15 -15
  66. package/Build/Workers/createEllipseGeometry.js +23 -23
  67. package/Build/Workers/createEllipseOutlineGeometry.js +16 -16
  68. package/Build/Workers/createEllipsoidGeometry.js +16 -16
  69. package/Build/Workers/createEllipsoidOutlineGeometry.js +15 -15
  70. package/Build/Workers/createFrustumGeometry.js +15 -15
  71. package/Build/Workers/createFrustumOutlineGeometry.js +15 -15
  72. package/Build/Workers/createGeometry.js +24 -22
  73. package/Build/Workers/createGroundPolylineGeometry.js +19 -19
  74. package/Build/Workers/createPlaneGeometry.js +13 -13
  75. package/Build/Workers/createPlaneOutlineGeometry.js +12 -12
  76. package/Build/Workers/createPolygonGeometry.js +29 -29
  77. package/Build/Workers/createPolygonOutlineGeometry.js +27 -27
  78. package/Build/Workers/createPolylineGeometry.js +22 -22
  79. package/Build/Workers/createPolylineVolumeGeometry.js +28 -28
  80. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +24 -24
  81. package/Build/Workers/createRectangleGeometry.js +24 -24
  82. package/Build/Workers/createRectangleOutlineGeometry.js +17 -17
  83. package/Build/Workers/createSimplePolylineGeometry.js +20 -20
  84. package/Build/Workers/createSphereGeometry.js +16 -16
  85. package/Build/Workers/createSphereOutlineGeometry.js +15 -15
  86. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  87. package/Build/Workers/createVectorTileClampedPolylines.js +12 -12
  88. package/Build/Workers/createVectorTileGeometries.js +21 -21
  89. package/Build/Workers/createVectorTilePoints.js +11 -11
  90. package/Build/Workers/createVectorTilePolygons.js +19 -19
  91. package/Build/Workers/createVectorTilePolylines.js +12 -12
  92. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +88 -0
  93. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +21 -21
  94. package/Build/Workers/createVerticesFromHeightmap.js +21 -21
  95. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +19 -277
  96. package/Build/Workers/createWallGeometry.js +21 -21
  97. package/Build/Workers/createWallOutlineGeometry.js +20 -20
  98. package/Build/Workers/decodeDraco.js +10 -10
  99. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  100. package/Build/Workers/decodeI3S.js +9 -9
  101. package/Build/Workers/gaussianSplatSorter.js +4 -4
  102. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  103. package/Build/Workers/transcodeKTX2.js +6 -6
  104. package/Build/Workers/transferTypedArrayTest.js +1 -1
  105. package/Build/Workers/upsampleQuantizedTerrainMesh.js +19 -19
  106. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +92 -0
  107. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +2 -2
  108. package/Source/Core/Cesium3DTilesTerrainData.js +930 -0
  109. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +1866 -0
  110. package/Source/Core/Cesium3DTilesTerrainProvider.js +1052 -0
  111. package/Source/Core/CesiumTerrainProvider.js +2 -2
  112. package/Source/Core/Color.js +23 -6
  113. package/Source/Core/EllipsoidalOccluder.js +2 -2
  114. package/Source/Core/FeatureDetection.js +0 -2
  115. package/Source/Core/GoogleEarthEnterpriseMetadata.js +1 -1
  116. package/Source/Core/GoogleEarthEnterpriseTerrainData.js +1 -1
  117. package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +1 -1
  118. package/Source/Core/HeightmapTerrainData.js +10 -22
  119. package/Source/Core/HilbertOrder.js +0 -6
  120. package/Source/Core/ITwinPlatform.js +6 -6
  121. package/Source/Core/Ion.js +1 -1
  122. package/Source/Core/IonResource.js +35 -27
  123. package/Source/Core/PixelFormat.js +2 -2
  124. package/Source/Core/QuantizedMeshTerrainData.js +23 -57
  125. package/Source/Core/Resource.js +15 -11
  126. package/Source/Core/S2Cell.js +6 -18
  127. package/Source/Core/TaskProcessor.js +1 -1
  128. package/Source/Core/TerrainData.js +2 -1
  129. package/Source/Core/TerrainEncoding.js +215 -38
  130. package/Source/Core/TerrainMesh.js +8 -8
  131. package/Source/Core/TerrainProvider.js +151 -0
  132. package/Source/Core/VRTheWorldTerrainProvider.js +2 -2
  133. package/Source/Core/binarySearch.js +1 -1
  134. package/Source/Core/createWorldBathymetryAsync.js +2 -2
  135. package/Source/Core/createWorldTerrainAsync.js +3 -3
  136. package/Source/Core/loadImageFromTypedArray.js +9 -3
  137. package/Source/Core/mergeSort.js +1 -1
  138. package/Source/DataSources/PropertyArray.js +2 -2
  139. package/Source/Renderer/AutomaticUniforms.js +61 -0
  140. package/Source/Renderer/Context.js +13 -7
  141. package/Source/Renderer/Pass.js +10 -9
  142. package/Source/Renderer/UniformState.js +12 -0
  143. package/Source/Renderer/VertexArray.js +1 -1
  144. package/Source/Scene/ArcGisMapServerImageryProvider.js +1 -1
  145. package/Source/Scene/ArcGisMapService.js +1 -1
  146. package/Source/Scene/Azure2DImageryProvider.js +7 -5
  147. package/Source/Scene/BatchTable.js +2 -2
  148. package/Source/Scene/BillboardCollection.js +25 -21
  149. package/Source/Scene/BingMapsImageryProvider.js +1 -1
  150. package/Source/Scene/BoundingVolumeSemantics.js +54 -62
  151. package/Source/Scene/Cesium3DTile.js +3 -3
  152. package/Source/Scene/Cesium3DTilesVoxelProvider.js +1 -1
  153. package/Source/Scene/Cesium3DTileset.js +1 -1
  154. package/Source/Scene/EdgeFramebuffer.js +245 -0
  155. package/Source/Scene/FrameState.js +12 -0
  156. package/Source/Scene/GaussianSplat3DTileContent.js +12 -16
  157. package/Source/Scene/GaussianSplatPrimitive.js +12 -8
  158. package/Source/Scene/GaussianSplatSorter.js +2 -2
  159. package/Source/Scene/Globe.js +1 -1
  160. package/Source/Scene/GlobeSurfaceTile.js +10 -4
  161. package/Source/Scene/GltfBufferViewLoader.js +18 -0
  162. package/Source/Scene/GltfLoader.js +46 -8
  163. package/Source/Scene/Google2DImageryProvider.js +39 -27
  164. package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +1 -1
  165. package/Source/Scene/I3SDataProvider.js +1 -1
  166. package/Source/Scene/I3SDecoder.js +3 -3
  167. package/Source/Scene/ITwinData.js +4 -4
  168. package/Source/Scene/ImageryLayer.js +1 -1
  169. package/Source/Scene/Implicit3DTileContent.js +18 -7
  170. package/Source/Scene/ImplicitSubtree.js +3 -3
  171. package/Source/Scene/ImplicitTileset.js +2 -2
  172. package/Source/Scene/IonImageryProvider.js +15 -84
  173. package/Source/Scene/IonImageryProviderFactory.js +194 -0
  174. package/Source/Scene/LabelCollection.js +54 -36
  175. package/Source/Scene/MetadataComponentType.js +5 -5
  176. package/Source/Scene/MetadataTableProperty.js +3 -9
  177. package/Source/Scene/Model/EdgeDetectionPipelineStage.js +42 -0
  178. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +800 -0
  179. package/Source/Scene/Model/MetadataPipelineStage.js +7 -7
  180. package/Source/Scene/Model/ModelDrawCommand.js +69 -0
  181. package/Source/Scene/Model/ModelImagery.js +4 -0
  182. package/Source/Scene/Model/ModelRuntimeNode.js +2 -2
  183. package/Source/Scene/Model/ModelRuntimePrimitive.js +13 -2
  184. package/Source/Scene/Model/ModelSceneGraph.js +15 -3
  185. package/Source/Scene/Model/ModelUtility.js +0 -1
  186. package/Source/Scene/Model/NodeRenderResources.js +1 -1
  187. package/Source/Scene/Model/PrimitiveRenderResources.js +1 -1
  188. package/Source/Scene/OIT.js +11 -1
  189. package/Source/Scene/PickFramebuffer.js +13 -17
  190. package/Source/Scene/Picking.js +104 -80
  191. package/Source/Scene/QuadtreePrimitive.js +34 -26
  192. package/Source/Scene/QuadtreeTile.js +66 -46
  193. package/Source/Scene/ResourceLoaderState.js +1 -1
  194. package/Source/Scene/Scene.js +124 -12
  195. package/Source/Scene/ScreenSpaceCameraController.js +1 -1
  196. package/Source/Scene/SensorVolumePortionToDisplay.js +6 -6
  197. package/Source/Scene/SingleTileImageryProvider.js +3 -3
  198. package/Source/Scene/Terrain.js +5 -5
  199. package/Source/Scene/TileMapServiceImageryProvider.js +2 -2
  200. package/Source/Scene/UrlTemplateImageryProvider.js +1 -1
  201. package/Source/Scene/View.js +3 -0
  202. package/Source/Scene/VoxelPrimitive.js +196 -189
  203. package/Source/Scene/VoxelShape.js +2 -0
  204. package/Source/Scene/createWorldImageryAsync.js +1 -1
  205. package/Source/Shaders/BillboardCollectionFS.glsl +102 -62
  206. package/Source/Shaders/BillboardCollectionFS.js +102 -63
  207. package/Source/Shaders/BillboardCollectionVS.glsl +44 -37
  208. package/Source/Shaders/BillboardCollectionVS.js +45 -38
  209. package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
  210. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  211. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
  212. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  213. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
  214. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  215. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdges.glsl +10 -0
  216. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdges.js +12 -0
  217. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
  218. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
  219. package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
  220. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  221. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  222. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  223. package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
  224. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  225. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
  226. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  227. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
  228. package/Source/Shaders/GlobeVS.glsl +1 -1
  229. package/Source/Shaders/GlobeVS.js +1 -1
  230. package/Source/Shaders/Model/EdgeDetectionStageFS.glsl +58 -0
  231. package/Source/Shaders/Model/EdgeDetectionStageFS.js +60 -0
  232. package/Source/Shaders/Model/EdgeVisibilityStageFS.glsl +83 -0
  233. package/Source/Shaders/Model/EdgeVisibilityStageFS.js +85 -0
  234. package/Source/Shaders/Model/ModelFS.glsl +5 -0
  235. package/Source/Shaders/Model/ModelFS.js +5 -0
  236. package/Source/Shaders/Model/PrimitiveOutlineStageFS.glsl +0 -1
  237. package/Source/Shaders/Model/PrimitiveOutlineStageFS.js +0 -1
  238. package/Source/Shaders/ShadowVolumeAppearanceFS.glsl +7 -15
  239. package/Source/Shaders/ShadowVolumeAppearanceFS.js +7 -15
  240. package/Source/Workers/createVerticesFromCesium3DTilesTerrain.js +46 -0
  241. package/Source/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +55 -0
  242. package/index.d.ts +281 -27
  243. package/index.js +200 -190
  244. package/package.json +2 -1
@@ -0,0 +1,2759 @@
1
+ /**
2
+ * @license
3
+ * Cesium - https://github.com/CesiumGS/cesium
4
+ * Version 1.135.0
5
+ *
6
+ * Copyright 2011-2022 Cesium Contributors
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ *
20
+ * Columbus View (Pat. Pend.)
21
+ *
22
+ * Portions licensed separately.
23
+ * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details.
24
+ */
25
+
26
+ import {
27
+ TerrainProvider_default
28
+ } from "./chunk-34YXP222.js";
29
+ import {
30
+ EllipsoidalOccluder_default,
31
+ TerrainEncoding_default
32
+ } from "./chunk-P2H75UV5.js";
33
+ import {
34
+ WebMercatorProjection_default
35
+ } from "./chunk-LWJXCI3F.js";
36
+ import {
37
+ OrientedBoundingBox_default
38
+ } from "./chunk-KGLDJRSO.js";
39
+ import {
40
+ AttributeCompression_default
41
+ } from "./chunk-6HBKE43B.js";
42
+ import {
43
+ AxisAlignedBoundingBox_default
44
+ } from "./chunk-NGKF5NTR.js";
45
+ import {
46
+ BoundingSphere_default
47
+ } from "./chunk-MXHRZHDF.js";
48
+ import {
49
+ Matrix4_default,
50
+ Rectangle_default,
51
+ Transforms_default,
52
+ binarySearch_default
53
+ } from "./chunk-3GL53OCU.js";
54
+ import {
55
+ ComponentDatatype_default
56
+ } from "./chunk-EZ7NJXQN.js";
57
+ import {
58
+ Cartesian2_default,
59
+ Cartesian3_default,
60
+ Cartographic_default,
61
+ Ellipsoid_default,
62
+ Frozen_default,
63
+ Matrix3_default
64
+ } from "./chunk-RQRODXVN.js";
65
+ import {
66
+ Math_default
67
+ } from "./chunk-OE22564R.js";
68
+ import {
69
+ Check_default
70
+ } from "./chunk-W4PIP5PG.js";
71
+
72
+ // node_modules/meshoptimizer/meshopt_encoder.module.js
73
+ var MeshoptEncoder = (function() {
74
+ var wasm = "b9H79Tebbbe9ok9Geueu9Geub9Gbb9Gruuuuuuueu9Gvuuuuueu9Gduueu9Gluuuueu9Gvuuuuub9Gouuuuuub9Gluuuub9GiuuueuiE8AdilveoveovrrwrrrDDoDrbqqbelve9Weiiviebeoweuec;G:Qdkr:PlCo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9mW4W2be8A9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWVbd8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9c9V919U9KbiE9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949wWV79P9V9UblY9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWVbv8E9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWV9c9V919U9Kbo8A9TW79O9V9Wt9FW9U9J9V9KW69U9KW949wWV79P9V9UbrE9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JWbwa9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JW9c9V919U9KbDL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9p9JtbqK9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9r919HtbkL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVT949WbxY9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVJ9V29VVbmE9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OWbza9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OW9ttV9P9WbHa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbOK9TW79O9V9Wt9F79W9Ht9P9H29t9VVt9sW9T9H9WbAl79IV9RbXDwebcekdKYq;i28Adbk:Bhdhud9:8Jjjjjbc;qw9Rgr8KjjjjbcbhwdnaeTmbabcbyd;C:kjjbaoaocb9iEgDc:GeV86bbarc;adfcbcjdz:xjjjb8AdnaiTmbarc;adfadalz:wjjjb8Akarc;abfalfcbcbcjdal9RalcFe0Ez:xjjjb8Aarc;abfarc;adfalz:wjjjb8AarcUf9cb83ibarc8Wf9cb83ibarcyf9cb83ibarcaf9cb83ibarcKf9cb83ibarczf9cb83ibar9cb83iwar9cb83ibcj;abal9Uc;WFbGcjdalca0Ehqdnaicd6mbavcd9imbaDTmbadcefhkaqci2gxal2hmarc;alfclfhParc;qlfceVhsarc;qofclVhzarc;qofcKfhHarc;qofczfhOcbhAincdhCcbhodnavci6mbaH9cb83ibaO9cb83ibar9cb83i;yoar9cb83i;qoadaAfgoybbhXcbhQincbhwcbhLdninaoalfhKaoybbgYaX7aLVhLawcP0meaKhoaYhXawcefgwaQfai6mbkkcbhXarc;qofhwincwh8AcwhEdnaLaX93gocFeGg3cs0mbclhEa3ci0mba3cb9hcethEkdnaocw4cFeGg3cs0mbclh8Aa3ci0mba3cb9hceth8Aka8AaEfh3awydbh5cwh8AcwhEdnaocz4cFeGg8Ecs0mbclhEa8Eci0mba8Ecb9hcethEka3a5fh3dnaocFFFFb0mbclh8AaocFFF8F0mbaocFFFr0ceth8Akawa3aEfa8AfBdbawclfhwaXcefgXcw9hmbkaKhoaYhXaQczfgQai6mbkcbhocehwazhLinawaoaLydbarc;qofaocdtfydb6EhoaLclfhLawcefgwcw9hmbkcihCkcbh3arc;qlfcbcjdz:xjjjb8Aarc;alfcwfcbBdbar9cb83i;alaoclth8Fadhaaqhhakh5inarc;qlfadcba3cufgoaoa30Eal2falz:wjjjb8Aaiahaiah6Ehgdnaqaia39Ra3aqfai6EgYcsfc9WGgoaY9nmbarc;qofaYfcbaoaY9Rz:xjjjb8Akada3al2fh8Jcbh8Kina8Ka8FVcl4hQarc;alfa8Kcdtfh8LaAh8Mcbh8Nina8NaAfhwdndndndndndna8KPldebidkasa8Mc98GgLfhoa5aLfh8Aarc;qlfawc98GgLfRbbhXcwhwinaoRbbawtaXVhXaocefhoawcwfgwca9hmbkaYTmla8Ncith8Ea8JaLfhEcbhKinaERbbhLcwhoa8AhwinawRbbaotaLVhLawcefhwaocwfgoca9hmbkarc;qofaKfaLaX7aQ93a8E486bba8Aalfh8AaEalfhEaLhXaKcefgKaY9hmbxlkkaYTmia8Mc9:Ghoa8NcitcwGhEarc;qlfawceVfRbbcwtarc;qlfawc9:GfRbbVhLarc;qofhwaghXinawa5aofRbbcwtaaaofRbbVg8AaL9RgLcetaLcztcz91cs47cFFiGaE486bbaoalfhoawcefhwa8AhLa3aXcufgX9hmbxikkaYTmda8Jawfhoarc;qlfawfRbbhLarc;qofhwaghXinawaoRbbg8AaL9RgLcetaLcKtcK91cr4786bbawcefhwaoalfhoa8AhLa3aXcufgX9hmbxdkkaYTmeka8LydbhEcbhKarc;qofhoincdhLcbhwinaLaoawfRbbcb9hfhLawcefgwcz9hmbkclhXcbhwinaXaoawfRbbcd0fhXawcefgwcz9hmbkcwh8Acbhwina8AaoawfRbbcP0fh8Aawcefgwcz9hmbkaLaXaLaX6Egwa8Aawa8A6Egwczawcz6EaEfhEaoczfhoaKczfgKaY6mbka8LaEBdbka8Mcefh8Ma8Ncefg8Ncl9hmbka8Kcefg8KaC9hmbkaaamfhaahaxfhha5amfh5a3axfg3ai6mbkcbhocehwaPhLinawaoaLydbarc;alfaocdtfydb6EhoaLclfhLawcefgXhwaCaX9hmbkaraAcd4fa8FcdVaoaocdSE86bbaAclfgAal6mbkkabaefh8Kabcefhoalcd4gecbaDEhkadcefhOarc;abfceVhHcbhmdndninaiam9nmearc;qofcbcjdz:xjjjb8Aa8Kao9Rak6mdadamal2gwfhxcbh8JaOawfhzaocbakz:xjjjbghakfh5aqaiam9Ramaqfai6Egscsfgocl4cifcd4hCaoc9WGg8LThPindndndndndndndndndndnaDTmbara8Jcd4fRbbgLciGPlbedlbkasTmdaxa8Jfhoarc;abfa8JfRbbhLarc;qofhwashXinawaoRbbg8AaL9RgLcetaLcKtcK91cr4786bbawcefhwaoalfhoa8AhLaXcufgXmbxikkasTmia8JcitcwGhEarc;abfa8JceVfRbbcwtarc;abfa8Jc9:GgofRbbVhLaxaofhoarc;qofhwashXinawao8Vbbg8AaL9RgLcetaLcztcz91cs47cFFiGaE486bbawcefhwaoalfhoa8AhLaXcufgXmbxdkkaHa8Jc98GgEfhoazaEfh8Aarc;abfaEfRbbhXcwhwinaoRbbawtaXVhXaocefhoawcwfgwca9hmbkasTmbaLcl4hYa8JcitcKGh3axaEfhEcbhKinaERbbhLcwhoa8AhwinawRbbaotaLVhLawcefhwaocwfgoca9hmbkarc;qofaKfaLaX7aY93a3486bba8Aalfh8AaEalfhEaLhXaKcefgKas9hmbkkaDmbcbhoxlka8LTmbcbhodninarc;qofaofgwcwf8Pibaw8Pib:e9qTmeaoczfgoa8L9pmdxbkkdnavmbcehoxikcbhEaChKaChYinarc;qofaEfgocwf8Pibhyao8Pibh8PcdhLcbhwinaLaoawfRbbcb9hfhLawcefgwcz9hmbkclhXcbhwinaXaoawfRbbcd0fhXawcefgwcz9hmbkcwh8Acbhwina8AaoawfRbbcP0fh8Aawcefgwcz9hmbkaLaXaLaX6Egoa8Aaoa8A6Egoczaocz6EaYfhYaocucbaya8P:e9cb9sEgwaoaw6EaKfhKaEczfgEa8L9pmdxbkkaha8Jcd4fgoaoRbbcda8JcetcoGtV86bbxikdnaKas6mbaYas6mbaha8Jcd4fgoaoRbbcia8JcetcoGtV86bba8Ka59Ras6mra5arc;qofasz:wjjjbasfh5xikaKaY9phokaha8Jcd4fgwawRbbaoa8JcetcoGtV86bbka8Ka59RaC6mla5cbaCz:xjjjbgAaCfhYdndna8LmbaPhoxekdna8KaY9RcK9pmbaPhoxekaocdtc:q1jjbfcj1jjbaDEg5ydxggcetc;:FFFeGh8Fcuh3cuagtcu7cFeGhacbh8Marc;qofhLinarc;qofa8MfhQczhEdndndnagPDbeeeeeeedekcucbaQcwf8PibaQ8Pib:e9cb9sEhExekcbhoa8FhEinaEaaaLaofRbb9nfhEaocefgocz9hmbkkcih8Ecbh8Ainczhwdndndna5a8AcdtfydbgKPDbeeeeeeedekcucbaQcwf8PibaQ8Pib:e9cb9sEhwxekaKcetc;:FFFeGhwcuaKtcu7cFeGhXcbhoinawaXaLaofRbb9nfhwaocefgocz9hmbkkdndnawaE6mbaKa39hmeawaE9hmea5a8EcdtfydbcwSmeka8Ah8EawhEka8Acefg8Aci9hmbkaAa8Mco4fgoaoRbba8Ea8Mci4coGtV86bbdndndna5a8Ecdtfydbg3PDdbbbbbbbebkdncwa39Tg8ETmbcua3tcu7hwdndna3ceSmbcbh8NaLhQinaQhoa8Eh8AcbhXinaoRbbgEawcFeGgKaEaK6EaXa3tVhXaocefhoa8Acufg8AmbkaYaX86bbaQa8EfhQaYcefhYa8Na8Efg8Ncz6mbxdkkcbh8NaLhQinaQhoa8Eh8AcbhXinaoRbbgEawcFeGgKaEaK6EaXcetVhXaocefhoa8Acufg8AmbkaYaX:T9cFe:d9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:9ca188bbaQa8EfhQaYcefhYa8Na8Efg8Ncz6mbkkcbhoinaYaLaofRbbgX86bbaYaXawcFeG9pfhYaocefgocz9hmbxikkdna3ceSmbinaYcb86bbaYcefhYxbkkinaYcb86bbaYcefhYxbkkaYaQ8Pbb83bbaYcwfaQcwf8Pbb83bbaYczfhYka8Mczfg8Ma8L9pgomeaLczfhLa8KaY9RcK9pmbkkaoTmlaYh5aYTmlka8Jcefg8Jal9hmbkarc;abfaxascufal2falz:wjjjb8Aasamfhma5hoa5mbkcbhwxdkdna8Kao9RakalfgwcKcaaDEgLawaL0EgX9pmbcbhwxdkdnawaL9pmbaocbaXaw9Rgwz:xjjjbawfhokaoarc;adfalz:wjjjbalfhodnaDTmbaoaraez:wjjjbaefhokaoab9Rhwxekcbhwkarc;qwf8Kjjjjbawk5babaeadaialcdcbyd;C:kjjbz:bjjjbk9reduaecd4gdaefgicaaica0Eabcj;abae9Uc;WFbGcjdaeca0Egifcufai9Uae2aiadfaicl4cifcd4f2fcefkmbcbabBd;C:kjjbk:Ese5u8Jjjjjbc;ae9Rgl8Kjjjjbcbhvdnaici9UgocHfae0mbabcbyd;m:kjjbgrc;GeV86bbalc;abfcFecjez:xjjjb8AalcUfgw9cu83ibalc8WfgD9cu83ibalcyfgq9cu83ibalcafgk9cu83ibalcKfgx9cu83ibalczfgm9cu83ibal9cu83iwal9cu83ibabaefc9WfhPabcefgsaofhednaiTmbcmcsarcb9kgzEhHcbhOcbhAcbhCcbhXcbhQindnaeaP9nmbcbhvxikaQcufhvadaCcdtfgLydbhKaLcwfydbhYaLclfydbh8AcbhEdndndninalc;abfavcsGcitfgoydlh3dndndnaoydbgoaK9hmba3a8ASmekdnaoa8A9hmba3aY9hmbaEcefhExekaoaY9hmea3aK9hmeaEcdfhEkaEc870mdaXcufhvaLaEciGcx2goc;i1jjbfydbcdtfydbh3aLaoc;e1jjbfydbcdtfydbh8AaLaoc;a1jjbfydbcdtfydbhKcbhodnindnalavcsGcdtfydba39hmbaohYxdkcuhYavcufhvaocefgocz9hmbkkaOa3aOSgvaYce9iaYaH9oVgoGfhOdndndncbcsavEaYaoEgvcs9hmbarce9imba3a3aAa3cefaASgvEgAcefSmecmcsavEhvkasavaEcdtc;WeGV86bbavcs9hmea3aA9Rgvcetavc8F917hvinaeavcFb0crtavcFbGV86bbaecefheavcje6hoavcr4hvaoTmbka3hAxvkcPhvasaEcdtcPV86bba3hAkavTmiavaH9omicdhocehEaQhYxlkavcufhvaEclfgEc;ab9hmbkkdnaLceaYaOSceta8AaOSEcx2gvc;a1jjbfydbcdtfydbgKTaLavc;e1jjbfydbcdtfydbg8AceSGaLavc;i1jjbfydbcdtfydbg3cdSGaOcb9hGazGg5ce9hmbaw9cu83ibaD9cu83ibaq9cu83ibak9cu83ibax9cu83ibam9cu83ibal9cu83iwal9cu83ibcbhOkcbhEaXcufgvhodnindnalaocsGcdtfydba8A9hmbaEhYxdkcuhYaocufhoaEcefgEcz9hmbkkcbhodnindnalavcsGcdtfydba39hmbaohExdkcuhEavcufhvaocefgocz9hmbkkaOaKaOSg8EfhLdndnaYcm0mbaYcefhYxekcbcsa8AaLSgvEhYaLavfhLkdndnaEcm0mbaEcefhExekcbcsa3aLSgvEhEaLavfhLkc9:cua8EEh8FcbhvaEaYcltVgacFeGhodndndninavc:W1jjbfRbbaoSmeavcefgvcz9hmbxdkka5aKaO9havcm0VVmbasavc;WeV86bbxekasa8F86bbaeaa86bbaecefhekdna8EmbaKaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaKhAkdnaYcs9hmba8AaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka8AhAkdnaEcs9hmba3aA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka3hAkalaXcdtfaKBdbaXcefcsGhvdndnaYPzbeeeeeeeeeeeeeebekalavcdtfa8ABdbaXcdfcsGhvkdndnaEPzbeeeeeeeeeeeeeebekalavcdtfa3BdbavcefcsGhvkcihoalc;abfaQcitfgEaKBdlaEa8ABdbaQcefcsGhYcdhEavhXaLhOxekcdhoalaXcdtfa3BdbcehEaXcefcsGhXaQhYkalc;abfaYcitfgva8ABdlava3Bdbalc;abfaQaEfcsGcitfgva3BdlavaKBdbascefhsaQaofcsGhQaCcifgCai6mbkkdnaeaP9nmbcbhvxekcbhvinaeavfavc:W1jjbfRbb86bbavcefgvcz9hmbkaeab9Ravfhvkalc;aef8KjjjjbavkZeeucbhddninadcefgdc8F0meceadtae6mbkkadcrfcFeGcr9Uci2cdfabci9U2cHfkmbcbabBd;m:kjjbk:Adewu8Jjjjjbcz9Rhlcbhvdnaicvfae0mbcbhvabcbRb;m:kjjbc;qeV86bbal9cb83iwabcefhoabaefc98fhrdnaiTmbcbhwcbhDindnaoar6mbcbskadaDcdtfydbgqalcwfawaqav9Rgvavc8F91gv7av9Rc507gwcdtfgkydb9Rgvc8E91c9:Gavcdt7awVhvinaoavcFb0gecrtavcFbGV86bbavcr4hvaocefhoaembkakaqBdbaqhvaDcefgDai9hmbkkdnaoar9nmbcbskaocbBbbaoab9RclfhvkavkBeeucbhddninadcefgdc8F0meceadtae6mbkkadcwfcFeGcr9Uab2cvfk:bvli99dui99ludnaeTmbcuadcetcuftcu7:Zhvdndncuaicuftcu7:ZgoJbbbZMgr:lJbbb9p9DTmbar:Ohwxekcjjjj94hwkcbhicbhDinalclfIdbgrJbbbbJbbjZalIdbgq:lar:lMalcwfIdbgk:lMgr:varJbbbb9BEgrNhxaqarNhrdndnakJbbbb9GTmbaxhqxekJbbjZar:l:tgqaq:maxJbbbb9GEhqJbbjZax:l:tgxax:marJbbbb9GEhrkdndnalcxfIdbgxJbbj:;axJbbj:;9GEgkJbbjZakJbbjZ9FEavNJbbbZJbbb:;axJbbbb9GEMgx:lJbbb9p9DTmbax:Ohmxekcjjjj94hmkdndnaqJbbj:;aqJbbj:;9GEgxJbbjZaxJbbjZ9FEaoNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:OhPxekcjjjj94hPkdndnarJbbj:;arJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;arJbbbb9GEMgr:lJbbb9p9DTmbar:Ohsxekcjjjj94hskdndnadcl9hmbabaifgzas86bbazcifam86bbazcdfaw86bbazcefaP86bbxekabaDfgzas87ebazcofam87ebazclfaw87ebazcdfaP87ebkalczfhlaiclfhiaDcwfhDaecufgembkkk;hlld99eud99eudnaeTmbdndncuaicuftcu7:ZgvJbbbZMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikaic;8FiGhrinabcofcicdalclfIdb:lalIdb:l9EgialcwfIdb:lalaicdtfIdb:l9EEgialcxfIdb:lalaicdtfIdb:l9EEgiarV87ebdndnJbbj:;JbbjZalaicdtfIdbJbbbb9DEgoalaicd7cdtfIdbJ;Zl:1ZNNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabcdfaq87ebdndnalaicefciGcdtfIdbJ;Zl:1ZNaoNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabaq87ebdndnaoalaicufciGcdtfIdbJ;Zl:1ZNNgoJbbj:;aoJbbj:;9GEgwJbbjZawJbbjZ9FEavNJbbbZJbbb:;aoJbbbb9GEMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikabclfai87ebabcwfhbalczfhlaecufgembkkk;3viDue99eu8Jjjjjbcjd9Rgo8Kjjjjbadcd4hrdndndndnavcd9hmbadcl6meaohwarhDinawc:CuBdbawclfhwaDcufgDmbkaeTmiadcl6mdarcdthqalhkcbhxinaohwakhDarhminawawydbgPcbaDIdbgs:8cL4cFeGc:cufasJbbbb9BEgzaPaz9kEBdbaDclfhDawclfhwamcufgmmbkakaqfhkaxcefgxaeSmixbkkaeTmdxekaeTmekarcdthkavce9hhqadcl6hdcbhxindndndnaqmbadmdc:CuhDalhwarhminaDcbawIdbgs:8cL4cFeGc:cufasJbbbb9BEgPaDaP9kEhDawclfhwamcufgmmbxdkkc:CuhDdndnavPleddbdkadmdaohwalhmarhPinawcbamIdbgs:8cL4cFeGgzc;:bazc;:b0Ec:cufasJbbbb9BEBdbamclfhmawclfhwaPcufgPmbxdkkadmecbhwarhminaoawfcbalawfIdbgs:8cL4cFeGgPc8AaPc8A0Ec:cufasJbbbb9BEBdbawclfhwamcufgmmbkkadmbcbhwarhPinaDhmdnavceSmbaoawfydbhmkdndnalawfIdbgscjjj;8iamai9RcefgmcLt9R::NJbbbZJbbb:;asJbbbb9GEMgs:lJbbb9p9DTmbas:Ohzxekcjjjj94hzkabawfazcFFFrGamcKtVBdbawclfhwaPcufgPmbkkabakfhbalakfhlaxcefgxae9hmbkkaocjdf8Kjjjjbk:Ylvdud99due99iudnaeTmbceaicufgvthocuaitcu7:Zhrcuavtcu7:Zhwcbhvadcl9hhDcbhqindndnalcwfIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEarNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikdndnalIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEarNJbbbZMgk:lJbbb9p9DTmbak:Ohdxekcjjjj94hdkadai9Rcd9TgxaifhidndnalclfIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEarNJbbbZMgk:lJbbb9p9DTmbak:Ohdxekcjjjj94hdkadai9Rcd9ThddndnalcxfIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEawNJbbbZMgk:lJbbb9p9DTmbak:Ohmxekcjjjj94hmkadaifhiaoamVhmdndnaDmbabavfgPai86bbaPcifam86bbaPcdfad86bbaPcefax86bbxekabaqfgPai87ebaPcofam87ebaPclfad87ebaPcdfax87ebkalczfhlavclfhvaqcwfhqaecufgembkkk;YqdXui998Jjjjjbc:qd9Rgv8Kjjjjbavc:Sefcbc;Kbz:xjjjb8AcbhodnadTmbcbhoaiTmbdndnabaeSmbaehrxekavcuadcdtgwadcFFFFi0Ecbyd;q:kjjbHjjjjbbgrBd:SeavceBd:mdaraeawz:wjjjb8Akavc:GefcwfcbBdbav9cb83i:Geavc:Gefaradaiavc:Sefz:pjjjbavyd:GehDadci9Ugqcbyd;q:kjjbHjjjjbbheavc:Sefavyd:mdgkcdtfaeBdbavakcefgwBd:mdaecbaqz:xjjjbhxavc:SefawcdtfcuaicdtaicFFFFi0Ecbyd;q:kjjbHjjjjbbgmBdbavakcdfgPBd:mdalc;ebfhsaDheamhwinawalIdbasaeydbgzcwazcw6EcdtfIdbMUdbaeclfheawclfhwaicufgimbkavc:SefaPcdtfcuaqcdtadcFFFF970Ecbyd;q:kjjbHjjjjbbgPBdbdnadci6mbarheaPhwaqhiinawamaeydbcdtfIdbamaeclfydbcdtfIdbMamaecwfydbcdtfIdbMUdbaecxfheawclfhwaicufgimbkkakcifhoalc;ebfhHavc;qbfhOavheavyd:KehAavyd:OehCcbhzcbhwcbhXcehQinaehLcihkarawci2gKcdtfgeydbhsaeclfydbhdabaXcx2fgicwfaecwfydbgYBdbaiclfadBdbaiasBdbaxawfce86bbaOaYBdwaOadBdlaOasBdbaPawcdtfcbBdbdnazTmbcihkaLhiinaOakcdtfaiydbgeBdbakaeaY9haeas9haead9hGGfhkaiclfhiazcufgzmbkkaXcefhXcbhzinaCaAarazaKfcdtfydbcdtgifydbcdtfgYheaDaifgdydbgshidnasTmbdninaeydbawSmeaeclfheaicufgiTmdxbkkaeaYascdtfc98fydbBdbadadydbcufBdbkazcefgzci9hmbkdndnakTmbcuhwJbbbbh8Acbhdavyd:KehYavyd:OehKindndnaDaOadcdtfydbcdtgzfydbgembadcefhdxekadcs0hiamazfgsIdbhEasalcbadcefgdaiEcdtfIdbaHaecwaecw6EcdtfIdbMg3Udba3aE:th3aecdthiaKaYazfydbcdtfheinaPaeydbgzcdtfgsa3asIdbMgEUdbaEa8Aa8AaE9DgsEh8AazawasEhwaeclfheaic98fgimbkkadak9hmbkawcu9hmekaQaq9pmdindnaxaQfRbbmbaQhwxdkaqaQcefgQ9hmbxikkakczakcz6EhzaOheaLhOawcu9hmbkkaocdtavc:Seffc98fhedninaoTmeaeydbcbyd;u:kjjbH:bjjjbbaec98fheaocufhoxbkkavc:qdf8Kjjjjbk;IlevucuaicdtgvaicFFFFi0Egocbyd;q:kjjbHjjjjbbhralalyd9GgwcdtfarBdbalawcefBd9GabarBdbaocbyd;q:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdlcuadcdtadcFFFFi0Ecbyd;q:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdwabydbcbavz:xjjjb8Aadci9UhDdnadTmbabydbhoaehladhrinaoalydbcdtfgvavydbcefBdbalclfhlarcufgrmbkkdnaiTmbabydbhlabydlhrcbhvaihoinaravBdbarclfhralydbavfhvalclfhlaocufgombkkdnadci6mbabydlhrabydwhvcbhlinaecwfydbhoaeclfydbhdaraeydbcdtfgwawydbgwcefBdbavawcdtfalBdbaradcdtfgdadydbgdcefBdbavadcdtfalBdbaraocdtfgoaoydbgocefBdbavaocdtfalBdbaecxfheaDalcefgl9hmbkkdnaiTmbabydlheabydbhlinaeaeydbalydb9RBdbalclfhlaeclfheaicufgimbkkkQbabaeadaic;K1jjbz:ojjjbkQbabaeadaic;m:jjjbz:ojjjbk9DeeuabcFeaicdtz:xjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk:Vvioud9:du8Jjjjjbc;Wa9Rgl8Kjjjjbcbhvalcxfcbc;Kbz:xjjjb8AalcuadcitgoadcFFFFe0Ecbyd;q:kjjbHjjjjbbgrBdxalceBd2araeadaicezNjjjbalcuaoadcjjjjoGEcbyd;q:kjjbHjjjjbbgwBdzadcdthednadTmbabhiinaiavBdbaiclfhiadavcefgv9hmbkkawaefhDalabBdwalawBdl9cbhqindnadTmbaq9cq9:hkarhvaDhiadheinaiav8Pibak1:NcFrG87ebavcwfhvaicdfhiaecufgembkkalclfaq:NceGcdtfydbhxalclfaq9ce98gq:NceGcdtfydbhmalc;Wbfcbcjaz:xjjjb8AaDhvadhidnadTmbinalc;Wbfav8VebcdtfgeaeydbcefBdbavcdfhvaicufgimbkkcbhvcbhiinalc;WbfavfgeydbhoaeaiBdbaoaifhiavclfgvcja9hmbkadhvdndnadTmbinalc;WbfaDamydbgicetf8VebcdtfgeaeydbgecefBdbaxaecdtfaiBdbamclfhmavcufgvmbkaq9cv9smdcbhvinabawydbcdtfavBdbawclfhwadavcefgv9hmbxdkkaq9cv9smekkclhvdninavc98Smealcxfavfydbcbyd;u:kjjbH:bjjjbbavc98fhvxbkkalc;Waf8Kjjjjbk:Jwliuo99iud9:cbhv8Jjjjjbca9Rgoczfcwfcbyd:8:kjjbBdbaocb8Pd:0:kjjb83izaocwfcbyd;i:kjjbBdbaocb8Pd;a:kjjb83ibaicd4hrdndnadmbJFFuFhwJFFuuhDJFFuuhqJFFuFhkJFFuuhxJFFuFhmxekarcdthPaehsincbhiinaoczfaifgzasaifIdbgwazIdbgDaDaw9EEUdbaoaifgzawazIdbgDaDaw9DEUdbaiclfgicx9hmbkasaPfhsavcefgvad9hmbkaoIdKhDaoIdwhwaoIdChqaoIdlhkaoIdzhxaoIdbhmkdnadTmbJbbbbJbFu9hJbbbbamax:tgmamJbbbb9DEgmakaq:tgkakam9DEgkawaD:tgwawak9DEgw:vawJbbbb9BEhwdnalmbarcdthoindndnaeclfIdbaq:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:S9cC:ghHdndnaeIdbax:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikaHai:S:ehHdndnaecwfIdbaD:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabaHai:T9cy:g:e83ibaeaofheabcwfhbadcufgdmbxdkkarcdthoindndnaeIdbax:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cv9:9c;j:KM;j:KM;j:Kd:dhOdndnaeclfIdbaq:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cq9:9cM;j:KM;j:KM;jl:daO:ehOdndnaecwfIdbaD:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabaOai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cC9:9c:KM;j:KM;j:KMD:d:e83ibaeaofheabcwfhbadcufgdmbkkk9teiucbcbyd;y:kjjbgeabcifc98GfgbBd;y:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;y:kjjbgeabcrfc94GfgbBd;y:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd;y:kjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd;y:kjjbfgdBd;y:kjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akkk;Qddbcjwk;mdbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbbbbbbbbbbbbb4:h9w9N94:P:gW:j9O:ye9Pbbbbbbebbbdbbbebbbdbbbbbbbdbbbbbbbebbbbbbb:l29hZ;69:9kZ;N;76Z;rg97Z;z;o9xZ8J;B85Z;:;u9yZ;b;k9HZ:2;Z9DZ9e:l9mZ59A8KZ:r;T3Z:A:zYZ79OHZ;j4::8::Y:D9V8:bbbb9s:49:Z8R:hBZ9M9M;M8:L;z;o8:;8:PG89q;x:J878R:hQ8::M:B;e87bbbbbbjZbbjZbbjZ:E;V;N8::Y:DsZ9i;H;68:xd;R8:;h0838:;W:NoZbbbb:WV9O8:uf888:9i;H;68:9c9G;L89;n;m9m89;D8Ko8:bbbbf:8tZ9m836ZS:2AZL;zPZZ818EZ9e:lxZ;U98F8:819E;68:FFuuFFuuFFuuFFuFFFuFFFuFbc;mqkzebbbebbbdbbb9G:vbb";
75
+ var wasmpack = new Uint8Array([
76
+ 32,
77
+ 0,
78
+ 65,
79
+ 2,
80
+ 1,
81
+ 106,
82
+ 34,
83
+ 33,
84
+ 3,
85
+ 128,
86
+ 11,
87
+ 4,
88
+ 13,
89
+ 64,
90
+ 6,
91
+ 253,
92
+ 10,
93
+ 7,
94
+ 15,
95
+ 116,
96
+ 127,
97
+ 5,
98
+ 8,
99
+ 12,
100
+ 40,
101
+ 16,
102
+ 19,
103
+ 54,
104
+ 20,
105
+ 9,
106
+ 27,
107
+ 255,
108
+ 113,
109
+ 17,
110
+ 42,
111
+ 67,
112
+ 24,
113
+ 23,
114
+ 146,
115
+ 148,
116
+ 18,
117
+ 14,
118
+ 22,
119
+ 45,
120
+ 70,
121
+ 69,
122
+ 56,
123
+ 114,
124
+ 101,
125
+ 21,
126
+ 25,
127
+ 63,
128
+ 75,
129
+ 136,
130
+ 108,
131
+ 28,
132
+ 118,
133
+ 29,
134
+ 73,
135
+ 115
136
+ ]);
137
+ if (typeof WebAssembly !== "object") {
138
+ return {
139
+ supported: false
140
+ };
141
+ }
142
+ var instance;
143
+ var ready = WebAssembly.instantiate(unpack(wasm), {}).then(function(result) {
144
+ instance = result.instance;
145
+ instance.exports.__wasm_call_ctors();
146
+ instance.exports.meshopt_encodeVertexVersion(0);
147
+ instance.exports.meshopt_encodeIndexVersion(1);
148
+ });
149
+ function unpack(data) {
150
+ var result = new Uint8Array(data.length);
151
+ for (var i = 0; i < data.length; ++i) {
152
+ var ch = data.charCodeAt(i);
153
+ result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
154
+ }
155
+ var write = 0;
156
+ for (var i = 0; i < data.length; ++i) {
157
+ result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];
158
+ }
159
+ return result.buffer.slice(0, write);
160
+ }
161
+ function assert(cond) {
162
+ if (!cond) {
163
+ throw new Error("Assertion failed");
164
+ }
165
+ }
166
+ function bytes(view) {
167
+ return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
168
+ }
169
+ function reorder(fun, indices, vertices, optf) {
170
+ var sbrk = instance.exports.sbrk;
171
+ var ip = sbrk(indices.length * 4);
172
+ var rp = sbrk(vertices * 4);
173
+ var heap = new Uint8Array(instance.exports.memory.buffer);
174
+ var indices8 = bytes(indices);
175
+ heap.set(indices8, ip);
176
+ if (optf) {
177
+ optf(ip, ip, indices.length, vertices);
178
+ }
179
+ var unique = fun(rp, ip, indices.length, vertices);
180
+ heap = new Uint8Array(instance.exports.memory.buffer);
181
+ var remap = new Uint32Array(vertices);
182
+ new Uint8Array(remap.buffer).set(heap.subarray(rp, rp + vertices * 4));
183
+ indices8.set(heap.subarray(ip, ip + indices.length * 4));
184
+ sbrk(ip - sbrk(0));
185
+ for (var i = 0; i < indices.length; ++i) indices[i] = remap[indices[i]];
186
+ return [remap, unique];
187
+ }
188
+ function spatialsort(fun, positions, count, stride) {
189
+ var sbrk = instance.exports.sbrk;
190
+ var ip = sbrk(count * 4);
191
+ var sp = sbrk(count * stride);
192
+ var heap = new Uint8Array(instance.exports.memory.buffer);
193
+ heap.set(bytes(positions), sp);
194
+ fun(ip, sp, count, stride);
195
+ heap = new Uint8Array(instance.exports.memory.buffer);
196
+ var remap = new Uint32Array(count);
197
+ new Uint8Array(remap.buffer).set(heap.subarray(ip, ip + count * 4));
198
+ sbrk(ip - sbrk(0));
199
+ return remap;
200
+ }
201
+ function encode(fun, bound, source, count, size, level, version) {
202
+ var sbrk = instance.exports.sbrk;
203
+ var tp = sbrk(bound);
204
+ var sp = sbrk(count * size);
205
+ var heap = new Uint8Array(instance.exports.memory.buffer);
206
+ heap.set(bytes(source), sp);
207
+ var res = fun(tp, bound, sp, count, size, level, version);
208
+ var target = new Uint8Array(res);
209
+ target.set(heap.subarray(tp, tp + res));
210
+ sbrk(tp - sbrk(0));
211
+ return target;
212
+ }
213
+ function maxindex(source) {
214
+ var result = 0;
215
+ for (var i = 0; i < source.length; ++i) {
216
+ var index = source[i];
217
+ result = result < index ? index : result;
218
+ }
219
+ return result;
220
+ }
221
+ function index32(source, size) {
222
+ assert(size == 2 || size == 4);
223
+ if (size == 4) {
224
+ return new Uint32Array(source.buffer, source.byteOffset, source.byteLength / 4);
225
+ } else {
226
+ var view = new Uint16Array(source.buffer, source.byteOffset, source.byteLength / 2);
227
+ return new Uint32Array(view);
228
+ }
229
+ }
230
+ function filter(fun, source, count, stride, bits, insize, mode) {
231
+ var sbrk = instance.exports.sbrk;
232
+ var tp = sbrk(count * stride);
233
+ var sp = sbrk(count * insize);
234
+ var heap = new Uint8Array(instance.exports.memory.buffer);
235
+ heap.set(bytes(source), sp);
236
+ fun(tp, count, stride, bits, sp, mode);
237
+ var target = new Uint8Array(count * stride);
238
+ target.set(heap.subarray(tp, tp + count * stride));
239
+ sbrk(tp - sbrk(0));
240
+ return target;
241
+ }
242
+ return {
243
+ ready,
244
+ supported: true,
245
+ reorderMesh: function(indices, triangles, optsize) {
246
+ var optf = triangles ? optsize ? instance.exports.meshopt_optimizeVertexCacheStrip : instance.exports.meshopt_optimizeVertexCache : void 0;
247
+ return reorder(instance.exports.meshopt_optimizeVertexFetchRemap, indices, maxindex(indices) + 1, optf);
248
+ },
249
+ reorderPoints: function(positions, positions_stride) {
250
+ assert(positions instanceof Float32Array);
251
+ assert(positions.length % positions_stride == 0);
252
+ assert(positions_stride >= 3);
253
+ return spatialsort(instance.exports.meshopt_spatialSortRemap, positions, positions.length / positions_stride, positions_stride * 4);
254
+ },
255
+ encodeVertexBuffer: function(source, count, size) {
256
+ assert(size > 0 && size <= 256);
257
+ assert(size % 4 == 0);
258
+ var bound = instance.exports.meshopt_encodeVertexBufferBound(count, size);
259
+ return encode(instance.exports.meshopt_encodeVertexBuffer, bound, source, count, size);
260
+ },
261
+ encodeVertexBufferLevel: function(source, count, size, level, version) {
262
+ assert(size > 0 && size <= 256);
263
+ assert(size % 4 == 0);
264
+ assert(level >= 0 && level <= 3);
265
+ assert(version === void 0 || version == 0 || version == 1);
266
+ var bound = instance.exports.meshopt_encodeVertexBufferBound(count, size);
267
+ return encode(instance.exports.meshopt_encodeVertexBufferLevel, bound, source, count, size, level, version || 0);
268
+ },
269
+ encodeIndexBuffer: function(source, count, size) {
270
+ assert(size == 2 || size == 4);
271
+ assert(count % 3 == 0);
272
+ var indices = index32(source, size);
273
+ var bound = instance.exports.meshopt_encodeIndexBufferBound(count, maxindex(indices) + 1);
274
+ return encode(instance.exports.meshopt_encodeIndexBuffer, bound, indices, count, 4);
275
+ },
276
+ encodeIndexSequence: function(source, count, size) {
277
+ assert(size == 2 || size == 4);
278
+ var indices = index32(source, size);
279
+ var bound = instance.exports.meshopt_encodeIndexSequenceBound(count, maxindex(indices) + 1);
280
+ return encode(instance.exports.meshopt_encodeIndexSequence, bound, indices, count, 4);
281
+ },
282
+ encodeGltfBuffer: function(source, count, size, mode) {
283
+ var table = {
284
+ ATTRIBUTES: this.encodeVertexBuffer,
285
+ TRIANGLES: this.encodeIndexBuffer,
286
+ INDICES: this.encodeIndexSequence
287
+ };
288
+ assert(table[mode]);
289
+ return table[mode](source, count, size);
290
+ },
291
+ encodeFilterOct: function(source, count, stride, bits) {
292
+ assert(stride == 4 || stride == 8);
293
+ assert(bits >= 1 && bits <= 16);
294
+ return filter(instance.exports.meshopt_encodeFilterOct, source, count, stride, bits, 16);
295
+ },
296
+ encodeFilterQuat: function(source, count, stride, bits) {
297
+ assert(stride == 8);
298
+ assert(bits >= 4 && bits <= 16);
299
+ return filter(instance.exports.meshopt_encodeFilterQuat, source, count, stride, bits, 16);
300
+ },
301
+ encodeFilterExp: function(source, count, stride, bits, mode) {
302
+ assert(stride > 0 && stride % 4 == 0);
303
+ assert(bits >= 1 && bits <= 24);
304
+ var table = {
305
+ Separate: 0,
306
+ SharedVector: 1,
307
+ SharedComponent: 2,
308
+ Clamped: 3
309
+ };
310
+ return filter(instance.exports.meshopt_encodeFilterExp, source, count, stride, bits, stride, mode ? table[mode] : 1);
311
+ },
312
+ encodeFilterColor: function(source, count, stride, bits) {
313
+ assert(stride == 4 || stride == 8);
314
+ assert(bits >= 2 && bits <= 16);
315
+ return filter(instance.exports.meshopt_encodeFilterColor, source, count, stride, bits, 16);
316
+ }
317
+ };
318
+ })();
319
+
320
+ // node_modules/meshoptimizer/meshopt_decoder.module.js
321
+ var MeshoptDecoder = (function() {
322
+ var wasm_base = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuixkbeeeddddillviebeoweuec:W:Odkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WboY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbrl79IV9Rbwq;BZkdbk;jYi5ud9:du8Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxcj;abad9Uc;WFbGcjdadca0EhmaialfgPar9Rgoadfhsavaoadz:jjjjbgzceVhHcbhOdndninaeaO9nmeaPax9RaD6mdamaeaO9RaOamfgoae6EgAcsfglc9WGhCabaOad2fhXaAcethQaxaDfhiaOaeaoaeao6E9RhLalcl4cifcd4hKazcj;cbfaAfhYcbh8AazcjdfhEaHh3incbhodnawTmbaxa8Acd4fRbbhokaocFeGh5cbh8Eazcj;cbfhqinaih8Fdndndndna5a8Ecet4ciGgoc9:fPdebdkaPa8F9RaA6mrazcj;cbfa8EaA2fa8FaAz:jjjjb8Aa8FaAfhixdkazcj;cbfa8EaA2fcbaAz:kjjjb8Aa8FhixekaPa8F9RaK6mva8FaKfhidnaCTmbaPai9RcK6mbaocdtc:q1jjbfcj1jjbawEhaczhrcbhlinargoc9Wfghaqfhrdndndndndndnaaa8Fahco4fRbbalcoG4ciGcdtfydbPDbedvivvvlvkar9cb83bbarcwf9cb83bbxlkarcbaiRbdai8Xbb9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbaqaofgrcGfag9c8F1:NghcKtc8F91aicdfa8J9c8N1:Nfg8KRbbG86bbarcVfcba8KahcjeGcr4fghRbbag9cjjjjjl:dg8J9qE86bbarc7fcbaha8J9c8L1:NfghRbbag9cjjjjjd:dg8J9qE86bbarctfcbaha8J9c8K1:NfghRbbag9cjjjjje:dg8J9qE86bbarc91fcbaha8J9c8J1:NfghRbbag9cjjjj;ab:dg8J9qE86bbarc4fcbaha8J9cg1:NfghRbbag9cjjjja:dg8J9qE86bbarc93fcbaha8J9ch1:NfghRbbag9cjjjjz:dgg9qE86bbarc94fcbahag9ca1:NfghRbbai8Xbe9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbarc95fag9c8F1:NgicKtc8F91aha8J9c8N1:NfghRbbG86bbarc96fcbahaicjeGcr4fgiRbbag9cjjjjjl:dg8J9qE86bbarc97fcbaia8J9c8L1:NfgiRbbag9cjjjjjd:dg8J9qE86bbarc98fcbaia8J9c8K1:NfgiRbbag9cjjjjje:dg8J9qE86bbarc99fcbaia8J9c8J1:NfgiRbbag9cjjjj;ab:dg8J9qE86bbarc9:fcbaia8J9cg1:NfgiRbbag9cjjjja:dg8J9qE86bbarcufcbaia8J9ch1:NfgiRbbag9cjjjjz:dgg9qE86bbaiag9ca1:NfhixikaraiRblaiRbbghco4g8Ka8KciSg8KE86bbaqaofgrcGfaiclfa8Kfg8KRbbahcl4ciGg8La8LciSg8LE86bbarcVfa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc7fa8Ka8Lfg8KRbbahciGghahciSghE86bbarctfa8Kahfg8KRbbaiRbeghco4g8La8LciSg8LE86bbarc91fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc4fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc93fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc94fa8Kahfg8KRbbaiRbdghco4g8La8LciSg8LE86bbarc95fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc96fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc97fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc98fa8KahfghRbbaiRbigico4g8Ka8KciSg8KE86bbarc99faha8KfghRbbaicl4ciGg8Ka8KciSg8KE86bbarc9:faha8KfghRbbaicd4ciGg8Ka8KciSg8KE86bbarcufaha8KfgrRbbaiciGgiaiciSgiE86bbaraifhixdkaraiRbwaiRbbghcl4g8Ka8KcsSg8KE86bbaqaofgrcGfaicwfa8Kfg8KRbbahcsGghahcsSghE86bbarcVfa8KahfghRbbaiRbeg8Kcl4g8La8LcsSg8LE86bbarc7faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarctfaha8KfghRbbaiRbdg8Kcl4g8La8LcsSg8LE86bbarc91faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc4faha8KfghRbbaiRbig8Kcl4g8La8LcsSg8LE86bbarc93faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc94faha8KfghRbbaiRblg8Kcl4g8La8LcsSg8LE86bbarc95faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc96faha8KfghRbbaiRbvg8Kcl4g8La8LcsSg8LE86bbarc97faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc98faha8KfghRbbaiRbog8Kcl4g8La8LcsSg8LE86bbarc99faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc9:faha8KfghRbbaiRbrgicl4g8Ka8KcsSg8KE86bbarcufaha8KfgrRbbaicsGgiaicsSgiE86bbaraifhixekarai8Pbb83bbarcwfaicwf8Pbb83bbaiczfhikdnaoaC9pmbalcdfhlaoczfhraPai9RcL0mekkaoaC6moaimexokaCmva8FTmvkaqaAfhqa8Ecefg8Ecl9hmbkdndndndnawTmbasa8Acd4fRbbgociGPlbedrbkaATmdaza8Afh8Fazcj;cbfhhcbh8EaEhaina8FRbbhraahocbhlinaoahalfRbbgqce4cbaqceG9R7arfgr86bbaoadfhoaAalcefgl9hmbkaacefhaa8Fcefh8FahaAfhha8Ecefg8Ecl9hmbxikkaATmeaza8Afhaazcj;cbfhhcbhoceh8EaYh8FinaEaofhlaa8Vbbhrcbhoinala8FaofRbbcwtahaofRbbgqVc;:FiGce4cbaqceG9R7arfgr87bbaladfhlaLaocefgofmbka8FaQfh8FcdhoaacdfhaahaQfhha8EceGhlcbh8EalmbxdkkaATmbcbaocl49Rh8Eaza8AfRbbhqcwhoa3hlinalRbbaotaqVhqalcefhlaocwfgoca9hmbkcbhhaEh8FaYhainazcj;cbfahfRbbhrcwhoaahlinalRbbaotarVhralaAfhlaocwfgoca9hmbkara8E93aq7hqcbhoa8Fhlinalaqao486bbalcefhlaocwfgoca9hmbka8Fadfh8FaacefhaahcefghaA9hmbkkaEclfhEa3clfh3a8Aclfg8Aad6mbkaXazcjdfaAad2z:jjjjb8AazazcjdfaAcufad2fadz:jjjjb8AaAaOfhOaihxaimbkc9:hoxdkcbc99aPax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaok:XseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:kjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiaPfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaOfhiazaOfhxxekaxcbalRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhAascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhzaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkaOhlxekalcefhlkaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDclfaO87ebaDcdfaz87ebxekabarcdtfgDaABdbaDcwfaOBdbaDclfazBdbkavc;abfaocitfgDazBdbaDaABdlavaicdtfaABdbavc;abfaocefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfaocdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnaecvfal9nmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;oiliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavciGfgkcd7cetfaD87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavcufciGfcetfaD87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohvxekcjjjj94hvkabakcetfav87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk:Tvirud99eudndnadcl9hmbaeTmeindndnabRbbgiabcefgl8Sbbgvabcdfgo8Sbbgrf9R:YJbbuJabcifgwRbbgdce4adVgDcd4aDVgDcl4aDVgD:Z:vgqNJbbbZMgk:lJbbb9p9DTmbak:Ohxxekcjjjj94hxkaoax86bbdndnaraif:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohoxekcjjjj94hokalao86bbdndnavaifar9R:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabai86bbdndnaDadcetGadceGV:ZaqNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkawad86bbabclfhbaecufgembxdkkaeTmbindndnab8Vebgiabcdfgl8Uebgvabclfgo8Uebgrf9R:YJbFu9habcofgw8Vebgdce4adVgDcd4aDVgDcl4aDVgDcw4aDVgD:Z:vgqNJbbbZMgk:lJbbb9p9DTmbak:Ohxxekcjjjj94hxkaoax87ebdndnaraif:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohoxekcjjjj94hokalao87ebdndnavaifar9R:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabai87ebdndnaDadcetGadceGV:ZaqNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkawad87ebabcwfhbaecufgembkkk9teiucbcbyd:K1jjbgeabcifc98GfgbBd:K1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkk81dbcjwk8Kbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbc:Kwkl8WNbb";
323
+ var wasm_simd = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuixkbbebeeddddilve9Weeeviebeoweuec:q:6dkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WbwY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbDl79IV9Rbqq;Ctklbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:183lYud97dur978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxavaialfgmar9Rgoad;8qbbcj;abad9Uc;WFbGcjdadca0EhPdndndnadTmbaoadfhscbhzinaeaz9nmdamax9RaD6miabazad2fhHaxaDfhOaPaeaz9RazaPfae6EgAcsfgocl4cifcd4hCavcj;cbfaoc9WGgXcetfhQavcj;cbfaXci2fhLavcj;cbfaXfhKcbhYaoc;ab6h8AincbhodnawTmbaxaYcd4fRbbhokaocFeGhEcbh3avcj;cbfh5indndndndnaEa3cet4ciGgoc9:fPdebdkamaO9RaX6mwavcj;cbfa3aX2faOaX;8qbbaOaAfhOxdkavcj;cbfa3aX2fcbaX;8kbxekamaO9RaC6moaoclVcbawEhraOaCfhocbhidna8Ambamao9Rc;Gb6mbcbhlina5alfhidndndndndndnaOalco4fRbbgqciGarfPDbedibledibkaipxbbbbbbbbbbbbbbbbpklbxlkaiaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiaopbbbpklbaoczfhoxekaiaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcd4ciGarfPDbedibledibkaiczfpxbbbbbbbbbbbbbbbbpklbxlkaiczfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiczfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiczfaopbbbpklbaoczfhoxekaiczfaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcl4ciGarfPDbedibledibkaicafpxbbbbbbbbbbbbbbbbpklbxlkaicafaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaicafaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaicafaopbbbpklbaoczfhoxekaicafaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqco4arfPDbedibledibkaic8Wfpxbbbbbbbbbbbbbbbbpklbxlkaic8Wfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaoclffaqc:q:yjjbfRbbfhoxikaic8Wfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaocwffaqc:q:yjjbfRbbfhoxdkaic8Wfaopbbbpklbaoczfhoxekaic8WfaopbbdaoRbbgicitc:q1jjbfpbibaic:q:yjjbfRbbgipsaoRbegqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaiaocdffaqc:q:yjjbfRbbfhokalc;abfhialcjefaX0meaihlamao9Rc;Fb0mbkkdnaiaX9pmbaici4hlinamao9RcK6mwa5aifhqdndndndndndnaOaico4fRbbalcoG4ciGarfPDbedibledibkaqpxbbbbbbbbbbbbbbbbpkbbxlkaqaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spkbbaaaoclffahc:q:yjjbfRbbfhoxikaqaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spkbbaaaocwffahc:q:yjjbfRbbfhoxdkaqaopbbbpkbbaoczfhoxekaqaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpkbbaaaocdffahc:q:yjjbfRbbfhokalcdfhlaiczfgiaX6mbkkaohOaoTmoka5aXfh5a3cefg3cl9hmbkdndndndnawTmbasaYcd4fRbbglciGPlbedwbkaXTmdavcjdfaYfhlavaYfpbdbhgcbhoinalavcj;cbfaofpblbg8JaKaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaQaofpblbg8MaLaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Ecep9Ta8Epxeeeeeeeeeeeeeeeeg8Fp9op9Hp9rg8Eagp9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8LaypmwDKYqk8AExm35Ps8E8Fg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Ug8Fp9Abbbaladfgla8Fa8Ea8Epmlvorlvorlvorlvorp9Ug8Fp9Abbbaladfgla8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9Ug8Fp9Abbbaladfgla8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9AbbbaladfhlaoczfgoaX6mbxikkaXTmeavcjdfaYfhlavaYfpbdbhgcbhoinalavcj;cbfaofpblbg8JaKaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaQaofpblbg8MaLaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Ecep:nea8Epxebebebebebebebebg8Fp9op:bep9rg8Eagp:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8LaypmwDKYqk8AExm35Ps8E8Fg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeg8Fp9Abbbaladfgla8Fa8Ea8Epmlvorlvorlvorlvorp:oeg8Fp9Abbbaladfgla8Fa8Ea8EpmwDqkwDqkwDqkwDqkp:oeg8Fp9Abbbaladfgla8Fa8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9AbbbaladfhlaoczfgoaX6mbxdkkaXTmbcbhocbalcl4gl9Rc8FGhiavcjdfaYfhravaYfpbdbh8Finaravcj;cbfaofpblbggaKaofpblbg8JpmbzeHdOiAlCvXoQrLg8KaQaofpblbg8LaLaofpblbg8MpmbzeHdOiAlCvXoQrLg8NpmbezHdiOAlvCXorQLg8Eaip:Rea8Ealp:Sep9qg8Ea8Fp9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Fa8Ka8NpmwDKYqk8AExm35Ps8E8Fg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Faga8JpmwKDYq8AkEx3m5P8Es8Fgga8La8MpmwKDYq8AkEx3m5P8Es8Fg8JpmbezHdiOAlvCXorQLg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Faga8JpmwDKYqk8AExm35Ps8E8Fg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9AbbbaradfhraoczfgoaX6mbkkaYclfgYad6mbkaHavcjdfaAad2;8qbbavavcjdfaAcufad2fad;8qbbaAazfhzc9:hoaOhxaOmbxlkkaeTmbaDalfhrcbhocuhlinaralaD9RglfaD6mdaPaeao9RaoaPfae6Eaofgoae6mbkaial9Rhxkcbc99amax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaokwbz:bjjjbk:TseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiaPfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaOfhiazaOfhxxekaxcbalRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhAascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhzaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkaOhlxekalcefhlkaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDclfaO87ebaDcdfaz87ebxekabarcdtfgDaABdbaDcwfaOBdbaDclfazBdbkavc;abfaocitfgDazBdbaDaABdlavaicdtfaABdbavc;abfaocefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfaocdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnaecvfal9nmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:2Pliur97eue978Jjjjjbc8W9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskaipxFubbFubbFubbFubbgxpklbdnalTmbcbhvabhdinadczfgmampbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraipblbaDaopmlvorxmPsCXQL358E8Fp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgPp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;MeawaqawaPp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiczfpxbbbbbbbbbbbbbbbbgopklbaiaopklbaiabalcitfgdaeciGglcitgv;8qbbaiaxpkladnalTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraipblaaDaopmlvorxmPsCXQL358E8Fp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgPp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;MeawaqawaPp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkadaiav;8qbbkk;Iwllue97euo978Jjjjjbca9Rhidnaec98GglTmbcbhvabhoinaocKfpxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81ZaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkpxibbbibbbibbbibbbp9qp;6ep;NegxaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meaxarczp:Sep;6ep;Megmamp;Meaxaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgxp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgPp9oamaxp;Mearp;Keczp:Rep9qgmaDaxp;Mearp;KeaPp9oaqaxp;Mearp;Keczp:Rep9qgrpmwDKYqk8AExm35Ps8E8FgDp5eakclp:RegxpEi:T:j83ibawaDp5baxpEd:T:j83ibaocwfamarpmbezHdiOAlvCXorQLgrp5eaxpEe:T:j83ibaoarp5baxpEb:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiczfpxbbbbbbbbbbbbbbbbgxpklbaiaxpklbaiabalcitfgoaeciGgvcitgw;8qbbdnavTmbaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81ZaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkpxibbbibbbibbbibbbp9qp;6ep;NegxaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meaxarczp:Sep;6ep;Megmamp;Meaxaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgxp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgPp9oamaxp;Mearp;Keczp:Rep9qgmaDaxp;Mearp;KeaPp9oaqaxp;Mearp;Keczp:Rep9qgrpmwDKYqk8AExm35Ps8E8FgDp5eakclp:RegxpEi:T:j83iKaiaDp5baxpEd:T:j83izaiamarpmbezHdiOAlvCXorQLgrp5eaxpEe:T:j83iwaiarp5baxpEb:T:j83ibkaoaiaw;8qbbkk;uddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaic8WfpxbbbbbbbbbbbbbbbbgopklbaicafaopklbaiczfaopklbaiaopklbaiabavcdtfgdalciGgecdtgv;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkadaiav;8qbbkk:CPvdue97euw97eu8Jjjjjbc8W9Rhiaec98Ghldndnadcl9hmbaipxbbbbbbbbbbbbbbbbgvpklbdnalTmbcbhoabhdinadpbbbhradpxbbuJbbuJbbuJbbuJaipblbarcKp:Tep9qgwcep:Seawp9qgDcdp:SeaDp9qgDclp:SeaDp9qgqp;6ep;NegDarcwp:RecKp:SegkarpxFbbbFbbbFbbbFbbbgxp9ogmp:Uep;6ep;Mepxbbn0bbn0bbn0bbn0gPp;Kecwp:RepxbFbbbFbbbFbbbFbbp9oaDamakp:Xearczp:RecKp:Segrp:Uep;6ep;MeaPp;Keaxp9op9qaDamakarp:Uep:Xep;6ep;MeaPp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qaDaqawcep:Rep9oawpxebbbebbbebbbebbbp9op9qp;6ep;MeaPp;KecKp:Rep9qpkbbadczfhdaoclfgoal6mbkkalaeSmeaiavpklaaicafabalcdtfgdaeciGglcdtgo;8qbbaiavpklbdnalTmbaipblahraipxbbuJbbuJbbuJbbuJaipblbarcKp:Tep9qgwcep:Seawp9qgDcdp:SeaDp9qgDclp:SeaDp9qgqp;6ep;NegDarcwp:RecKp:SegkarpxFbbbFbbbFbbbFbbbgxp9ogmp:Uep;6ep;Mepxbbn0bbn0bbn0bbn0gPp;Kecwp:RepxbFbbbFbbbFbbbFbbp9oaDamakp:Xearczp:RecKp:Segrp:Uep;6ep;MeaPp;Keaxp9op9qaDamakarp:Uep:Xep;6ep;MeaPp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qaDaqawcep:Rep9oawpxebbbebbbebbbebbbp9op9qp;6ep;MeaPp;KecKp:Rep9qpklakadaicafao;8qbbskaipxbbbbbbbbbbbbbbbbgvpklbdnalTmbcbhoabhdinadczfgspxbFu9hbFu9hbFu9hbFu9hadpbbbgDaspbbbgPpmlvorxmPsCXQL358E8Fgmczp:Teaipblbp9qgrcep:Searp9qgwcdp:Seawp9qgwclp:Seawp9qgwcwp:Seawp9qgqp;6ep;NegwaDaPpmbediwDqkzHOAKY8AEgDpxFFbbFFbbFFbbFFbbgPp9ogkaDczp:Segxp:Ueamczp:Reczp:Segmp:Xep;6ep;Mepxbbn0bbn0bbn0bbn0gDp;KeaPp9oawakaxamp:Uep:Xep;6ep;MeaDp;Keczp:Rep9qgxawaqarcep:Rep9oarpxebbbebbbebbbebbbp9op9qp;6ep;MeaDp;Keczp:Reawamakp:Uep;6ep;MeaDp;KeaPp9op9qgrpmwDKYqk8AExm35Ps8E8FpkbbadaxarpmbezHdiOAlvCXorQLpkbbadcafhdaoclfgoal6mbkkalaeSmbaiczfpxbbbbbbbbbbbbbbbbgrpklbaiarpklbaiabalcitfgdaeciGglcitgo;8qbbaiavpkladnalTmbaipxbFu9hbFu9hbFu9hbFu9haipblbgDaipblzgPpmlvorxmPsCXQL358E8Fgmczp:Teaipblap9qgrcep:Searp9qgwcdp:Seawp9qgwclp:Seawp9qgwcwp:Seawp9qgqp;6ep;NegwaDaPpmbediwDqkzHOAKY8AEgDpxFFbbFFbbFFbbFFbbgPp9ogkaDczp:Segxp:Ueamczp:Reczp:Segmp:Xep;6ep;Mepxbbn0bbn0bbn0bbn0gDp;KeaPp9oawakaxamp:Uep:Xep;6ep;MeaDp;Keczp:Rep9qgxawaqarcep:Rep9oarpxebbbebbbebbbebbbp9op9qp;6ep;MeaDp;Keczp:Reawamakp:Uep;6ep;MeaDp;KeaPp9op9qgrpmwDKYqk8AExm35Ps8E8FpklzaiaxarpmbezHdiOAlvCXorQLpklbkadaiao;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb";
324
+ var detector = new Uint8Array([
325
+ 0,
326
+ 97,
327
+ 115,
328
+ 109,
329
+ 1,
330
+ 0,
331
+ 0,
332
+ 0,
333
+ 1,
334
+ 4,
335
+ 1,
336
+ 96,
337
+ 0,
338
+ 0,
339
+ 3,
340
+ 3,
341
+ 2,
342
+ 0,
343
+ 0,
344
+ 5,
345
+ 3,
346
+ 1,
347
+ 0,
348
+ 1,
349
+ 12,
350
+ 1,
351
+ 0,
352
+ 10,
353
+ 22,
354
+ 2,
355
+ 12,
356
+ 0,
357
+ 65,
358
+ 0,
359
+ 65,
360
+ 0,
361
+ 65,
362
+ 0,
363
+ 252,
364
+ 10,
365
+ 0,
366
+ 0,
367
+ 11,
368
+ 7,
369
+ 0,
370
+ 65,
371
+ 0,
372
+ 253,
373
+ 15,
374
+ 26,
375
+ 11
376
+ ]);
377
+ var wasmpack = new Uint8Array([
378
+ 32,
379
+ 0,
380
+ 65,
381
+ 2,
382
+ 1,
383
+ 106,
384
+ 34,
385
+ 33,
386
+ 3,
387
+ 128,
388
+ 11,
389
+ 4,
390
+ 13,
391
+ 64,
392
+ 6,
393
+ 253,
394
+ 10,
395
+ 7,
396
+ 15,
397
+ 116,
398
+ 127,
399
+ 5,
400
+ 8,
401
+ 12,
402
+ 40,
403
+ 16,
404
+ 19,
405
+ 54,
406
+ 20,
407
+ 9,
408
+ 27,
409
+ 255,
410
+ 113,
411
+ 17,
412
+ 42,
413
+ 67,
414
+ 24,
415
+ 23,
416
+ 146,
417
+ 148,
418
+ 18,
419
+ 14,
420
+ 22,
421
+ 45,
422
+ 70,
423
+ 69,
424
+ 56,
425
+ 114,
426
+ 101,
427
+ 21,
428
+ 25,
429
+ 63,
430
+ 75,
431
+ 136,
432
+ 108,
433
+ 28,
434
+ 118,
435
+ 29,
436
+ 73,
437
+ 115
438
+ ]);
439
+ if (typeof WebAssembly !== "object") {
440
+ return {
441
+ supported: false
442
+ };
443
+ }
444
+ var wasm = WebAssembly.validate(detector) ? unpack(wasm_simd) : unpack(wasm_base);
445
+ var instance;
446
+ var ready = WebAssembly.instantiate(wasm, {}).then(function(result) {
447
+ instance = result.instance;
448
+ instance.exports.__wasm_call_ctors();
449
+ });
450
+ function unpack(data) {
451
+ var result = new Uint8Array(data.length);
452
+ for (var i = 0; i < data.length; ++i) {
453
+ var ch = data.charCodeAt(i);
454
+ result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
455
+ }
456
+ var write = 0;
457
+ for (var i = 0; i < data.length; ++i) {
458
+ result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];
459
+ }
460
+ return result.buffer.slice(0, write);
461
+ }
462
+ function decode(instance2, fun, target, count, size, source, filter) {
463
+ var sbrk = instance2.exports.sbrk;
464
+ var count4 = count + 3 & ~3;
465
+ var tp = sbrk(count4 * size);
466
+ var sp = sbrk(source.length);
467
+ var heap = new Uint8Array(instance2.exports.memory.buffer);
468
+ heap.set(source, sp);
469
+ var res = fun(tp, count, size, sp, source.length);
470
+ if (res == 0 && filter) {
471
+ filter(tp, count4, size);
472
+ }
473
+ target.set(heap.subarray(tp, tp + count * size));
474
+ sbrk(tp - sbrk(0));
475
+ if (res != 0) {
476
+ throw new Error("Malformed buffer data: " + res);
477
+ }
478
+ }
479
+ var filters = {
480
+ NONE: "",
481
+ OCTAHEDRAL: "meshopt_decodeFilterOct",
482
+ QUATERNION: "meshopt_decodeFilterQuat",
483
+ EXPONENTIAL: "meshopt_decodeFilterExp",
484
+ COLOR: "meshopt_decodeFilterColor"
485
+ };
486
+ var decoders = {
487
+ ATTRIBUTES: "meshopt_decodeVertexBuffer",
488
+ TRIANGLES: "meshopt_decodeIndexBuffer",
489
+ INDICES: "meshopt_decodeIndexSequence"
490
+ };
491
+ var workers = [];
492
+ var requestId = 0;
493
+ function createWorker(url) {
494
+ var worker = {
495
+ object: new Worker(url),
496
+ pending: 0,
497
+ requests: {}
498
+ };
499
+ worker.object.onmessage = function(event) {
500
+ var data = event.data;
501
+ worker.pending -= data.count;
502
+ worker.requests[data.id][data.action](data.value);
503
+ delete worker.requests[data.id];
504
+ };
505
+ return worker;
506
+ }
507
+ function initWorkers(count) {
508
+ var source = "self.ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(wasm) + "]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = " + workerProcess.name + ";" + decode.toString() + workerProcess.toString();
509
+ var blob = new Blob([source], { type: "text/javascript" });
510
+ var url = URL.createObjectURL(blob);
511
+ for (var i = workers.length; i < count; ++i) {
512
+ workers[i] = createWorker(url);
513
+ }
514
+ for (var i = count; i < workers.length; ++i) {
515
+ workers[i].object.postMessage({});
516
+ }
517
+ workers.length = count;
518
+ URL.revokeObjectURL(url);
519
+ }
520
+ function decodeWorker(count, size, source, mode, filter) {
521
+ var worker = workers[0];
522
+ for (var i = 1; i < workers.length; ++i) {
523
+ if (workers[i].pending < worker.pending) {
524
+ worker = workers[i];
525
+ }
526
+ }
527
+ return new Promise(function(resolve, reject) {
528
+ var data = new Uint8Array(source);
529
+ var id = ++requestId;
530
+ worker.pending += count;
531
+ worker.requests[id] = { resolve, reject };
532
+ worker.object.postMessage({ id, count, size, source: data, mode, filter }, [data.buffer]);
533
+ });
534
+ }
535
+ function workerProcess(event) {
536
+ var data = event.data;
537
+ if (!data.id) {
538
+ return self.close();
539
+ }
540
+ self.ready.then(function(instance2) {
541
+ try {
542
+ var target = new Uint8Array(data.count * data.size);
543
+ decode(instance2, instance2.exports[data.mode], target, data.count, data.size, data.source, instance2.exports[data.filter]);
544
+ self.postMessage({ id: data.id, count: data.count, action: "resolve", value: target }, [target.buffer]);
545
+ } catch (error) {
546
+ self.postMessage({ id: data.id, count: data.count, action: "reject", value: error });
547
+ }
548
+ });
549
+ }
550
+ return {
551
+ ready,
552
+ supported: true,
553
+ useWorkers: function(count) {
554
+ initWorkers(count);
555
+ },
556
+ decodeVertexBuffer: function(target, count, size, source, filter) {
557
+ decode(instance, instance.exports.meshopt_decodeVertexBuffer, target, count, size, source, instance.exports[filters[filter]]);
558
+ },
559
+ decodeIndexBuffer: function(target, count, size, source) {
560
+ decode(instance, instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);
561
+ },
562
+ decodeIndexSequence: function(target, count, size, source) {
563
+ decode(instance, instance.exports.meshopt_decodeIndexSequence, target, count, size, source);
564
+ },
565
+ decodeGltfBuffer: function(target, count, size, source, mode, filter) {
566
+ decode(instance, instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);
567
+ },
568
+ decodeGltfBufferAsync: function(count, size, source, mode, filter) {
569
+ if (workers.length > 0) {
570
+ return decodeWorker(count, size, source, decoders[mode], filters[filter]);
571
+ }
572
+ return ready.then(function() {
573
+ var target = new Uint8Array(count * size);
574
+ decode(instance, instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);
575
+ return target;
576
+ });
577
+ }
578
+ };
579
+ })();
580
+
581
+ // node_modules/meshoptimizer/meshopt_simplifier.module.js
582
+ var MeshoptSimplifier = (function() {
583
+ var wasm = "b9H79Tebbbe:Gez9Geueu9Geub9Gbb9Gsuuuuuuuuuuuu99uueu9Gvuuuuub9Gruuuuuuub9Gouuuuuue999Gvuuuuueu9Gquuuuuuu99uueu9GPuuuuuuuuuuu99uueu9Gquuuuuuuu99ueu9Gruuuuuu99eu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9GiuuueuiXCdilvorlwiDqkxmPbssbelve9Weiiviebeoweuec:G:Pdkr;7eko9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95br8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bw8A9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9O9v9W9K9HtWbDQ9TW79O9V9Wt9F79P9T9W29P9M959t29V9W9W95bqX9TW79O9V9Wt9F79P9T9W29P9M959qV919UWbkQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7bxX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2Wbma9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbPl79IV9RbsDwebcekdOAq:d;OeCdbk:J1eo3ue99euE99Cue9:8Jjjjjbcj;sb9Rgs8Kjjjjbcbhzasc:Cefcbc;Kbz:rjjjb8AdnabaeSmbabaeadcdtz:qjjjb8AkdnamcdGTmbalcrfci4gHcbyd1:jjjbHjjjjbbheasc:Cefasyd;8egOcdtfaeBdbasaOcefBd;8eaecbaHz:rjjjbhAcbhlcbhednadTmbcbhlabheadhHinaAaeydbgOci4fgCaCRbbgCceaOcrGgOtV86bbaCcu7aO4ceGalfhlaeclfheaHcufgHmbkcualcdtalcFFFFi0Ehekaecbyd1:jjjbHjjjjbbhzasc:Cefasyd;8egecdtfazBdbasaecefBd;8ealcd4alfhOcehHinaHgecethHaeaO6mbkcbhXcuaecdtgOaecFFFFi0Ecbyd1:jjjbHjjjjbbhHasc:Cefasyd;8egCcdtfaHBdbasaCcefBd;8eaHcFeaOz:rjjjbhQdnadTmbaecufhLcbhKindndnaQabaXcdtfgYydbgCc:v;t;h;Ev2aLGgOcdtfgAydbgHcuSmbceheinazaHcdtfydbaCSmdaOaefhHaecefheaQaHaLGgOcdtfgAydbgHcu9hmbkkazaKcdtfaCBdbaAaKBdbaKhHaKcefhKkaYaHBdbaXcefgXad9hmbkkaQcbyd:m:jjjbH:bjjjbbasasyd;8ecufBd;8ekcbh8AcualcefgecdtaecFFFFi0Ecbyd1:jjjbHjjjjbbhKasc:Cefasyd;8egecdtfaKBdbasaKBdNeasaecefBd;8ecuadcitadcFFFFe0Ecbyd1:jjjbHjjjjbbhEasc:Cefasyd;8egecdtfaEBdbasaEBd:yeasaecefBd;8eascNefabadalcbz:cjjjbcualcdtgealcFFFFi0Eg3cbyd1:jjjbHjjjjbbhCasc:Cefasyd;8egHcdtfaCBdbasaHcefBd;8ea3cbyd1:jjjbHjjjjbbhYasc:Cefasyd;8egHcdtfaYBdbasaHcefBd;8eaCaYaialavazasc:Cefz:djjjbalcbyd1:jjjbHjjjjbbh5asc:Cefasyd;8egHcdtfa5BdbasaHcefBd;8ea3cbyd1:jjjbHjjjjbbhHasc:Cefasyd;8egOcdtfaHBdbasaOcefBd;8ea3cbyd1:jjjbHjjjjbbhOasc:Cefasyd;8egAcdtfaOBdbasaAcefBd;8eaHcFeaez:rjjjbh8EaOcFeaez:rjjjbh8FdnalTmbaEcwfhaindnaKa8AgOcefg8AcdtfydbgAaKaOcdtgefydbgHSmbaAaH9RhhaEaHcitfhga8Faefh8Ja8Eaefh8KcbhQindndnagaQcitfydbgLaO9hmba8KaOBdba8JaOBdbxekdnaKaLcdtg8LfgeclfydbgHaeydbgeSmbaEaecitgAfydbaOSmeaHae9Rh8Maecu7aHfhXaaaAfhHcbheinaXaeSmeaecefheaHydbhAaHcwfhHaAaO9hmbkaea8M6meka8Fa8LfgeaOaLaeydbcuSEBdba8KaLaOa8KydbcuSEBdbkaQcefgQah9hmbkka8Aal9hmbkaChHaYhOa8FhAa8EhQcbheindndnaeaHydbgL9hmbdnaeaOydbgL9hmbaQydbhLdnaAydbgXcu9hmbaLcu9hmba5aefcb86bbxikdnaXcuSmbaLcuSmbaeaXSmbaCaXcdtfydbaCaLcdtfydb9hmba5aefcd86bbxika5aefh8KdnaeaXSmbaeaLSmba8Kce86bbxika8Kcl86bbxdkdnaeaYaLcdtgXfydb9hmbdnaAydbg8KcuSmbaea8KSmbaQydbghcuSmbaeahSmba8FaXfydbggcuSmbagaLSmba8EaXfydbgXcuSmbaXaLSmbdnaCa8KcdtfydbgLaCaXcdtfydb9hmbaLaCahcdtfydbgXSmbaXaCagcdtfydb9hmba5aefcd86bbxlka5aefcl86bbxika5aefcl86bbxdka5aefcl86bbxeka5aefa5aLfRbb86bbkaHclfhHaOclfhOaAclfhAaQclfhQalaecefge9hmbkdnamcaGTmbaEcwfh8Jcbh8Nindndna5a8NfgyRbbg8Pc9:fPibebekdndndnaCa8Ncdtfydbgea8N9hmbdnaqmbcbhgxdkdnazTmbcbhga8NheinagaqazaecdtgefydbfRbbcdGce4VhgaYaefydbgea8N9hmbxikkcbhga8NheinagaqaefRbbcdGce4VhgaYaecdtfydbgea8N9hmbxdkka5aefRbbhexeka8NheindnaKaecdtgafgeclfydbgHaeydbgeSmbaHae9Rh8AaEaecitfh8MaCaafh8Lcbh8Kina8Ma8KcitfydbgXhednindnaKaecdtgLfgeclfydbgHaeydbgeSmbdnaCaEaecitgOfydbcdtfydba8LydbgQ9hmbcehexikaHae9Rhhaecu7aHfhAa8JaOfhHcbheinaAaeSmeaecefheaHydbhOaHcwfhHaCaOcdtfydbaQ9hmbkaeah6hexdkaYaLfydbgeaX9hmbkcbhekagaece7Vhga8Kcefg8Ka8A9hmbkkaYaafydbgea8N9hmbka8PciagceGEhekayae86bbka8Ncefg8Nal9hmbkkdnaqTmbdndnazTmbazheaChHalhOindnaqaeydbfRbbceGTmba5aHydbfcl86bbkaeclfheaHclfhHaOcufgOmbxdkkaChealhHindnaqRbbceGTmba5aeydbfcl86bbkaqcefhqaeclfheaHcufgHmbkkaChealhOa5hHindna5aeydbfRbbcl9hmbaHcl86bbkaeclfheaHcefhHaOcufgOmbkkamceGTmba5healhHindnaeRbbce9hmbaecl86bbkaecefheaHcufgHmbkkcbhIcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbhaasc:Cefasyd;8egecdtfaaBdbasaecefBd;8easc:qefcbBdbas9cb83i1eaaaialavazasc1efz:ejjjbh8RdndnaDmbcbh8Scbh8Lxekcbh8LawhecbhHindnaeIdbJbbbb9ETmbasa8LcdtfaHBdba8Lcefh8LkaeclfheaDaHcefgH9hmbkcua8Lal2gecdtaecFFFFi0Ecbyd1:jjjbHjjjjbbh8Sasc:Cefasyd;8egecdtfa8SBdbasaecefBd;8ealTmbdna8Lmbcbh8Lxekarcd4hXdnazTmba8Lcdth8KcbhLa8ShKinaoazaLcdtfydbaX2cdtfhQasheaKhHa8LhOinaHaQaeydbcdtgAfIdbawaAfIdbNUdbaeclfheaHclfhHaOcufgOmbkaKa8KfhKaLcefgLal9hmbxdkka8Lcdth8KcbhLa8ShKinaoaLaX2cdtfhQasheaKhHa8LhOinaHaQaeydbcdtgAfIdbawaAfIdbNUdbaeclfheaHclfhHaOcufgOmbkaKa8KfhKaLcefgLal9hmbkkcualc8S2gHalc;D;O;f8U0EgAcbyd1:jjjbHjjjjbbheasc:Cefasyd;8egOcdtfaeBdbasaOcefBd;8eaecbaHz:rjjjbhycbhqcbh8Ndna8LTmbcbhIaAcbyd1:jjjbHjjjjbbh8Nasc:Cefasyd;8egecdtfa8NBdbasaecefBd;8ea8NcbaHz:rjjjb8Acua8Lal2gecltgHaecFFFFb0Ecbyd1:jjjbHjjjjbbhqasc:Cefasyd;8egecdtfaqBdbasaecefBd;8eaqcbaHz:rjjjb8AamcjjjjdGTmbcualcltgealcFFFFb0Ecbyd1:jjjbHjjjjbbhIasc:Cefasyd;8egHcdtfaIBdbasaHcefBd;8eaIcbaez:rjjjb8AkdnadTmbcbhQabhHinaaaHclfydbgLcx2fgeIdbaaaHydbgKcx2fgOIdbgR:tg8UaaaHcwfydbgXcx2fgAIdlaOIdlg8V:tg8WNaAIdbaR:tg8XaeIdla8V:tg8YN:tg8Zh80aeIdwaOIdwg81:tgBa8XNaAIdwa81:tg83a8UN:tgUh8Xa8Ya83Na8WaBN:tg8Yh8Udna8Za8ZNa8Ya8YNaUaUNMM:rgBJbbbb9EgOTmba8ZaB:vh80aUaB:vh8Xa8YaB:vh8UkayaCaKcdtfydbgAc8S2fgea8UaB:rg8Wa8UNNg85aeIdbMUdbaea8Xa8Wa8XNg86Ng87aeIdlMUdlaea80a8Wa80Ng83Ng88aeIdwMUdwaea86a8UNg86aeIdxMUdxaea83a8UNg89aeIdzMUdzaea83a8XNg8:aeIdCMUdCaea8Ua8Wa80a81Na8UaRNa8Va8XNMM:mgZNg83Ng8UaeIdKMUdKaea8Xa83Ng8XaeId3MUd3aea80a83Ng80aeIdaMUdaaea83aZNg83aeId8KMUd8Kaea8WaeIdyMUdyayaCaLcdtfydbgLc8S2fgea85aeIdbMUdbaea87aeIdlMUdlaea88aeIdwMUdwaea86aeIdxMUdxaea89aeIdzMUdzaea8:aeIdCMUdCaea8UaeIdKMUdKaea8XaeId3MUd3aea80aeIdaMUdaaea83aeId8KMUd8Kaea8WaeIdyMUdyayaCaXcdtfydbgKc8S2fgea85aeIdbMUdbaea87aeIdlMUdlaea88aeIdwMUdwaea86aeIdxMUdxaea89aeIdzMUdzaea8:aeIdCMUdCaea8UaeIdKMUdKaea8XaeId3MUd3aea80aeIdaMUdaaea83aeId8KMUd8Kaea8WaeIdyMUdydnaITmbdnaOTmba8ZaB:vh8ZaUaB:vhUa8YaB:vh8YkaIaAcltfgeaBJbbbZNg8UaUNg8WaeIdlMUdlaea8Ua8ZNg8XaeIdwMUdwaea8Ua8YNg80aeIdbMUdbaea8UaR:ma8YNaUa8VN:ta81a8ZN:tNg8UaeIdxMUdxaIaLcltfgea8WaeIdlMUdlaea8XaeIdwMUdwaea80aeIdbMUdbaea8UaeIdxMUdxaIaKcltfgea8WaeIdlMUdlaea8XaeIdwMUdwaea80aeIdbMUdbaea8UaeIdxMUdxkaHcxfhHaQcifgQad6mbkkdnalTmbJ;n;m;m89J:v:;;w8ZamczGEh8YcbhOaChAaahHayheindnaOaAydb9hmbaecxfgQaQIdbJbbbbMUdbaeczfgQaQIdbJbbbbMUdbaecCfgQaQIdbJbbbbMUdbaea8YaecyfgQIdbg8ZNg8UaeIdbMUdbaeclfgLa8UaLIdbMUdbaecwfgLa8UaLIdbMUdbaecKfgLaLIdbaHIdbg8Xa8UN:tUdbaHcwfIdbh8Waec3fgLaLIdba8UaHclfIdbg80N:tUdbaecafgLaLIdba8Ua8WN:tUdbaec8KfgLIdbhUaQa8Za8UMUdbaLaUa8Ua8Wa8WNa8Xa8XNa80a80NMMNMUdbkaAclfhAaHcxfhHaec8SfhealaOcefgO9hmbkkdnadTmbcbhXabhKinabaXcdtfhLcbhHina5aLaHc:G1jjbfydbcdtfydbgOfRbbhedndna5aKaHfydbgAfRbbgQc99fcFeGcpe0mbaec99fcFeGc;:e6mekdnaQcufcFeGce0mba8EaAcdtfydbaO9hmekdnaecufcFeGce0mba8FaOcdtfydbaA9hmekJbbacJbbacJbbbZaecFeGceSEaQcFeGceSEh88aaaOcx2fgeIdwaaaAcx2fgQIdwgB:tg80:mh86aeIdlaQIdlg83:tg8Z:mh89aeIdbaQIdbgR:tgU:mh8:dnaaaLaHc:K1jjbfydbcdtfydbcx2fgeIdwaB:tg8Va80a80NaUaUNa8Za8ZNMMg8YNa8Va80NaeIdbaR:tg81aUNa8ZaeIdla83:tg85NMMg8Wa80N:tg8Xa8XNa81a8YNa8WaUN:tg8Ua8UNa85a8YNa8Wa8ZN:tg8Wa8WNMM:rg87Jbbbb9ETmba8Xa87:vh8Xa8Wa87:vh8Wa8Ua87:vh8Uka88a8Y:rNg8Ya8XaBNa8UaRNa83a8WNMM:mgZNg87aZNhZa8Xa87Nhna8Wa87Nhca8Ua87Nh9ca8Ya8XNg87a8WNhJa87a8UNh9ea8Ya8WNgTa8UNhSa8Xa87Nh87a8WaTNhTa8Ua8Ya8UNNh9hdnaUa85Na81a89NMg8Xa8XNa8Za8VNa85a86NMg8Ua8UNa80a81Na8Va8:NMg8Wa8WNMM:rg80Jbbbb9ETmba8Xa80:vh8Xa8Wa80:vh8Wa8Ua80:vh8UkayaCaAcdtfydbc8S2fgeaeIdba9ha8Ua88a80:rNg80a8UNNMgUMUdbaeaTa8Wa80a8WNg8VNMg81aeIdlMUdlaea87a8Xa80a8XNg8ZNMg85aeIdwMUdwaeaSa8Va8UNMg8VaeIdxMUdxaea9ea8Za8UNMg87aeIdzMUdzaeaJa8Za8WNMg8ZaeIdCMUdCaea9ca8Ua80a8XaBNa8UaRNa83a8WNMMgB:mNg80NMg8UaeIdKMUdKaeaca8Wa80NMg8WaeId3MUd3aeana8Xa80NMg8XaeIdaMUdaaeaZaBa80N:tg80aeId8KMUd8Kaea8YJbbbbMg8YaeIdyMUdyayaCaOcdtfydbc8S2fgeaUaeIdbMUdbaea81aeIdlMUdlaea85aeIdwMUdwaea8VaeIdxMUdxaea87aeIdzMUdzaea8ZaeIdCMUdCaea8UaeIdKMUdKaea8WaeId3MUd3aea8XaeIdaMUdaaea80aeId8KMUd8Kaea8YaeIdyMUdykaHclfgHcx9hmbkaKcxfhKaXcifgXad6mbka8LTmbcbhKinJbbbbh8YaaabaKcdtfgeclfydbgXcx2fgHIdwaaaeydbg8Kcx2fgOIdwg81:tg8Wa8WNaHIdbaOIdbg85:tg8Xa8XNaHIdlaOIdlg87:tg80a80NMMgRaaaecwfydbghcx2fgeIdwa81:tg8ZNa8Wa8Wa8ZNa8XaeIdba85:tgUNa80aeIdla87:tgBNMMg8UN:tJbbbbJbbjZaRa8Za8ZNaUaUNaBaBNMMg8VNa8Ua8UN:tg83:va83Jbbbb9BEg83Nh89a8Va8WNa8Za8UN:ta83Nh8:aRaBNa80a8UN:ta83NhZa8Va80NaBa8UN:ta83NhnaRaUNa8Xa8UN:ta83Nhca8Va8XNaUa8UN:ta83Nh9ca8XaBNaUa80N:tg8Ua8UNa80a8ZNaBa8WN:tg8Ua8UNa8WaUNa8Za8XN:tg8Ua8UNMM:rJbbbZNh8Ua8Sa8Ka8L2ggcdtfhHa8Saha8L2gEcdtfhOa8SaXa8L2g8JcdtfhAa81:mhJa87:mh9ea85:mhTcbhQa8LhLJbbbbhBJbbbbh83JbbbbhRJbbbbh8VJbbbbh81Jbbbbh85Jbbbbh87Jbbbbh88Jbbbbh86inascjdfaQfgecwfa8Ua8:aAIdbaHIdbg8Z:tg80Na89aOIdba8Z:tgUNMg8WNUdbaeclfa8Uana80NaZaUNMg8XNUdbaea8Ua9ca80NacaUNMg80NUdbaecxfa8UaJa8WNa9ea8XNa8ZaTa80NMMMg8ZNUdba8Ua8Wa8XNNa8VMh8Va8Ua8Wa80NNa81Mh81a8Ua8Xa80NNa85Mh85a8Ua8Za8ZNNa8YMh8Ya8Ua8Wa8ZNNaBMhBa8Ua8Xa8ZNNa83Mh83a8Ua80a8ZNNaRMhRa8Ua8Wa8WNNa87Mh87a8Ua8Xa8XNNa88Mh88a8Ua80a80NNa86Mh86aHclfhHaAclfhAaOclfhOaQczfhQaLcufgLmbka8Na8Kc8S2fgea86aeIdbMUdbaea88aeIdlMUdlaea87aeIdwMUdwaea85aeIdxMUdxaea81aeIdzMUdzaea8VaeIdCMUdCaeaRaeIdKMUdKaea83aeId3MUd3aeaBaeIdaMUdaaea8YaeId8KMUd8Kaea8UaeIdyMUdya8NaXc8S2fgea86aeIdbMUdbaea88aeIdlMUdlaea87aeIdwMUdwaea85aeIdxMUdxaea81aeIdzMUdzaea8VaeIdCMUdCaeaRaeIdKMUdKaea83aeId3MUd3aeaBaeIdaMUdaaea8YaeId8KMUd8Kaea8UaeIdyMUdya8Nahc8S2fgea86aeIdbMUdbaea88aeIdlMUdlaea87aeIdwMUdwaea85aeIdxMUdxaea81aeIdzMUdzaea8VaeIdCMUdCaeaRaeIdKMUdKaea83aeId3MUd3aeaBaeIdaMUdaaea8YaeId8KMUd8Kaea8UaeIdyMUdyaqagcltfhLcbhHa8LhAinaLaHfgeascjdfaHfgOIdbaeIdbMUdbaeclfgQaOclfIdbaQIdbMUdbaecwfgQaOcwfIdbaQIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaAcufgAmbkaqa8JcltfhLcbhHa8LhAinaLaHfgeascjdfaHfgOIdbaeIdbMUdbaeclfgQaOclfIdbaQIdbMUdbaecwfgQaOcwfIdbaQIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaAcufgAmbkaqaEcltfhLcbhHa8LhAinaLaHfgeascjdfaHfgOIdbaeIdbMUdbaeclfgQaOclfIdbaQIdbMUdbaecwfgQaOcwfIdbaQIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaAcufgAmbkaKcifgKad6mbkkcbhOdndnamcwGg9imbJbbbbh85cbh6cbh9kcbh0xekcbh6a3cbyd1:jjjbHjjjjbbh0asc:Cefasyd;8egecdtfa0BdbasaecefBd;8ecua0alabadaCz:fjjjbgAcltaAcjjjjiGEcbyd1:jjjbHjjjjbbh9kasc:Cefasyd;8egecdtfa9kBdbasaecefBd;8ea9kaAa0aaalz:gjjjbJFFuuh85aATmba9kheaAhHinaeIdbg8Ua85a85a8U9EEh85aeclfheaHcufgHmbkaAh6kasydNeh9mdnalTmba9mclfhea9mydbhAa5hHalhQcbhOincbaeydbgLaA9RaHRbbcpeGEaOfhOaHcefhHaeclfheaLhAaQcufgQmbkaOce4hOkcuadaO9Rcifg9ncx2a9nc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh8Pasc:Cefasyd;8egecdtfa8PBdbasaecefBd;8ecua9ncdta9ncFFFFi0Ecbyd1:jjjbHjjjjbbh9oasc:Cefasyd;8egecdtfa9oBdbasaecefBd;8ea3cbyd1:jjjbHjjjjbbhDasc:Cefasyd;8egecdtfaDBdbasaecefBd;8ealcbyd1:jjjbHjjjjbbh9pasc:Cefasyd;8egecdtfa9pBdbasaecefBd;8eaxaxNa8RJbbjZamclGEgnanN:vh88Jbbbbh86dnadak9nmbdna9nci6mbasyd:yeh9qa8Lclth9ra8Pcwfh9sJbbbbh87Jbbbbh86inascNefabadalaCz:cjjjbabh8Kcbh8Mcbh3inaba3cdtfhgcbheindnaCa8KaefydbgOcdtgXfydbgAaCagaec:W1jjbfydbcdtfydbgHcdtghfydbgQSmba5aHfRbbgKcv2a5aOfRbbgLfc;a1jjbfRbbg8JaLcv2aKfgEc;a1jjbfRbbg8AVcFeGTmbdnaQaA9nmbaEc;G1jjbfRbbcFeGmekdnaLcufcFeGce0mbaKTmba8EaXfydbaH9hmekdnaLTmbaKcufcFeGce0mba8FahfydbaO9hmeka8Pa8Mcx2fgAaHaOa8AcFeGgQEBdlaAaOaHaQEBdbaAaQa8JGcb9hBdwa8Mcefh8Mkaeclfgecx9hmbkdna3cifg3ad9pmba8Kcxfh8Ka8Mcifa9n9nmekka8MTmdcbhhinayaCa8Pahcx2fgKydbgQcdtgAfydbc8S2fgeIdwaaaKydlgLcx2fgHIdwg8XNaeIdzaHIdbg80NaeIdaMg8Ua8UMMa8XNaeIdlaHIdlg8ZNaeIdCa8XNaeId3Mg8Ua8UMMa8ZNaeIdba80NaeIdxa8ZNaeIdKMg8Ua8UMMa80NaeId8KMMM:lh8UJbbbbJbbjZaeIdyg8W:va8WJbbbb9BEh8WdndnaKydwg8KmbJFFuuh81xekJbbbbJbbjZayaCaLcdtfydbc8S2fgeIdygU:vaUJbbbb9BEaeIdwaaaQcx2fgHIdwgUNaeIdzaHIdbg8YNaeIdaMgBaBMMaUNaeIdlaHIdlgBNaeIdCaUNaeId3MgUaUMMaBNaeIdba8YNaeIdxaBNaeIdKMgUaUMMa8YNaeId8KMMM:lNh81ka8Wa8UNh8Vdna8LTmba8NaQc8S2fgHIdwa8XNaHIdza80NaHIdaMg8Ua8UMMa8XNaHIdla8ZNaHIdCa8XNaHId3Mg8Ua8UMMa8ZNaHIdba80NaHIdxa8ZNaHIdKMg8Ua8UMMa80NaHId8KMMMh8UaqaQa8L2ggcltfheaHIdyhUa8SaLa8L2gEcdtfgXhHa8LhOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbkdndna8KmbJbbbbh8Wxeka8NaLc8S2fgOIdwaaaQcx2fgeIdwg8YNaOIdzaeIdbgBNaOIdaMg8Wa8WMMa8YNaOIdlaeIdlg83NaOIdCa8YNaOId3Mg8Wa8WMMa83NaOIdbaBNaOIdxa83NaOIdKMg8Wa8WMMaBNaOId8KMMMh8Wa8SagcdtfhHaqaEcltfheaOIdyhRa8LhOinaHIdbgUaUaRNaecxfIdba8YaecwfIdbNaBaeIdbNa83aeclfIdbNMMMgUaUM:tNa8WMh8WaHclfhHaeczfheaOcufgOmbka8W:lh8Wka8Va8U:lMh8Va81a8WMh81dndndna5aQfRbbc9:fPdbedkdna8Fa8Ea8EaAfydbaLSEaYaAfydbgXcdtfydbgAcu9hmbaYaLcdtfydbhAka8NaXc8S2fgOIdwaaaAcx2fgeIdwg8XNaOIdzaeIdbg80NaOIdaMg8Ua8UMMa8XNaOIdlaeIdlg8ZNaOIdCa8XNaOId3Mg8Ua8UMMa8ZNaOIdba80NaOIdxa8ZNaOIdKMg8Ua8UMMa80NaOId8KMMMh8Ua8SaAa8L2ggcdtfhHaqaXa8L2gEcltfheaOIdyhUa8LhOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbkdndna8KmbJbbbbh8Wxeka8NaAc8S2fgOIdwaaaXcx2fgeIdwg80NaOIdzaeIdbg8ZNaOIdaMg8Wa8WMMa80NaOIdlaeIdlgUNaOIdCa80NaOId3Mg8Wa8WMMaUNaOIdba8ZNaOIdxaUNaOIdKMg8Wa8WMMa8ZNaOId8KMMMh8Wa8SaEcdtfhHaqagcltfheaOIdyh8Ya8LhOinaHIdbg8Xa8Xa8YNaecxfIdba80aecwfIdbNa8ZaeIdbNaUaeclfIdbNMMMg8Xa8XM:tNa8WMh8WaHclfhHaeczfheaOcufgOmbka8W:lh8Wka8Va8U:lMh8Va81a8WMh81xdkaYaAfydbgAaQSmbina8NaAc8S2fgHIdwa8XNaHIdza80NaHIdaMg8Ua8UMMa8XNaHIdla8ZNaHIdCa8XNaHId3Mg8Ua8UMMa8ZNaHIdba80NaHIdxa8ZNaHIdKMg8Ua8UMMa80NaHId8KMMMh8UaqaAa8L2cltfheaHIdyhUaXhHa8LhOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbka8Va8U:lMh8VaYaAcdtfydbgAaQ9hmbkka5aLfRbbci9hmba8KTmbaYaLcdtfydbgAaLSmba8SagcdtfhXaaaQcx2fgeIdbh8XaeIdwh80aeIdlh8Zina8NaAc8S2fgHIdwa80NaHIdza8XNaHIdaMg8Ua8UMMa80NaHIdla8ZNaHIdCa80NaHId3Mg8Ua8UMMa8ZNaHIdba8XNaHIdxa8ZNaHIdKMg8Ua8UMMa8XNaHId8KMMMh8UaqaAa8L2cltfheaHIdyhUaXhHa8LhOinaHIdbg8Wa8WaUNaecxfIdba80aecwfIdbNa8XaeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbka81a8U:lMh81aYaAcdtfydbgAaL9hmbkkaKa81a8Va81a8V9DgeEUdwaKaQaLaea8Kcb9hGgeEBdlaKaLaQaeEBdbahcefgha8M9hmbkascjdfcbcj;qbz:rjjjb8Aa9shea8MhHinascjdfaeydbcA4cF8FGgOcFAaOcFA6EcdtfgOaOydbcefBdbaecxfheaHcufgHmbkcbhecbhHinascjdfaefgOydbhAaOaHBdbaAaHfhHaeclfgecj;qb9hmbkcbhea9shHinascjdfaHydbcA4cF8FGgOcFAaOcFA6EcdtfgOaOydbgOcefBdba9oaOcdtfaeBdbaHcxfhHa8Maecefge9hmbkadak9RgOci9Uh9tdnalTmbcbheaDhHinaHaeBdbaHclfhHalaecefge9hmbkkcbh9ua9pcbalz:rjjjbh3aOcO9Uh9va9tce4h9wcbh8Acbh8Jdnina8Pa9oa8Jcdtfydbcx2fgEIdwg8Ua889Emea8Aa9t9pmeJFFuuh8Wdna9wa8M9pmba8Pa9oa9wcdtfydbcx2fIdwJbb;aZNh8Wkdna8Ua8W9ETmba8Ua869ETmba8Aa9v0mdkdna3aCaEydlghcdtg9xfydbgAfg9yRbba3aCaEydbg8Kcdtg9zfydbgefg9ARbbVmba5a8KfRbbh9Bdna9maecdtfgHclfydbgOaHydbgHSmbaOaH9RhQaaaAcx2fhKaaaecx2fhXa9qaHcitfhecbhHcehgdnindnaDaeydbcdtfydbgOaASmbaDaeclfydbcdtfydbgLaASmbaOaLSmbaaaLcx2fgLIdbaaaOcx2fgOIdbg8X:tg8UaXIdlaOIdlg80:tg8YNaXIdba8X:tgBaLIdla80:tg8WN:tg8Za8UaKIdla80:tg83NaKIdba8X:tgRa8WN:tg80Na8WaXIdwaOIdwgU:tg8VNa8YaLIdwaU:tg8XN:tg8Ya8WaKIdwaU:tg81Na83a8XN:tg8WNa8XaBNa8Va8UN:tgUa8XaRNa81a8UN:tg8UNMMa8Za8ZNa8Ya8YNaUaUNMMa80a80Na8Wa8WNa8Ua8UNMMN:rJbbj8:N9FmdkaecwfheaHcefgHaQ6hgaQaH9hmbkkagceGTmba9wcefh9wxekdndndndna9Bc9:fPdebdka8KheinaDaecdtgefahBdbaYaefydbgea8K9hmbxikkdna8Fa8Ea8Ea9zfydbahSEaYa9zfydbg8Kcdtfydbgecu9hmbaYa9xfydbhekaDa9zfahBdbaehhkaDa8KcdtfahBdbka9Ace86bba9yce86bbaEIdwg8Ua86a86a8U9DEh86a9ucefh9ucecda9BceSEa8Afh8Aka8Jcefg8Ja8M9hmbkka9uTmddnalTmbcbhLcbhXindnaDaXcdtgefydbgOaXSmbaCaOcdtfydbh8KdnaXaCaefydb9hghmbaya8Kc8S2fgeayaXc8S2fgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdyaITmbaIa8KcltfgeaIaXcltfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxka8LTmba8NaOc8S2fgea8NaXc8S2ggfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdya9raO2hKaqhHa8LhAinaHaKfgeaHaLfgOIdbaeIdbMUdbaeclfgQaOclfIdbaQIdbMUdbaecwfgQaOcwfIdbaQIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaAcufgAmbkahmbJbbbbJbbjZayagfgeIdyg8U:va8UJbbbb9BEaeIdwaaa8Kcx2fgHIdwg8UNaeIdzaHIdbg8WNaeIdaMg8Xa8XMMa8UNaeIdlaHIdlg8XNaeIdCa8UNaeId3Mg8Ua8UMMa8XNaeIdba8WNaeIdxa8XNaeIdKMg8Ua8UMMa8WNaeId8KMMM:lNg8Ua87a87a8U9DEh87kaLa9rfhLaXcefgXal9hmbkcbhHa8EheindnaeydbgOcuSmbdnaHaDaOcdtgAfydbgO9hmbcuhOa8EaAfydbgAcuSmbaDaAcdtfydbhOkaeaOBdbkaeclfhealaHcefgH9hmbkcbhHa8FheindnaeydbgOcuSmbdnaHaDaOcdtgAfydbgO9hmbcuhOa8FaAfydbgAcuSmbaDaAcdtfydbhOkaeaOBdbkaeclfhealaHcefgH9hmbkka87a86a8LEh87cbhHabhecbhOindnaCaDaeydbcdtfydbgLcdtfydbgAaCaDaeclfydbcdtfydbgKcdtfydbgQSmbaAaCaDaecwfydbcdtfydbg8KcdtfydbgXSmbaQaXSmbabaHcdtfgAaLBdbaAcwfa8KBdbaAclfaKBdbaHcifhHkaecxfheaOcifgOad6mbkdndna9imbaHhdxekdnaHak0mbaHhdxekdna85a879FmbaHhdxekJFFuuh85cbhdabhecbhOindna9ka0aeydbgAcdtfydbcdtfIdbg8Ua879ETmbaeclf8Pdbh9CabadcdtfgQaABdbaQclfa9C83dba8Ua85a85a8U9EEh85adcifhdkaecxfheaOcifgOaH6mbkkadak0mbxdkkascNefabadalaCz:cjjjbkdndnadak0mbadhOxekdna9imbadhOxekdna85a889FmbadhOxekcehLina85Jbb;aZNg8Ua88a8Ua889DEh8XJbbbbh8Udna6Tmba9khea6hHinaeIdbg8Wa8Ua8Wa8X9FEa8Ua8Wa8U9EEh8UaeclfheaHcufgHmbkkJFFuuh85cbhOabhecbhHindna9ka0aeydbgAcdtfydbcdtfIdbg8Wa8X9ETmbaeclf8Pdbh9CabaOcdtfgQaABdbaQclfa9C83dba8Wa85a85a8W9EEh85aOcifhOkaecxfheaHcifgHad6mbkdnaLaOad9hVceGmbadhOxdka8Ua86a86a8U9DEh86aOak9nmecbhLaOhda85a889FmbkkdnamcjjjjdGTmba9pcbalz:rjjjbhLdnaOTmbabheaOhHinaLaeydbgAfa5aAfRbbcl9h86bbaeclfheaHcufgHmbkkascNefabaOalaCz:cjjjbalTmbcbhQasyd:yehgindnaLaQfRbbTmbdna5aQfRbbgecl0mbceaetcQGmekdnaCaQcdtgKfydbgeaQSmbaaaQcx2fgHaaaecx2fge8Pdb83dbaHcwfaecwfydbBdbxekayaQc8S2fgeIdyg8Ua8UJL:3;rUNg8UMh88aeIdwa8UMhRaeIdla8UMh8VaeIdba8UMhUaeIdaa8UaaaQcx2fg8KIdwg89N:th81aeId3a8Ua8KIdlg8:N:th85aeIdKa8KIdbgZa8UN:th8YJbbbbhcaeIdCJbbbbMh87aeIdzJbbbbMhBaeIdxJbbbbMh83dndna8LTmbaQhAinJbbbba88a8NaAc8S2fgHIdyg8U:va8UJbbbb9BEh8UaqaAa8L2cltfheaHIdaa88Na81Mh81aHId3a88Na85Mh85aHIdKa88Na8YMh8YaHIdCa88Na87Mh87aHIdza88NaBMhBaHIdxa88Na83Mh83aHIdwa88NaRMhRaHIdla88Na8VMh8VaHIdba88NaUMhUa8LhHina81aecxfIdbg8ZaecwfIdbg8WNa8UN:th81a85a8ZaeclfIdbg8XNa8UN:th85a87a8Wa8XNa8UN:th87aUaeIdbg80a80Na8UN:thUa8Ya8Za80Na8UN:th8YaBa8Wa80Na8UN:thBa83a8Xa80Na8UN:th83aRa8Wa8WNa8UN:thRa8Va8Xa8XNa8UN:th8VaeczfheaHcufgHmbkaYaAcdtfydbgAaQ9hmbkaITmbaIaQcltfgeIdxhTaeIdwh9caeIdlhJaeIdbh8UxekJbbbbhTJbbbbh9cJbbbbhJJbbbbh8UkaBaU:vg8Xa8YNa81:ta87aBa83aU:vg8WN:tg81a8Va83a8WN:tg8Z:vg80a8Wa8YNa85:tg8VN:th85a9ca8Ua8XN:taJa8Ua8WN:tg83a80N:tg87aRaBa8XN:ta81a80N:tgB:vgR:mh81a83a8Z:vg9c:mhJdnJbbbba8Ua8UaU:vg9eN:ta83a9cN:ta87aRN:tg83:la88J:983:g81Ng8U9ETmba81a85NaJa8VNa9ea8YNaT:tMMa83:vhckaU:la8U9ETmba8Z:la8U9ETmbaB:la8U9ETmba9e:macNa8X:ma81acNa85aB:vMg85Na8W:maJacNa80:ma85Na8Va8Z:vMMg87Na8Y:maU:vMMMh88a9maKfgeclfydbgHaeydbge9RhXagaecitfhKJbbbbh8UdnaHaeSghmbJbbbbh8UaKheaXhAinaaaeclfydbcx2fgHIdwa89:tg8Wa8WNaHIdbaZ:tg8Wa8WNaHIdla8::tg8Wa8WNMMg8Waaaeydbcx2fgHIdwa89:tg8Xa8XNaHIdbaZ:tg8Xa8XNaHIdla8::tg8Xa8XNMMg8Xa8Ua8Ua8X9DEg8Ua8Ua8W9DEh8UaecwfheaAcufgAmbkka85a89:tg8Wa8WNa88aZ:tg8Wa8WNa87a8::tg8Wa8WNMMa8U:rg8Ua8UN9EmbdnahmbcbhAcehhdninaaaKclfydbcx2fgeIdbaaaKydbcx2fgHIdbg8X:tg8Ua8:aHIdlg80:tg8YNaZa8X:tgBaeIdla80:tg8WN:tg8Za8Ua87a80:tg83Na88a8X:tgRa8WN:tg80Na8Wa89aHIdwgU:tg8VNa8YaeIdwaU:tg8XN:tg8Ya8Wa85aU:tg81Na83a8XN:tg8WNa8XaBNa8Va8UN:tgUa8XaRNa81a8UN:tg8UNMMa8Za8ZNa8Ya8YNaUaUNMMa80a80Na8Wa8WNa8Ua8UNMMN:rJbbj8:N9FmeaKcwfhKaAcefgAaX6hhaXaA9hmbkkahceGmeka8Ka85Udwa8Ka87Udla8Ka88UdbkaQcefgQal9hmbkdndna8LTmba8LclthYa8Lcdth8KcbhKa8ShXindnaLaKfRbbTmba5aKfRbbclSmbJbbbbJbbjZa8NaKc8S2fIdyg8U:va8UJbbbb9BEh8UaaaCaKcdtfydbcx2fhHaqheaXhAa8LhQinaAa8UaecwfIdbaHIdwNaeIdbaHIdbNaeclfIdbaHIdlNMMaecxfIdbMNUdbaeczfheaAclfhAaQcufgQmbkkaqaYfhqaXa8KfhXaKcefgKal9hmbkarcd4hXavcd4hYasId:qeh8UasId:meh8WasId1eh8XazTmea8Lcdth8KcbhKindnaLaKfRbbTmbaiazaKcdtfydbgCaY2cdtfgeaaaKcx2fgHIdba8RNa8XMUdbaeaHIdla8RNa8WMUdlaeaHIdwa8RNa8UMUdwaoaCaX2cdtfhQashea8ShHa8LhCinaQaeydbcdtgAfaHIdbawaAfIdb:vUdbaeclfheaHclfhHaCcufgCmbkka8Sa8Kfh8SaKcefgKal9hmbxikkavcd4hCasId:qeh8UasId:meh8WasId1eh8XdnazTmbazheindna9pRbbTmbaiaeydbaC2cdtfgHaaIdba8RNa8XMUdbaHaaclfIdba8RNa8WMUdlaHaacwfIdba8RNa8UMUdwka9pcefh9paeclfheaacxfhaalcufglmbxikkaCcdtheindna9pRbbTmbaiaaIdba8RNa8XMUdbaiclfaaclfIdba8RNa8WMUdbaicwfaacwfIdba8RNa8UMUdbka9pcefh9paacxfhaaiaefhialcufglmbxdkka8Lcdth8KcbhKindnaLaKfRbbTmbaiaKaY2cdtfgeaaaKcx2fgHIdba8RNa8XMUdbaeaHIdla8RNa8WMUdlaeaHIdwa8RNa8UMUdwaoaKaX2cdtfhQashea8ShHa8LhCinaQaeydbcdtgAfaHIdbawaAfIdb:vUdbaeclfheaHclfhHaCcufgCmbkka8Sa8Kfh8SaKcefgKal9hmbkkdnamcjjjjlGTmbazmbaOTmbcbhLabheina5aeydbgAfRbbc3thKaecwfgXydbhHdndna8EaAcdtg8KfydbaeclfgYydbgCSmbcbhQa8FaCcdtfydbaA9hmekcjjjj94hQkaeaKaQVaAVBdba5aCfRbbc3thKdndna8EaCcdtfydbaHSmbcbhQa8FaHcdtfydbaC9hmekcjjjj94hQkaYaKaQVaCVBdba5aHfRbbc3thQdndna8EaHcdtfydbaASmbcbhCa8Fa8KfydbaH9hmekcjjjj94hCkaXaQaCVaHVBdbaecxfheaLcifgLaO6mbkkdnazTmbaOTmbaOheinabazabydbcdtfydbBdbabclfhbaecufgembkkdnaPTmbaPana86:rNUdbkasyd;8egecdtasc:Ceffc98fhHdninaeTmeaHydbcbyd:m:jjjbH:bjjjbbaHc98fhHaecufhexbkkascj;sbf8KjjjjbaOk;Yieouabydlhvabydbclfcbaicdtz:rjjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfhearcufgrmbkkabydbcbBdbk:todDue99aicd4aifhrcehwinawgDcethwaDar6mbkcuaDcdtgraDcFFFFi0Ecbyd1:jjjbHjjjjbbhwaoaoyd9GgqcefBd9GaoaqcdtfawBdbawcFearz:rjjjbhkdnaiTmbalcd4hlaDcufhxcbhminamhDdnavTmbavamcdtfydbhDkcbadaDal2cdtfgDydlgwawcjjjj94SEgwcH4aw7c:F:b:DD2cbaDydbgwawcjjjj94SEgwcH4aw7c;D;O:B8J27cbaDydwgDaDcjjjj94SEgDcH4aD7c:3F;N8N27axGhwamcdthPdndndnavTmbakawcdtfgrydbgDcuSmeadavaPfydbal2cdtfgsIdbhzcehqinaqhrdnadavaDcdtfydbal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmlkarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbxdkkakawcdtfgrydbgDcuSmbadamal2cdtfgsIdbhzcehqinaqhrdnadaDal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmikarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbkkaramBdbamhDkabaPfaDBdbamcefgmai9hmbkkakcbyd:m:jjjbH:bjjjbbaoaoyd9GcufBd9GdnaeTmbaiTmbcbhDaehwinawaDBdbawclfhwaiaDcefgD9hmbkcbhDaehwindnaDabydbgrSmbawaearcdtfgrydbBdbaraDBdbkawclfhwabclfhbaiaDcefgD9hmbkkk:hrdvuv998Jjjjjbca9Rgoczfcwfcbyd11jjbBdbaocb8Pdj1jjb83izaocwfcbydN1jjbBdbaocb8Pd:m1jjb83ibdnadTmbaicd4hrdnabmbdnalTmbcbhwinaealawcdtfydbar2cdtfhDcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkawcefgwad9hmbxikkarcdthwcbhDincbhiinaoczfaifgqaeaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkaeawfheaDcefgDad9hmbxdkkdnalTmbcbhwinabawcx2fgiaealawcdtfydbar2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkawcefgwad9hmbxdkkarcdthlcbhwaehDinabawcx2fgiaeawar2cdtfgqIdbUdbaiaqIdlUdlaiaqIdwUdwcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkaDalfhDawcefgwad9hmbkkJbbbbaoIdbaoIdzgx:tgkakJbbbb9DEgkaoIdlaoIdCgm:tgPaPak9DEgkaoIdwaoIdKgP:tgsasak9DEhsdnabTmbadTmbJbbbbJbbjZas:vasJbbbb9BEhkinabakabIdbax:tNUdbabclfgoakaoIdbam:tNUdbabcwfgoakaoIdbaP:tNUdbabcxfhbadcufgdmbkkdnavTmbavaPUdwavamUdlavaxUdbkask:ZlewudnaeTmbcbhvabhoinaoavBdbaoclfhoaeavcefgv9hmbkkdnaiTmbcbhrinadarcdtfhwcbhDinalawaDcdtgvc:G1jjbfydbcdtfydbcdtfydbhodnabalawavfydbcdtfydbgqcdtfgkydbgvaqSmbinakabavgqcdtfgxydbgvBdbaxhkaqav9hmbkkdnabaocdtfgkydbgvaoSmbinakabavgocdtfgxydbgvBdbaxhkaoav9hmbkkdnaqaoSmbabaqaoaqao0Ecdtfaqaoaqao6EBdbkaDcefgDci9hmbkarcifgrai6mbkkdnaembcbskcbhxindnalaxcdtgvfydbax9hmbaxhodnabavfgDydbgvaxSmbaDhqinaqabavgocdtfgkydbgvBdbakhqaoav9hmbkkaDaoBdbkaxcefgxae9hmbkcbhvabhocbhkindndnavalydbgq9hmbdnavaoydbgq9hmbaoakBdbakcefhkxdkaoabaqcdtfydbBdbxekaoabaqcdtfydbBdbkaoclfhoalclfhlaeavcefgv9hmbkakk;Jiilud99duabcbaecltz:rjjjbhvdnalTmbadhoaihralhwinarcwfIdbhDarclfIdbhqavaoydbcltfgkarIdbakIdbMUdbakclfgxaqaxIdbMUdbakcwfgxaDaxIdbMUdbakcxfgkakIdbJbbjZMUdbaoclfhoarcxfhrawcufgwmbkkdnaeTmbavhraehkinarcxfgoIdbhDaocbBdbararIdbJbbbbJbbjZaD:vaDJbbbb9BEgDNUdbarclfgoaDaoIdbNUdbarcwfgoaDaoIdbNUdbarczfhrakcufgkmbkkdnalTmbinavadydbcltfgrcxfgkaicwfIdbarcwfIdb:tgDaDNaiIdbarIdb:tgDaDNaiclfIdbarclfIdb:tgDaDNMMgDakIdbgqaqaD9DEUdbadclfhdaicxfhialcufglmbkkdnaeTmbavcxfhrinabarIdbUdbarczfhrabclfhbaecufgembkkk8MbabaeadaialavcbcbcbcbcbaoarawaDz:bjjjbk8MbabaeadaialavaoarawaDaqakaxamaPz:bjjjbkRbababaeadaialavaoarawaDaqakaxcjjjjdVamz:bjjjbk:p8Koque99due99iuq998Jjjjjbc;Wb9Rgq8Kjjjjbcbhkaqcxfcbc;Kbz:rjjjb8Aaqcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbgxBdxaqceBd2axaialavcbcbz:ejjjb8AaqcualcdtalcFFFFi0Egmcbyd1:jjjbHjjjjbbgiBdzaqcdBd2dndnJFF959eJbbjZawJbbjZawJbbjZ9DE:vawJ9VO:d869DEgw:lJbbb9p9DTmbaw:OhPxekcjjjj94hPkadci9Uhsarco9UhzdndnaombaPcd9imekdnalTmbaPcuf:YhwdnaoTmbcbhvaihHaxhOindndnaoavfRbbceGTmbavcjjjjlVhAxekdndnaOclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcqthAdndnaOcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXVhAdndnaOIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXcCtVhAkaHaABdbaHclfhHaOcxfhOalavcefgv9hmbxdkkaxhvaihOalhHindndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcCthAdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqtaAVhAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaOaAaXVBdbavcxfhvaOclfhOaHcufgHmbkkadTmbcbhkaehvcbhOinakaiavclfydbcdtfydbgHaiavcwfydbcdtfydbgA9haiavydbcdtfydbgXaH9haXaA9hGGfhkavcxfhvaOcifgOad6mbkkarci9UhQdndnaz:Z:rJbbbZMgw:lJbbb9p9DTmbaw:Ohvxekcjjjj94hvkaQ:ZhLcbhKc:bwhHdndninashYaHhXaPhrakg8AaQ9pmeaXar9Rcd9imeavaXcufavaX9iEarcefavar9kEhzdnalTmbazcuf:YhwdnaoTmbcbhOaihPaxhvindndnaoaOfRbbceGTmbaOcjjjjlVhHxekdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhHxekcjjjj94hHkaHcqthHdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohsxekcjjjj94hskaHasVhHdndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohsxekcjjjj94hskaHascCtVhHkaPaHBdbaPclfhPavcxfhvalaOcefgO9hmbxdkkaxhvaihOalhPindndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhHxekcjjjj94hHkaHcCthHdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohsxekcjjjj94hskascqtaHVhHdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohsxekcjjjj94hskaOaHasVBdbavcxfhvaOclfhOaPcufgPmbkkcbhOdnadTmbaehvcbhPinaOaiavclfydbcdtfydbgHaiavcwfydbcdtfydbgs9haiavydbcdtfydbgAaH9haAas9hGGfhOavcxfhvaPcifgPad6mbkkaYhsaOhkaXhHazhPdnaOaQ9nmbaOhsa8AhkazhHarhPkdndnaKcl0mbdnaY:Zgwa8A:ZgC:taz:YgEar:Y:tg3aEaX:Y:tg5aO:Zg8EaL:tNNNawaL:ta5NaCa8E:tNaCaL:ta3Na8Eaw:tNM:vaEMJbbbZMgw:lJbbb9p9DTmbaw:Ohvxdkcjjjj94hvxekaPaHfcd9ThvkaKcefgKcs9hmbxdkka8AhkarhPkdndndnakmbJbbjZhwcbhicdhvaDmexdkalcd4alfhHcehOinaOgvcethOavaH6mbkcbhOaqcuavcdtgravcFFFFi0Ecbyd1:jjjbHjjjjbbgzBdCaqciBd2aqamcbyd1:jjjbHjjjjbbgXBdKaqclBd2dndndndnalTmbaPcuf:YhwaoTmecbhOaihHaxhPindndnaoaOfRbbceGTmbaOcjjjjlVhsxekdndnaPclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohsxekcjjjj94hskascqthsdndnaPcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkasaAVhsdndnaPIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkasaAcCtVhskaHasBdbaHclfhHaPcxfhPalaOcefgO9hmbxikkazcFearz:rjjjb8AcbhrcbhvxdkaxhOaihPalhHindndnaOIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohsxekcjjjj94hskascCthsdndnaOclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcqtasVhsdndnaOcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaPasaAVBdbaOcxfhOaPclfhPaHcufgHmbkkazcFearz:rjjjbhAavcufhocbhrcbhzindndndnaAaiazcdtgKfydbgHcm4aH7c:v;t;h;Ev2gvcs4av7aoGgPcdtfgsydbgOcuSmbcehvinaiaOcdtgOfydbaHSmdaPavfhOavcefhvaAaOaoGgPcdtfgsydbgOcu9hmbkkasazBdbarhvarcefhrxekaXaOfydbhvkaXaKfavBdbazcefgzal9hmbkcuarc8S2gOarc;D;O;f8U0EhvkcbhAaqavcbyd1:jjjbHjjjjbbgvBd3aqcvBd2avcbaOz:rjjjbhOdnadTmbaehiinJbbnnJbbjZaXaiydbgHcdtfydbgvaXaiclfydbgPcdtfydbgzSavaXaicwfydbgscdtfydbgKSGgoEh8FdnaxaPcx2fgPIdbaxaHcx2fgHIdbg8E:tgCaxascx2fgsIdlaHIdlg3:tgwNasIdba8E:tgEaPIdla3:tgaN:tgLaLNaaasIdwaHIdwg5:tghNawaPIdwa5:tgaN:tgwawNaaaENahaCN:tgCaCNMM:rgEJbbbb9ETmbaLaE:vhLaCaE:vhCawaE:vhwkaOavc8S2fgvavIdbawa8FaE:rNgEawNNgaMUdbavaCaEaCNghNggavIdlMUdlavaLaEaLNg8FNg8JavIdwMUdwavahawNghavIdxMUdxava8FawNg8KavIdzMUdzava8FaCNg8FavIdCMUdCavawaEaLa5Nawa8ENa3aCNMM:mg3Ng8ENgwavIdKMUdKavaCa8ENgCavId3MUd3avaLa8ENgLavIdaMUdaava8Ea3Ng8EavId8KMUd8KavaEavIdyMUdydnaombaOazc8S2fgvaaavIdbMUdbavagavIdlMUdlava8JavIdwMUdwavahavIdxMUdxava8KavIdzMUdzava8FavIdCMUdCavawavIdKMUdKavaCavId3MUd3avaLavIdaMUdaava8EavId8KMUd8KavaEavIdyMUdyaOaKc8S2fgvaaavIdbMUdbavagavIdlMUdlava8JavIdwMUdwavahavIdxMUdxava8KavIdzMUdzava8FavIdCMUdCavawavIdKMUdKavaCavId3MUd3avaLavIdaMUdaava8EavId8KMUd8KavaEavIdyMUdykaicxfhiaAcifgAad6mbkkcbhHaqcuarcdtgvarcFFFFi0Egicbyd1:jjjbHjjjjbbgPBdaaqcoBd2aqaicbyd1:jjjbHjjjjbbgiBd8KaqcrBd2aPcFeavz:rjjjbhzdnalTmbaXhPinJbbbbJbbjZaOaPydbgsc8S2fgvIdygw:vawJbbbb9BEavIdwaxcwfIdbgwNavIdzaxIdbgCNavIdaMgLaLMMawNavIdlaxclfIdbgLNavIdCawNavId3MgwawMMaLNavIdbaCNavIdxaLNavIdKMgwawMMaCNavId8KMMM:lNhwdndnazascdtgvfgsydbcuSmbaiavfIdbaw9ETmekasaHBdbaiavfawUdbkaPclfhPaxcxfhxalaHcefgH9hmbkkJbbbbhwdnarTmbinaiIdbgCawawaC9DEhwaiclfhiarcufgrmbkkakcd4akfhOcehiinaigvcethiavaO6mbkcbhiaqcuavcdtgOavcFFFFi0Ecbyd1:jjjbHjjjjbbgPBdyaPcFeaOz:rjjjbhsdnadTmbavcufhAcbhrcbhxindnaXaeaxcdtfgvydbcdtfydbgiaXavclfydbcdtfydbgOSmbaiaXavcwfydbcdtfydbgvSmbaOavSmbazavcdtfydbhHdndnazaOcdtfydbgvazaicdtfydbgi9pmbavaH9pmbaHhlaihoavhHxekdnaHai9pmbaHav9pmbaihlavhoxekavhlaHhoaihHkabarcx2fgvaHBdbavcwfaoBdbavclfalBdbdnasaoc:3F;N8N2alc:F:b:DD27aHc;D;O:B8J27aAGgOcdtfgvydbgicuSmbcehPinaPhvdnabaicx2fgiydbaH9hmbaiydlal9hmbaiydwaoSmikavcefhPasaOavfaAGgOcdtfgvydbgicu9hmbkkavarBdbarcefhrkaxcifgxad6mbkarci2hikdnaDmbcwhvxdkaw:rhwcwhvkaDawUdbkavcdthvdninavTmeavc98fgvaqcxffydbcbyd:m:jjjbH:bjjjbbxbkkaqc;Wbf8Kjjjjbaik:2ldwue9:8Jjjjjbc;Wb9Rgr8Kjjjjbcbhwarcxfcbc;Kbz:rjjjb8AdnabaeSmbabaeadcdtz:qjjjb8AkarcualcdtalcFFFFi0EgDcbyd1:jjjbHjjjjbbgqBdxarceBd2aqcbaialavcbarcxfz:djjjbcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbhkarcxfaryd2gxcdtgmfakBdbaraxcefgPBd2akaialavcbcbz:ejjjb8AarcxfaPcdtfaDcbyd1:jjjbHjjjjbbgvBdbaraxcdfgiBd2arcxfaicdtfcuavalaeadaqz:fjjjbgecltaecjjjjiGEcbyd1:jjjbHjjjjbbgiBdbaiaeavakalz:gjjjbdnadTmbaoaoNhocbhwabhlcbhkindnaiavalydbgecdtfydbcdtfIdbao9ETmbalclf8PdbhsabawcdtfgqaeBdbaqclfas83dbawcifhwkalcxfhlakcifgkad6mbkkaxcifhlamarcxffcwfhkdninalTmeakydbcbyd:m:jjjbH:bjjjbbakc98fhkalcufhlxbkkarc;Wbf8Kjjjjbawk:FCoDud99rue99iul998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcxfcbc;Kbz:rjjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbgqBdxawceBd2aqaeadaicbcbz:ejjjb8AawcuadcdtadcFFFFi0Egkcbyd1:jjjbHjjjjbbgxBdzawcdBd2adcd4adfhmceheinaegicetheaiam6mbkcbhPawcuaicdtgsaicFFFFi0Ecbyd1:jjjbHjjjjbbgzBdCawciBd2dndnar:ZgH:rJbbbZMgO:lJbbb9p9DTmbaO:Ohexekcjjjj94hekaicufhAc:bwhmcbhCadhXcbhQinaChLaeamgKcufaeaK9iEaPgDcefaeaD9kEhYdndnadTmbaYcuf:YhOaqhiaxheadhmindndnaiIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcCthCdndnaiclfIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhExekcjjjj94hEkaEcqtaCVhCdndnaicwfIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhExekcjjjj94hEkaeaCaEVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:rjjjbh3cbh5cbhPindna3axaPcdtfydbgCcm4aC7c:v;t;h;Ev2gics4ai7aAGgmcdtfgEydbgecuSmbaeaCSmbcehiina3amaifaAGgmcdtfgEydbgecuSmeaicefhiaeaC9hmbkkaEaCBdba5aecuSfh5aPcefgPad9hmbxdkkazcFeasz:rjjjb8Acbh5kaDaYa5ar0giEhPaLa5aiEhCdna5arSmbaYaKaiEgmaP9Rcd9imbdndnaQcl0mbdnaX:ZgOaL:Zg8A:taY:Yg8EaD:Y:tg8Fa8EaK:Y:tgaa5:ZghaH:tNNNaOaH:taaNa8Aah:tNa8AaH:ta8FNahaO:tNM:va8EMJbbbZMgO:lJbbb9p9DTmbaO:Ohexdkcjjjj94hexekaPamfcd9Theka5aXaiEhXaQcefgQcs9hmekkdndnaCmbcihicbhDxekcbhiawakcbyd1:jjjbHjjjjbbg5BdKawclBd2aPcuf:Yh8AdndnadTmbaqhiaxheadhmindndnaiIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhCxekcjjjj94hCkaCcCthCdndnaiclfIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhExekcjjjj94hEkaEcqtaCVhCdndnaicwfIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhExekcjjjj94hEkaeaCaEVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:rjjjbh3cbhDcbhYindndndna3axaYcdtgKfydbgCcm4aC7c:v;t;h;Ev2gics4ai7aAGgmcdtfgEydbgecuSmbcehiinaxaecdtgefydbaCSmdamaifheaicefhia3aeaAGgmcdtfgEydbgecu9hmbkkaEaYBdbaDhiaDcefhDxeka5aefydbhika5aKfaiBdbaYcefgYad9hmbkcuaDc32giaDc;j:KM;jb0EhexekazcFeasz:rjjjb8AcbhDcbhekawaecbyd1:jjjbHjjjjbbgeBd3awcvBd2aecbaiz:rjjjbhEavcd4hKdnadTmbdnalTmbaKcdth3a5hCaqhealhmadhAinaEaCydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiamIdbaiIdxMUdxaiamclfIdbaiIdzMUdzaiamcwfIdbaiIdCMUdCaiaiIdKJbbjZMUdKaCclfhCaecxfheama3fhmaAcufgAmbxdkka5hmaqheadhCinaEamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaiIdxJbbbbMUdxaiaiIdzJbbbbMUdzaiaiIdCJbbbbMUdCaiaiIdKJbbjZMUdKamclfhmaecxfheaCcufgCmbkkdnaDTmbaEhiaDheinaiaiIdbJbbbbJbbjZaicKfIdbgO:vaOJbbbb9BEgONUdbaiclfgmaOamIdbNUdbaicwfgmaOamIdbNUdbaicxfgmaOamIdbNUdbaiczfgmaOamIdbNUdbaicCfgmaOamIdbNUdbaic3fhiaecufgembkkcbhCawcuaDcdtgYaDcFFFFi0Egicbyd1:jjjbHjjjjbbgeBdaawcoBd2awaicbyd1:jjjbHjjjjbbg3Bd8KaecFeaYz:rjjjbhxdnadTmbJbbjZJbbjZa8A:vaPceSEaoNgOaONh8AaKcdthPalheina8Aaec;81jjbalEgmIdwaEa5ydbgAc32fgiIdC:tgOaONamIdbaiIdx:tgOaONamIdlaiIdz:tgOaONMMNaqcwfIdbaiIdw:tgOaONaqIdbaiIdb:tgOaONaqclfIdbaiIdl:tgOaONMMMhOdndnaxaAcdtgifgmydbcuSmba3aifIdbaO9ETmekamaCBdba3aifaOUdbka5clfh5aqcxfhqaeaPfheadaCcefgC9hmbkkabaxaYz:qjjjb8AcrhikaicdthiinaiTmeaic98fgiawcxffydbcbyd:m:jjjbH:bjjjbbxbkkawc;Wbf8KjjjjbaDk:Ydidui99ducbhi8Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgvaDIdbgoaoav9EEUdbaladfgDavaDIdbgoaoav9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkJbbbbavavJbbbb9DEgvaoaoav9DEgvararav9DEk9DeeuabcFeaicdtz:rjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcifc98GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcrfc94GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:q:jjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:q:jjjbfgdBd:q:jjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akkk:Iedbcjwk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbebbbdbbbbbbbebbbebbbdbbbbbbbbbbbeeeeebebbebbebebbbeebbbbbbbbbbbbeeeeeebebbeeebeebbbbebebbbbbbbbbbbbbbbbbbc1Dkxebbbdbbb:GNbb";
584
+ var wasmpack = new Uint8Array([
585
+ 32,
586
+ 0,
587
+ 65,
588
+ 2,
589
+ 1,
590
+ 106,
591
+ 34,
592
+ 33,
593
+ 3,
594
+ 128,
595
+ 11,
596
+ 4,
597
+ 13,
598
+ 64,
599
+ 6,
600
+ 253,
601
+ 10,
602
+ 7,
603
+ 15,
604
+ 116,
605
+ 127,
606
+ 5,
607
+ 8,
608
+ 12,
609
+ 40,
610
+ 16,
611
+ 19,
612
+ 54,
613
+ 20,
614
+ 9,
615
+ 27,
616
+ 255,
617
+ 113,
618
+ 17,
619
+ 42,
620
+ 67,
621
+ 24,
622
+ 23,
623
+ 146,
624
+ 148,
625
+ 18,
626
+ 14,
627
+ 22,
628
+ 45,
629
+ 70,
630
+ 69,
631
+ 56,
632
+ 114,
633
+ 101,
634
+ 21,
635
+ 25,
636
+ 63,
637
+ 75,
638
+ 136,
639
+ 108,
640
+ 28,
641
+ 118,
642
+ 29,
643
+ 73,
644
+ 115
645
+ ]);
646
+ if (typeof WebAssembly !== "object") {
647
+ return {
648
+ supported: false
649
+ };
650
+ }
651
+ var instance;
652
+ var ready = WebAssembly.instantiate(unpack(wasm), {}).then(function(result) {
653
+ instance = result.instance;
654
+ instance.exports.__wasm_call_ctors();
655
+ });
656
+ function unpack(data) {
657
+ var result = new Uint8Array(data.length);
658
+ for (var i = 0; i < data.length; ++i) {
659
+ var ch = data.charCodeAt(i);
660
+ result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
661
+ }
662
+ var write = 0;
663
+ for (var i = 0; i < data.length; ++i) {
664
+ result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];
665
+ }
666
+ return result.buffer.slice(0, write);
667
+ }
668
+ function assert(cond) {
669
+ if (!cond) {
670
+ throw new Error("Assertion failed");
671
+ }
672
+ }
673
+ function bytes(view) {
674
+ return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
675
+ }
676
+ function reorder(fun, indices, vertices) {
677
+ var sbrk = instance.exports.sbrk;
678
+ var ip = sbrk(indices.length * 4);
679
+ var rp = sbrk(vertices * 4);
680
+ var heap = new Uint8Array(instance.exports.memory.buffer);
681
+ var indices8 = bytes(indices);
682
+ heap.set(indices8, ip);
683
+ var unique = fun(rp, ip, indices.length, vertices);
684
+ heap = new Uint8Array(instance.exports.memory.buffer);
685
+ var remap = new Uint32Array(vertices);
686
+ new Uint8Array(remap.buffer).set(heap.subarray(rp, rp + vertices * 4));
687
+ indices8.set(heap.subarray(ip, ip + indices.length * 4));
688
+ sbrk(ip - sbrk(0));
689
+ for (var i = 0; i < indices.length; ++i) indices[i] = remap[indices[i]];
690
+ return [remap, unique];
691
+ }
692
+ function maxindex(source) {
693
+ var result = 0;
694
+ for (var i = 0; i < source.length; ++i) {
695
+ var index = source[i];
696
+ result = result < index ? index : result;
697
+ }
698
+ return result;
699
+ }
700
+ function simplify(fun, indices, index_count, vertex_positions, vertex_count, vertex_positions_stride, target_index_count, target_error, options) {
701
+ var sbrk = instance.exports.sbrk;
702
+ var te = sbrk(4);
703
+ var ti = sbrk(index_count * 4);
704
+ var sp = sbrk(vertex_count * vertex_positions_stride);
705
+ var si = sbrk(index_count * 4);
706
+ var heap = new Uint8Array(instance.exports.memory.buffer);
707
+ heap.set(bytes(vertex_positions), sp);
708
+ heap.set(bytes(indices), si);
709
+ var result = fun(ti, si, index_count, sp, vertex_count, vertex_positions_stride, target_index_count, target_error, options, te);
710
+ heap = new Uint8Array(instance.exports.memory.buffer);
711
+ var target = new Uint32Array(result);
712
+ bytes(target).set(heap.subarray(ti, ti + result * 4));
713
+ var error = new Float32Array(1);
714
+ bytes(error).set(heap.subarray(te, te + 4));
715
+ sbrk(te - sbrk(0));
716
+ return [target, error[0]];
717
+ }
718
+ function simplifyAttr(fun, indices, index_count, vertex_positions, vertex_count, vertex_positions_stride, vertex_attributes, vertex_attributes_stride, attribute_weights, vertex_lock, target_index_count, target_error, options) {
719
+ var sbrk = instance.exports.sbrk;
720
+ var te = sbrk(4);
721
+ var ti = sbrk(index_count * 4);
722
+ var sp = sbrk(vertex_count * vertex_positions_stride);
723
+ var sa = sbrk(vertex_count * vertex_attributes_stride);
724
+ var sw = sbrk(attribute_weights.length * 4);
725
+ var si = sbrk(index_count * 4);
726
+ var vl = vertex_lock ? sbrk(vertex_count) : 0;
727
+ var heap = new Uint8Array(instance.exports.memory.buffer);
728
+ heap.set(bytes(vertex_positions), sp);
729
+ heap.set(bytes(vertex_attributes), sa);
730
+ heap.set(bytes(attribute_weights), sw);
731
+ heap.set(bytes(indices), si);
732
+ if (vertex_lock) {
733
+ heap.set(bytes(vertex_lock), vl);
734
+ }
735
+ var result = fun(
736
+ ti,
737
+ si,
738
+ index_count,
739
+ sp,
740
+ vertex_count,
741
+ vertex_positions_stride,
742
+ sa,
743
+ vertex_attributes_stride,
744
+ sw,
745
+ attribute_weights.length,
746
+ vl,
747
+ target_index_count,
748
+ target_error,
749
+ options,
750
+ te
751
+ );
752
+ heap = new Uint8Array(instance.exports.memory.buffer);
753
+ var target = new Uint32Array(result);
754
+ bytes(target).set(heap.subarray(ti, ti + result * 4));
755
+ var error = new Float32Array(1);
756
+ bytes(error).set(heap.subarray(te, te + 4));
757
+ sbrk(te - sbrk(0));
758
+ return [target, error[0]];
759
+ }
760
+ function simplifyUpdate(fun, indices, index_count, vertex_positions, vertex_count, vertex_positions_stride, vertex_attributes, vertex_attributes_stride, attribute_weights, vertex_lock, target_index_count, target_error, options) {
761
+ var sbrk = instance.exports.sbrk;
762
+ var te = sbrk(4);
763
+ var sp = sbrk(vertex_count * vertex_positions_stride);
764
+ var sa = sbrk(vertex_count * vertex_attributes_stride);
765
+ var sw = sbrk(attribute_weights.length * 4);
766
+ var si = sbrk(index_count * 4);
767
+ var vl = vertex_lock ? sbrk(vertex_count) : 0;
768
+ var heap = new Uint8Array(instance.exports.memory.buffer);
769
+ heap.set(bytes(vertex_positions), sp);
770
+ heap.set(bytes(vertex_attributes), sa);
771
+ heap.set(bytes(attribute_weights), sw);
772
+ heap.set(bytes(indices), si);
773
+ if (vertex_lock) {
774
+ heap.set(bytes(vertex_lock), vl);
775
+ }
776
+ var result = fun(
777
+ si,
778
+ index_count,
779
+ sp,
780
+ vertex_count,
781
+ vertex_positions_stride,
782
+ sa,
783
+ vertex_attributes_stride,
784
+ sw,
785
+ attribute_weights.length,
786
+ vl,
787
+ target_index_count,
788
+ target_error,
789
+ options,
790
+ te
791
+ );
792
+ heap = new Uint8Array(instance.exports.memory.buffer);
793
+ bytes(indices).set(heap.subarray(si, si + result * 4));
794
+ bytes(vertex_positions).set(heap.subarray(sp, sp + vertex_count * vertex_positions_stride));
795
+ bytes(vertex_attributes).set(heap.subarray(sa, sa + vertex_count * vertex_attributes_stride));
796
+ var error = new Float32Array(1);
797
+ bytes(error).set(heap.subarray(te, te + 4));
798
+ sbrk(te - sbrk(0));
799
+ return [result, error[0]];
800
+ }
801
+ function simplifyScale(fun, vertex_positions, vertex_count, vertex_positions_stride) {
802
+ var sbrk = instance.exports.sbrk;
803
+ var sp = sbrk(vertex_count * vertex_positions_stride);
804
+ var heap = new Uint8Array(instance.exports.memory.buffer);
805
+ heap.set(bytes(vertex_positions), sp);
806
+ var result = fun(sp, vertex_count, vertex_positions_stride);
807
+ sbrk(sp - sbrk(0));
808
+ return result;
809
+ }
810
+ function simplifyPoints(fun, vertex_positions, vertex_count, vertex_positions_stride, vertex_colors, vertex_colors_stride, color_weight, target_vertex_count) {
811
+ var sbrk = instance.exports.sbrk;
812
+ var ti = sbrk(target_vertex_count * 4);
813
+ var sp = sbrk(vertex_count * vertex_positions_stride);
814
+ var sc = sbrk(vertex_count * vertex_colors_stride);
815
+ var heap = new Uint8Array(instance.exports.memory.buffer);
816
+ heap.set(bytes(vertex_positions), sp);
817
+ if (vertex_colors) {
818
+ heap.set(bytes(vertex_colors), sc);
819
+ }
820
+ var result = fun(ti, sp, vertex_count, vertex_positions_stride, sc, vertex_colors_stride, color_weight, target_vertex_count);
821
+ heap = new Uint8Array(instance.exports.memory.buffer);
822
+ var target = new Uint32Array(result);
823
+ bytes(target).set(heap.subarray(ti, ti + result * 4));
824
+ sbrk(ti - sbrk(0));
825
+ return target;
826
+ }
827
+ function simplifySloppy(fun, indices, index_count, vertex_positions, vertex_count, vertex_positions_stride, vertex_lock, target_index_count, target_error) {
828
+ var sbrk = instance.exports.sbrk;
829
+ var te = sbrk(4);
830
+ var ti = sbrk(index_count * 4);
831
+ var sp = sbrk(vertex_count * vertex_positions_stride);
832
+ var si = sbrk(index_count * 4);
833
+ var vl = vertex_lock ? sbrk(vertex_count) : 0;
834
+ var heap = new Uint8Array(instance.exports.memory.buffer);
835
+ heap.set(bytes(vertex_positions), sp);
836
+ heap.set(bytes(indices), si);
837
+ if (vertex_lock) {
838
+ heap.set(bytes(vertex_lock), vl);
839
+ }
840
+ var result = fun(ti, si, index_count, sp, vertex_count, vertex_positions_stride, vl, target_index_count, target_error, te);
841
+ heap = new Uint8Array(instance.exports.memory.buffer);
842
+ var target = new Uint32Array(result);
843
+ bytes(target).set(heap.subarray(ti, ti + result * 4));
844
+ var error = new Float32Array(1);
845
+ bytes(error).set(heap.subarray(te, te + 4));
846
+ sbrk(te - sbrk(0));
847
+ return [target, error[0]];
848
+ }
849
+ function simplifyPrune(fun, indices, index_count, vertex_positions, vertex_count, vertex_positions_stride, target_error) {
850
+ var sbrk = instance.exports.sbrk;
851
+ var ti = sbrk(index_count * 4);
852
+ var sp = sbrk(vertex_count * vertex_positions_stride);
853
+ var si = sbrk(index_count * 4);
854
+ var heap = new Uint8Array(instance.exports.memory.buffer);
855
+ heap.set(bytes(vertex_positions), sp);
856
+ heap.set(bytes(indices), si);
857
+ var result = fun(ti, si, index_count, sp, vertex_count, vertex_positions_stride, target_error);
858
+ heap = new Uint8Array(instance.exports.memory.buffer);
859
+ var target = new Uint32Array(result);
860
+ bytes(target).set(heap.subarray(ti, ti + result * 4));
861
+ sbrk(ti - sbrk(0));
862
+ return target;
863
+ }
864
+ var simplifyOptions = {
865
+ LockBorder: 1,
866
+ Sparse: 2,
867
+ ErrorAbsolute: 4,
868
+ Prune: 8,
869
+ Regularize: 16,
870
+ Permissive: 32,
871
+ _InternalDebug: 1 << 30
872
+ // internal, don't use!
873
+ };
874
+ return {
875
+ ready,
876
+ supported: true,
877
+ compactMesh: function(indices) {
878
+ assert(
879
+ indices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array
880
+ );
881
+ assert(indices.length % 3 == 0);
882
+ var indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);
883
+ return reorder(instance.exports.meshopt_optimizeVertexFetchRemap, indices32, maxindex(indices) + 1);
884
+ },
885
+ simplify: function(indices, vertex_positions, vertex_positions_stride, target_index_count, target_error, flags) {
886
+ assert(
887
+ indices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array
888
+ );
889
+ assert(indices.length % 3 == 0);
890
+ assert(vertex_positions instanceof Float32Array);
891
+ assert(vertex_positions.length % vertex_positions_stride == 0);
892
+ assert(vertex_positions_stride >= 3);
893
+ assert(target_index_count >= 0 && target_index_count <= indices.length);
894
+ assert(target_index_count % 3 == 0);
895
+ assert(target_error >= 0);
896
+ var options = 0;
897
+ for (var i = 0; i < (flags ? flags.length : 0); ++i) {
898
+ assert(flags[i] in simplifyOptions);
899
+ options |= simplifyOptions[flags[i]];
900
+ }
901
+ var indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);
902
+ var result = simplify(
903
+ instance.exports.meshopt_simplify,
904
+ indices32,
905
+ indices.length,
906
+ vertex_positions,
907
+ vertex_positions.length / vertex_positions_stride,
908
+ vertex_positions_stride * 4,
909
+ target_index_count,
910
+ target_error,
911
+ options
912
+ );
913
+ result[0] = indices instanceof Uint32Array ? result[0] : new indices.constructor(result[0]);
914
+ return result;
915
+ },
916
+ simplifyWithAttributes: function(indices, vertex_positions, vertex_positions_stride, vertex_attributes, vertex_attributes_stride, attribute_weights, vertex_lock, target_index_count, target_error, flags) {
917
+ assert(
918
+ indices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array
919
+ );
920
+ assert(indices.length % 3 == 0);
921
+ assert(vertex_positions instanceof Float32Array);
922
+ assert(vertex_positions.length % vertex_positions_stride == 0);
923
+ assert(vertex_positions_stride >= 3);
924
+ assert(vertex_attributes instanceof Float32Array);
925
+ assert(vertex_attributes.length == vertex_attributes_stride * (vertex_positions.length / vertex_positions_stride));
926
+ assert(vertex_attributes_stride >= 0);
927
+ assert(vertex_lock == null || vertex_lock instanceof Uint8Array);
928
+ assert(vertex_lock == null || vertex_lock.length == vertex_positions.length / vertex_positions_stride);
929
+ assert(target_index_count >= 0 && target_index_count <= indices.length);
930
+ assert(target_index_count % 3 == 0);
931
+ assert(target_error >= 0);
932
+ assert(Array.isArray(attribute_weights));
933
+ assert(vertex_attributes_stride >= attribute_weights.length);
934
+ assert(attribute_weights.length <= 32);
935
+ for (var i = 0; i < attribute_weights.length; ++i) {
936
+ assert(attribute_weights[i] >= 0);
937
+ }
938
+ var options = 0;
939
+ for (var i = 0; i < (flags ? flags.length : 0); ++i) {
940
+ assert(flags[i] in simplifyOptions);
941
+ options |= simplifyOptions[flags[i]];
942
+ }
943
+ var indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);
944
+ var result = simplifyAttr(
945
+ instance.exports.meshopt_simplifyWithAttributes,
946
+ indices32,
947
+ indices.length,
948
+ vertex_positions,
949
+ vertex_positions.length / vertex_positions_stride,
950
+ vertex_positions_stride * 4,
951
+ vertex_attributes,
952
+ vertex_attributes_stride * 4,
953
+ new Float32Array(attribute_weights),
954
+ vertex_lock,
955
+ target_index_count,
956
+ target_error,
957
+ options
958
+ );
959
+ result[0] = indices instanceof Uint32Array ? result[0] : new indices.constructor(result[0]);
960
+ return result;
961
+ },
962
+ simplifyWithUpdate: function(indices, vertex_positions, vertex_positions_stride, vertex_attributes, vertex_attributes_stride, attribute_weights, vertex_lock, target_index_count, target_error, flags) {
963
+ assert(
964
+ indices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array
965
+ );
966
+ assert(indices.length % 3 == 0);
967
+ assert(vertex_positions instanceof Float32Array);
968
+ assert(vertex_positions.length % vertex_positions_stride == 0);
969
+ assert(vertex_positions_stride >= 3);
970
+ assert(vertex_attributes instanceof Float32Array);
971
+ assert(vertex_attributes.length == vertex_attributes_stride * (vertex_positions.length / vertex_positions_stride));
972
+ assert(vertex_attributes_stride >= 0);
973
+ assert(vertex_lock == null || vertex_lock instanceof Uint8Array);
974
+ assert(vertex_lock == null || vertex_lock.length == vertex_positions.length / vertex_positions_stride);
975
+ assert(target_index_count >= 0 && target_index_count <= indices.length);
976
+ assert(target_index_count % 3 == 0);
977
+ assert(target_error >= 0);
978
+ assert(Array.isArray(attribute_weights));
979
+ assert(vertex_attributes_stride >= attribute_weights.length);
980
+ assert(attribute_weights.length <= 32);
981
+ for (var i = 0; i < attribute_weights.length; ++i) {
982
+ assert(attribute_weights[i] >= 0);
983
+ }
984
+ var options = 0;
985
+ for (var i = 0; i < (flags ? flags.length : 0); ++i) {
986
+ assert(flags[i] in simplifyOptions);
987
+ options |= simplifyOptions[flags[i]];
988
+ }
989
+ var indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);
990
+ var result = simplifyUpdate(
991
+ instance.exports.meshopt_simplifyWithUpdate,
992
+ indices32,
993
+ indices.length,
994
+ vertex_positions,
995
+ vertex_positions.length / vertex_positions_stride,
996
+ vertex_positions_stride * 4,
997
+ vertex_attributes,
998
+ vertex_attributes_stride * 4,
999
+ new Float32Array(attribute_weights),
1000
+ vertex_lock,
1001
+ target_index_count,
1002
+ target_error,
1003
+ options
1004
+ );
1005
+ if (indices !== indices32) {
1006
+ for (var i = 0; i < result[0]; ++i) {
1007
+ indices[i] = indices32[i];
1008
+ }
1009
+ }
1010
+ return result;
1011
+ },
1012
+ getScale: function(vertex_positions, vertex_positions_stride) {
1013
+ assert(vertex_positions instanceof Float32Array);
1014
+ assert(vertex_positions.length % vertex_positions_stride == 0);
1015
+ assert(vertex_positions_stride >= 3);
1016
+ return simplifyScale(
1017
+ instance.exports.meshopt_simplifyScale,
1018
+ vertex_positions,
1019
+ vertex_positions.length / vertex_positions_stride,
1020
+ vertex_positions_stride * 4
1021
+ );
1022
+ },
1023
+ simplifyPoints: function(vertex_positions, vertex_positions_stride, target_vertex_count, vertex_colors, vertex_colors_stride, color_weight) {
1024
+ assert(vertex_positions instanceof Float32Array);
1025
+ assert(vertex_positions.length % vertex_positions_stride == 0);
1026
+ assert(vertex_positions_stride >= 3);
1027
+ assert(target_vertex_count >= 0 && target_vertex_count <= vertex_positions.length / vertex_positions_stride);
1028
+ if (vertex_colors) {
1029
+ assert(vertex_colors instanceof Float32Array);
1030
+ assert(vertex_colors.length % vertex_colors_stride == 0);
1031
+ assert(vertex_colors_stride >= 3);
1032
+ assert(vertex_positions.length / vertex_positions_stride == vertex_colors.length / vertex_colors_stride);
1033
+ return simplifyPoints(
1034
+ instance.exports.meshopt_simplifyPoints,
1035
+ vertex_positions,
1036
+ vertex_positions.length / vertex_positions_stride,
1037
+ vertex_positions_stride * 4,
1038
+ vertex_colors,
1039
+ vertex_colors_stride * 4,
1040
+ color_weight,
1041
+ target_vertex_count
1042
+ );
1043
+ } else {
1044
+ return simplifyPoints(
1045
+ instance.exports.meshopt_simplifyPoints,
1046
+ vertex_positions,
1047
+ vertex_positions.length / vertex_positions_stride,
1048
+ vertex_positions_stride * 4,
1049
+ void 0,
1050
+ 0,
1051
+ 0,
1052
+ target_vertex_count
1053
+ );
1054
+ }
1055
+ },
1056
+ simplifySloppy: function(indices, vertex_positions, vertex_positions_stride, vertex_lock, target_index_count, target_error) {
1057
+ assert(
1058
+ indices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array
1059
+ );
1060
+ assert(indices.length % 3 == 0);
1061
+ assert(vertex_positions instanceof Float32Array);
1062
+ assert(vertex_positions.length % vertex_positions_stride == 0);
1063
+ assert(vertex_positions_stride >= 3);
1064
+ assert(vertex_lock == null || vertex_lock instanceof Uint8Array);
1065
+ assert(vertex_lock == null || vertex_lock.length == vertex_positions.length / vertex_positions_stride);
1066
+ assert(target_index_count >= 0 && target_index_count <= indices.length);
1067
+ assert(target_index_count % 3 == 0);
1068
+ assert(target_error >= 0);
1069
+ var indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);
1070
+ var result = simplifySloppy(
1071
+ instance.exports.meshopt_simplifySloppy,
1072
+ indices32,
1073
+ indices.length,
1074
+ vertex_positions,
1075
+ vertex_positions.length / vertex_positions_stride,
1076
+ vertex_positions_stride * 4,
1077
+ vertex_lock,
1078
+ target_index_count,
1079
+ target_error
1080
+ );
1081
+ result[0] = indices instanceof Uint32Array ? result[0] : new indices.constructor(result[0]);
1082
+ return result;
1083
+ },
1084
+ simplifyPrune: function(indices, vertex_positions, vertex_positions_stride, target_error) {
1085
+ assert(
1086
+ indices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array
1087
+ );
1088
+ assert(indices.length % 3 == 0);
1089
+ assert(vertex_positions instanceof Float32Array);
1090
+ assert(vertex_positions.length % vertex_positions_stride == 0);
1091
+ assert(vertex_positions_stride >= 3);
1092
+ assert(target_error >= 0);
1093
+ var indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);
1094
+ var result = simplifyPrune(
1095
+ instance.exports.meshopt_simplifyPrune,
1096
+ indices32,
1097
+ indices.length,
1098
+ vertex_positions,
1099
+ vertex_positions.length / vertex_positions_stride,
1100
+ vertex_positions_stride * 4,
1101
+ target_error
1102
+ );
1103
+ result = indices instanceof Uint32Array ? result : new indices.constructor(result);
1104
+ return result;
1105
+ }
1106
+ };
1107
+ })();
1108
+
1109
+ // node_modules/meshoptimizer/meshopt_clusterizer.module.js
1110
+ var MeshoptClusterizer = (function() {
1111
+ var wasm = "b9H79TebbbeVx9Geueu9Geub9Gbb9Giuuueu9Gmuuuuuuuuuuu9999eu9Gvuuuuueu9Gwuuuuuuuub9Gxuuuuuuuuuuuueu9Gkuuuuuuuuuu99eu9Gouuuuuub9Gruuuuuuub9GluuuubiAOdilvorwDqqDkbiibeilve9Weiiviebeoweuec;G:Odkr;qeDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9I919P29K9nW79O2Wt79c9V919U9KbeX9TW79O9V9Wt9F9I919P29K9nW79O2Wt7bo39TW79O9V9Wt9F9J9V9T9W91tWJ2917tWV9c9V919U9K7br39TW79O9V9Wt9F9J9V9T9W91tW9nW79O2Wt9c9V919U9K7bDE9TW79O9V9Wt9F9J9V9T9W91tW9t9W9OWVW9c9V919U9K7bqL9TW79O9V9Wt9F9V9Wt9P9T9P96W9nW79O2Wtbkl79IV9RbxDwebcekdszq:x9DOdbkIbabaec9:fgefcufae9Ugeabci9Uadfcufad9Ugbaeab0Ek:w8KDPue99eux99dui99euo99iu8Jjjjjbc:WD9Rgm8KjjjjbdndnalmbcbhPxekamc:Cwfcbc;Kbz:ojjjb8Adndnalcb9imbaoal9nmbamcuaocdtaocFFFFi0Egscbyd;u1jjbHjjjjbbgzBd:CwamceBd;8wamascbyd;u1jjbHjjjjbbgHBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;u1jjbHjjjjbbgOBd:KwamciBd;8waihsalhAinazasydbcdtfcbBdbasclfhsaAcufgAmbkaihsalhAinazasydbcdtfgCaCydbcefBdbasclfhsaAcufgAmbkaihsalhCcbhXindnazasydbcdtgQfgAydbcb9imbaHaQfaXBdbaAaAydbgQcjjjj94VBdbaQaXfhXkasclfhsaCcufgCmbkalci9UhLdnalci6mbcbhsaihAinaAcwfydbhCaAclfydbhXaHaAydbcdtfgQaQydbgQcefBdbaOaQcdtfasBdbaHaXcdtfgXaXydbgXcefBdbaOaXcdtfasBdbaHaCcdtfgCaCydbgCcefBdbaOaCcdtfasBdbaAcxfhAaLascefgs9hmbkkaihsalhAindnazasydbcdtgCfgXydbgQcu9kmbaXaQcFFFFrGgQBdbaHaCfgCaCydbaQ9RBdbkasclfhsaAcufgAmbxdkkamcuaocdtgsaocFFFFi0EgAcbyd;u1jjbHjjjjbbgzBd:CwamceBd;8wamaAcbyd;u1jjbHjjjjbbgHBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;u1jjbHjjjjbbgOBd:KwamciBd;8wazcbasz:ojjjbhXalci9UhLaihsalhAinaXasydbcdtfgCaCydbcefBdbasclfhsaAcufgAmbkdnaoTmbcbhsaHhAaXhCaohQinaAasBdbaAclfhAaCydbasfhsaCclfhCaQcufgQmbkkdnalci6mbcbhsaihAinaAcwfydbhCaAclfydbhQaHaAydbcdtfgKaKydbgKcefBdbaOaKcdtfasBdbaHaQcdtfgQaQydbgQcefBdbaOaQcdtfasBdbaHaCcdtfgCaCydbgCcefBdbaOaCcdtfasBdbaAcxfhAaLascefgs9hmbkkaoTmbcbhsaohAinaHasfgCaCydbaXasfydb9RBdbasclfhsaAcufgAmbkkamaLcbyd;u1jjbHjjjjbbgsBd:OwamclBd;8wascbaLz:ojjjbhYamcuaLcK2alcjjjjd0Ecbyd;u1jjbHjjjjbbg8ABd:SwamcvBd;8wJbbbbhEdnalci6g3mbarcd4hKaihAa8AhsaLhrJbbbbh5inavaAclfydbaK2cdtfgCIdlh8EavaAydbaK2cdtfgXIdlhEavaAcwfydbaK2cdtfgQIdlh8FaCIdwhaaXIdwhhaQIdwhgasaCIdbg8JaXIdbg8KMaQIdbg8LMJbbnn:vUdbasclfaXIdlaCIdlMaQIdlMJbbnn:vUdbaQIdwh8MaCIdwh8NaXIdwhyascxfa8EaE:tg8Eagah:tggNa8FaE:tg8Faaah:tgaN:tgEJbbbbJbbjZa8Ja8K:tg8Ja8FNa8La8K:tg8Ka8EN:tghahNaEaENaaa8KNaga8JN:tgEaENMM:rg8K:va8KJbbbb9BEg8ENUdbasczfaEa8ENUdbascCfaha8ENUdbascwfa8Maya8NMMJbbnn:vUdba5a8KMh5aAcxfhAascKfhsarcufgrmbka5aL:Z:vJbbbZNhEkamcuaLcdtalcFFFF970Ecbyd;u1jjbHjjjjbbgCBd:WwamcoBd;8waEaq:ZNhEdna3mbcbhsaChAinaAasBdbaAclfhAaLascefgs9hmbkkaE:rhhcuh8PamcuaLcltalcFFFFd0Ecbyd;u1jjbHjjjjbbgIBd:0wamcrBd;8wcbaIa8AaCaLz:djjjb8AJFFuuhyJFFuuh8RJFFuuh8Sdnalci6gXmbJFFuuh8Sa8AhsaLhAJFFuuh8RJFFuuhyinascwfIdbgEayayaE9EEhyasclfIdbgEa8Ra8RaE9EEh8RasIdbgEa8Sa8SaE9EEh8SascKfhsaAcufgAmbkkahJbbbZNhgamaocetgscuaocu9kEcbyd;u1jjbHjjjjbbgABd:4waAcFeasz:ojjjbhCdnaXmbcbhAJFFuuhEa8Ahscuh8PinascwfIdbay:tghahNasIdba8S:tghahNasclfIdba8R:tghahNMM:rghaEa8PcuSahaE9DVgXEhEaAa8PaXEh8PascKfhsaLaAcefgA9hmbkkamczfcbcjwz:ojjjb8Aamcwf9cb83ibam9cb83ibagaxNhRJbbjZak:th8Ncbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8YJbbbbh8ZJbbbbh80cbh81cbhPinJbbbbhEdna8UTmbJbbjZa8U:Z:vhEkJbbbbhhdna80a80Na8Ya8YNa8Za8ZNMMg8KJbbbb9BmbJbbjZa8K:r:vhhka8XaENh5a8WaENh8Fa8VaENhaa8PhQdndndndndna8UaPVTmbamydwgBTmea80ahNh8Ja8ZahNh8La8YahNh8Maeamydbcdtfh83cbh3JFFuuhEcvhXcuhQindnaza83a3cdtfydbcdtgsfydbgvTmbaOaHasfydbcdtfhAindndnaCaiaAydbgKcx2fgsclfydbgrcetf8Vebcs4aCasydbgLcetf8Vebcs4faCascwfydbglcetf8Vebcs4fgombcbhsxekcehsazaLcdtfydbgLceSmbcehsazarcdtfydbgrceSmbcehsazalcdtfydbglceSmbdnarcdSaLcdSfalcdSfcd6mbaocefhsxekaocdfhskdnasaX9kmba8AaKcK2fgLIdwa5:thhaLIdla8F:th8KaLIdbaa:th8EdndnakJbbbb9DTmba8E:lg8Ea8K:lg8Ka8Ea8K9EEg8Kah:lgha8Kah9EEag:vJbbjZMhhxekahahNa8Ea8ENa8Ka8KNMM:rag:va8NNJbbjZMJ9VO:d86JbbjZaLIdCa8JNaLIdxa8MNa8LaLIdzNMMakN:tghahJ9VO:d869DENhhkaKaQasaX6ahaE9DVgLEhQasaXaLEhXahaEaLEhEkaAclfhAavcufgvmbkka3cefg3aB9hmbkkaQcu9hmekama5Ud:ODama8FUd:KDamaaUd:GDamcuBd:qDamcFFF;7rBdjDaIcba8AaYamc:GDfakJbbbb9Damc:qDfamcjDfz:ejjjbamyd:qDhQdndnaxJbbbb9ETmba8UaD6mbaQcuSmeceh3amIdjDaR9EmixdkaQcu9hmekdna8UTmbdnamydlgza8Uci2fgsciGTmbadasfcba8Uazcu7fciGcefz:ojjjb8AkabaPcltfgzam8Pib83dbazcwfamcwf8Pib83dbaPcefhPkc3hzinazc98Smvamc:Cwfazfydbcbyd;y1jjbH:bjjjbbazc98fhzxbkkcbh3a8Uaq9pmbamydwaCaiaQcx2fgsydbcetf8Vebcs4aCascwfydbcetf8Vebcs4faCasclfydbcetf8Vebcs4ffaw9nmekcbhscbhAdna81TmbcbhAamczfhXinamczfaAcdtfaXydbgLBdbaXclfhXaAaYaLfRbbTfhAa81cufg81mbkkamydwhlamydbhXam9cu83i:GDam9cu83i:ODam9cu83i:qDam9cu83i:yDaAc;8eaAclfc:bd6Eh81inamcjDfasfcFFF;7rBdbasclfgscz9hmbka81cdthBdnalTmbaeaXcdtfhocbhrindnazaoarcdtfydbcdtgsfydbgvTmbaOaHasfydbcdtfhAcuhLcuhsinazaiaAydbgKcx2fgXclfydbcdtfydbazaXydbcdtfydbfazaXcwfydbcdtfydbfgXasaXas6gXEhsaKaLaXEhLaAclfhAavcufgvmbkaLcuSmba8AaLcK2fgAIdway:tgEaENaAIdba8S:tgEaENaAIdla8R:tgEaENMM:rhEcbhAindndnasamc:qDfaAfgvydbgX6mbasaX9hmeaEamcjDfaAfIdb9FTmekavasBdbamc:GDfaAfaLBdbamcjDfaAfaEUdbxdkaAclfgAcz9hmbkkarcefgral9hmbkkamczfaBfhLcbhscbhAindnamc:GDfasfydbgXcuSmbaLaAcdtfaXBdbaAcefhAkasclfgscz9hmbkaAa81fg81TmbJFFuuhhcuhKamczfhsa81hvcuhLina8AasydbgXcK2fgAIdway:tgEaENaAIdba8S:tgEaENaAIdla8R:tgEaENMM:rhEdndnazaiaXcx2fgAclfydbcdtfydbazaAydbcdtfydbfazaAcwfydbcdtfydbfgAaL6mbaAaL9hmeaEah9DTmekaEhhaAhLaXhKkasclfhsavcufgvmbkaKcuSmbaKhQkdnamaiaQcx2fgrydbarclfydbarcwfydbaCabaeadaPawaqa3z:fjjjbTmbaPcefhPJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8YJbbbbh8ZJbbbbh80kcbhXinaOaHaraXcdtfydbcdtgAfydbcdtfgKhsazaAfgvydbgLhAdnaLTmbdninasydbaQSmeasclfhsaAcufgATmdxbkkasaKaLcdtfc98fydbBdbavavydbcufBdbkaXcefgXci9hmbka8AaQcK2fgsIdbhEasIdlhhasIdwh8KasIdxh8EasIdzh5asIdCh8FaYaQfce86bba80a8FMh80a8Za5Mh8Za8Ya8EMh8Ya8Xa8KMh8Xa8WahMh8Wa8VaEMh8Vamydxh8Uxbkkamc:WDf8KjjjjbaPk;Vvivuv99lu8Jjjjjbca9Rgv8Kjjjjbdndnalcw0mbaiydbhoaeabcitfgralcdtcufBdlaraoBdbdnalcd6mbaiclfhoalcufhwarcxfhrinaoydbhDarcuBdbarc98faDBdbarcwfhraoclfhoawcufgwmbkkalabfhrxekcbhDavczfcwfcbBdbav9cb83izavcwfcbBdbav9cb83ibJbbjZhqJbbjZhkinadaiaDcdtfydbcK2fhwcbhrinavczfarfgoawarfIdbgxaoIdbgm:tgPakNamMgmUdbavarfgoaPaxam:tNaoIdbMUdbarclfgrcx9hmbkJbbjZaqJbbjZMgq:vhkaDcefgDal9hmbkcbhoadcbcecdavIdlgxavIdwgm9GEgravIdbgPam9GEaraPax9GEgscdtgrfhzavczfarfIdbhxaihralhwinaiaocdtfgDydbhHaDarydbgOBdbaraHBdbarclfhraoazaOcK2fIdbax9Dfhoawcufgwmbkaeabcitfhrdndnaocv6mbaoalc98f6mekaraiydbBdbaralcdtcufBdlaiclfhoalcufhwarcxfhrinaoydbhDarcuBdbarc98faDBdbarcwfhraoclfhoawcufgwmbkalabfhrxekaraxUdbararydlc98GasVBdlabcefaeadaiaoz:djjjbhwararydlciGawabcu7fcdtVBdlawaeadaiaocdtfalao9Rz:djjjbhrkavcaf8Kjjjjbark:;idiud99dndnabaecitfgwydlgDciGgqciSmbinabcbaDcd4gDalaqcdtfIdbawIdb:tgkJbbbb9FEgwaecefgefadaialavaoarz:ejjjbak:larIdb9FTmdabawaD7aefgecitfgwydlgDciGgqci9hmbkkabaecitfgeclfhbdnavmbcuhwindnaiaeydbgDfRbbmbadaDcK2fgqIdwalIdw:tgkakNaqIdbalIdb:tgkakNaqIdlalIdl:tgkakNMM:rgkarIdb9DTmbarakUdbaoaDBdbkaecwfheawcefgwabydbcd46mbxdkkcuhwindnaiaeydbgDfRbbmbadaDcK2fgqIdbalIdb:t:lgkaqIdlalIdl:t:lgxakax9EEgkaqIdwalIdw:t:lgxakax9EEgkarIdb9DTmbarakUdbaoaDBdbkaecwfheawcefgwabydbcd46mbkkk;llevudnabydwgxaladcetfgm8Vebcs4alaecetfgP8Vebgscs4falaicetfgz8Vebcs4ffaD0abydxaq9pVakVgDce9hmbavawcltfgxab8Pdb83dbaxcwfabcwfgx8Pdb83dbdnaxydbgqTmbaoabydbcdtfhxaqhsinalaxydbcetfcFFi87ebaxclfhxascufgsmbkkdnabydxglci2gsabydlgxfgkciGTmbarakfcbalaxcu7fciGcefz:ojjjb8Aabydxci2hsabydlhxabydwhqkab9cb83dwababydbaqfBdbabascifc98GaxfBdlaP8Vebhscbhxkdnascztcz91cu9kmbabaxcefBdwaPax87ebaoabydbcdtfaxcdtfaeBdbkdnam8Uebcu9kmbababydwgxcefBdwamax87ebaoabydbcdtfaxcdtfadBdbkdnaz8Uebcu9kmbababydwgxcefBdwazax87ebaoabydbcdtfaxcdtfaiBdbkarabydlfabydxci2faPRbb86bbarabydlfabydxci2fcefamRbb86bbarabydlfabydxci2fcdfazRbb86bbababydxcefBdxaDk8LbabaeadaialavaoarawaDaDaqJbbbbz:cjjjbk;Nkovud99euv99eul998Jjjjjbc:W;ae9Rgo8KjjjjbdndnadTmbavcd4hrcbhwcbhDindnaiaeclfydbar2cdtfgvIdbaiaeydbar2cdtfgqIdbgk:tgxaiaecwfydbar2cdtfgmIdlaqIdlgP:tgsNamIdbak:tgzavIdlaP:tgPN:tgkakNaPamIdwaqIdwgH:tgONasavIdwaH:tgHN:tgPaPNaHazNaOaxN:tgxaxNMM:rgsJbbbb9Bmbaoc:W:qefawcx2fgAakas:vUdwaAaxas:vUdlaAaPas:vUdbaoc8Wfawc8K2fgAaq8Pdb83dbaAav8Pdb83dxaAam8Pdb83dKaAcwfaqcwfydbBdbaAcCfavcwfydbBdbaAcafamcwfydbBdbawcefhwkaecxfheaDcifgDad6mbkab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbawTmeaocbBd8Sao9cb83iKao9cb83izaoczfaoc8Wfawci2cxaoc8Sfcbcrz1jjjbaoIdKhCaoIdChXaoIdzhQao9cb83iwao9cb83ibaoaoc:W:qefawcxaoc8Sfcbciz1jjjbJbbjZhkaoIdwgPJbbbbJbbjZaPaPNaoIdbgPaPNaoIdlgsasNMM:rgx:vaxJbbbb9BEgzNhxasazNhsaPazNhzaoc:W:qefheawhvinaecwfIdbaxNaeIdbazNasaeclfIdbNMMgPakaPak9DEhkaecxfheavcufgvmbkabaCUdwabaXUdlabaQUdbabaoId3UdxdndnakJ;n;m;m899FmbJbbbbhPaoc:W:qefheaoc8WfhvinaCavcwfIdb:taecwfIdbgHNaQavIdb:taeIdbgONaXavclfIdb:taeclfIdbgLNMMaxaHNazaONasaLNMM:vgHaPaHaP9EEhPavc8KfhvaecxfheawcufgwmbkabaxUd8KabasUdaabazUd3abaCaxaPN:tUdKabaXasaPN:tUdCabaQazaPN:tUdzabJbbjZakakN:t:rgkUdydndnaxJbbj:;axJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;axJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohexekcjjjj94hekabae86b8UdndnasJbbj:;asJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;asJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkabav86bRdndnazJbbj:;azJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;azJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohqxekcjjjj94hqkabaq86b8SdndnaecKtcK91:YJbb;:9c:vax:t:lavcKtcK91:YJbb;:9c:vas:t:laqcKtcK91:YJbb;:9c:vaz:t:lakMMMJbb;:9cNJbbjZMgk:lJbbb9p9DTmbak:Ohexekcjjjj94hekaecFbaecFb9iEhexekabcjjj;8iBdycFbhekabae86b8Vxekab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbkaoc:W;aef8Kjjjjbk;Iwwvul99iud99eue99eul998Jjjjjbcje9Rgr8Kjjjjbavcd4hwaicd4hDdndnaoTmbarc;abfcbaocdtgvz:ojjjb8Aarc;Gbfcbavz:ojjjb8AarhvarcafhiaohqinavcFFF97BdbaicFFF;7rBdbaiclfhiavclfhvaqcufgqmbkdnadTmbcbhkinaeakaD2cdtfgvIdwhxavIdlhmavIdbhPalakaw2cdtfIdbhsarc;abfhzarhiarc;GbfhHarcafhqcj1jjbhvaohOinasavcwfIdbaxNavIdbaPNavclfIdbamNMMgAMhCakhXdnaAas:tgAaqIdbgQ9DgLmbaHydbhXkaHaXBdbakhXdnaCaiIdbgK9EmbazydbhXaKhCkazaXBdbaiaCUdbaqaAaQaLEUdbavcxfhvaqclfhqaHclfhHaiclfhiazclfhzaOcufgOmbkakcefgkad9hmbkkadThkJbbbbhCcbhXarc;abfhvarc;Gbfhicbhqinalavydbgzaw2cdtfIdbalaiydbgHaw2cdtfIdbaeazaD2cdtfgzIdwaeaHaD2cdtfgHIdw:tgsasNazIdbaHIdb:tgsasNazIdlaHIdl:tgsasNMM:rMMgsaCasaC9EgzEhCaqaXazEhXaiclfhiavclfhvaoaqcefgq9hmbkaCJbbbZNhKxekadThkcbhXJbbbbhKkJbbbbhCdnaearc;abfaXcdtgifydbgqaD2cdtfgvIdwaearc;GbfaifydbgzaD2cdtfgiIdwgm:tgsasNavIdbaiIdbgY:tgAaANavIdlaiIdlgP:tgQaQNMM:rgxJbbbb9ETmbaxalaqaw2cdtfIdbMalazaw2cdtfIdb:taxaxM:vhCkasaCNamMhmaQaCNaPMhPaAaCNaYMhYdnakmbaDcdthvawcdthiindnalIdbg8AaecwfIdbam:tgCaCNaeIdbaY:tgsasNaeclfIdbaP:tgAaANMM:rgQMgEaK9ETmbJbbbbhxdnaQJbbbb9ETmbaEaK:taQaQM:vhxkaxaCNamMhmaxaANaPMhPaxasNaYMhYa8AaKaQMMJbbbZNhKkaeavfhealaifhladcufgdmbkkabaKUdxabamUdwabaPUdlabaYUdbarcjef8Kjjjjbkjeeiu8Jjjjjbcj8W9Rgr8Kjjjjbaici2hwdnaiTmbawceawce0EhDarhiinaiaeadRbbcdtfydbBdbadcefhdaiclfhiaDcufgDmbkkabarawaladaoz:hjjjbarcj8Wf8Kjjjjbk:Reeeu8Jjjjjbca9Rgo8Kjjjjbab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbdnadTmbaocbBd3ao9cb83iwao9cb83ibaoaeadaialaoc3falEavcbalEcrz1jjjbabao8Pib83dbabao8Piw83dwkaocaf8Kjjjjbk:3lequ8JjjjjbcjP9Rgl8Kjjjjbcbhvalcjxfcbaiz:ojjjb8AdndnadTmbcjehoaehrincuhwarhDcuhqavhkdninawakaoalcjxfaDcefRbbfRbb9RcFeGci6aoalcjxfaDRbbfRbb9RcFeGci6faoalcjxfaDcdfRbbfRbb9RcFeGci6fgxaq9mgmEhwdnammbaxce0mdkaxaqaxaq9kEhqaDcifhDadakcefgk9hmbkkaeawci2fgDcdfRbbhqaDcefRbbhxaDRbbhkaeavci2fgDcifaDawav9Rci2z:rjjjb8Aakalcjxffaocefgo86bbaxalcjxffao86bbaDcdfaq86bbaDcefax86bbaDak86bbaqalcjxffao86bbarcifhravcefgvad9hmbkalcFeaicetz:ojjjbhoadci2gDceaDce0EhqcbhxindnaoaeRbbgkcetfgw8UebgDcu9kmbawax87ebaocjlfaxcdtfabakcdtfydbBdbaxhDaxcefhxkaeaD86bbaecefheaqcufgqmbkaxcdthDxekcbhDkabalcjlfaDz:njjjb8AalcjPf8Kjjjjbk9teiucbcbyd;C1jjbgeabcifc98GfgbBd;C1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;C1jjbgeabcrfc94GfgbBd;C1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd;C1jjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd;C1jjbfgdBd;C1jjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akk:;Deludndndnadch9pmbabaeSmdaeabadfgi9Rcbadcet9R0mekabaead;8qbbxekaeab7ciGhldndndnabae9pmbdnalTmbadhvabhixikdnabciGmbadhvabhixdkadTmiabaeRbb86bbadcufhvdnabcefgiciGmbaecefhexdkavTmiabaeRbe86beadc9:fhvdnabcdfgiciGmbaecdfhexdkavTmiabaeRbd86bdadc99fhvdnabcifgiciGmbaecifhexdkavTmiabaeRbi86biabclfhiaeclfheadc98fhvxekdnalmbdnaiciGTmbadTmlabadcufgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc9:fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc99fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc98fgdfaeadfRbb86bbkadcl6mbdnadc98fgocd4cefciGgiTmbaec98fhlabc98fhvinavadfaladfydbBdbadc98fhdaicufgimbkkaocx6mbaec9Wfhvabc9WfhoinaoadfgicxfavadfglcxfydbBdbaicwfalcwfydbBdbaiclfalclfydbBdbaialydbBdbadc9Wfgdci0mbkkadTmdadhidnadciGglTmbaecufhvabcufhoadhiinaoaifavaifRbb86bbaicufhialcufglmbkkadcl6mdaec98fhlabc98fhvinavaifgecifalaifgdcifRbb86bbaecdfadcdfRbb86bbaecefadcefRbb86bbaeadRbb86bbaic98fgimbxikkavcl6mbdnavc98fglcd4cefcrGgdTmbavadcdt9RhvinaiaeydbBdbaeclfheaiclfhiadcufgdmbkkalc36mbinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaiaeydzBdzaiaeydCBdCaiaeydKBdKaiaeyd3Bd3aecafheaicafhiavc9Gfgvci0mbkkavTmbdndnavcrGgdmbavhlxekavc94GhlinaiaeRbb86bbaicefhiaecefheadcufgdmbkkavcw6mbinaiaeRbb86bbaiaeRbe86beaiaeRbd86bdaiaeRbi86biaiaeRbl86blaiaeRbv86bvaiaeRbo86boaiaeRbr86braicwfhiaecwfhealc94fglmbkkabkk9Tdbcjwk9ubbjZbbbbbbbbbbbbbbjZbbbbbbbbbbbbbbjZ86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;bc;uwkxebbbdbbb9GNbb";
1112
+ var wasmpack = new Uint8Array([
1113
+ 32,
1114
+ 0,
1115
+ 65,
1116
+ 2,
1117
+ 1,
1118
+ 106,
1119
+ 34,
1120
+ 33,
1121
+ 3,
1122
+ 128,
1123
+ 11,
1124
+ 4,
1125
+ 13,
1126
+ 64,
1127
+ 6,
1128
+ 253,
1129
+ 10,
1130
+ 7,
1131
+ 15,
1132
+ 116,
1133
+ 127,
1134
+ 5,
1135
+ 8,
1136
+ 12,
1137
+ 40,
1138
+ 16,
1139
+ 19,
1140
+ 54,
1141
+ 20,
1142
+ 9,
1143
+ 27,
1144
+ 255,
1145
+ 113,
1146
+ 17,
1147
+ 42,
1148
+ 67,
1149
+ 24,
1150
+ 23,
1151
+ 146,
1152
+ 148,
1153
+ 18,
1154
+ 14,
1155
+ 22,
1156
+ 45,
1157
+ 70,
1158
+ 69,
1159
+ 56,
1160
+ 114,
1161
+ 101,
1162
+ 21,
1163
+ 25,
1164
+ 63,
1165
+ 75,
1166
+ 136,
1167
+ 108,
1168
+ 28,
1169
+ 118,
1170
+ 29,
1171
+ 73,
1172
+ 115
1173
+ ]);
1174
+ if (typeof WebAssembly !== "object") {
1175
+ return {
1176
+ supported: false
1177
+ };
1178
+ }
1179
+ var instance;
1180
+ var ready = WebAssembly.instantiate(unpack(wasm), {}).then(function(result) {
1181
+ instance = result.instance;
1182
+ instance.exports.__wasm_call_ctors();
1183
+ });
1184
+ function unpack(data) {
1185
+ var result = new Uint8Array(data.length);
1186
+ for (var i = 0; i < data.length; ++i) {
1187
+ var ch = data.charCodeAt(i);
1188
+ result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
1189
+ }
1190
+ var write = 0;
1191
+ for (var i = 0; i < data.length; ++i) {
1192
+ result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];
1193
+ }
1194
+ return result.buffer.slice(0, write);
1195
+ }
1196
+ function assert(cond) {
1197
+ if (!cond) {
1198
+ throw new Error("Assertion failed");
1199
+ }
1200
+ }
1201
+ function bytes(view) {
1202
+ return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
1203
+ }
1204
+ var BOUNDS_SIZE = 48;
1205
+ var MESHLET_SIZE = 16;
1206
+ function extractMeshlet(buffers, index) {
1207
+ var vertex_offset = buffers.meshlets[index * 4 + 0];
1208
+ var triangle_offset = buffers.meshlets[index * 4 + 1];
1209
+ var vertex_count = buffers.meshlets[index * 4 + 2];
1210
+ var triangle_count = buffers.meshlets[index * 4 + 3];
1211
+ return {
1212
+ vertices: buffers.vertices.subarray(vertex_offset, vertex_offset + vertex_count),
1213
+ triangles: buffers.triangles.subarray(triangle_offset, triangle_offset + triangle_count * 3)
1214
+ };
1215
+ }
1216
+ function buildMeshlets(indices, vertex_positions, vertex_count, vertex_positions_stride, max_vertices, max_triangles, cone_weight) {
1217
+ var sbrk = instance.exports.sbrk;
1218
+ var max_meshlets = instance.exports.meshopt_buildMeshletsBound(indices.length, max_vertices, max_triangles);
1219
+ var meshletsp = sbrk(max_meshlets * MESHLET_SIZE);
1220
+ var meshlet_verticesp = sbrk(max_meshlets * max_vertices * 4);
1221
+ var meshlet_trianglesp = sbrk(max_meshlets * max_triangles * 3);
1222
+ var indicesp = sbrk(indices.byteLength);
1223
+ var verticesp = sbrk(vertex_positions.byteLength);
1224
+ var heap = new Uint8Array(instance.exports.memory.buffer);
1225
+ heap.set(bytes(indices), indicesp);
1226
+ heap.set(bytes(vertex_positions), verticesp);
1227
+ var count = instance.exports.meshopt_buildMeshlets(
1228
+ meshletsp,
1229
+ meshlet_verticesp,
1230
+ meshlet_trianglesp,
1231
+ indicesp,
1232
+ indices.length,
1233
+ verticesp,
1234
+ vertex_count,
1235
+ vertex_positions_stride,
1236
+ max_vertices,
1237
+ max_triangles,
1238
+ cone_weight
1239
+ );
1240
+ heap = new Uint8Array(instance.exports.memory.buffer);
1241
+ var meshletBytes = heap.subarray(meshletsp, meshletsp + count * MESHLET_SIZE);
1242
+ var meshlets = new Uint32Array(meshletBytes.buffer, meshletBytes.byteOffset, meshletBytes.byteLength / 4).slice();
1243
+ for (var i = 0; i < count; ++i) {
1244
+ var vertex_offset = meshlets[i * 4 + 0];
1245
+ var triangle_offset = meshlets[i * 4 + 1];
1246
+ var vertex_count = meshlets[i * 4 + 2];
1247
+ var triangle_count = meshlets[i * 4 + 3];
1248
+ instance.exports.meshopt_optimizeMeshlet(
1249
+ meshlet_verticesp + vertex_offset * 4,
1250
+ meshlet_trianglesp + triangle_offset,
1251
+ triangle_count,
1252
+ vertex_count
1253
+ );
1254
+ }
1255
+ var last_vertex_offset = meshlets[(count - 1) * 4 + 0];
1256
+ var last_triangle_offset = meshlets[(count - 1) * 4 + 1];
1257
+ var last_vertex_count = meshlets[(count - 1) * 4 + 2];
1258
+ var last_triangle_count = meshlets[(count - 1) * 4 + 3];
1259
+ var used_vertices = last_vertex_offset + last_vertex_count;
1260
+ var used_triangles = last_triangle_offset + (last_triangle_count * 3 + 3 & ~3);
1261
+ var result = {
1262
+ meshlets,
1263
+ vertices: new Uint32Array(heap.buffer, meshlet_verticesp, used_vertices).slice(),
1264
+ triangles: new Uint8Array(heap.buffer, meshlet_trianglesp, used_triangles * 3).slice(),
1265
+ meshletCount: count
1266
+ };
1267
+ sbrk(meshletsp - sbrk(0));
1268
+ return result;
1269
+ }
1270
+ function extractBounds(boundsp) {
1271
+ var bounds_floats = new Float32Array(instance.exports.memory.buffer, boundsp, BOUNDS_SIZE / 4);
1272
+ return {
1273
+ centerX: bounds_floats[0],
1274
+ centerY: bounds_floats[1],
1275
+ centerZ: bounds_floats[2],
1276
+ radius: bounds_floats[3],
1277
+ coneApexX: bounds_floats[4],
1278
+ coneApexY: bounds_floats[5],
1279
+ coneApexZ: bounds_floats[6],
1280
+ coneAxisX: bounds_floats[7],
1281
+ coneAxisY: bounds_floats[8],
1282
+ coneAxisZ: bounds_floats[9],
1283
+ coneCutoff: bounds_floats[10]
1284
+ };
1285
+ }
1286
+ function computeMeshletBounds(buffers, vertex_positions, vertex_count, vertex_positions_stride) {
1287
+ var sbrk = instance.exports.sbrk;
1288
+ var results = [];
1289
+ var verticesp = sbrk(vertex_positions.byteLength);
1290
+ var meshlet_verticesp = sbrk(buffers.vertices.byteLength);
1291
+ var meshlet_trianglesp = sbrk(buffers.triangles.byteLength);
1292
+ var resultp = sbrk(BOUNDS_SIZE);
1293
+ var heap = new Uint8Array(instance.exports.memory.buffer);
1294
+ heap.set(bytes(vertex_positions), verticesp);
1295
+ heap.set(bytes(buffers.vertices), meshlet_verticesp);
1296
+ heap.set(bytes(buffers.triangles), meshlet_trianglesp);
1297
+ for (var i = 0; i < buffers.meshletCount; ++i) {
1298
+ var vertex_offset = buffers.meshlets[i * 4 + 0];
1299
+ var triangle_offset = buffers.meshlets[i * 4 + 0 + 1];
1300
+ var triangle_count = buffers.meshlets[i * 4 + 0 + 3];
1301
+ instance.exports.meshopt_computeMeshletBounds(
1302
+ resultp,
1303
+ meshlet_verticesp + vertex_offset * 4,
1304
+ meshlet_trianglesp + triangle_offset,
1305
+ triangle_count,
1306
+ verticesp,
1307
+ vertex_count,
1308
+ vertex_positions_stride
1309
+ );
1310
+ results.push(extractBounds(resultp));
1311
+ }
1312
+ sbrk(verticesp - sbrk(0));
1313
+ return results;
1314
+ }
1315
+ function computeClusterBounds(indices, vertex_positions, vertex_count, vertex_positions_stride) {
1316
+ var sbrk = instance.exports.sbrk;
1317
+ var resultp = sbrk(BOUNDS_SIZE);
1318
+ var indicesp = sbrk(indices.byteLength);
1319
+ var verticesp = sbrk(vertex_positions.byteLength);
1320
+ var heap = new Uint8Array(instance.exports.memory.buffer);
1321
+ heap.set(bytes(indices), indicesp);
1322
+ heap.set(bytes(vertex_positions), verticesp);
1323
+ instance.exports.meshopt_computeClusterBounds(resultp, indicesp, indices.length, verticesp, vertex_count, vertex_positions_stride);
1324
+ var result = extractBounds(resultp);
1325
+ sbrk(resultp - sbrk(0));
1326
+ return result;
1327
+ }
1328
+ function computeSphereBounds(positions, count, positions_stride, radii, radii_stride) {
1329
+ var sbrk = instance.exports.sbrk;
1330
+ var resultp = sbrk(BOUNDS_SIZE);
1331
+ var positionsp = sbrk(positions.byteLength);
1332
+ var radiip = radii ? sbrk(radii.byteLength) : 0;
1333
+ var heap = new Uint8Array(instance.exports.memory.buffer);
1334
+ heap.set(bytes(positions), positionsp);
1335
+ if (radii) {
1336
+ heap.set(bytes(radii), radiip);
1337
+ }
1338
+ instance.exports.meshopt_computeSphereBounds(resultp, positionsp, count, positions_stride, radiip, radii ? radii_stride : 0);
1339
+ var result = extractBounds(resultp);
1340
+ sbrk(resultp - sbrk(0));
1341
+ return result;
1342
+ }
1343
+ return {
1344
+ ready,
1345
+ supported: true,
1346
+ buildMeshlets: function(indices, vertex_positions, vertex_positions_stride, max_vertices, max_triangles, cone_weight) {
1347
+ assert(indices.length % 3 == 0);
1348
+ assert(vertex_positions instanceof Float32Array);
1349
+ assert(vertex_positions.length % vertex_positions_stride == 0);
1350
+ assert(vertex_positions_stride >= 3);
1351
+ assert(max_vertices <= 256 || max_vertices > 0);
1352
+ assert(max_triangles <= 512);
1353
+ assert(max_triangles % 4 == 0);
1354
+ cone_weight = cone_weight || 0;
1355
+ var indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);
1356
+ return buildMeshlets(
1357
+ indices32,
1358
+ vertex_positions,
1359
+ vertex_positions.length / vertex_positions_stride,
1360
+ vertex_positions_stride * 4,
1361
+ max_vertices,
1362
+ max_triangles,
1363
+ cone_weight
1364
+ );
1365
+ },
1366
+ extractMeshlet: function(buffers, index) {
1367
+ assert(index >= 0 && index < buffers.meshletCount);
1368
+ return extractMeshlet(buffers, index);
1369
+ },
1370
+ computeClusterBounds: function(indices, vertex_positions, vertex_positions_stride) {
1371
+ assert(indices.length % 3 == 0);
1372
+ assert(indices.length / 3 <= 512);
1373
+ assert(vertex_positions instanceof Float32Array);
1374
+ assert(vertex_positions.length % vertex_positions_stride == 0);
1375
+ assert(vertex_positions_stride >= 3);
1376
+ var indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);
1377
+ return computeClusterBounds(indices32, vertex_positions, vertex_positions.length / vertex_positions_stride, vertex_positions_stride * 4);
1378
+ },
1379
+ computeMeshletBounds: function(buffers, vertex_positions, vertex_positions_stride) {
1380
+ assert(buffers.meshletCount != 0);
1381
+ assert(vertex_positions instanceof Float32Array);
1382
+ assert(vertex_positions.length % vertex_positions_stride == 0);
1383
+ assert(vertex_positions_stride >= 3);
1384
+ return computeMeshletBounds(buffers, vertex_positions, vertex_positions.length / vertex_positions_stride, vertex_positions_stride * 4);
1385
+ },
1386
+ computeSphereBounds: function(positions, positions_stride, radii, radii_stride) {
1387
+ assert(positions instanceof Float32Array);
1388
+ assert(positions.length % positions_stride == 0);
1389
+ assert(positions_stride >= 3);
1390
+ assert(!radii || radii instanceof Float32Array);
1391
+ assert(!radii || radii.length % radii_stride == 0);
1392
+ assert(!radii || radii_stride >= 1);
1393
+ assert(!radii || positions.length / positions_stride == radii.length / radii_stride);
1394
+ radii_stride = radii_stride || 0;
1395
+ return computeSphereBounds(positions, positions.length / positions_stride, positions_stride * 4, radii, radii_stride * 4);
1396
+ }
1397
+ };
1398
+ })();
1399
+
1400
+ // packages/engine/Source/Scene/Axis.js
1401
+ var Axis = {
1402
+ /**
1403
+ * Denotes the x-axis.
1404
+ *
1405
+ * @type {number}
1406
+ * @constant
1407
+ */
1408
+ X: 0,
1409
+ /**
1410
+ * Denotes the y-axis.
1411
+ *
1412
+ * @type {number}
1413
+ * @constant
1414
+ */
1415
+ Y: 1,
1416
+ /**
1417
+ * Denotes the z-axis.
1418
+ *
1419
+ * @type {number}
1420
+ * @constant
1421
+ */
1422
+ Z: 2
1423
+ };
1424
+ Axis.Y_UP_TO_Z_UP = Matrix4_default.fromRotationTranslation(
1425
+ // Rotation about PI/2 around the X-axis
1426
+ Matrix3_default.fromArray([1, 0, 0, 0, 0, 1, 0, -1, 0])
1427
+ );
1428
+ Axis.Z_UP_TO_Y_UP = Matrix4_default.fromRotationTranslation(
1429
+ // Rotation about -PI/2 around the X-axis
1430
+ Matrix3_default.fromArray([1, 0, 0, 0, 0, -1, 0, 1, 0])
1431
+ );
1432
+ Axis.X_UP_TO_Z_UP = Matrix4_default.fromRotationTranslation(
1433
+ // Rotation about -PI/2 around the Y-axis
1434
+ Matrix3_default.fromArray([0, 0, 1, 0, 1, 0, -1, 0, 0])
1435
+ );
1436
+ Axis.Z_UP_TO_X_UP = Matrix4_default.fromRotationTranslation(
1437
+ // Rotation about PI/2 around the Y-axis
1438
+ Matrix3_default.fromArray([0, 0, -1, 0, 1, 0, 1, 0, 0])
1439
+ );
1440
+ Axis.X_UP_TO_Y_UP = Matrix4_default.fromRotationTranslation(
1441
+ // Rotation about PI/2 around the Z-axis
1442
+ Matrix3_default.fromArray([0, 1, 0, -1, 0, 0, 0, 0, 1])
1443
+ );
1444
+ Axis.Y_UP_TO_X_UP = Matrix4_default.fromRotationTranslation(
1445
+ // Rotation about -PI/2 around the Z-axis
1446
+ Matrix3_default.fromArray([0, -1, 0, 1, 0, 0, 0, 0, 1])
1447
+ );
1448
+ Axis.fromName = function(name) {
1449
+ Check_default.typeOf.string("name", name);
1450
+ return Axis[name];
1451
+ };
1452
+ var Axis_default = Object.freeze(Axis);
1453
+
1454
+ // packages/engine/Source/Core/TerrainMesh.js
1455
+ function TerrainMesh(center, vertices, indices, indexCountWithoutSkirts, vertexCountWithoutSkirts, minimumHeight, maximumHeight, boundingSphere3D, occludeePointInScaledSpace, vertexStride, orientedBoundingBox, encoding, westIndicesSouthToNorth, southIndicesEastToWest, eastIndicesNorthToSouth, northIndicesWestToEast) {
1456
+ this.center = center;
1457
+ this.vertices = vertices;
1458
+ this.stride = vertexStride ?? 6;
1459
+ this.indices = indices;
1460
+ this.indexCountWithoutSkirts = indexCountWithoutSkirts;
1461
+ this.vertexCountWithoutSkirts = vertexCountWithoutSkirts;
1462
+ this.minimumHeight = minimumHeight;
1463
+ this.maximumHeight = maximumHeight;
1464
+ this.boundingSphere3D = boundingSphere3D;
1465
+ this.occludeePointInScaledSpace = occludeePointInScaledSpace;
1466
+ this.orientedBoundingBox = orientedBoundingBox;
1467
+ this.encoding = encoding;
1468
+ this.westIndicesSouthToNorth = westIndicesSouthToNorth;
1469
+ this.southIndicesEastToWest = southIndicesEastToWest;
1470
+ this.eastIndicesNorthToSouth = eastIndicesNorthToSouth;
1471
+ this.northIndicesWestToEast = northIndicesWestToEast;
1472
+ }
1473
+ var TerrainMesh_default = TerrainMesh;
1474
+
1475
+ // packages/engine/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js
1476
+ var Cesium3DTilesTerrainGeometryProcessor = {};
1477
+ var scratchGltfInfo = {
1478
+ positions: void 0,
1479
+ normals: void 0,
1480
+ indices: void 0,
1481
+ edgeIndicesWest: void 0,
1482
+ edgeIndicesSouth: void 0,
1483
+ edgeIndicesEast: void 0,
1484
+ edgeIndicesNorth: void 0
1485
+ };
1486
+ var scratchCenterCartographic = new Cartographic_default();
1487
+ var scratchCenterCartesian = new Cartesian3_default();
1488
+ var scratchEnuToEcef = new Matrix4_default();
1489
+ var scratchEcefToEnu = new Matrix4_default();
1490
+ var scratchTilesetTransform = new Matrix4_default();
1491
+ var scratchMinimumPositionENU = new Cartesian3_default();
1492
+ var scratchMaximumPositionENU = new Cartesian3_default();
1493
+ var scratchPosLocal = new Cartesian3_default();
1494
+ var scratchPosEcef = new Cartesian3_default();
1495
+ var scratchCartographic = new Cartographic_default();
1496
+ var scratchUV = new Cartesian2_default();
1497
+ var scratchNormal = new Cartesian3_default();
1498
+ var scratchNormalOct = new Cartesian2_default();
1499
+ var scratchGeodeticSurfaceNormal = new Cartesian3_default();
1500
+ var scratchPosEnu = new Cartesian3_default();
1501
+ var sortedEdgeCompare = function(a, b) {
1502
+ return a - b;
1503
+ };
1504
+ Cesium3DTilesTerrainGeometryProcessor.createMesh = async function(options) {
1505
+ options = options ?? Frozen_default.EMPTY_OBJECT;
1506
+ const {
1507
+ exaggeration = 1,
1508
+ exaggerationRelativeHeight = 0,
1509
+ hasVertexNormals,
1510
+ hasWebMercatorT,
1511
+ gltf,
1512
+ minimumHeight,
1513
+ maximumHeight,
1514
+ skirtHeight
1515
+ } = options;
1516
+ Check_default.typeOf.object("options.ellipsoid", options.ellipsoid);
1517
+ Check_default.typeOf.object("options.rectangle", options.rectangle);
1518
+ Check_default.typeOf.bool("options.hasVertexNormals", hasVertexNormals);
1519
+ Check_default.typeOf.bool("options.hasWebMercatorT", hasWebMercatorT);
1520
+ Check_default.typeOf.object("options.gltf", gltf);
1521
+ Check_default.typeOf.number("options.minimumHeight", minimumHeight);
1522
+ Check_default.typeOf.number("options.maximumHeight", maximumHeight);
1523
+ Check_default.typeOf.object("options.boundingSphere", options.boundingSphere);
1524
+ Check_default.typeOf.object(
1525
+ "options.orientedBoundingBox",
1526
+ options.orientedBoundingBox
1527
+ );
1528
+ Check_default.typeOf.object(
1529
+ "options.horizonOcclusionPoint",
1530
+ options.horizonOcclusionPoint
1531
+ );
1532
+ Check_default.typeOf.number("options.skirtHeight", skirtHeight);
1533
+ const hasExaggeration = exaggeration !== 1;
1534
+ const hasGeodeticSurfaceNormals = hasExaggeration;
1535
+ const boundingSphere = BoundingSphere_default.clone(
1536
+ options.boundingSphere,
1537
+ new BoundingSphere_default()
1538
+ );
1539
+ const orientedBoundingBox = OrientedBoundingBox_default.clone(
1540
+ options.orientedBoundingBox,
1541
+ new OrientedBoundingBox_default()
1542
+ );
1543
+ const horizonOcclusionPoint = Cartesian3_default.clone(
1544
+ options.horizonOcclusionPoint,
1545
+ new Cartesian3_default()
1546
+ );
1547
+ const ellipsoid = Ellipsoid_default.clone(options.ellipsoid, new Ellipsoid_default());
1548
+ const rectangle = Rectangle_default.clone(options.rectangle, new Rectangle_default());
1549
+ const hasMeshOptCompression = gltf.extensionsRequired !== void 0 && gltf.extensionsRequired.indexOf("EXT_meshopt_compression") !== -1;
1550
+ const decoderPromise = hasMeshOptCompression ? MeshoptDecoder.ready : Promise.resolve(void 0);
1551
+ await decoderPromise;
1552
+ const tileMinLongitude = rectangle.west;
1553
+ const tileMinLatitude = rectangle.south;
1554
+ const tileMaxLatitude = rectangle.north;
1555
+ const tileLengthLongitude = rectangle.width;
1556
+ const tileLengthLatitude = rectangle.height;
1557
+ const approximateCenterCartographic = Rectangle_default.center(
1558
+ rectangle,
1559
+ scratchCenterCartographic
1560
+ );
1561
+ approximateCenterCartographic.height = 0.5 * (minimumHeight + maximumHeight);
1562
+ const approximateCenterPosition = Cartographic_default.toCartesian(
1563
+ approximateCenterCartographic,
1564
+ ellipsoid,
1565
+ scratchCenterCartesian
1566
+ );
1567
+ const enuToEcef = Transforms_default.eastNorthUpToFixedFrame(
1568
+ approximateCenterPosition,
1569
+ ellipsoid,
1570
+ scratchEnuToEcef
1571
+ );
1572
+ const ecefToEnu = Matrix4_default.inverseTransformation(enuToEcef, scratchEcefToEnu);
1573
+ let tilesetTransform = Matrix4_default.unpack(
1574
+ gltf.nodes[0].matrix,
1575
+ 0,
1576
+ scratchTilesetTransform
1577
+ );
1578
+ tilesetTransform = Matrix4_default.multiply(
1579
+ Axis_default.Y_UP_TO_Z_UP,
1580
+ tilesetTransform,
1581
+ tilesetTransform
1582
+ );
1583
+ const gltfInfo = decodeGltf(gltf, hasVertexNormals, scratchGltfInfo);
1584
+ const skirtVertexCount = TerrainProvider_default.getSkirtVertexCount(
1585
+ gltfInfo.edgeIndicesWest,
1586
+ gltfInfo.edgeIndicesSouth,
1587
+ gltfInfo.edgeIndicesEast,
1588
+ gltfInfo.edgeIndicesNorth
1589
+ );
1590
+ const positionsLocalWithoutSkirts = gltfInfo.positions;
1591
+ const normalsWithoutSkirts = gltfInfo.normals;
1592
+ const indicesWithoutSkirts = gltfInfo.indices;
1593
+ const vertexCountWithoutSkirts = positionsLocalWithoutSkirts.length / 3;
1594
+ const vertexCountWithSkirts = vertexCountWithoutSkirts + skirtVertexCount;
1595
+ const indexCountWithoutSkirts = indicesWithoutSkirts.length;
1596
+ const skirtIndexCount = TerrainProvider_default.getSkirtIndexCountWithFilledCorners(skirtVertexCount);
1597
+ const SizedIndexTypeWithSkirts = vertexCountWithSkirts <= 65535 ? Uint16Array : Uint32Array;
1598
+ const indexBufferWithSkirts = new SizedIndexTypeWithSkirts(
1599
+ indexCountWithoutSkirts + skirtIndexCount
1600
+ );
1601
+ indexBufferWithSkirts.set(indicesWithoutSkirts);
1602
+ const westIndices = new SizedIndexTypeWithSkirts(gltfInfo.edgeIndicesWest);
1603
+ const southIndices = new SizedIndexTypeWithSkirts(gltfInfo.edgeIndicesSouth);
1604
+ const eastIndices = new SizedIndexTypeWithSkirts(gltfInfo.edgeIndicesEast);
1605
+ const northIndices = new SizedIndexTypeWithSkirts(gltfInfo.edgeIndicesNorth);
1606
+ const sortedWestIndices = new SizedIndexTypeWithSkirts(westIndices).sort();
1607
+ const sortedSouthIndices = new SizedIndexTypeWithSkirts(southIndices).sort();
1608
+ const sortedEastIndices = new SizedIndexTypeWithSkirts(eastIndices).sort();
1609
+ const sortedNorthIndices = new SizedIndexTypeWithSkirts(northIndices).sort();
1610
+ const southMercatorAngle = WebMercatorProjection_default.geodeticLatitudeToMercatorAngle(tileMinLatitude);
1611
+ const northMercatorAngle = WebMercatorProjection_default.geodeticLatitudeToMercatorAngle(tileMaxLatitude);
1612
+ const oneOverMercatorHeight = 1 / (northMercatorAngle - southMercatorAngle);
1613
+ let minPosEnu = Cartesian3_default.fromElements(
1614
+ Number.POSITIVE_INFINITY,
1615
+ Number.POSITIVE_INFINITY,
1616
+ Number.POSITIVE_INFINITY,
1617
+ scratchMinimumPositionENU
1618
+ );
1619
+ let maxPosEnu = Cartesian3_default.fromElements(
1620
+ Number.NEGATIVE_INFINITY,
1621
+ Number.NEGATIVE_INFINITY,
1622
+ Number.NEGATIVE_INFINITY,
1623
+ scratchMaximumPositionENU
1624
+ );
1625
+ const tempTerrainEncoding = new TerrainEncoding_default(
1626
+ boundingSphere.center,
1627
+ void 0,
1628
+ void 0,
1629
+ void 0,
1630
+ void 0,
1631
+ hasVertexNormals,
1632
+ hasWebMercatorT,
1633
+ hasGeodeticSurfaceNormals,
1634
+ exaggeration,
1635
+ exaggerationRelativeHeight
1636
+ );
1637
+ const tempBufferStride = tempTerrainEncoding.stride;
1638
+ const tempBuffer = new Float32Array(vertexCountWithSkirts * tempBufferStride);
1639
+ let tempBufferOffset = 0;
1640
+ for (let i = 0; i < vertexCountWithoutSkirts; i++) {
1641
+ const posLocal = Cartesian3_default.unpack(
1642
+ positionsLocalWithoutSkirts,
1643
+ i * 3,
1644
+ scratchPosLocal
1645
+ );
1646
+ const posECEF = Matrix4_default.multiplyByPoint(
1647
+ tilesetTransform,
1648
+ posLocal,
1649
+ scratchPosEcef
1650
+ );
1651
+ const cartographic = Cartographic_default.fromCartesian(
1652
+ posECEF,
1653
+ ellipsoid,
1654
+ scratchCartographic
1655
+ );
1656
+ const { longitude, latitude, height } = cartographic;
1657
+ let u = (longitude - tileMinLongitude) / tileLengthLongitude;
1658
+ let v = (latitude - tileMinLatitude) / tileLengthLatitude;
1659
+ u = Math_default.clamp(u, 0, 1);
1660
+ v = Math_default.clamp(v, 0, 1);
1661
+ if (binarySearch_default(sortedWestIndices, i, sortedEdgeCompare) >= 0) {
1662
+ u = 0;
1663
+ } else if (binarySearch_default(sortedEastIndices, i, sortedEdgeCompare) >= 0) {
1664
+ u = 1;
1665
+ }
1666
+ if (binarySearch_default(sortedSouthIndices, i, sortedEdgeCompare) >= 0) {
1667
+ v = 0;
1668
+ } else if (binarySearch_default(sortedNorthIndices, i, sortedEdgeCompare) >= 0) {
1669
+ v = 1;
1670
+ }
1671
+ const uv = Cartesian2_default.fromElements(u, v, scratchUV);
1672
+ let normalOct;
1673
+ if (hasVertexNormals) {
1674
+ let normal = Cartesian3_default.unpack(
1675
+ normalsWithoutSkirts,
1676
+ i * 3,
1677
+ scratchNormal
1678
+ );
1679
+ normal = Matrix4_default.multiplyByPointAsVector(
1680
+ tilesetTransform,
1681
+ normal,
1682
+ scratchNormal
1683
+ );
1684
+ normal = Cartesian3_default.normalize(normal, scratchNormal);
1685
+ normalOct = AttributeCompression_default.octEncode(normal, scratchNormalOct);
1686
+ }
1687
+ let webMercatorT;
1688
+ if (hasWebMercatorT) {
1689
+ const mercatorAngle = WebMercatorProjection_default.geodeticLatitudeToMercatorAngle(latitude);
1690
+ webMercatorT = (mercatorAngle - southMercatorAngle) * oneOverMercatorHeight;
1691
+ }
1692
+ let geodeticSurfaceNormal;
1693
+ if (hasGeodeticSurfaceNormals) {
1694
+ geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(
1695
+ posECEF,
1696
+ scratchGeodeticSurfaceNormal
1697
+ );
1698
+ }
1699
+ tempBufferOffset = tempTerrainEncoding.encode(
1700
+ tempBuffer,
1701
+ tempBufferOffset,
1702
+ posECEF,
1703
+ uv,
1704
+ height,
1705
+ normalOct,
1706
+ webMercatorT,
1707
+ geodeticSurfaceNormal
1708
+ );
1709
+ const posEnu = Matrix4_default.multiplyByPoint(ecefToEnu, posECEF, scratchPosEnu);
1710
+ minPosEnu = Cartesian3_default.minimumByComponent(posEnu, minPosEnu, minPosEnu);
1711
+ maxPosEnu = Cartesian3_default.maximumByComponent(posEnu, maxPosEnu, maxPosEnu);
1712
+ }
1713
+ const mesh = new TerrainMesh_default(
1714
+ Cartesian3_default.clone(tempTerrainEncoding.center, new Cartesian3_default()),
1715
+ tempBuffer,
1716
+ indexBufferWithSkirts,
1717
+ indexCountWithoutSkirts,
1718
+ vertexCountWithoutSkirts,
1719
+ minimumHeight,
1720
+ maximumHeight,
1721
+ BoundingSphere_default.clone(boundingSphere, new BoundingSphere_default()),
1722
+ Cartesian3_default.clone(horizonOcclusionPoint, new Cartesian3_default()),
1723
+ tempBufferStride,
1724
+ OrientedBoundingBox_default.clone(orientedBoundingBox, new OrientedBoundingBox_default()),
1725
+ tempTerrainEncoding,
1726
+ westIndices,
1727
+ southIndices,
1728
+ eastIndices,
1729
+ northIndices
1730
+ );
1731
+ addSkirtsToMesh(
1732
+ mesh,
1733
+ rectangle,
1734
+ ellipsoid,
1735
+ minPosEnu,
1736
+ maxPosEnu,
1737
+ enuToEcef,
1738
+ ecefToEnu,
1739
+ skirtHeight
1740
+ );
1741
+ return Promise.resolve(mesh);
1742
+ };
1743
+ var scratchMinUV = new Cartesian2_default();
1744
+ var scratchMaxUV = new Cartesian2_default();
1745
+ var scratchPolygonIndices = new Array(6);
1746
+ var scratchUvA = new Cartesian2_default();
1747
+ var scratchUvB = new Cartesian2_default();
1748
+ var scratchUvC = new Cartesian2_default();
1749
+ var scratchNormalA = new Cartesian3_default();
1750
+ var scratchNormalB = new Cartesian3_default();
1751
+ var scratchNormalC = new Cartesian3_default();
1752
+ var scratchCenterCartographicUpsample = new Cartographic_default();
1753
+ var scratchCenterCartesianUpsample = new Cartesian3_default();
1754
+ var scratchCartographicSkirt = new Cartographic_default();
1755
+ var scratchCartographicUpsample = new Cartographic_default();
1756
+ var scratchPosEcefSkirt = new Cartesian3_default();
1757
+ var scratchPosEcefUpsample = new Cartesian3_default();
1758
+ var scratchPosEnuSkirt = new Cartesian3_default();
1759
+ var scratchPosEnuUpsample = new Cartesian3_default();
1760
+ var scratchMinimumPositionENUSkirt = new Cartesian3_default();
1761
+ var scratchMaximumPositionENUSkirt = new Cartesian3_default();
1762
+ var scratchMinimumPositionENUUpsample = new Cartesian3_default();
1763
+ var scratchMaximumPositionENUUpsample = new Cartesian3_default();
1764
+ var scratchEnuToEcefUpsample = new Matrix4_default();
1765
+ var scratchEcefToEnuUpsample = new Matrix4_default();
1766
+ var scratchUVSkirt = new Cartesian2_default();
1767
+ var scratchUVUpsample = new Cartesian2_default();
1768
+ var scratchHorizonOcclusionPoint = new Cartesian3_default();
1769
+ var scratchBoundingSphere = new BoundingSphere_default();
1770
+ var scratchOrientedBoundingBox = new OrientedBoundingBox_default();
1771
+ var scratchAABBEnuSkirt = new AxisAlignedBoundingBox_default();
1772
+ var scratchNormalUpsample = new Cartesian3_default();
1773
+ var scratchNormalOctSkirt = new Cartesian2_default();
1774
+ var scratchNormalOctUpsample = new Cartesian2_default();
1775
+ var scratchGeodeticSurfaceNormalSkirt = new Cartesian3_default();
1776
+ var scratchGeodeticSurfaceNormalUpsample = new Cartesian3_default();
1777
+ function decodePositions(gltf) {
1778
+ const primitive = gltf.meshes[0].primitives[0];
1779
+ const accessor = gltf.accessors[primitive.attributes["POSITION"]];
1780
+ const bufferView = gltf.bufferViews[accessor.bufferView];
1781
+ const positionCount = accessor.count;
1782
+ const bufferViewMeshOpt = bufferView.extensions ? bufferView.extensions["EXT_meshopt_compression"] : void 0;
1783
+ if (bufferViewMeshOpt === void 0) {
1784
+ const buffer2 = gltf.buffers[bufferView.buffer].extras._pipeline.source;
1785
+ return new Float32Array(
1786
+ buffer2.buffer,
1787
+ buffer2.byteOffset + // offset from the start of the glb
1788
+ (bufferView.byteOffset ?? 0) + (accessor.byteOffset ?? 0),
1789
+ positionCount * 3
1790
+ );
1791
+ }
1792
+ const buffer = gltf.buffers[bufferViewMeshOpt.buffer].extras._pipeline.source;
1793
+ const compressedBuffer = new Uint8Array(
1794
+ buffer.buffer,
1795
+ buffer.byteOffset + // offset from the start of the glb
1796
+ (bufferViewMeshOpt.byteOffset ?? 0) + (accessor.byteOffset ?? 0),
1797
+ bufferViewMeshOpt.byteLength
1798
+ );
1799
+ const positionByteLength = bufferViewMeshOpt.byteStride;
1800
+ const PositionType = positionByteLength === 4 ? Uint8Array : Uint16Array;
1801
+ const positionsResult = new PositionType(positionCount * 4);
1802
+ MeshoptDecoder.decodeVertexBuffer(
1803
+ new Uint8Array(positionsResult.buffer),
1804
+ positionCount,
1805
+ positionByteLength,
1806
+ compressedBuffer
1807
+ );
1808
+ const positionStorageValueMax = (1 << positionsResult.BYTES_PER_ELEMENT * 8) - 1;
1809
+ const positions = new Float32Array(positionCount * 3);
1810
+ for (let p = 0; p < positionCount; p++) {
1811
+ positions[p * 3 + 0] = positionsResult[p * 4 + 0] / positionStorageValueMax;
1812
+ positions[p * 3 + 1] = positionsResult[p * 4 + 1] / positionStorageValueMax;
1813
+ positions[p * 3 + 2] = positionsResult[p * 4 + 2] / positionStorageValueMax;
1814
+ }
1815
+ return positions;
1816
+ }
1817
+ function decodeNormals(gltf) {
1818
+ const primitive = gltf.meshes[0].primitives[0];
1819
+ const accessor = gltf.accessors[primitive.attributes["NORMAL"]];
1820
+ const bufferView = gltf.bufferViews[accessor.bufferView];
1821
+ const normalCount = accessor.count;
1822
+ const bufferViewMeshOpt = bufferView.extensions ? bufferView.extensions["EXT_meshopt_compression"] : void 0;
1823
+ if (bufferViewMeshOpt === void 0) {
1824
+ const buffer2 = gltf.buffers[bufferView.buffer].extras._pipeline.source;
1825
+ return new Float32Array(
1826
+ buffer2.buffer,
1827
+ buffer2.byteOffset + // offset from the start of the glb
1828
+ (bufferView.byteOffset ?? 0) + (accessor.byteOffset ?? 0),
1829
+ normalCount * 3
1830
+ );
1831
+ }
1832
+ const buffer = gltf.buffers[bufferViewMeshOpt.buffer].extras._pipeline.source;
1833
+ const compressedBuffer = new Uint8Array(
1834
+ buffer.buffer,
1835
+ buffer.byteOffset + // offset from the start of the glb
1836
+ (bufferViewMeshOpt.byteOffset ?? 0) + (accessor.byteOffset ?? 0),
1837
+ bufferViewMeshOpt.byteLength
1838
+ );
1839
+ const normalByteLength = bufferViewMeshOpt.byteStride;
1840
+ const normalsResult = new Int8Array(normalCount * normalByteLength);
1841
+ MeshoptDecoder.decodeVertexBuffer(
1842
+ new Uint8Array(normalsResult.buffer),
1843
+ normalCount,
1844
+ normalByteLength,
1845
+ compressedBuffer
1846
+ );
1847
+ const normals = new Float32Array(normalCount * 3);
1848
+ for (let i = 0; i < normalCount; i++) {
1849
+ let octX = Math.max(normalsResult[i * 4 + 0] / 127, -1);
1850
+ let octY = Math.max(normalsResult[i * 4 + 1] / 127, -1);
1851
+ const octZ = 1 - (Math.abs(octX) + Math.abs(octY));
1852
+ if (octZ < 0) {
1853
+ const oldX = octX;
1854
+ const oldY = octY;
1855
+ octX = (1 - Math.abs(oldY)) * Math_default.signNotZero(oldX);
1856
+ octY = (1 - Math.abs(oldX)) * Math_default.signNotZero(oldY);
1857
+ }
1858
+ let normal = scratchNormal;
1859
+ normal.x = octX;
1860
+ normal.y = octY;
1861
+ normal.z = octZ;
1862
+ normal = Cartesian3_default.normalize(normal, scratchNormal);
1863
+ normals[i * 3 + 0] = normal.x;
1864
+ normals[i * 3 + 1] = normal.y;
1865
+ normals[i * 3 + 2] = normal.z;
1866
+ }
1867
+ return normals;
1868
+ }
1869
+ function decodeIndices(gltf) {
1870
+ const primitive = gltf.meshes[0].primitives[0];
1871
+ const accessor = gltf.accessors[primitive.indices];
1872
+ const bufferView = gltf.bufferViews[accessor.bufferView];
1873
+ const indexCount = accessor.count;
1874
+ const SizedIndexType = accessor.componentType === ComponentDatatype_default.UNSIGNED_SHORT ? Uint16Array : Uint32Array;
1875
+ const bufferViewMeshOpt = bufferView.extensions ? bufferView.extensions["EXT_meshopt_compression"] : void 0;
1876
+ if (bufferViewMeshOpt === void 0) {
1877
+ const buffer2 = gltf.buffers[bufferView.buffer].extras._pipeline.source;
1878
+ return new SizedIndexType(
1879
+ buffer2.buffer,
1880
+ buffer2.byteOffset + // offset from the glb
1881
+ (bufferView.byteOffset ?? 0) + (accessor.byteOffset ?? 0),
1882
+ indexCount
1883
+ );
1884
+ }
1885
+ const buffer = gltf.buffers[bufferViewMeshOpt.buffer].extras._pipeline.source;
1886
+ const compressedBuffer = new Uint8Array(
1887
+ buffer.buffer,
1888
+ buffer.byteOffset + // offset from the start of the glb
1889
+ (bufferViewMeshOpt.byteOffset ?? 0) + (accessor.byteOffset ?? 0),
1890
+ bufferViewMeshOpt.byteLength
1891
+ );
1892
+ const indices = new SizedIndexType(indexCount);
1893
+ MeshoptDecoder.decodeIndexBuffer(
1894
+ new Uint8Array(indices.buffer),
1895
+ indexCount,
1896
+ bufferViewMeshOpt.byteStride,
1897
+ compressedBuffer
1898
+ );
1899
+ return indices;
1900
+ }
1901
+ function decodeEdgeIndices(gltf, name) {
1902
+ const primitive = gltf.meshes[0].primitives[0];
1903
+ const accessor = gltf.accessors[primitive.extensions.CESIUM_tile_edges[name]];
1904
+ const bufferView = gltf.bufferViews[accessor.bufferView];
1905
+ const indexCount = accessor.count;
1906
+ const SizedIndexType = accessor.componentType === ComponentDatatype_default.UNSIGNED_SHORT ? Uint16Array : Uint32Array;
1907
+ const bufferViewMeshOpt = bufferView.extensions ? bufferView.extensions["EXT_meshopt_compression"] : void 0;
1908
+ if (bufferViewMeshOpt === void 0) {
1909
+ const buffer2 = gltf.buffers[bufferView.buffer].extras._pipeline.source;
1910
+ return new SizedIndexType(
1911
+ buffer2.buffer,
1912
+ buffer2.byteOffset + // offset from the glb
1913
+ (bufferView.byteOffset ?? 0) + (accessor.byteOffset ?? 0),
1914
+ indexCount
1915
+ );
1916
+ }
1917
+ const buffer = gltf.buffers[bufferViewMeshOpt.buffer].extras._pipeline.source;
1918
+ const compressedBuffer = new Uint8Array(
1919
+ buffer.buffer,
1920
+ buffer.byteOffset + // offset from the start of the glb
1921
+ (bufferViewMeshOpt.byteOffset ?? 0) + (accessor.byteOffset ?? 0),
1922
+ bufferViewMeshOpt.byteLength
1923
+ );
1924
+ const indices = new SizedIndexType(indexCount);
1925
+ const indexByteLength = bufferViewMeshOpt.byteStride;
1926
+ MeshoptDecoder.decodeIndexSequence(
1927
+ new Uint8Array(indices.buffer),
1928
+ indexCount,
1929
+ indexByteLength,
1930
+ compressedBuffer
1931
+ );
1932
+ return indices;
1933
+ }
1934
+ function decodeGltf(gltf, hasNormals, result) {
1935
+ result.positions = decodePositions(gltf);
1936
+ result.normals = hasNormals ? decodeNormals(gltf) : void 0;
1937
+ result.indices = decodeIndices(gltf);
1938
+ result.edgeIndicesWest = decodeEdgeIndices(gltf, "left");
1939
+ result.edgeIndicesSouth = decodeEdgeIndices(gltf, "bottom");
1940
+ result.edgeIndicesEast = decodeEdgeIndices(gltf, "right");
1941
+ result.edgeIndicesNorth = decodeEdgeIndices(gltf, "top");
1942
+ return result;
1943
+ }
1944
+ Cesium3DTilesTerrainGeometryProcessor.upsampleMesh = function(options) {
1945
+ options = options ?? Frozen_default.EMPTY_OBJECT;
1946
+ const {
1947
+ isEastChild,
1948
+ isNorthChild,
1949
+ parentMinimumHeight,
1950
+ parentMaximumHeight,
1951
+ skirtHeight
1952
+ } = options;
1953
+ Check_default.typeOf.bool("options.isEastChild", isEastChild);
1954
+ Check_default.typeOf.bool("options.isNorthChild", isNorthChild);
1955
+ Check_default.typeOf.object("options.parentVertices", options.parentVertices);
1956
+ Check_default.typeOf.object("options.parentIndices", options.parentIndices);
1957
+ Check_default.typeOf.number(
1958
+ "options.parentVertexCountWithoutSkirts",
1959
+ options.parentVertexCountWithoutSkirts
1960
+ );
1961
+ Check_default.typeOf.number(
1962
+ "options.parentIndexCountWithoutSkirts",
1963
+ options.parentIndexCountWithoutSkirts
1964
+ );
1965
+ Check_default.typeOf.number("options.parentMinimumHeight", parentMinimumHeight);
1966
+ Check_default.typeOf.number("options.parentMaximumHeight", parentMaximumHeight);
1967
+ Check_default.typeOf.object("options.parentEncoding", options.parentEncoding);
1968
+ Check_default.typeOf.object("options.rectangle", options.rectangle);
1969
+ Check_default.typeOf.number("options.skirtHeight", skirtHeight);
1970
+ Check_default.typeOf.object("options.ellipsoid", options.ellipsoid);
1971
+ const indexCount = options.parentIndexCountWithoutSkirts;
1972
+ const indices = options.parentIndices;
1973
+ const vertexCount = options.parentVertexCountWithoutSkirts;
1974
+ const vertexBuffer = options.parentVertices;
1975
+ const encoding = TerrainEncoding_default.clone(
1976
+ options.parentEncoding,
1977
+ new TerrainEncoding_default()
1978
+ );
1979
+ const hasVertexNormals = encoding.hasVertexNormals;
1980
+ const hasWebMercatorT = encoding.hasWebMercatorT;
1981
+ const exaggeration = encoding.exaggeration;
1982
+ const exaggerationRelativeHeight = encoding.exaggerationRelativeHeight;
1983
+ const hasExaggeration = exaggeration !== 1;
1984
+ const hasGeodeticSurfaceNormals = hasExaggeration;
1985
+ const upsampleRectangle = Rectangle_default.clone(options.rectangle, new Rectangle_default());
1986
+ const ellipsoid = Ellipsoid_default.clone(options.ellipsoid);
1987
+ const upsampledTriIDs = [];
1988
+ const upsampledUVs = [];
1989
+ const upsampledBarys = [];
1990
+ const upsampledIndices = [];
1991
+ const upsampledWestIndices = [];
1992
+ const upsampledSouthIndices = [];
1993
+ const upsampledEastIndices = [];
1994
+ const upsampledNorthIndices = [];
1995
+ clipTileFromQuadrant(
1996
+ isEastChild,
1997
+ isNorthChild,
1998
+ indexCount,
1999
+ indices,
2000
+ vertexCount,
2001
+ vertexBuffer,
2002
+ encoding,
2003
+ upsampledIndices,
2004
+ upsampledWestIndices,
2005
+ upsampledSouthIndices,
2006
+ upsampledEastIndices,
2007
+ upsampledNorthIndices,
2008
+ upsampledTriIDs,
2009
+ upsampledBarys,
2010
+ upsampledUVs
2011
+ );
2012
+ const approximateCenterCartographic = Rectangle_default.center(
2013
+ upsampleRectangle,
2014
+ scratchCenterCartographicUpsample
2015
+ );
2016
+ approximateCenterCartographic.height = 0.5 * (parentMinimumHeight + parentMaximumHeight);
2017
+ const approximateCenterPosition = Cartographic_default.toCartesian(
2018
+ approximateCenterCartographic,
2019
+ ellipsoid,
2020
+ scratchCenterCartesianUpsample
2021
+ );
2022
+ const upsampledVertexCountWithoutSkirts = upsampledTriIDs.length;
2023
+ const upsampledTerrainEncoding = new TerrainEncoding_default(
2024
+ approximateCenterPosition,
2025
+ void 0,
2026
+ void 0,
2027
+ void 0,
2028
+ void 0,
2029
+ hasVertexNormals,
2030
+ hasWebMercatorT,
2031
+ hasGeodeticSurfaceNormals,
2032
+ exaggeration,
2033
+ exaggerationRelativeHeight
2034
+ );
2035
+ const upsampledVertexBufferStride = upsampledTerrainEncoding.stride;
2036
+ const upsampledSkirtVertexCount = TerrainProvider_default.getSkirtVertexCount(
2037
+ upsampledWestIndices,
2038
+ upsampledSouthIndices,
2039
+ upsampledEastIndices,
2040
+ upsampledNorthIndices
2041
+ );
2042
+ const upsampledVertexCountWithSkirts = upsampledVertexCountWithoutSkirts + upsampledSkirtVertexCount;
2043
+ const upsampledIndexCountWithoutSkirts = upsampledIndices.length;
2044
+ const upsampledSkirtIndexCount = TerrainProvider_default.getSkirtIndexCountWithFilledCorners(
2045
+ upsampledSkirtVertexCount
2046
+ );
2047
+ const upsampledIndexCountWithSkirts = upsampledIndexCountWithoutSkirts + upsampledSkirtIndexCount;
2048
+ const SizedIndexTypeWithSkirts = upsampledVertexCountWithSkirts <= 65535 ? Uint16Array : Uint32Array;
2049
+ const upsampledIndexBuffer = new SizedIndexTypeWithSkirts(
2050
+ upsampledIndexCountWithSkirts
2051
+ );
2052
+ upsampledIndexBuffer.set(upsampledIndices);
2053
+ const upsampledWestIndicesBuffer = new SizedIndexTypeWithSkirts(
2054
+ upsampledWestIndices
2055
+ );
2056
+ const upsampledSouthIndicesBuffer = new SizedIndexTypeWithSkirts(
2057
+ upsampledSouthIndices
2058
+ );
2059
+ const upsampledEastIndicesBuffer = new SizedIndexTypeWithSkirts(
2060
+ upsampledEastIndices
2061
+ );
2062
+ const upsampledNorthIndicesBuffer = new SizedIndexTypeWithSkirts(
2063
+ upsampledNorthIndices
2064
+ );
2065
+ const upsampledVertexBuffer = new Float32Array(
2066
+ upsampledVertexCountWithSkirts * upsampledVertexBufferStride
2067
+ );
2068
+ let upsampledVertexBufferOffset = 0;
2069
+ const enuToEcef = Transforms_default.eastNorthUpToFixedFrame(
2070
+ approximateCenterPosition,
2071
+ ellipsoid,
2072
+ scratchEnuToEcefUpsample
2073
+ );
2074
+ const ecefToEnu = Matrix4_default.inverseTransformation(
2075
+ enuToEcef,
2076
+ scratchEcefToEnuUpsample
2077
+ );
2078
+ const minimumLongitude = upsampleRectangle.west;
2079
+ const maximumLongitude = upsampleRectangle.east;
2080
+ const minimumLatitude = upsampleRectangle.south;
2081
+ const maximumLatitude = upsampleRectangle.north;
2082
+ const southMercatorAngle = WebMercatorProjection_default.geodeticLatitudeToMercatorAngle(minimumLatitude);
2083
+ const northMercatorAngle = WebMercatorProjection_default.geodeticLatitudeToMercatorAngle(maximumLatitude);
2084
+ const oneOverMercatorHeight = 1 / (northMercatorAngle - southMercatorAngle);
2085
+ let minimumHeight = Number.POSITIVE_INFINITY;
2086
+ let maximumHeight = Number.NEGATIVE_INFINITY;
2087
+ let minPosEnu = Cartesian3_default.fromElements(
2088
+ Number.POSITIVE_INFINITY,
2089
+ Number.POSITIVE_INFINITY,
2090
+ Number.POSITIVE_INFINITY,
2091
+ scratchMinimumPositionENUUpsample
2092
+ );
2093
+ let maxPosEnu = Cartesian3_default.fromElements(
2094
+ Number.NEGATIVE_INFINITY,
2095
+ Number.NEGATIVE_INFINITY,
2096
+ Number.NEGATIVE_INFINITY,
2097
+ scratchMaximumPositionENUUpsample
2098
+ );
2099
+ for (let i = 0; i < upsampledVertexCountWithoutSkirts; i++) {
2100
+ const triId = upsampledTriIDs[i];
2101
+ const indexA = indices[triId * 3 + 0];
2102
+ const indexB = indices[triId * 3 + 1];
2103
+ const indexC = indices[triId * 3 + 2];
2104
+ const uv = scratchUVUpsample;
2105
+ uv.x = upsampledUVs[i * 2 + 0];
2106
+ uv.y = upsampledUVs[i * 2 + 1];
2107
+ const u = uv.x;
2108
+ const v = uv.y;
2109
+ const baryA = upsampledBarys[i * 2 + 0];
2110
+ const baryB = upsampledBarys[i * 2 + 1];
2111
+ const baryC = 1 - baryA - baryB;
2112
+ const heightA = encoding.decodeHeight(vertexBuffer, indexA);
2113
+ const heightB = encoding.decodeHeight(vertexBuffer, indexB);
2114
+ const heightC = encoding.decodeHeight(vertexBuffer, indexC);
2115
+ const height = heightA * baryA + heightB * baryB + heightC * baryC;
2116
+ minimumHeight = Math.min(height, minimumHeight);
2117
+ maximumHeight = Math.max(height, maximumHeight);
2118
+ const lon = Math_default.lerp(minimumLongitude, maximumLongitude, u);
2119
+ const lat = Math_default.lerp(minimumLatitude, maximumLatitude, v);
2120
+ const carto = Cartographic_default.fromRadians(
2121
+ lon,
2122
+ lat,
2123
+ height,
2124
+ scratchCartographicUpsample
2125
+ );
2126
+ const position = Cartographic_default.toCartesian(
2127
+ carto,
2128
+ ellipsoid,
2129
+ scratchPosEcefUpsample
2130
+ );
2131
+ const posEnu = Matrix4_default.multiplyByPoint(
2132
+ ecefToEnu,
2133
+ position,
2134
+ scratchPosEnuUpsample
2135
+ );
2136
+ minPosEnu = Cartesian3_default.minimumByComponent(posEnu, minPosEnu, minPosEnu);
2137
+ maxPosEnu = Cartesian3_default.maximumByComponent(posEnu, maxPosEnu, maxPosEnu);
2138
+ let normalOct;
2139
+ if (hasVertexNormals) {
2140
+ const normalA = encoding.decodeNormal(
2141
+ vertexBuffer,
2142
+ indexA,
2143
+ scratchNormalA
2144
+ );
2145
+ const normalB = encoding.decodeNormal(
2146
+ vertexBuffer,
2147
+ indexB,
2148
+ scratchNormalB
2149
+ );
2150
+ const normalC = encoding.decodeNormal(
2151
+ vertexBuffer,
2152
+ indexC,
2153
+ scratchNormalC
2154
+ );
2155
+ let normal = Cartesian3_default.fromElements(
2156
+ normalA.x * baryA + normalB.x * baryB + normalC.x * baryC,
2157
+ normalA.y * baryA + normalB.y * baryB + normalC.y * baryC,
2158
+ normalA.z * baryA + normalB.z * baryB + normalC.z * baryC,
2159
+ scratchNormalUpsample
2160
+ );
2161
+ normal = Cartesian3_default.normalize(normal, scratchNormalUpsample);
2162
+ normalOct = AttributeCompression_default.octEncode(
2163
+ normal,
2164
+ scratchNormalOctUpsample
2165
+ );
2166
+ }
2167
+ let webMercatorT;
2168
+ if (hasWebMercatorT) {
2169
+ const mercatorAngle = WebMercatorProjection_default.geodeticLatitudeToMercatorAngle(lat);
2170
+ webMercatorT = (mercatorAngle - southMercatorAngle) * oneOverMercatorHeight;
2171
+ }
2172
+ let geodeticSurfaceNormal;
2173
+ if (hasGeodeticSurfaceNormals) {
2174
+ geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(
2175
+ position,
2176
+ scratchGeodeticSurfaceNormalUpsample
2177
+ );
2178
+ }
2179
+ upsampledVertexBufferOffset = upsampledTerrainEncoding.encode(
2180
+ upsampledVertexBuffer,
2181
+ upsampledVertexBufferOffset,
2182
+ position,
2183
+ uv,
2184
+ height,
2185
+ normalOct,
2186
+ webMercatorT,
2187
+ geodeticSurfaceNormal
2188
+ );
2189
+ }
2190
+ const orientedBoundingBox = OrientedBoundingBox_default.fromRectangle(
2191
+ upsampleRectangle,
2192
+ minimumHeight,
2193
+ maximumHeight,
2194
+ ellipsoid,
2195
+ scratchOrientedBoundingBox
2196
+ );
2197
+ const boundingSphere = BoundingSphere_default.fromVertices(
2198
+ upsampledVertexBuffer,
2199
+ upsampledTerrainEncoding.center,
2200
+ upsampledVertexBufferStride,
2201
+ scratchBoundingSphere
2202
+ );
2203
+ const occluder = new EllipsoidalOccluder_default(ellipsoid);
2204
+ const horizonOcclusionPoint = occluder.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid(
2205
+ upsampledTerrainEncoding.center,
2206
+ // vector from ellipsoid center to horizon occlusion point
2207
+ upsampledVertexBuffer,
2208
+ upsampledVertexBufferStride,
2209
+ upsampledTerrainEncoding.center,
2210
+ minimumHeight,
2211
+ scratchHorizonOcclusionPoint
2212
+ );
2213
+ const upsampledMesh = new TerrainMesh_default(
2214
+ Cartesian3_default.clone(upsampledTerrainEncoding.center, new Cartesian3_default()),
2215
+ upsampledVertexBuffer,
2216
+ upsampledIndexBuffer,
2217
+ upsampledIndexCountWithoutSkirts,
2218
+ upsampledVertexCountWithoutSkirts,
2219
+ minimumHeight,
2220
+ maximumHeight,
2221
+ BoundingSphere_default.clone(boundingSphere),
2222
+ Cartesian3_default.clone(horizonOcclusionPoint),
2223
+ upsampledVertexBufferStride,
2224
+ OrientedBoundingBox_default.clone(orientedBoundingBox),
2225
+ upsampledTerrainEncoding,
2226
+ upsampledWestIndicesBuffer,
2227
+ upsampledSouthIndicesBuffer,
2228
+ upsampledEastIndicesBuffer,
2229
+ upsampledNorthIndicesBuffer
2230
+ );
2231
+ addSkirtsToMesh(
2232
+ upsampledMesh,
2233
+ upsampleRectangle,
2234
+ ellipsoid,
2235
+ minPosEnu,
2236
+ maxPosEnu,
2237
+ enuToEcef,
2238
+ ecefToEnu,
2239
+ skirtHeight
2240
+ );
2241
+ return upsampledMesh;
2242
+ };
2243
+ function addSkirtsToMesh(mesh, rectangle, ellipsoid, enuMinimum, enuMaximum, enuToEcef, ecefToEnu, skirtHeight) {
2244
+ const { encoding } = mesh;
2245
+ const vertexStride = encoding.stride;
2246
+ const vertexBuffer = mesh.vertices;
2247
+ const {
2248
+ hasVertexNormals,
2249
+ hasWebMercatorT,
2250
+ exaggeration,
2251
+ exaggerationRelativeHeight
2252
+ } = encoding;
2253
+ const hasExaggeration = exaggeration !== 1;
2254
+ const hasGeodeticSurfaceNormals = hasExaggeration;
2255
+ const vertexCountWithoutSkirts = mesh.vertexCountWithoutSkirts;
2256
+ let vertexBufferOffset = vertexCountWithoutSkirts * vertexStride;
2257
+ const vertexCountWithSkirts = vertexBuffer.length / vertexStride;
2258
+ const skirtVertexCount = vertexCountWithSkirts - vertexCountWithoutSkirts;
2259
+ const indices = mesh.indices;
2260
+ const indexCountWithoutSkirts = mesh.indexCountWithoutSkirts;
2261
+ const westIndices = mesh.westIndicesSouthToNorth;
2262
+ const southIndices = mesh.southIndicesEastToWest;
2263
+ const eastIndices = mesh.eastIndicesNorthToSouth;
2264
+ const northIndices = mesh.northIndicesWestToEast;
2265
+ TerrainProvider_default.addSkirtIndicesWithFilledCorners(
2266
+ westIndices,
2267
+ southIndices,
2268
+ eastIndices,
2269
+ northIndices,
2270
+ vertexCountWithoutSkirts,
2271
+ indices,
2272
+ indexCountWithoutSkirts
2273
+ );
2274
+ const westOffset = 0;
2275
+ const southOffset = westOffset + westIndices.length;
2276
+ const eastOffset = southOffset + southIndices.length;
2277
+ const northOffset = eastOffset + eastIndices.length;
2278
+ const edges = [westIndices, southIndices, eastIndices, northIndices];
2279
+ const edgeIndexOffset = [westOffset, southOffset, eastOffset, northOffset];
2280
+ const edgeLongitudeSign = [-1, 0, 1, 0];
2281
+ const edgeLatitudeSign = [0, -1, 0, 1];
2282
+ const minimumPositionENUWithSkirts = Cartesian3_default.clone(
2283
+ enuMinimum,
2284
+ scratchMinimumPositionENUSkirt
2285
+ );
2286
+ const maximumPositionENUWithSkirts = Cartesian3_default.clone(
2287
+ enuMaximum,
2288
+ scratchMaximumPositionENUSkirt
2289
+ );
2290
+ const maximumHeight = mesh.maximumHeight;
2291
+ const minimumHeightWithSkirts = mesh.minimumHeight - skirtHeight;
2292
+ for (let skirtId = 0; skirtId < skirtVertexCount; skirtId++) {
2293
+ let side = 0;
2294
+ for (side = 0; side < 3; side++) {
2295
+ if (skirtId < edgeIndexOffset[side + 1]) {
2296
+ break;
2297
+ }
2298
+ }
2299
+ const vertexIndex = edges[side][skirtId - edgeIndexOffset[side]];
2300
+ const uv = encoding.decodeTextureCoordinates(
2301
+ vertexBuffer,
2302
+ vertexIndex,
2303
+ scratchUVSkirt
2304
+ );
2305
+ const skirtLonLatOffsetPercent = 1e-4;
2306
+ const longitudeT = uv.x + edgeLongitudeSign[side] * skirtLonLatOffsetPercent;
2307
+ const latitudeT = uv.y + edgeLatitudeSign[side] * skirtLonLatOffsetPercent;
2308
+ const longitude = Math_default.lerp(
2309
+ rectangle.west,
2310
+ rectangle.east,
2311
+ longitudeT
2312
+ );
2313
+ const latitude = Math_default.clamp(
2314
+ Math_default.lerp(rectangle.south, rectangle.north, latitudeT),
2315
+ -Math_default.PI_OVER_TWO,
2316
+ +Math_default.PI_OVER_TWO
2317
+ );
2318
+ const vertHeight = encoding.decodeHeight(vertexBuffer, vertexIndex);
2319
+ const height = vertHeight - skirtHeight;
2320
+ const cartographic = Cartographic_default.fromRadians(
2321
+ longitude,
2322
+ latitude,
2323
+ height,
2324
+ scratchCartographicSkirt
2325
+ );
2326
+ const positionEcef = Cartographic_default.toCartesian(
2327
+ cartographic,
2328
+ ellipsoid,
2329
+ scratchPosEcefSkirt
2330
+ );
2331
+ let normalOct;
2332
+ if (hasVertexNormals) {
2333
+ normalOct = encoding.getOctEncodedNormal(
2334
+ vertexBuffer,
2335
+ vertexIndex,
2336
+ scratchNormalOctSkirt
2337
+ );
2338
+ }
2339
+ let webMercatorT;
2340
+ if (hasWebMercatorT) {
2341
+ webMercatorT = encoding.decodeWebMercatorT(vertexBuffer, vertexIndex);
2342
+ }
2343
+ let geodeticSurfaceNormal;
2344
+ if (hasGeodeticSurfaceNormals) {
2345
+ geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(
2346
+ positionEcef,
2347
+ scratchGeodeticSurfaceNormalSkirt
2348
+ );
2349
+ }
2350
+ vertexBufferOffset = encoding.encode(
2351
+ vertexBuffer,
2352
+ vertexBufferOffset,
2353
+ positionEcef,
2354
+ uv,
2355
+ height,
2356
+ normalOct,
2357
+ webMercatorT,
2358
+ geodeticSurfaceNormal
2359
+ );
2360
+ const positionENU = Matrix4_default.multiplyByPoint(
2361
+ ecefToEnu,
2362
+ positionEcef,
2363
+ scratchPosEnuSkirt
2364
+ );
2365
+ Cartesian3_default.minimumByComponent(
2366
+ positionENU,
2367
+ minimumPositionENUWithSkirts,
2368
+ minimumPositionENUWithSkirts
2369
+ );
2370
+ Cartesian3_default.maximumByComponent(
2371
+ positionENU,
2372
+ maximumPositionENUWithSkirts,
2373
+ maximumPositionENUWithSkirts
2374
+ );
2375
+ }
2376
+ const aabbEnuWithSkirts = AxisAlignedBoundingBox_default.fromCorners(
2377
+ minimumPositionENUWithSkirts,
2378
+ maximumPositionENUWithSkirts,
2379
+ scratchAABBEnuSkirt
2380
+ );
2381
+ const encodingWithSkirts = new TerrainEncoding_default(
2382
+ encoding.center,
2383
+ aabbEnuWithSkirts,
2384
+ minimumHeightWithSkirts,
2385
+ maximumHeight,
2386
+ enuToEcef,
2387
+ encoding.hasVertexNormals,
2388
+ encoding.hasWebMercatorT,
2389
+ hasGeodeticSurfaceNormals,
2390
+ exaggeration,
2391
+ exaggerationRelativeHeight
2392
+ );
2393
+ if (encoding.quantization !== encodingWithSkirts.quantization) {
2394
+ const finalEncoding = encodingWithSkirts;
2395
+ const finalVertexStride = finalEncoding.stride;
2396
+ const finalVertexBuffer = new Float32Array(
2397
+ vertexCountWithSkirts * finalVertexStride
2398
+ );
2399
+ let finalVertexBufferOffset = 0;
2400
+ for (let i = 0; i < vertexCountWithSkirts; i++) {
2401
+ finalVertexBufferOffset = finalEncoding.encode(
2402
+ finalVertexBuffer,
2403
+ finalVertexBufferOffset,
2404
+ encoding.decodePosition(vertexBuffer, i, scratchPosEcefSkirt),
2405
+ encoding.decodeTextureCoordinates(vertexBuffer, i, scratchUVSkirt),
2406
+ encoding.decodeHeight(vertexBuffer, i),
2407
+ encoding.hasVertexNormals ? encoding.getOctEncodedNormal(vertexBuffer, i, scratchNormalOctSkirt) : void 0,
2408
+ encoding.hasWebMercatorT ? encoding.decodeWebMercatorT(vertexBuffer, i) : void 0,
2409
+ encoding.hasGeodeticSurfaceNormals ? encoding.decodeGeodeticSurfaceNormal(
2410
+ vertexBuffer,
2411
+ i,
2412
+ scratchGeodeticSurfaceNormalSkirt
2413
+ ) : void 0
2414
+ );
2415
+ }
2416
+ mesh.vertices = finalVertexBuffer;
2417
+ mesh.stride = finalVertexStride;
2418
+ mesh.encoding = finalEncoding;
2419
+ }
2420
+ return mesh;
2421
+ }
2422
+ var EDGE_ID_LEFT = 0;
2423
+ var EDGE_ID_TOP = 1;
2424
+ var EDGE_ID_RIGHT = 2;
2425
+ var EDGE_ID_BOTTOM = 3;
2426
+ var EDGE_COUNT = 4;
2427
+ var scratchIntersection = new Cartesian3_default();
2428
+ var scratchInBarys = [
2429
+ new Cartesian3_default(),
2430
+ new Cartesian3_default(),
2431
+ new Cartesian3_default(),
2432
+ new Cartesian3_default(),
2433
+ new Cartesian3_default(),
2434
+ new Cartesian3_default()
2435
+ ];
2436
+ var scratchInPoints = [
2437
+ new Cartesian2_default(),
2438
+ new Cartesian2_default(),
2439
+ new Cartesian2_default(),
2440
+ new Cartesian2_default(),
2441
+ new Cartesian2_default(),
2442
+ new Cartesian2_default()
2443
+ ];
2444
+ var scratchOutBarys = [
2445
+ new Cartesian3_default(),
2446
+ new Cartesian3_default(),
2447
+ new Cartesian3_default(),
2448
+ new Cartesian3_default(),
2449
+ new Cartesian3_default(),
2450
+ new Cartesian3_default()
2451
+ ];
2452
+ var scratchOutPoints = [
2453
+ new Cartesian2_default(),
2454
+ new Cartesian2_default(),
2455
+ new Cartesian2_default(),
2456
+ new Cartesian2_default(),
2457
+ new Cartesian2_default(),
2458
+ new Cartesian2_default()
2459
+ ];
2460
+ function inside(boxMinimum, boxMaximum, edgeId, p) {
2461
+ switch (edgeId) {
2462
+ case EDGE_ID_LEFT:
2463
+ return Math_default.sign(p.x - boxMinimum.x);
2464
+ case EDGE_ID_RIGHT:
2465
+ return Math_default.sign(boxMaximum.x - p.x);
2466
+ case EDGE_ID_BOTTOM:
2467
+ return Math_default.sign(p.y - boxMinimum.y);
2468
+ default:
2469
+ return Math_default.sign(boxMaximum.y - p.y);
2470
+ }
2471
+ }
2472
+ function intersect(boxMinimum, boxMaximum, edgeId, a, b, result) {
2473
+ let t, intersectX, intersectY;
2474
+ switch (edgeId) {
2475
+ case EDGE_ID_LEFT:
2476
+ t = (boxMinimum.x - a.x) / (b.x - a.x);
2477
+ intersectX = boxMinimum.x;
2478
+ intersectY = a.y + (b.y - a.y) * t;
2479
+ break;
2480
+ case EDGE_ID_RIGHT:
2481
+ t = (boxMaximum.x - a.x) / (b.x - a.x);
2482
+ intersectX = boxMaximum.x;
2483
+ intersectY = a.y + (b.y - a.y) * t;
2484
+ break;
2485
+ case EDGE_ID_BOTTOM:
2486
+ t = (boxMinimum.y - a.y) / (b.y - a.y);
2487
+ intersectX = a.x + (b.x - a.x) * t;
2488
+ intersectY = boxMinimum.y;
2489
+ break;
2490
+ default:
2491
+ t = (boxMaximum.y - a.y) / (b.y - a.y);
2492
+ intersectX = a.x + (b.x - a.x) * t;
2493
+ intersectY = boxMaximum.y;
2494
+ break;
2495
+ }
2496
+ return Cartesian3_default.fromElements(intersectX, intersectY, t, result);
2497
+ }
2498
+ var scratchPolygon = {
2499
+ length: 0,
2500
+ coordinates: [
2501
+ new Cartesian2_default(),
2502
+ new Cartesian2_default(),
2503
+ new Cartesian2_default(),
2504
+ new Cartesian2_default(),
2505
+ new Cartesian2_default(),
2506
+ new Cartesian2_default()
2507
+ ],
2508
+ barycentricCoordinates: [
2509
+ new Cartesian3_default(),
2510
+ new Cartesian3_default(),
2511
+ new Cartesian3_default(),
2512
+ new Cartesian3_default(),
2513
+ new Cartesian3_default(),
2514
+ new Cartesian3_default()
2515
+ ]
2516
+ };
2517
+ function clipTriangleAgainstBoxEdgeRange(edgeStart, edgeCount, boxMinimum, boxMaximum, p0, p1, p2, result) {
2518
+ let inputLength = 0;
2519
+ let inputPoints = scratchInPoints;
2520
+ let inputBarys = scratchInBarys;
2521
+ let outputLength = 3;
2522
+ let outputPoints = scratchOutPoints;
2523
+ Cartesian2_default.clone(p0, outputPoints[0]);
2524
+ Cartesian2_default.clone(p1, outputPoints[1]);
2525
+ Cartesian2_default.clone(p2, outputPoints[2]);
2526
+ let outputBarys = scratchOutBarys;
2527
+ Cartesian3_default.fromElements(1, 0, 0, outputBarys[0]);
2528
+ Cartesian3_default.fromElements(0, 1, 0, outputBarys[1]);
2529
+ Cartesian3_default.fromElements(0, 0, 1, outputBarys[2]);
2530
+ for (let e = 0; e < edgeCount; e++) {
2531
+ const edgeId = (edgeStart + e) % EDGE_COUNT;
2532
+ const tempPoints = inputPoints;
2533
+ const tempBarys = inputBarys;
2534
+ inputPoints = outputPoints;
2535
+ inputBarys = outputBarys;
2536
+ inputLength = outputLength;
2537
+ outputPoints = tempPoints;
2538
+ outputBarys = tempBarys;
2539
+ outputLength = 0;
2540
+ let prevIdx = inputLength - 1;
2541
+ let prevPoint = inputPoints[prevIdx];
2542
+ let prevBary = inputBarys[prevIdx];
2543
+ let prevInside = inside(boxMinimum, boxMaximum, edgeId, prevPoint);
2544
+ for (let currIdx = 0; currIdx < inputLength; currIdx++) {
2545
+ const currPoint = inputPoints[currIdx];
2546
+ const currBary = inputBarys[currIdx];
2547
+ const currInside = inside(boxMinimum, boxMaximum, edgeId, currPoint);
2548
+ if (prevInside * currInside === -1) {
2549
+ const intersection = intersect(
2550
+ boxMinimum,
2551
+ boxMaximum,
2552
+ edgeId,
2553
+ prevPoint,
2554
+ currPoint,
2555
+ scratchIntersection
2556
+ );
2557
+ const { x, y, z: t } = intersection;
2558
+ const tInv = 1 - t;
2559
+ const baryA = prevBary.x * tInv + currBary.x * t;
2560
+ const baryB = prevBary.y * tInv + currBary.y * t;
2561
+ const baryC = prevBary.z * tInv + currBary.z * t;
2562
+ Cartesian2_default.fromElements(x, y, outputPoints[outputLength]);
2563
+ Cartesian3_default.fromElements(baryA, baryB, baryC, outputBarys[outputLength]);
2564
+ outputLength++;
2565
+ }
2566
+ if (currInside >= 0) {
2567
+ Cartesian2_default.clone(currPoint, outputPoints[outputLength]);
2568
+ Cartesian3_default.clone(currBary, outputBarys[outputLength]);
2569
+ outputLength++;
2570
+ }
2571
+ prevIdx = currIdx;
2572
+ prevPoint = currPoint;
2573
+ prevBary = currBary;
2574
+ prevInside = currInside;
2575
+ }
2576
+ if (outputLength === 0) {
2577
+ break;
2578
+ }
2579
+ }
2580
+ result.length = outputLength;
2581
+ for (let i = 0; i < outputLength; i++) {
2582
+ Cartesian2_default.clone(outputPoints[i], result.coordinates[i]);
2583
+ Cartesian3_default.clone(outputBarys[i], result.barycentricCoordinates[i]);
2584
+ }
2585
+ return result;
2586
+ }
2587
+ function clipTriangleFromQuadrant(isEastChild, isNorthChild, boxMinimum, boxMaximum, p0, p1, p2, result) {
2588
+ const edgeStart = isEastChild ? isNorthChild ? EDGE_ID_BOTTOM : EDGE_ID_LEFT : isNorthChild ? EDGE_ID_RIGHT : EDGE_ID_TOP;
2589
+ return clipTriangleAgainstBoxEdgeRange(
2590
+ edgeStart,
2591
+ 2,
2592
+ boxMinimum,
2593
+ boxMaximum,
2594
+ p0,
2595
+ p1,
2596
+ p2,
2597
+ result
2598
+ );
2599
+ }
2600
+ var lookUpTableBaryToPrim = [
2601
+ [],
2602
+ // 000
2603
+ [0],
2604
+ // 001
2605
+ [1],
2606
+ // 010
2607
+ [0, 1],
2608
+ // 011
2609
+ [2],
2610
+ // 100
2611
+ [0, 2],
2612
+ // 101
2613
+ [1, 2],
2614
+ // 110
2615
+ [0, 1, 2]
2616
+ // 111
2617
+ ];
2618
+ function clipTileFromQuadrant(isEastChild, isNorthChild, indexCount, indices, vertexCount, vertices, vertexEncoding, resultIndices, resultWestIndices, resultSouthIndices, resultEastIndices, resultNorthIndices, resultTriIds, resultBary, resultUVs) {
2619
+ const upsampledVertexMap = {};
2620
+ const minU = isEastChild ? 0.5 : 0;
2621
+ const maxU = isEastChild ? 1 : 0.5;
2622
+ const minV = isNorthChild ? 0.5 : 0;
2623
+ const maxV = isNorthChild ? 1 : 0.5;
2624
+ const minUV = scratchMinUV;
2625
+ minUV.x = minU;
2626
+ minUV.y = minV;
2627
+ const maxUV = scratchMaxUV;
2628
+ maxUV.x = maxU;
2629
+ maxUV.y = maxV;
2630
+ let upsampledVertexCount = 0;
2631
+ for (let i = 0; i < indexCount; i += 3) {
2632
+ const indexA = indices[i + 0];
2633
+ const indexB = indices[i + 1];
2634
+ const indexC = indices[i + 2];
2635
+ const uvA = vertexEncoding.decodeTextureCoordinates(
2636
+ vertices,
2637
+ indexA,
2638
+ scratchUvA
2639
+ );
2640
+ const uvB = vertexEncoding.decodeTextureCoordinates(
2641
+ vertices,
2642
+ indexB,
2643
+ scratchUvB
2644
+ );
2645
+ const uvC = vertexEncoding.decodeTextureCoordinates(
2646
+ vertices,
2647
+ indexC,
2648
+ scratchUvC
2649
+ );
2650
+ const clippedPolygon = clipTriangleFromQuadrant(
2651
+ isEastChild,
2652
+ isNorthChild,
2653
+ minUV,
2654
+ maxUV,
2655
+ uvA,
2656
+ uvB,
2657
+ uvC,
2658
+ scratchPolygon
2659
+ );
2660
+ const clippedPolygonLength = clippedPolygon.length;
2661
+ if (clippedPolygonLength < 3) {
2662
+ continue;
2663
+ }
2664
+ const polygonUpsampledIndices = scratchPolygonIndices;
2665
+ for (let p = 0; p < clippedPolygonLength; p++) {
2666
+ const polygonBary = clippedPolygon.barycentricCoordinates[p];
2667
+ const bA = polygonBary.x;
2668
+ const bB = polygonBary.y;
2669
+ const bC = polygonBary.z;
2670
+ const baryId = Math.ceil(bA) | Math.ceil(bB) << 1 | Math.ceil(bC) << 2;
2671
+ const primitiveIds = lookUpTableBaryToPrim[baryId];
2672
+ let upsampledIndex;
2673
+ let isNewVertex = false;
2674
+ if (primitiveIds.length === 1) {
2675
+ const pointPrimitiveId = primitiveIds[0];
2676
+ const pointIndex = indices[i + pointPrimitiveId];
2677
+ const pointKey = pointIndex;
2678
+ upsampledIndex = upsampledVertexMap[pointKey];
2679
+ if (upsampledIndex === void 0) {
2680
+ isNewVertex = true;
2681
+ upsampledIndex = upsampledVertexCount++;
2682
+ upsampledVertexMap[pointKey] = upsampledIndex;
2683
+ }
2684
+ } else if (primitiveIds.length === 2) {
2685
+ const edgePrimitiveIdA = primitiveIds[0];
2686
+ const edgePrimitiveIdB = primitiveIds[1];
2687
+ const edgeIndexA = indices[i + edgePrimitiveIdA];
2688
+ const edgeIndexB = indices[i + edgePrimitiveIdB];
2689
+ const prevBary = clippedPolygon.barycentricCoordinates[(p + clippedPolygonLength - 1) % clippedPolygonLength];
2690
+ const prevBaryId = Math.ceil(prevBary.x) | Math.ceil(prevBary.y) << 1 | Math.ceil(prevBary.z) << 2;
2691
+ const sameEdge = baryId === prevBaryId;
2692
+ const minIndex = Math.min(edgeIndexA, edgeIndexB);
2693
+ const maxIndex = Math.max(edgeIndexA, edgeIndexB);
2694
+ const baseKey = vertexCount + 2 * (minIndex * vertexCount + maxIndex);
2695
+ const firstKey = baseKey + 0;
2696
+ const secondKey = baseKey + 1;
2697
+ const firstEntry = upsampledVertexMap[firstKey];
2698
+ const secondEntry = upsampledVertexMap[secondKey];
2699
+ const useFirst = !sameEdge === (firstEntry === void 0 || secondEntry === void 0);
2700
+ upsampledIndex = useFirst ? firstEntry : secondEntry;
2701
+ if (upsampledIndex === void 0) {
2702
+ isNewVertex = true;
2703
+ upsampledIndex = upsampledVertexCount++;
2704
+ const edgeKey = useFirst ? firstKey : secondKey;
2705
+ upsampledVertexMap[edgeKey] = upsampledIndex;
2706
+ }
2707
+ } else {
2708
+ isNewVertex = true;
2709
+ upsampledIndex = upsampledVertexCount++;
2710
+ }
2711
+ polygonUpsampledIndices[p] = upsampledIndex;
2712
+ if (isNewVertex) {
2713
+ const triId = i / 3;
2714
+ resultTriIds.push(triId);
2715
+ const polygonUV = clippedPolygon.coordinates[p];
2716
+ const u = (polygonUV.x - minU) / (maxU - minU);
2717
+ const v = (polygonUV.y - minV) / (maxV - minV);
2718
+ resultUVs.push(u, v);
2719
+ resultBary.push(bA, bB);
2720
+ if (u === 0) {
2721
+ resultWestIndices.push(upsampledIndex);
2722
+ } else if (u === 1) {
2723
+ resultEastIndices.push(upsampledIndex);
2724
+ }
2725
+ if (v === 0) {
2726
+ resultSouthIndices.push(upsampledIndex);
2727
+ } else if (v === 1) {
2728
+ resultNorthIndices.push(upsampledIndex);
2729
+ }
2730
+ }
2731
+ }
2732
+ const ui0 = polygonUpsampledIndices[0];
2733
+ let ui1 = polygonUpsampledIndices[1];
2734
+ let ui2 = polygonUpsampledIndices[2];
2735
+ resultIndices.push(ui0, ui1, ui2);
2736
+ for (let j = 3; j < clippedPolygonLength; j++) {
2737
+ ui1 = ui2;
2738
+ ui2 = polygonUpsampledIndices[j];
2739
+ resultIndices.push(ui0, ui1, ui2);
2740
+ }
2741
+ }
2742
+ resultWestIndices.sort(function(a, b) {
2743
+ return resultUVs[a * 2 + 1] - resultUVs[b * 2 + 1];
2744
+ });
2745
+ resultSouthIndices.sort(function(a, b) {
2746
+ return resultUVs[b * 2 + 0] - resultUVs[a * 2 + 0];
2747
+ });
2748
+ resultEastIndices.sort(function(a, b) {
2749
+ return resultUVs[b * 2 + 1] - resultUVs[a * 2 + 1];
2750
+ });
2751
+ resultNorthIndices.sort(function(a, b) {
2752
+ return resultUVs[a * 2 + 0] - resultUVs[b * 2 + 0];
2753
+ });
2754
+ }
2755
+ var Cesium3DTilesTerrainGeometryProcessor_default = Cesium3DTilesTerrainGeometryProcessor;
2756
+
2757
+ export {
2758
+ Cesium3DTilesTerrainGeometryProcessor_default
2759
+ };