astro-viewer 1.3.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.
- package/README.md +373 -0
- package/dist/astroviewer.cjs +13941 -0
- package/dist/astroviewer.cjs.map +1 -0
- package/dist/astroviewer.js +2 -0
- package/dist/astroviewer.js.map +1 -0
- package/dist/astroviewer.min.js +2 -0
- package/dist/astroviewer.min.js.map +1 -0
- package/lib-esm/AstroSphere.d.ts +114 -0
- package/lib-esm/AstroSphere.d.ts.map +1 -0
- package/lib-esm/AstroSphere.js +679 -0
- package/lib-esm/AstroSphere.js.map +1 -0
- package/lib-esm/AstroViewer.d.ts +81 -0
- package/lib-esm/AstroViewer.d.ts.map +1 -0
- package/lib-esm/AstroViewer.js +348 -0
- package/lib-esm/AstroViewer.js.map +1 -0
- package/lib-esm/Camera.d.ts +74 -0
- package/lib-esm/Camera.d.ts.map +1 -0
- package/lib-esm/Camera.js +334 -0
- package/lib-esm/Camera.js.map +1 -0
- package/lib-esm/Config.d.ts +20 -0
- package/lib-esm/Config.d.ts.map +1 -0
- package/lib-esm/Config.js +32 -0
- package/lib-esm/Config.js.map +1 -0
- package/lib-esm/Global.d.ts +27 -0
- package/lib-esm/Global.d.ts.map +1 -0
- package/lib-esm/Global.js +52 -0
- package/lib-esm/Global.js.map +1 -0
- package/lib-esm/index.d.ts +17 -0
- package/lib-esm/index.d.ts.map +1 -0
- package/lib-esm/index.js +16 -0
- package/lib-esm/index.js.map +1 -0
- package/lib-esm/model/AbstractSkyEntity.d.ts +55 -0
- package/lib-esm/model/AbstractSkyEntity.d.ts.map +1 -0
- package/lib-esm/model/AbstractSkyEntity.js +153 -0
- package/lib-esm/model/AbstractSkyEntity.js.map +1 -0
- package/lib-esm/model/AstroGL.d.ts +11 -0
- package/lib-esm/model/AstroGL.d.ts.map +1 -0
- package/lib-esm/model/AstroGL.js +2 -0
- package/lib-esm/model/AstroGL.js.map +1 -0
- package/lib-esm/model/ColorMaps.d.ts +17 -0
- package/lib-esm/model/ColorMaps.d.ts.map +1 -0
- package/lib-esm/model/ColorMaps.js +1288 -0
- package/lib-esm/model/ColorMaps.js.map +1 -0
- package/lib-esm/model/FoV.d.ts +63 -0
- package/lib-esm/model/FoV.d.ts.map +1 -0
- package/lib-esm/model/FoV.js +275 -0
- package/lib-esm/model/FoV.js.map +1 -0
- package/lib-esm/model/MetadataColumn.d.ts +50 -0
- package/lib-esm/model/MetadataColumn.d.ts.map +1 -0
- package/lib-esm/model/MetadataColumn.js +95 -0
- package/lib-esm/model/MetadataColumn.js.map +1 -0
- package/lib-esm/model/MetadataManager.d.ts +43 -0
- package/lib-esm/model/MetadataManager.d.ts.map +1 -0
- package/lib-esm/model/MetadataManager.js +117 -0
- package/lib-esm/model/MetadataManager.js.map +1 -0
- package/lib-esm/model/Point.d.ts +53 -0
- package/lib-esm/model/Point.d.ts.map +1 -0
- package/lib-esm/model/Point.js +133 -0
- package/lib-esm/model/Point.js.map +1 -0
- package/lib-esm/model/Point2D.d.ts +9 -0
- package/lib-esm/model/Point2D.d.ts.map +1 -0
- package/lib-esm/model/Point2D.js +16 -0
- package/lib-esm/model/Point2D.js.map +1 -0
- package/lib-esm/model/Source.d.ts +34 -0
- package/lib-esm/model/Source.d.ts.map +1 -0
- package/lib-esm/model/Source.js +63 -0
- package/lib-esm/model/Source.js.map +1 -0
- package/lib-esm/model/catalogues/CatalogueGL.d.ts +91 -0
- package/lib-esm/model/catalogues/CatalogueGL.d.ts.map +1 -0
- package/lib-esm/model/catalogues/CatalogueGL.js +614 -0
- package/lib-esm/model/catalogues/CatalogueGL.js.map +1 -0
- package/lib-esm/model/catalogues/CatalogueProps.d.ts +2 -0
- package/lib-esm/model/catalogues/CatalogueProps.d.ts.map +1 -0
- package/lib-esm/model/catalogues/CatalogueProps.js +156 -0
- package/lib-esm/model/catalogues/CatalogueProps.js.map +1 -0
- package/lib-esm/model/footprints/Footprint.d.ts +44 -0
- package/lib-esm/model/footprints/Footprint.d.ts.map +1 -0
- package/lib-esm/model/footprints/Footprint.js +104 -0
- package/lib-esm/model/footprints/Footprint.js.map +1 -0
- package/lib-esm/model/footprints/FootprintProps.d.ts +2 -0
- package/lib-esm/model/footprints/FootprintProps.d.ts.map +1 -0
- package/lib-esm/model/footprints/FootprintProps.js +87 -0
- package/lib-esm/model/footprints/FootprintProps.js.map +1 -0
- package/lib-esm/model/footprints/FootprintSetGL.d.ts +106 -0
- package/lib-esm/model/footprints/FootprintSetGL.d.ts.map +1 -0
- package/lib-esm/model/footprints/FootprintSetGL.js +592 -0
- package/lib-esm/model/footprints/FootprintSetGL.js.map +1 -0
- package/lib-esm/model/grid/EquatorialGrid.d.ts +49 -0
- package/lib-esm/model/grid/EquatorialGrid.d.ts.map +1 -0
- package/lib-esm/model/grid/EquatorialGrid.js +302 -0
- package/lib-esm/model/grid/EquatorialGrid.js.map +1 -0
- package/lib-esm/model/grid/GridTextHelper.d.ts +26 -0
- package/lib-esm/model/grid/GridTextHelper.d.ts.map +1 -0
- package/lib-esm/model/grid/GridTextHelper.js +92 -0
- package/lib-esm/model/grid/GridTextHelper.js.map +1 -0
- package/lib-esm/model/grid/HealpixGrid.d.ts +49 -0
- package/lib-esm/model/grid/HealpixGrid.d.ts.map +1 -0
- package/lib-esm/model/grid/HealpixGrid.js +306 -0
- package/lib-esm/model/grid/HealpixGrid.js.map +1 -0
- package/lib-esm/model/hips/AllSky.d.ts +40 -0
- package/lib-esm/model/hips/AllSky.d.ts.map +1 -0
- package/lib-esm/model/hips/AllSky.js +232 -0
- package/lib-esm/model/hips/AllSky.js.map +1 -0
- package/lib-esm/model/hips/AncestorTile.d.ts +38 -0
- package/lib-esm/model/hips/AncestorTile.d.ts.map +1 -0
- package/lib-esm/model/hips/AncestorTile.js +248 -0
- package/lib-esm/model/hips/AncestorTile.js.map +1 -0
- package/lib-esm/model/hips/FoVHelper.d.ts +11 -0
- package/lib-esm/model/hips/FoVHelper.d.ts.map +1 -0
- package/lib-esm/model/hips/FoVHelper.js +107 -0
- package/lib-esm/model/hips/FoVHelper.js.map +1 -0
- package/lib-esm/model/hips/HiPS.d.ts +47 -0
- package/lib-esm/model/hips/HiPS.d.ts.map +1 -0
- package/lib-esm/model/hips/HiPS.js +222 -0
- package/lib-esm/model/hips/HiPS.js.map +1 -0
- package/lib-esm/model/hips/HiPSDescriptor.d.ts +37 -0
- package/lib-esm/model/hips/HiPSDescriptor.d.ts.map +1 -0
- package/lib-esm/model/hips/HiPSDescriptor.js +132 -0
- package/lib-esm/model/hips/HiPSDescriptor.js.map +1 -0
- package/lib-esm/model/hips/Tile.d.ts +51 -0
- package/lib-esm/model/hips/Tile.d.ts.map +1 -0
- package/lib-esm/model/hips/Tile.js +355 -0
- package/lib-esm/model/hips/Tile.js.map +1 -0
- package/lib-esm/model/hips/TileBuffer.d.ts +39 -0
- package/lib-esm/model/hips/TileBuffer.d.ts.map +1 -0
- package/lib-esm/model/hips/TileBuffer.js +148 -0
- package/lib-esm/model/hips/TileBuffer.js.map +1 -0
- package/lib-esm/model/hips/VisibleTilesManager.d.ts +35 -0
- package/lib-esm/model/hips/VisibleTilesManager.d.ts.map +1 -0
- package/lib-esm/model/hips/VisibleTilesManager.js +160 -0
- package/lib-esm/model/hips/VisibleTilesManager.js.map +1 -0
- package/lib-esm/model/tap/TapMetadata.d.ts +31 -0
- package/lib-esm/model/tap/TapMetadata.d.ts.map +1 -0
- package/lib-esm/model/tap/TapMetadata.js +55 -0
- package/lib-esm/model/tap/TapMetadata.js.map +1 -0
- package/lib-esm/model/tap/TapMetadataList.d.ts +23 -0
- package/lib-esm/model/tap/TapMetadataList.d.ts.map +1 -0
- package/lib-esm/model/tap/TapMetadataList.js +58 -0
- package/lib-esm/model/tap/TapMetadataList.js.map +1 -0
- package/lib-esm/model/tap/TapRepo.d.ts +27 -0
- package/lib-esm/model/tap/TapRepo.d.ts.map +1 -0
- package/lib-esm/model/tap/TapRepo.js +51 -0
- package/lib-esm/model/tap/TapRepo.js.map +1 -0
- package/lib-esm/services/SesameService.d.ts +14 -0
- package/lib-esm/services/SesameService.d.ts.map +1 -0
- package/lib-esm/services/SesameService.js +54 -0
- package/lib-esm/services/SesameService.js.map +1 -0
- package/lib-esm/services/helpers.d.ts +5 -0
- package/lib-esm/services/helpers.d.ts.map +1 -0
- package/lib-esm/services/helpers.js +16 -0
- package/lib-esm/services/helpers.js.map +1 -0
- package/lib-esm/services/hipsNodeService.d.ts +7 -0
- package/lib-esm/services/hipsNodeService.d.ts.map +1 -0
- package/lib-esm/services/hipsNodeService.js +65 -0
- package/lib-esm/services/hipsNodeService.js.map +1 -0
- package/lib-esm/services/parse-hipslist.d.ts +3 -0
- package/lib-esm/services/parse-hipslist.d.ts.map +1 -0
- package/lib-esm/services/parse-hipslist.js +25 -0
- package/lib-esm/services/parse-hipslist.js.map +1 -0
- package/lib-esm/services/queryCatalogueByFoV.d.ts +2 -0
- package/lib-esm/services/queryCatalogueByFoV.d.ts.map +1 -0
- package/lib-esm/services/queryCatalogueByFoV.js +56 -0
- package/lib-esm/services/queryCatalogueByFoV.js.map +1 -0
- package/lib-esm/services/queryFootprintSetByFov.d.ts +2 -0
- package/lib-esm/services/queryFootprintSetByFov.d.ts.map +1 -0
- package/lib-esm/services/queryFootprintSetByFov.js +128 -0
- package/lib-esm/services/queryFootprintSetByFov.js.map +1 -0
- package/lib-esm/services/tapRepoService.d.ts +2 -0
- package/lib-esm/services/tapRepoService.d.ts.map +1 -0
- package/lib-esm/services/tapRepoService.js +190 -0
- package/lib-esm/services/tapRepoService.js.map +1 -0
- package/lib-esm/services/types.d.ts +13 -0
- package/lib-esm/services/types.d.ts.map +1 -0
- package/lib-esm/services/types.js +2 -0
- package/lib-esm/services/types.js.map +1 -0
- package/lib-esm/shader/CatalogueShaderProgram.d.ts +35 -0
- package/lib-esm/shader/CatalogueShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/CatalogueShaderProgram.js +94 -0
- package/lib-esm/shader/CatalogueShaderProgram.js.map +1 -0
- package/lib-esm/shader/FootprintShaderProgram.d.ts +31 -0
- package/lib-esm/shader/FootprintShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/FootprintShaderProgram.js +86 -0
- package/lib-esm/shader/FootprintShaderProgram.js.map +1 -0
- package/lib-esm/shader/GridShaderManager.d.ts +6 -0
- package/lib-esm/shader/GridShaderManager.d.ts.map +1 -0
- package/lib-esm/shader/GridShaderManager.js +29 -0
- package/lib-esm/shader/GridShaderManager.js.map +1 -0
- package/lib-esm/shader/HiPSShaderProgram.d.ts +54 -0
- package/lib-esm/shader/HiPSShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/HiPSShaderProgram.js +257 -0
- package/lib-esm/shader/HiPSShaderProgram.js.map +1 -0
- package/lib-esm/shader/ShaderManager.d.ts +12 -0
- package/lib-esm/shader/ShaderManager.d.ts.map +1 -0
- package/lib-esm/shader/ShaderManager.js +344 -0
- package/lib-esm/shader/ShaderManager.js.map +1 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.d.ts +12 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.d.ts.map +1 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.js +750 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.js.map +1 -0
- package/lib-esm/utils/CoordsType.d.ts +10 -0
- package/lib-esm/utils/CoordsType.d.ts.map +1 -0
- package/lib-esm/utils/CoordsType.js +12 -0
- package/lib-esm/utils/CoordsType.js.map +1 -0
- package/lib-esm/utils/FoVUtils.d.ts +46 -0
- package/lib-esm/utils/FoVUtils.d.ts.map +1 -0
- package/lib-esm/utils/FoVUtils.js +217 -0
- package/lib-esm/utils/FoVUtils.js.map +1 -0
- package/lib-esm/utils/GeomUtils.d.ts +36 -0
- package/lib-esm/utils/GeomUtils.d.ts.map +1 -0
- package/lib-esm/utils/GeomUtils.js +267 -0
- package/lib-esm/utils/GeomUtils.js.map +1 -0
- package/lib-esm/utils/MouseHelper.d.ts +36 -0
- package/lib-esm/utils/MouseHelper.d.ts.map +1 -0
- package/lib-esm/utils/MouseHelper.js +94 -0
- package/lib-esm/utils/MouseHelper.js.map +1 -0
- package/lib-esm/utils/PerspectiveMatrixManager.d.ts +11 -0
- package/lib-esm/utils/PerspectiveMatrixManager.d.ts.map +1 -0
- package/lib-esm/utils/PerspectiveMatrixManager.js +37 -0
- package/lib-esm/utils/PerspectiveMatrixManager.js.map +1 -0
- package/lib-esm/utils/RayPickingUtils.d.ts +30 -0
- package/lib-esm/utils/RayPickingUtils.d.ts.map +1 -0
- package/lib-esm/utils/RayPickingUtils.js +112 -0
- package/lib-esm/utils/RayPickingUtils.js.map +1 -0
- package/lib-esm/utils/STCSParser.d.ts +16 -0
- package/lib-esm/utils/STCSParser.d.ts.map +1 -0
- package/lib-esm/utils/STCSParser.js +96 -0
- package/lib-esm/utils/STCSParser.js.map +1 -0
- package/lib-esm/utils/ShaderUtility.d.ts +2 -0
- package/lib-esm/utils/ShaderUtility.d.ts.map +1 -0
- package/lib-esm/utils/ShaderUtility.js +23 -0
- package/lib-esm/utils/ShaderUtility.js.map +1 -0
- package/lib-esm/utils/Utils.d.ts +32 -0
- package/lib-esm/utils/Utils.d.ts.map +1 -0
- package/lib-esm/utils/Utils.js +77 -0
- package/lib-esm/utils/Utils.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"astroviewer.cjs","mappings":";;UAAA;UACA;;;;;WCDA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA,E;;;;;WCPA,wF;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNO,MAAM,SAAS,GAAa;IACjC,6BAA6B;IAC7B,gCAAgC;CACjC,GAAC;AAEF,mFAAmF;AACnF,sCAAsC;AACtC,wCAAwC;AACxC,wCAAwC;AACxC,2CAA2C;AAC3C,yDAAyD;AACzD,KAAK;AAEE,MAAM,QAAQ,GAAa;IAChC,qCAAqC;CACtC,GAAC;AAmBK,MAAM,SAAS,GAAc;IAClC,YAAY,EAAE,KAAK;IACnB,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK;IACpC,iBAAiB,EAAE,OAAO;IAC1B,gBAAgB,EAAE,GAAG;IACrB,YAAY,EAAE,wBAAwB;IACtC,YAAY,EAAE,KAAK;IACnB,WAAW,EAAE,EAAE;IACf,yDAAyD;IACzD,cAAc,EAAE,0CAA0C;IAC1D,OAAO,EAAE,qBAAqB;IAC9B,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,KAAK;IACjB,cAAc,EAAE,KAAK;CACtB,CAAC;;;AClDF;AACA;AACA;AACA;;AAEA;AACO;AACA;AACA;AACA;;AAEP;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,4CAA4C;AACvD;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA,C;;AChEwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,UAAmB;AACnC,MAAM,UAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,UAAmB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP,gBAAgB,UAAmB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,QAAG;AACnB;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP,0CAA0C,QAAG;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAG;AACvB;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,SAAS;AACtB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,SAAS;AACtB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO,UAAU,wDAAQ;;AAEzB;AACA,cAAc;AACd;AACA;AACO,UAAU,wDAAQ;;AAEzB;AACA,cAAc;AACd;AACA;AACO,UAAU,sDAAM;;AAEvB;AACA,cAAc;AACd;AACA;AACO,WAAW,wDAAQ;;AAE1B;AACA,cAAc;AACd;AACA;AACO,cAAc,+DAAe;;AAEpC;AACA,cAAc;AACd;AACA;AACO,UAAU,2DAAM;;AAEvB;AACA,cAAc;AACd;AACA;AACO,aAAa,6DAAa;;AAEjC;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,G;;AC5xBuC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACO,SAAS,WAAM;AACtB,gBAAgB,UAAmB;AACnC,MAAM,UAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB,gBAAgB,UAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,SAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,eAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,QAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,aAAa;AAC1B;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,aAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,YAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,YAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,YAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,cAAc;AAC1B,YAAY,MAAM;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,cAAc;AAC1B,YAAY,MAAM;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,YAAY,MAAM;AAClB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,cAAc;AAC1B,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB;AACA,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO,YAAY,uDAAO;;AAE1B;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,QAAG;AACnB;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,QAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,aAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,SAAS;AACtB;AACO,SAAS,gBAAW;AAC3B;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,SAAS;AACtB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO,IAAI,QAAG,GAAG,6DAAQ;;AAEzB;AACA,cAAc;AACd;AACA;AACO,IAAI,QAAG,GAAG,6DAAQ,G;;ACx6DzB;;GAEG;AAC8B;AAwBjC,qBAAqB;AA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CA;AACA,gC;;ACRyC;AACR;AACA;AAC1B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA,mBAAmB,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iC;;ACpMA;AACA;AACA;AACmC;AACM;AAClC;AACP;AACA,4BAA4B,QAAQ;AACpC;AACA,sBAAsB,KAAK;AAC3B,2BAA2B,KAAK;AAChC,2BAA2B,KAAK;AAChC,qBAAqB,KAAK;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,SAAS;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,KAAK;AACvB,sBAAsB,KAAK;AAC3B,sBAAsB,KAAK;AAC3B,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA,gC;;ACpHiC;AAC1B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wC;;ACnEA;AACA;AACA;AACmC;AAC5B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gC;;ACxDO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kC;;AC5CO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oC;;AClEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,+B;;ACVa;AACoC;AACN;AACV;AACE;AACM;AACJ;AACI;AACR;AACF;AACE;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA,2BAA2B,KAAK;AAChC,2BAA2B,KAAK;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,IAAI;AAC5B,wBAAwB,IAAI;AAC5B,wBAAwB,IAAI;AAC5B,wBAAwB,IAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC,4BAA4B,IAAI;AAChC,mCAAmC,IAAI;AACvC,uCAAuC,IAAI;AAC3C,uCAAuC,IAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,GAAG;AACzB;AACA;AACA;AACA,wBAAwB,IAAI;AAC5B,wBAAwB,IAAI;AAC5B,wBAAwB,IAAI;AAC5B,wBAAwB,IAAI;AAC5B;AACA;AACA;AACA;AACA;AACA,sBAAsB,GAAG;AACzB;AACA;AACA;AACA,wBAAwB,IAAI;AAC5B,wBAAwB,IAAI;AAC5B,wBAAwB,IAAI;AAC5B,wBAAwB,IAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,GAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA,mCAAmC;AACnC;AACA;AACA,gDAAgD;AAChD,gDAAgD;AAChD,qDAAqD,OAAO;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,mDAAmD;AACnD;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,8CAA8C,SAAS,oCAAoC,SAAS;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,gCAAgC,KAAK;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA,2BAA2B,YAAY;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB,wBAAwB,YAAY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC,oBAAoB,IAAI;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA,yBAAyB,YAAY;AACrC;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB,wBAAwB,YAAY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,oBAAoB,WAAW,OAAO;AACtC;AACA,6CAA6C;AAC7C,wBAAwB,QAAQ;AAChC;AACA,kEAAkE,KAAK;AACvE,8CAA8C,KAAK;AACnD,6DAA6D,KAAK;AAClE;AACA;AACA,sBAAsB,MAAM;AAC5B,wBAAwB,QAAQ,OAAO;AACvC;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA,iCAAiC,WAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,SAAS,eAAe,eAAe;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,kDAAkD;AAClD;AACA;AACA,mBAAmB;AACnB,gCAAgC,OAAO;AACvC,sDAAsD;AACtD;AACA;AACA;AACA,mCAAmC;AACnC,6BAA6B;AAC7B,+DAA+D;AAC/D,iCAAiC;AACjC;AACA,mBAAmB;AACnB,gCAAgC;AAChC,oCAAoC,OAAO,OAAO;AAClD,0DAA0D;AAC1D;AACA;AACA,uBAAuB;AACvB,mEAAmE;AACnE,qCAAqC;AACrC;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,kCAAkC;AAClC,yCAAyC;AACzC,gCAAgC;AAChC,oCAAoC,OAAO,OAAO;AAClD,0DAA0D;AAC1D;AACA;AACA,uBAAuB;AACvB,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,IAAI;AAC5B;AACA,qBAAqB,IAAI;AACzB;AACA;AACA,wBAAwB,IAAI;AAC5B;AACA,qBAAqB,IAAI;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,YAAY;AAClD;AACA;AACA;AACA;AACA,SAAS,iBAAiB,wBAAwB,YAAY;AAC9D;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE,mBAAmB,IAAI;AACvB;AACA;AACA,qBAAqB,KAAK;AAC1B,qBAAqB,KAAK;AAC1B,wBAAwB,WAAW,OAAO;AAC1C,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,MAAM;AAC5B,wBAAwB,QAAQ,OAAO;AACvC;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC9C,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC1F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC3E,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC5F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YAC5F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC7F,CAAC;KACH;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC1F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SACvF,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACxF,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG;SACJ,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzF,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SACpF,CAAC;KACH;IAED,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC1F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC1F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC3E,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SACnB,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC1F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;SAChC,CAAC;KACH;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACvF,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SACrD,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC1F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC/E,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC5F,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC7B,CAAC;KACH;IACD,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACvF,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;SAC5D,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACxF,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG;SACT,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC3F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;YAC5F,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC7F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC3F,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3F,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;YAC7F,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YAC3F,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC/B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AAE,EAAE;YACtE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC9C,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC/D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC1D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAChD,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAClB,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;SACJ,CAAC;QACF,CAAC,EAAE,IAAI,YAAY,CAAC;YAClB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAChO,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC1E,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACnF,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACnF,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACzE,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE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AAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,aAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,SAAI;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,QAAG;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,QAAG;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,gBAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,aAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,oBAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,kBAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,YAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,cAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,UAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,SAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACO,SAAS,WAAM;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,kBAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,MAAM;AACnB;AACO,SAAS,kBAAa;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACO,SAAS,SAAI;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO,SAAS,QAAG;AACnB;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,SAAS;AACtB;AACO,SAAS,gBAAW;AAC3B;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,SAAS;AACtB;AACO,SAAS,WAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACO,IAAI,QAAG,GAAG,6DAAQ;;AAEzB;AACA,cAAc;AACd;AACA;AACO,IAAI,QAAG,GAAG,6DAAQ;;AAEzB;AACA,cAAc;AACd;AACA;AACO,IAAI,QAAG,GAAG,2DAAM;;AAEvB;AACA,cAAc;AACd;AACA;AACO,IAAI,SAAI,GAAG,6DAAQ;;AAE1B;AACA,cAAc;AACd;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","sources":["webpack://astro-viewer/webpack/bootstrap","webpack://astro-viewer/webpack/runtime/define property getters","webpack://astro-viewer/webpack/runtime/hasOwnProperty shorthand","webpack://astro-viewer/webpack/runtime/make namespace object","webpack://astro-viewer/./src/Config.ts","webpack://astro-viewer/./node_modules/gl-matrix/esm/common.js","webpack://astro-viewer/./node_modules/gl-matrix/esm/vec3.js","webpack://astro-viewer/./node_modules/gl-matrix/esm/mat4.js","webpack://astro-viewer/./src/utils/Utils.ts","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/Constants.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/Pointing.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/Zphi.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/Hploc.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/Vec3.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/CircleFinder.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/Fxyf.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/pstack.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/RangeSet.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/Xyf.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/Healpix.js","webpack://astro-viewer/./node_modules/healpixjs/lib-esm/index.js","webpack://astro-viewer/./src/Global.ts","webpack://astro-viewer/./src/Camera.ts","webpack://astro-viewer/./src/utils/RayPickingUtils.ts","webpack://astro-viewer/./src/utils/MouseHelper.ts","webpack://astro-viewer/./src/shader/ShaderManager.ts","webpack://astro-viewer/./src/model/ColorMaps.ts","webpack://astro-viewer/./src/shader/HiPSShaderProgram.ts","webpack://astro-viewer/./src/model/AbstractSkyEntity.ts","webpack://astro-viewer/./src/model/hips/FoVHelper.ts","webpack://astro-viewer/./src/model/hips/AncestorTile.ts","webpack://astro-viewer/./src/model/hips/AllSky.ts","webpack://astro-viewer/./src/model/hips/HiPS.ts","webpack://astro-viewer/./src/utils/PerspectiveMatrixManager.ts","webpack://astro-viewer/./src/utils/CoordsType.ts","webpack://astro-viewer/./src/model/Point.ts","webpack://astro-viewer/./src/utils/FoVUtils.ts","webpack://astro-viewer/./node_modules/gl-matrix/esm/vec4.js","webpack://astro-viewer/./src/shader/GridShaderManager.ts","webpack://astro-viewer/./src/model/grid/GridTextHelper.ts","webpack://astro-viewer/./src/model/FoV.ts","webpack://astro-viewer/./src/model/Point2D.ts","webpack://astro-viewer/./src/utils/GeomUtils.ts","webpack://astro-viewer/./src/model/hips/Tile.ts","webpack://astro-viewer/./src/model/hips/TileBuffer.ts","webpack://astro-viewer/./src/model/hips/VisibleTilesManager.ts","webpack://astro-viewer/./src/model/grid/HealpixGrid.ts","webpack://astro-viewer/./src/model/grid/EquatorialGrid.ts","webpack://astro-viewer/./src/AstroSphere.ts","webpack://astro-viewer/./src/model/hips/HiPSDescriptor.ts","webpack://astro-viewer/./src/model/Source.ts","webpack://astro-viewer/./src/shader/CatalogueShaderProgram.ts","webpack://astro-viewer/./src/model/MetadataColumn.ts","webpack://astro-viewer/./src/model/MetadataManager.ts","webpack://astro-viewer/./src/model/catalogues/CatalogueGL.ts","webpack://astro-viewer/./src/utils/STCSParser.ts","webpack://astro-viewer/./src/model/footprints/Footprint.ts","webpack://astro-viewer/./src/shader/FootprintShaderProgram.ts","webpack://astro-viewer/./src/model/footprints/FootprintSetGL.ts","webpack://astro-viewer/./src/AstroViewer.ts","webpack://astro-viewer/./src/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export const hipsNodes: string[] = [\n \"https://skies.esac.esa.int/\",\n \"https://alasky.cds.unistra.fr/\",\n];\n\n// If you want to re-enable multiple TAP repos, just uncomment and extend the array\n// export const tapRepos: string[] = [\n// \"https://archive.eso.org/tap_cat/\",\n// \"https://archive.eso.org/tap_obs/\",\n// \"https://sky.esa.int/esasky-tap/tap/\",\n// \"https://ws.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/argus\",\n// ];\n\nexport const tapRepos: string[] = [\n \"https://sky.esa.int/esasky-tap/tap/\",\n];\n\nexport interface BootSetup {\n insideSphere: boolean;\n defaultHips: string;\n camera_fov_deg: number;\n camera_fov_rad: number;\n camera_near_plane: number;\n camera_far_plane: number;\n corsProxyUrl: string;\n useCORSProxy: boolean;\n maxDecimals: number;\n defaultHipsUrl: string;\n version: string;\n debug: boolean;\n insideView: boolean;\n showViewfinder: boolean;\n}\n\nexport const bootSetup: BootSetup = {\n insideSphere: false,\n defaultHips: \"\",\n camera_fov_deg: 34,\n camera_fov_rad: 34 * Math.PI / 180.0,\n camera_near_plane: 0.00001,\n camera_far_plane: 2.5,\n corsProxyUrl: \"http://localhost:4000/\",\n useCORSProxy: false,\n maxDecimals: 15,\n // defaultHipsUrl: \"//alasky.u-strasbg.fr/DSS/DSSColor/\",\n defaultHipsUrl: \"https://cdn.skies.esac.esa.int/DSSColor/\",\n version: \"Astrobrowser v1.0.0\",\n debug: false,\n insideView: false,\n showViewfinder: false,\n};\n","/**\n * Common utilities\n * @module glMatrix\n */\n\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== \"undefined\" ? Float32Array : Array;\nexport var RANDOM = Math.random;\nexport var ANGLE_ORDER = \"zyx\";\n\n/**\n * Symmetric round\n * see https://www.npmjs.com/package/round-half-up-symmetric#user-content-detailed-background\n *\n * @param {Number} a value to round\n */\nexport function round(a) {\n if (a >= 0) return Math.round(a);\n return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);\n}\n\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\nvar radian = 180 / Math.PI;\n\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\nexport function toRadian(a) {\n return a * degree;\n}\n\n/**\n * Convert Radian To Degree\n *\n * @param {Number} a Angle in Radians\n */\nexport function toDegree(a) {\n return a * radian;\n}\n\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @param {Number} tolerance Absolute or relative tolerance (default glMatrix.EPSILON)\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\nexport function equals(a, b) {\n var tolerance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EPSILON;\n return Math.abs(a - b) <= tolerance * Math.max(1, Math.abs(a), Math.abs(b));\n}","import * as glMatrix from \"./common.js\";\n\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n return out;\n}\n\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {ReadonlyVec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.sqrt(x * x + y * y + z * z);\n}\n\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the source vector\n * @returns {vec3} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to ceil\n * @returns {vec3} out\n */\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to floor\n * @returns {vec3} out\n */\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n\n/**\n * symmetric round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to round\n * @returns {vec3} out\n */\nexport function round(out, a) {\n out[0] = glMatrix.round(a[0]);\n out[1] = glMatrix.round(a[1]);\n out[2] = glMatrix.round(a[2]);\n return out;\n}\n\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.sqrt(x * x + y * y + z * z);\n}\n\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n\n/**\n * Calculates the squared length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to negate\n * @returns {vec3} out\n */\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to invert\n * @returns {vec3} out\n */\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to normalize\n * @returns {vec3} out\n */\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n\n/**\n * Performs a spherical linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function slerp(out, a, b, t) {\n var angle = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));\n var sinTotal = Math.sin(angle);\n var ratioA = Math.sin((1 - t) * angle) / sinTotal;\n var ratioB = Math.sin(t * angle) / sinTotal;\n out[0] = ratioA * a[0] + ratioB * b[0];\n out[1] = ratioA * a[1] + ratioB * b[1];\n out[2] = ratioA * a[2] + ratioB * b[2];\n return out;\n}\n\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns {vec3} out\n */\nexport function random(out, scale) {\n scale = scale === undefined ? 1.0 : scale;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyQuat} q normalized quaternion to transform with\n * @returns {vec3} out\n */\nexport function transformQuat(out, a, q) {\n // Fast Vector Rotation using Quaternions by Robert Eisele\n // https://raw.org/proof/vector-rotation-using-quaternions/\n\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var vx = a[0],\n vy = a[1],\n vz = a[2];\n\n // t = q x v\n var tx = qy * vz - qz * vy;\n var ty = qz * vx - qx * vz;\n var tz = qx * vy - qy * vx;\n\n // t = 2t\n tx = tx + tx;\n ty = ty + ty;\n tz = tz + tz;\n\n // v + w t + q x t\n out[0] = vx + qw * tx + qy * tz - qz * ty;\n out[1] = vy + qw * ty + qz * tx - qx * tz;\n out[2] = vz + qw * tz + qx * ty - qy * tx;\n return out;\n}\n\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n\n //translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n\n //translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2];\n\n //translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n\n/**\n * Get the angle between two 3D vectors\n * @param {ReadonlyVec3} a The first operand\n * @param {ReadonlyVec3} b The second operand\n * @returns {Number} The angle in radians\n */\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz)),\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n\n/**\n * Set the components of a vec3 to zero\n *\n * @param {vec3} out the receiving vector\n * @returns {vec3} out\n */\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\nexport var sub = subtract;\n\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\nexport var div = divide;\n\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\nexport var dist = distance;\n\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\nexport var sqrDist = squaredDistance;\n\n/**\n * Alias for {@link vec3.length}\n * @function\n */\nexport var len = length;\n\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\nexport var sqrLen = squaredLength;\n\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n if (!stride) {\n stride = 3;\n }\n if (!offset) {\n offset = 0;\n }\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\n\n/**\n * 4x4 Matrix<br>Format: column-major, when typed out it looks like row-major<br>The matrices are being post multiplied.\n * @module mat4\n */\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n/**\n * Create a new mat4 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} A new mat4\n */\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n\n/**\n * Set the components of a mat4 to the given values\n *\n * @param {mat4} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} out\n */\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n return out;\n}\n\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4 | null} out, or null if source matrix is not invertible\n */\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32;\n out[0] = a11 * b11 - a12 * b10 + a13 * b09;\n out[1] = a02 * b10 - a01 * b11 - a03 * b09;\n out[2] = a31 * b05 - a32 * b04 + a33 * b03;\n out[3] = a22 * b04 - a21 * b05 - a23 * b03;\n out[4] = a12 * b08 - a10 * b11 - a13 * b07;\n out[5] = a00 * b11 - a02 * b08 + a03 * b07;\n out[6] = a32 * b02 - a30 * b05 - a33 * b01;\n out[7] = a20 * b05 - a22 * b02 + a23 * b01;\n out[8] = a10 * b10 - a11 * b08 + a13 * b06;\n out[9] = a01 * b08 - a00 * b10 - a03 * b06;\n out[10] = a30 * b04 - a31 * b02 + a33 * b00;\n out[11] = a21 * b02 - a20 * b04 - a23 * b00;\n out[12] = a11 * b07 - a10 * b09 - a12 * b06;\n out[13] = a00 * b09 - a01 * b07 + a02 * b06;\n out[14] = a31 * b01 - a30 * b03 - a32 * b00;\n out[15] = a20 * b03 - a21 * b01 + a22 * b00;\n return out;\n}\n\n/**\n * Calculates the determinant of a mat4\n *\n * @param {ReadonlyMat4} a the source matrix\n * @returns {Number} determinant of a\n */\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b0 = a00 * a11 - a01 * a10;\n var b1 = a00 * a12 - a02 * a10;\n var b2 = a01 * a12 - a02 * a11;\n var b3 = a20 * a31 - a21 * a30;\n var b4 = a20 * a32 - a22 * a30;\n var b5 = a21 * a32 - a22 * a31;\n var b6 = a00 * b5 - a01 * b4 + a02 * b3;\n var b7 = a10 * b5 - a11 * b4 + a12 * b3;\n var b8 = a20 * b2 - a21 * b1 + a22 * b0;\n var b9 = a30 * b2 - a31 * b1 + a32 * b0;\n\n // Calculate the determinant\n return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;\n}\n\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n\n // Cache only the current line of the second matrix\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to translate\n * @param {ReadonlyVec3} v vector to translate by\n * @returns {mat4} out\n */\nexport function translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n return out;\n}\n\n/**\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n/**\n * Rotates a mat4 by the given angle around the given axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nexport function rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.sqrt(x * x + y * y + z * z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n if (len < glMatrix.EPSILON) {\n return null;\n }\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n\n // Construct the elements of the rotation matrix\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c;\n\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n return out;\n}\n\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.scale(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Scaling vector\n * @returns {mat4} out\n */\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotate(dest, dest, rad, axis);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nexport function fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.sqrt(x * x + y * y + z * z);\n var s, c, t;\n if (len < glMatrix.EPSILON) {\n return null;\n }\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n\n // Perform rotation-specific matrix multiplication\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateX(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateY(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateZ(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n * let quatMat = mat4.create();\n * mat4.fromQuat(quatMat, quat);\n * mat4.multiply(dest, dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\nexport function fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a new mat4 from a dual quat.\n *\n * @param {mat4} out Matrix\n * @param {ReadonlyQuat2} a Dual Quaternion\n * @returns {mat4} mat4 receiving operation result\n */\nexport function fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw;\n //Only scale if it makes sense\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n fromRotationTranslation(out, a, translation);\n return out;\n}\n\n/**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @param {vec3} out Vector to receive translation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\nexport function getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n\n/**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion parameter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @param {vec3} out Vector to receive scaling factor component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\nexport function getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n return out;\n}\n\n/**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\nexport function getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n return out;\n}\n\n/**\n * Decomposes a transformation matrix into its rotation, translation\n * and scale components. Returns only the rotation component\n * @param {quat} out_r Quaternion to receive the rotation component\n * @param {vec3} out_t Vector to receive the translation vector\n * @param {vec3} out_s Vector to receive the scaling factor\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @returns {quat} out_r\n */\nexport function decompose(out_r, out_t, out_s, mat) {\n out_t[0] = mat[12];\n out_t[1] = mat[13];\n out_t[2] = mat[14];\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out_s[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n out_s[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n out_s[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n var is1 = 1 / out_s[0];\n var is2 = 1 / out_s[1];\n var is3 = 1 / out_s[2];\n var sm11 = m11 * is1;\n var sm12 = m12 * is2;\n var sm13 = m13 * is3;\n var sm21 = m21 * is1;\n var sm22 = m22 * is2;\n var sm23 = m23 * is3;\n var sm31 = m31 * is1;\n var sm32 = m32 * is2;\n var sm33 = m33 * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out_r[3] = 0.25 * S;\n out_r[0] = (sm23 - sm32) / S;\n out_r[1] = (sm31 - sm13) / S;\n out_r[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out_r[3] = (sm23 - sm32) / S;\n out_r[0] = 0.25 * S;\n out_r[1] = (sm12 + sm21) / S;\n out_r[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out_r[3] = (sm31 - sm13) / S;\n out_r[0] = (sm12 + sm21) / S;\n out_r[1] = 0.25 * S;\n out_r[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out_r[3] = (sm12 - sm21) / S;\n out_r[0] = (sm31 + sm13) / S;\n out_r[1] = (sm23 + sm32) / S;\n out_r[2] = 0.25 * S;\n }\n return out_r;\n}\n\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n * let quatMat = mat4.create();\n * mat4.fromQuat(quatMat, quat);\n * mat4.multiply(dest, dest, quatMat);\n * mat4.scale(dest, dest, scale)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @returns {mat4} out\n */\nexport function fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n * mat4.translate(dest, dest, origin);\n * let quatMat = mat4.create();\n * mat4.fromQuat(quatMat, quat);\n * mat4.multiply(dest, dest, quatMat);\n * mat4.scale(dest, dest, scale)\n * mat4.translate(dest, dest, negativeOrigin);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\n * @returns {mat4} out\n */\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n\n/**\n * Calculates a 4x4 matrix from the given quaternion\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat4} out\n */\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n\n/**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\nexport function perspectiveNO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n var nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n return out;\n}\n\n/**\n * Alias for {@link mat4.perspectiveNO}\n * @function\n */\nexport var perspective = perspectiveNO;\n\n/**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\nexport function perspectiveZO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n var nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -near;\n }\n return out;\n}\n\n/**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function orthoNO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n\n/**\n * Alias for {@link mat4.orthoNO}\n * @function\n */\nexport var ortho = orthoNO;\n\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function orthoZO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n}\n\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\nexport function lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n\n/**\n * Generates a matrix that makes something look at something else.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} target Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\nexport function targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n\n/**\n * Returns a string representation of a mat4\n *\n * @param {ReadonlyMat4} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nexport function str(a) {\n return \"mat4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \", \" + a[9] + \", \" + a[10] + \", \" + a[11] + \", \" + a[12] + \", \" + a[13] + \", \" + a[14] + \", \" + a[15] + \")\";\n}\n\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nexport function frob(a) {\n return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + a[6] * a[6] + a[7] * a[7] + a[8] * a[8] + a[9] * a[9] + a[10] * a[10] + a[11] * a[11] + a[12] * a[12] + a[13] * a[13] + a[14] * a[14] + a[15] * a[15]);\n}\n\n/**\n * Adds two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat4} out\n */\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n\n/**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat4} out the receiving vector\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat4} out\n */\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link mat4.subtract}\n * @function\n */\nexport var sub = subtract;","/**\n * @author Fabrizio Giordano (Fab)\n */\nimport { vec3 } from \"gl-matrix\";\n\nexport interface SphericalCoords {\n phi: number; // longitude-like angle in degrees\n theta: number; // colatitude angle in degrees\n}\n\nexport interface AstroCoords {\n ra: number; // right ascension in degrees\n dec: number; // declination in degrees\n}\n\nexport interface HMS {\n h: number;\n m: number;\n s: number;\n}\n\nexport interface DMS {\n d: number;\n m: number;\n s: number;\n}\n\n// results in degrees\nexport function cartesianToSpherical(xyz: vec3): SphericalCoords {\n const dotXYZ = vec3.dot(xyz, xyz);\n const r = Math.sqrt(dotXYZ);\n let theta = Math.acos(xyz[2] / r);\n theta = radToDeg(theta);\n\n // NB: in atan(y/x) is written with params switched atan2(x, y)\n let phi = Math.atan2(xyz[1], xyz[0]);\n phi = radToDeg(phi);\n\n if (phi < 0) {\n phi += 360;\n }\n\n return { phi, theta };\n}\n\nexport function colorHex2RGB(hexColor: string): [number, number, number] {\n const hex1 = hexColor.substring(1, 3);\n const hex2 = hexColor.substring(3, 5);\n const hex3 = hexColor.substring(5, 7);\n\n const dec1 = parseInt(hex1, 16);\n const dec2 = parseInt(hex2, 16);\n const dec3 = parseInt(hex3, 16);\n\n const rgb1 = (dec1 / 255).toFixed(2);\n const rgb2 = (dec2 / 255).toFixed(2);\n const rgb3 = (dec3 / 255).toFixed(2);\n\n return [parseFloat(rgb1), parseFloat(rgb2), parseFloat(rgb3)];\n}\n\nexport function degToRad(degrees: number): number {\n return (degrees / 180) * Math.PI;\n}\n\nexport function radToDeg(radians: number): number {\n return (radians * 180) / Math.PI;\n}\n\nexport function sphericalToAstroDeg(phiDeg: number, thetaDeg: number): AstroCoords {\n let raDeg = phiDeg;\n if (raDeg < 0) {\n raDeg += 360;\n }\n const decDeg = 90 - thetaDeg;\n return { ra: raDeg, dec: decDeg };\n}\n\nexport function sphericalToCartesian(\n phiDeg: number,\n thetaDeg: number,\n r: number = 1\n): [number, number, number] {\n const x = r * Math.sin(degToRad(thetaDeg)) * Math.cos(degToRad(phiDeg));\n const y = r * Math.sin(degToRad(thetaDeg)) * Math.sin(degToRad(phiDeg));\n const z = r * Math.cos(degToRad(thetaDeg));\n return [x, y, z];\n}\n\nexport function astroDegToSpherical(raDeg: number, decDeg: number): SphericalCoords {\n let phiDeg = raDeg;\n if (phiDeg < 0) {\n phiDeg += 360;\n }\n const thetaDeg = 90 - decDeg;\n return { phi: phiDeg, theta: thetaDeg };\n}\n\nexport function raDegToHMS(raDeg: number): HMS {\n const h = Math.floor(raDeg / 15);\n const m = Math.floor((raDeg / 15 - h) * 60);\n const s = (raDeg / 15 - h - m / 60) * 3600;\n return { h, m, s };\n}\n\nexport function decDegToDMS(decDeg: number): DMS {\n let sign = 1;\n if (decDeg < 0) {\n sign = -1;\n }\n\n const decDegAbs = Math.abs(decDeg);\n let d = Math.trunc(decDegAbs);\n const m = Math.trunc((decDegAbs - d) * 60);\n const s = (decDegAbs - d - m / 60) * 3600;\n d = d * sign;\n\n return { d, m, s };\n}","export class Constants {\n}\n//\tstatic halfpi = Math.PI/2.;\nConstants.halfpi = 1.5707963267948966;\nConstants.inv_halfpi = 2. / Math.PI;\n/** The Constant twopi. */\nConstants.twopi = 2 * Math.PI;\nConstants.inv_twopi = 1. / (2 * Math.PI);\n//# sourceMappingURL=Constants.js.map","import { Hploc } from './Hploc.js';\nexport class Pointing {\n /**\n *\n * @param {*} vec3 Vec3.js\n * @param {*} mirror\n * @param {*} in_theta radians\n * @param {*} in_phi radians\n */\n constructor(vec3, mirror, in_theta, in_phi) {\n if (vec3 != null) {\n this.theta = Hploc.atan2(Math.sqrt(vec3.x * vec3.x + vec3.y * vec3.y), vec3.z);\n if (mirror) {\n this.phi = -Hploc.atan2(vec3.y, vec3.x);\n }\n else {\n this.phi = Hploc.atan2(vec3.y, vec3.x);\n }\n if (this.phi < 0.0) {\n this.phi = this.phi + 2 * Math.PI;\n }\n if (this.phi >= 2 * Math.PI) {\n this.phi = this.phi - 2 * Math.PI;\n }\n }\n else {\n this.theta = in_theta;\n this.phi = in_phi;\n }\n }\n}\n//# sourceMappingURL=Pointing.js.map","export class Zphi {\n /** Creation from individual components */\n constructor(z_, phi_) {\n this.z = z_;\n this.phi = phi_;\n }\n ;\n}\n//# sourceMappingURL=Zphi.js.map","import { Pointing } from './Pointing.js';\nimport { Vec3 } from './Vec3.js';\nimport { Zphi } from './Zphi.js';\nexport class Hploc {\n constructor(ptg) {\n Hploc.PI4_A = 0.7853981554508209228515625;\n Hploc.PI4_B = 0.794662735614792836713604629039764404296875e-8;\n Hploc.PI4_C = 0.306161699786838294306516483068750264552437361480769e-16;\n Hploc.M_1_PI = 0.3183098861837906715377675267450287;\n if (ptg) {\n this.sth = 0.0;\n this.have_sth = false;\n this.z = Hploc.cos(ptg.theta);\n this._phi = ptg.phi;\n if (Math.abs(this.z) > 0.99) {\n this.sth = Hploc.sin(ptg.theta);\n this.have_sth = true;\n }\n }\n }\n setZ(z) {\n this.z = z;\n }\n ;\n get phi() {\n return this._phi;\n }\n ;\n set phi(phi) {\n this._phi = phi;\n }\n ;\n setSth(sth) {\n this.sth = sth;\n }\n ;\n toPointing(mirror) {\n const st = this.have_sth ? this.sth : Math.sqrt((1.0 - this.z) * (1.0 + this.z));\n return new Pointing(null, false, Hploc.atan2(st, this.z), this._phi);\n }\n toVec3() {\n var st = this.have_sth ? this.sth : Math.sqrt((1.0 - this.z) * (1.0 + this.z));\n var vector = new Vec3(st * Hploc.cos(this.phi), st * Hploc.sin(this.phi), this.z);\n // var vector = new Vec3(st*Math.cos(this.phi),st*Math.sin(this.phi),this.z);\n return vector;\n }\n ;\n toZphi() {\n return new Zphi(this.z, this.phi);\n }\n static sin(d) {\n let u = d * Hploc.M_1_PI;\n let q = Math.floor(u < 0 ? u - 0.5 : u + 0.5);\n let x = 4.0 * q;\n d -= x * Hploc.PI4_A;\n d -= x * Hploc.PI4_B;\n d -= x * Hploc.PI4_C;\n if ((q & 1) != 0) {\n d = -d;\n }\n return this.sincoshelper(d);\n }\n ;\n static cos(d) {\n //\t\tlet u = d * Hploc.M_1_PI - 0.5;\n let u = d * Hploc.M_1_PI - 0.5;\n //\t\tu -= 0.5;\n let q = 1 + 2 * Math.floor(u < 0 ? u - 0.5 : u + 0.5);\n let x = 2.0 * q;\n let t = x * Hploc.PI4_A;\n d = d - t;\n d -= x * Hploc.PI4_B;\n d -= x * Hploc.PI4_C;\n if ((q & 2) == 0) {\n d = -d;\n }\n return Hploc.sincoshelper(d);\n }\n ;\n static sincoshelper(d) {\n let s = d * d;\n let u = -7.97255955009037868891952e-18;\n u = u * s + 2.81009972710863200091251e-15;\n u = u * s - 7.64712219118158833288484e-13;\n u = u * s + 1.60590430605664501629054e-10;\n u = u * s - 2.50521083763502045810755e-08;\n u = u * s + 2.75573192239198747630416e-06;\n u = u * s - 0.000198412698412696162806809;\n u = u * s + 0.00833333333333332974823815;\n u = u * s - 0.166666666666666657414808;\n return s * u * d + d;\n }\n ;\n /** This method calculates the arc sine of x in radians. The return\n value is in the range [-pi/2, pi/2]. The results may have\n maximum error of 3 ulps. */\n static asin(d) {\n return Hploc.mulsign(Hploc.atan2k(Math.abs(d), Math.sqrt((1 + d) * (1 - d))), d);\n }\n ;\n /** This method calculates the arc cosine of x in radians. The\n return value is in the range [0, pi]. The results may have\n maximum error of 3 ulps. */\n static acos(d) {\n return Hploc.mulsign(Hploc.atan2k(Math.sqrt((1 + d) * (1 - d)), Math.abs(d)), d) + (d < 0 ? Math.PI : 0);\n }\n ;\n static mulsign(x, y) {\n let sign = Hploc.copySign(1, y);\n return sign * x;\n }\n ;\n static copySign(magnitude, sign) {\n return sign < 0 ? -Math.abs(magnitude) : Math.abs(magnitude);\n // let finalsign = 1;\n // if (Object.is(finalsign , -0)){\n // \tsign = -1;\n // }else if (Object.is(finalsign , 0)){\n // \tsign = 1;\n // }else {\n // \tsign = Math.sign(finalsign);\n // }\n // return finalsign * magnitude;\n }\n static atanhelper(s) {\n let t = s * s;\n let u = -1.88796008463073496563746e-05;\n u = u * t + (0.000209850076645816976906797);\n u = u * t + (-0.00110611831486672482563471);\n u = u * t + (0.00370026744188713119232403);\n u = u * t + (-0.00889896195887655491740809);\n u = u * t + (0.016599329773529201970117);\n u = u * t + (-0.0254517624932312641616861);\n u = u * t + (0.0337852580001353069993897);\n u = u * t + (-0.0407629191276836500001934);\n u = u * t + (0.0466667150077840625632675);\n u = u * t + (-0.0523674852303482457616113);\n u = u * t + (0.0587666392926673580854313);\n u = u * t + (-0.0666573579361080525984562);\n u = u * t + (0.0769219538311769618355029);\n u = u * t + (-0.090908995008245008229153);\n u = u * t + (0.111111105648261418443745);\n u = u * t + (-0.14285714266771329383765);\n u = u * t + (0.199999999996591265594148);\n u = u * t + (-0.333333333333311110369124);\n return u * t * s + s;\n }\n ;\n static atan2k(y, x) {\n let q = 0.;\n if (x < 0) {\n x = -x;\n q = -2.;\n }\n if (y > x) {\n let t = x;\n x = y;\n y = -t;\n q += 1.;\n }\n return Hploc.atanhelper(y / x) + q * (Math.PI / 2);\n }\n ;\n /** This method calculates the arc tangent of y/x in radians, using\n the signs of the two arguments to determine the quadrant of the\n result. The results may have maximum error of 2 ulps. */\n static atan2(y, x) {\n let r = Hploc.atan2k(Math.abs(y), x);\n r = Hploc.mulsign(r, x);\n if (Hploc.isinf(x) || x == 0) {\n r = Math.PI / 2 - (Hploc.isinf(x) ? (Hploc.copySign(1, x) * (Math.PI / 2)) : 0);\n }\n if (Hploc.isinf(y)) {\n r = Math.PI / 2 - (Hploc.isinf(x) ? (Hploc.copySign(1, x) * (Math.PI * 1 / 4)) : 0);\n }\n if (y == 0) {\n r = (Hploc.copySign(1, x) == -1 ? Math.PI : 0);\n }\n return Hploc.isnan(x) || Hploc.isnan(y) ? NaN : Hploc.mulsign(r, y);\n }\n ;\n /** Checks if the argument is a NaN or not. */\n static isnan(d) {\n return d != d;\n }\n ;\n /** Checks if the argument is either positive or negative infinity. */\n static isinf(d) {\n return Math.abs(d) === +Infinity;\n }\n ;\n}\nHploc.PI4_A = 0.7853981554508209228515625;\nHploc.PI4_B = 0.794662735614792836713604629039764404296875e-8;\nHploc.PI4_C = 0.306161699786838294306516483068750264552437361480769e-16;\nHploc.M_1_PI = 0.3183098861837906715377675267450287;\n//# sourceMappingURL=Hploc.js.map","/**\n * Partial porting to Javascript of Vec3.java from Healpix3.30\n */\nimport { Hploc } from './Hploc.js';\nimport { Pointing } from './Pointing.js';\nexport class Vec3 {\n constructor(in_x, in_y, in_z) {\n if (in_x instanceof Pointing) {\n let ptg = in_x;\n let sth = Hploc.sin(ptg.theta);\n this.x = sth * Hploc.cos(ptg.phi);\n this.y = sth * Hploc.sin(ptg.phi);\n this.z = Hploc.cos(ptg.theta);\n }\n else {\n this.x = in_x;\n this.y = in_y;\n this.z = in_z;\n }\n }\n getX() {\n return this.x;\n }\n ;\n getY() {\n return this.y;\n }\n ;\n getZ() {\n return this.z;\n }\n ;\n /** Scale the vector by a given factor\n @param n the scale factor */\n scale(n) {\n this.x *= n;\n this.y *= n;\n this.z *= n;\n }\n ;\n /** Vector cross product.\n @param v another vector\n @return the vector cross product between this vector and {@code v} */\n cross(v) {\n return new Vec3(this.y * v.z - v.y * this.z, this.z * v.x - v.z * this.x, this.x * v.y - v.x * this.y);\n }\n ;\n /** Vector addition\n * @param v the vector to be added\n * @return addition result */\n add(v) {\n return new Vec3(this.x + v.x, this.y + v.y, this.z + v.z);\n }\n ;\n /** Normalize the vector */\n normalize() {\n let d = 1. / this.length();\n this.x *= d;\n this.y *= d;\n this.z *= d;\n }\n ;\n /** Return normalized vector */\n norm() {\n let d = 1. / this.length();\n return new Vec3(this.x * d, this.y * d, this.z * d);\n }\n ;\n /** Vector length\n @return the length of the vector. */\n length() {\n return Math.sqrt(this.lengthSquared());\n }\n ;\n /** Squared vector length\n @return the squared length of the vector. */\n lengthSquared() {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n ;\n /** Computes the dot product of the this vector and {@code v1}.\n * @param v1 another vector\n * @return dot product */\n dot(v1) {\n return this.x * v1.x + this.y * v1.y + this.z * v1.z;\n }\n ;\n /** Vector subtraction\n * @param v the vector to be subtracted\n * @return subtraction result */\n sub(v) {\n return new Vec3(this.x - v.x, this.y - v.y, this.z - v.z);\n }\n ;\n /** Angle between two vectors.\n @param v1 another vector\n @return the angle in radians between this vector and {@code v1};\n constrained to the range [0,PI]. */\n angle(v1) {\n return Hploc.atan2(this.cross(v1).length(), this.dot(v1));\n }\n /** Invert the signs of all components */\n flip() {\n this.x *= -1.0;\n this.y *= -1.0;\n this.z *= -1.0;\n }\n static pointing2Vec3(pointing) {\n let sth = Hploc.sin(pointing.theta);\n let x = sth * Hploc.cos(pointing.phi);\n let y = sth * Hploc.sin(pointing.phi);\n let z = Hploc.cos(pointing.theta);\n return new Vec3(x, y, z);\n }\n ;\n}\n//# sourceMappingURL=Vec3.js.map","import { Vec3 } from './Vec3.js';\nexport class CircleFinder {\n /**\n * @param point: Vec3\n */\n constructor(point) {\n let np = point.length;\n //HealpixUtils.check(np>=2,\"too few points\");\n if (!(np >= 2)) {\n console.log(\"too few points\");\n return;\n }\n this.center = point[0].add(point[1]);\n this.center.normalize();\n this.cosrad = point[0].dot(this.center);\n for (let i = 2; i < np; ++i) {\n if (point[i].dot(this.center) < this.cosrad) { // point outside the current circle\n this.getCircle(point, i);\n }\n }\n }\n ;\n /**\n * @parm point: Vec3\n * @param q: int\n */\n getCircle(point, q) {\n this.center = point[0].add(point[q]);\n this.center.normalize();\n this.cosrad = point[0].dot(this.center);\n for (let i = 1; i < q; ++i) {\n if (point[i].dot(this.center) < this.cosrad) { // point outside the current circle\n this.getCircle2(point, i, q);\n }\n }\n }\n ;\n /**\n * @parm point: Vec3\n * @param q1: int\n * @param q2: int\n */\n getCircle2(point, q1, q2) {\n this.center = point[q1].add(point[q2]);\n this.center.normalize();\n this.cosrad = point[q1].dot(this.center);\n for (let i = 0; i < q1; ++i) {\n if (point[i].dot(this.center) < this.cosrad) { // point outside the current circle\n this.center = (point[q1].sub(point[i])).cross(point[q2].sub(point[i]));\n this.center.normalize();\n this.cosrad = point[i].dot(this.center);\n if (this.cosrad < 0) {\n this.center.flip();\n this.cosrad = -this.cosrad;\n }\n }\n }\n }\n ;\n getCenter() {\n return new Vec3(this.center.x, this.center.y, this.center.z);\n }\n getCosrad() {\n return this.cosrad;\n }\n ;\n}\n//# sourceMappingURL=CircleFinder.js.map","/**\n * Partial porting to Javascript of Fxyf.java from Healpix3.30\n */\nimport { Hploc } from './Hploc.js';\nexport class Fxyf {\n constructor(x, y, f) {\n this.fx = x;\n this.fy = y;\n this.face = f;\n // coordinate of the lowest corner of each face\n this.jrll = new Uint8Array([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]);\n this.jpll = new Uint8Array([1, 3, 5, 7, 0, 2, 4, 6, 1, 3, 5, 7]);\n this.halfpi = Math.PI / 2.;\n }\n toHploc() {\n let loc = new Hploc();\n let jr = this.jrll[this.face] - this.fx - this.fy;\n let nr;\n if (jr < 1) {\n nr = jr;\n let tmp = nr * nr / 3.;\n loc.z = 1 - tmp;\n if (loc.z > 0.99) {\n loc.sth = Math.sqrt(tmp * (2.0 - tmp));\n loc.have_sth = true;\n }\n }\n else if (jr > 3) {\n nr = 4 - jr;\n let tmp = nr * nr / 3.;\n loc.z = tmp - 1;\n if (loc.z < -0.99) {\n loc.sth = Math.sqrt(tmp * (2.0 - tmp));\n loc.have_sth = true;\n }\n }\n else {\n nr = 1;\n loc.z = (2 - jr) * 2.0 / 3.;\n }\n let tmp = this.jpll[this.face] * nr + this.fx - this.fy;\n if (tmp < 0) {\n tmp += 8;\n }\n if (tmp >= 8) {\n tmp -= 8;\n }\n loc.phi = (nr < 1e-15) ? 0 : (0.5 * this.halfpi * tmp) / nr;\n return loc;\n }\n ;\n toVec3() {\n return this.toHploc().toVec3();\n }\n ;\n}\n//# sourceMappingURL=Fxyf.js.map","export class pstack {\n /** Creation from individual components */\n constructor(sz) {\n this.p = new Array(sz);\n this.o = new Int32Array(sz);\n this.s = 0;\n this.m = 0;\n }\n ;\n /**\n * @param p long\n * @param o int\n */\n push(p_, o_) {\n this.p[this.s] = p_;\n this.o[this.s] = o_;\n ++this.s;\n }\n ;\n pop() {\n --this.s;\n }\n ;\n popToMark() {\n this.s = this.m;\n }\n ;\n size() {\n return this.s;\n }\n ;\n mark() {\n this.m = this.s;\n }\n ;\n otop() {\n return this.o[this.s - 1];\n }\n ;\n ptop() {\n return this.p[this.s - 1];\n }\n ;\n}\n//# sourceMappingURL=pstack.js.map","export class RangeSet {\n /**\n * @param int cap: initial capacity\n */\n constructor(cap) {\n if (cap < 0)\n console.error(\"capacity must be positive\");\n this.r = new Int32Array(cap << 1);\n this.sz = 0;\n }\n ;\n /** Append a single-value range to the object.\n @param val value to append */\n append(val) {\n this.append1(val, val + 1);\n }\n ;\n /** Append a range to the object.\n @param a first long in range\n @param b one-after-last long in range */\n append1(a, b) {\n if (a >= b)\n return;\n if ((this.sz > 0) && (a <= this.r[this.sz - 1])) {\n if (a < this.r[this.sz - 2])\n console.error(\"bad append operation\");\n if (b > this.r[this.sz - 1])\n this.r[this.sz - 1] = b;\n return;\n }\n // this.ensureCapacity(this.sz+2);\n let cap = this.sz + 2;\n if (this.r.length < cap) {\n let newsize = Math.max(2 * this.r.length, cap);\n let rnew = new Int32Array(newsize);\n rnew.set(this.r);\n this.r = rnew;\n }\n this.r[this.sz] = a;\n this.r[this.sz + 1] = b;\n this.sz += 2;\n }\n ;\n /** Make sure the object can hold at least the given number of entries.\n * @param cap int\n * */\n ensureCapacity(cap) {\n if (this.r.length < cap)\n this.resize(Math.max(2 * this.r.length, cap));\n }\n ;\n /**\n * @param newsize int\n */\n resize(newsize) {\n if (newsize < this.sz)\n console.error(\"requested array size too small\");\n if (newsize == this.r.length)\n return;\n let rnew = new Int32Array(newsize);\n let sliced = this.r.slice(0, this.sz + 1);\n //\t\tthis.arrayCopy(this.r, 0, rnew, 0, this.sz);\n this.r = sliced;\n }\n ;\n}\n//# sourceMappingURL=RangeSet.js.map","/**\n * Partial porting to Javascript of Xyf.java from Healpix3.30\n */\nexport class Xyf {\n constructor(x, y, f) {\n this.ix = x;\n this.iy = y;\n this.face = f;\n }\n}\n//# sourceMappingURL=Xyf.js.map","\"use strict\";\nimport { CircleFinder } from \"./CircleFinder.js\";\nimport { Constants } from \"./Constants.js\";\nimport { Fxyf } from \"./Fxyf.js\";\nimport { Hploc } from \"./Hploc.js\";\nimport { Pointing } from \"./Pointing.js\";\nimport { pstack } from \"./pstack.js\";\nimport { RangeSet } from \"./RangeSet.js\";\nimport { Vec3 } from \"./Vec3.js\";\nimport { Xyf } from \"./Xyf.js\";\nimport { Zphi } from \"./Zphi.js\";\n/**\n * Partial porting to Javascript of HealpixBase.java from Healpix3.30\n */\n// import Fxyf from './Fxyf.js';\n// import Hploc from './Hploc.js';\n// import Xyf from './Xyf.js';\n// import Vec3 from './Vec3.js';\n// import Pointing from './Pointing.js';\n// import CircleFinder from './CircleFinder.js';\n// import Zphi from './Zphi.js';\n// import pstack from './pstack.js';\n// import Constants from './Constants.js';\n// import RangeSet from './RangeSet.js';\nexport class Healpix {\n constructor(nside_in) {\n this.order_max = 29;\n this.inv_halfpi = 2.0 / Math.PI;\n this.twothird = 2.0 / 3.;\n // console.log(\"twothird \"+this.twothird);\n // this.ns_max=1L<<order_max;\n this.ns_max = Math.pow(2, this.order_max);\n this.ctab = new Uint16Array([\n 0, 1, 256, 257, 2, 3, 258, 259, 512, 513, 768, 769, 514, 515, 770, 771, 4, 5, 260, 261, 6, 7, 262,\n 263, 516, 517, 772, 773, 518, 519, 774, 775, 1024, 1025, 1280, 1281, 1026, 1027, 1282, 1283,\n 1536, 1537, 1792, 1793, 1538, 1539, 1794, 1795, 1028, 1029, 1284, 1285, 1030, 1031, 1286,\n 1287, 1540, 1541, 1796, 1797, 1542, 1543, 1798, 1799, 8, 9, 264, 265, 10, 11, 266, 267, 520,\n 521, 776, 777, 522, 523, 778, 779, 12, 13, 268, 269, 14, 15, 270, 271, 524, 525, 780, 781, 526,\n 527, 782, 783, 1032, 1033, 1288, 1289, 1034, 1035, 1290, 1291, 1544, 1545, 1800, 1801, 1546,\n 1547, 1802, 1803, 1036, 1037, 1292, 1293, 1038, 1039, 1294, 1295, 1548, 1549, 1804, 1805,\n 1550, 1551, 1806, 1807, 2048, 2049, 2304, 2305, 2050, 2051, 2306, 2307, 2560, 2561, 2816,\n 2817, 2562, 2563, 2818, 2819, 2052, 2053, 2308, 2309, 2054, 2055, 2310, 2311, 2564, 2565,\n 2820, 2821, 2566, 2567, 2822, 2823, 3072, 3073, 3328, 3329, 3074, 3075, 3330, 3331, 3584,\n 3585, 3840, 3841, 3586, 3587, 3842, 3843, 3076, 3077, 3332, 3333, 3078, 3079, 3334, 3335,\n 3588, 3589, 3844, 3845, 3590, 3591, 3846, 3847, 2056, 2057, 2312, 2313, 2058, 2059, 2314,\n 2315, 2568, 2569, 2824, 2825, 2570, 2571, 2826, 2827, 2060, 2061, 2316, 2317, 2062, 2063,\n 2318, 2319, 2572, 2573, 2828, 2829, 2574, 2575, 2830, 2831, 3080, 3081, 3336, 3337, 3082,\n 3083, 3338, 3339, 3592, 3593, 3848, 3849, 3594, 3595, 3850, 3851, 3084, 3085, 3340, 3341,\n 3086, 3087, 3342, 3343, 3596, 3597, 3852, 3853, 3598, 3599, 3854, 3855\n ]);\n this.utab = new Uint16Array([0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85, 256, 257, 260, 261, 272, 273, 276, 277,\n 320, 321, 324, 325, 336, 337, 340, 341, 1024, 1025, 1028, 1029, 1040, 1041, 1044, 1045, 1088,\n 1089, 1092, 1093, 1104, 1105, 1108, 1109, 1280, 1281, 1284, 1285, 1296, 1297, 1300, 1301,\n 1344, 1345, 1348, 1349, 1360, 1361, 1364, 1365, 4096, 4097, 4100, 4101, 4112, 4113, 4116,\n 4117, 4160, 4161, 4164, 4165, 4176, 4177, 4180, 4181, 4352, 4353, 4356, 4357, 4368, 4369,\n 4372, 4373, 4416, 4417, 4420, 4421, 4432, 4433, 4436, 4437, 5120, 5121, 5124, 5125, 5136,\n 5137, 5140, 5141, 5184, 5185, 5188, 5189, 5200, 5201, 5204, 5205, 5376, 5377, 5380, 5381,\n 5392, 5393, 5396, 5397, 5440, 5441, 5444, 5445, 5456, 5457, 5460, 5461, 16384, 16385, 16388,\n 16389, 16400, 16401, 16404, 16405, 16448, 16449, 16452, 16453, 16464, 16465, 16468, 16469,\n 16640, 16641, 16644, 16645, 16656, 16657, 16660, 16661, 16704, 16705, 16708, 16709, 16720,\n 16721, 16724, 16725, 17408, 17409, 17412, 17413, 17424, 17425, 17428, 17429, 17472, 17473,\n 17476, 17477, 17488, 17489, 17492, 17493, 17664, 17665, 17668, 17669, 17680, 17681, 17684,\n 17685, 17728, 17729, 17732, 17733, 17744, 17745, 17748, 17749, 20480, 20481, 20484, 20485,\n 20496, 20497, 20500, 20501, 20544, 20545, 20548, 20549, 20560, 20561, 20564, 20565, 20736,\n 20737, 20740, 20741, 20752, 20753, 20756, 20757, 20800, 20801, 20804, 20805, 20816, 20817,\n 20820, 20821, 21504, 21505, 21508, 21509, 21520, 21521, 21524, 21525, 21568, 21569, 21572,\n 21573, 21584, 21585, 21588, 21589, 21760, 21761, 21764, 21765, 21776, 21777, 21780, 21781,\n 21824, 21825, 21828, 21829, 21840, 21841, 21844, 21845]);\n this.jrll = new Int16Array([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]);\n this.jpll = new Int16Array([1, 3, 5, 7, 0, 2, 4, 6, 1, 3, 5, 7]);\n this.xoffset = new Int16Array([-1, -1, 0, 1, 1, 1, 0, -1]);\n this.yoffset = new Int16Array([0, 1, 1, 1, 0, -1, -1, -1]);\n this.facearray = [\n new Int16Array([8, 9, 10, 11, -1, -1, -1, -1, 10, 11, 8, 9]),\n new Int16Array([5, 6, 7, 4, 8, 9, 10, 11, 9, 10, 11, 8]),\n new Int16Array([-1, -1, -1, -1, 5, 6, 7, 4, -1, -1, -1, -1]),\n new Int16Array([4, 5, 6, 7, 11, 8, 9, 10, 11, 8, 9, 10]),\n new Int16Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),\n new Int16Array([1, 2, 3, 0, 0, 1, 2, 3, 5, 6, 7, 4]),\n new Int16Array([-1, -1, -1, -1, 7, 4, 5, 6, -1, -1, -1, -1]),\n new Int16Array([3, 0, 1, 2, 3, 0, 1, 2, 4, 5, 6, 7]),\n new Int16Array([2, 3, 0, 1, -1, -1, -1, -1, 0, 1, 2, 3]) // N\n ];\n // questo forse deve essere un UInt8Array. Viene usato da neighbours\n this.swaparray = [\n new Int16Array([0, 0, 3]),\n new Int16Array([0, 0, 6]),\n new Int16Array([0, 0, 0]),\n new Int16Array([0, 0, 5]),\n new Int16Array([0, 0, 0]),\n new Int16Array([5, 0, 0]),\n new Int16Array([0, 0, 0]),\n new Int16Array([6, 0, 0]),\n new Int16Array([3, 0, 0]) // N\n ];\n if (nside_in <= this.ns_max && nside_in > 0) {\n this.nside = nside_in;\n this.npface = this.nside * this.nside;\n this.npix = 12 * this.npface;\n this.order = this.nside2order(this.nside);\n this.nl2 = 2 * this.nside;\n this.nl3 = 3 * this.nside;\n this.nl4 = 4 * this.nside;\n this.fact2 = 4.0 / this.npix;\n this.fact1 = (this.nside << 1) * this.fact2;\n this.ncap = 2 * this.nside * (this.nside - 1); // pixels in each polar cap\n // console.log(\"order: \"+this.order);\n // console.log(\"nside: \"+this.nside);\n }\n this.bn = [];\n this.mpr = [];\n this.cmpr = [];\n this.smpr = [];\n // TODO INFINITE LOOP!!!!!! FIX ITTTTTTTTTT\n // TODO INFINITE LOOP!!!!!! FIX ITTTTTTTTTT\n // TODO INFINITE LOOP!!!!!! FIX ITTTTTTTTTT\n // TODO INFINITE LOOP!!!!!! FIX ITTTTTTTTTT\n // TODO INFINITE LOOP!!!!!! FIX ITTTTTTTTTT\n // TODO INFINITE LOOP!!!!!! FIX ITTTTTTTTTT\n // TODO INFINITE LOOP!!!!!! FIX ITTTTTTTTTT\n // Uncaught RangeError: Maximum call stack size exceeded\n // MOVED TO computeBn()\n // for (let i=0; i <= this.order_max; ++i) {\n // \tthis.bn[i]=new Healpix(1<<i);\n // \tthis.mpr[i]=bn[i].maxPixrad();\n // \tthis.cmpr[i]=Math.cos(mpr[i]);\n // \tthis.smpr[i]=Math.sin(mpr[i]);\n // }\n }\n computeBn() {\n for (let i = 0; i <= this.order_max; ++i) {\n this.bn[i] = new Healpix(1 << i);\n this.mpr[i] = this.bn[i].maxPixrad();\n this.cmpr[i] = Hploc.cos(this.mpr[i]);\n this.smpr[i] = Hploc.sin(this.mpr[i]);\n }\n }\n getNPix() {\n return this.npix;\n }\n ;\n getBoundaries(pix) {\n let points = new Array();\n let xyf = this.nest2xyf(pix);\n let dc = 0.5 / this.nside;\n let xc = (xyf.ix + 0.5) / this.nside;\n let yc = (xyf.iy + 0.5) / this.nside;\n points[0] = new Fxyf(xc + dc, yc + dc, xyf.face).toVec3();\n points[1] = new Fxyf(xc - dc, yc + dc, xyf.face).toVec3();\n points[2] = new Fxyf(xc - dc, yc - dc, xyf.face).toVec3();\n points[3] = new Fxyf(xc + dc, yc - dc, xyf.face).toVec3();\n return points;\n }\n ;\n /** Returns a set of points along the boundary of the given pixel.\n * Step 1 gives 4 points on the corners. The first point corresponds\n * to the northernmost corner, the subsequent points follow the pixel\n * boundary through west, south and east corners.\n *\n * @param pix pixel index number\n * @param step the number of returned points is 4*step\n * @return {@link Vec3} for each point\n */\n getBoundariesWithStep(pix, step) {\n // var points = new Array(); \n let points = new Array();\n let xyf = this.nest2xyf(pix);\n let dc = 0.5 / this.nside;\n let xc = (xyf.ix + 0.5) / this.nside;\n let yc = (xyf.iy + 0.5) / this.nside;\n let d = 1.0 / (this.nside * step);\n for (let i = 0; i < step; i++) {\n points[i] = new Fxyf(xc + dc - i * d, yc + dc, xyf.face).toVec3();\n points[i + step] = new Fxyf(xc - dc, yc + dc - i * d, xyf.face).toVec3();\n points[i + 2 * step] = new Fxyf(xc - dc + i * d, yc - dc, xyf.face).toVec3();\n points[i + 3 * step] = new Fxyf(xc + dc, yc - dc + i * d, xyf.face).toVec3();\n }\n return points;\n }\n ;\n getPointsForXyfNoStep(x, y, face) {\n // let nside = Math.pow(2, this.order);\n let points = new Array();\n let xyf = new Xyf(x, y, face);\n let dc = 0.5 / this.nside;\n let xc = (xyf.ix + 0.5) / this.nside;\n let yc = (xyf.iy + 0.5) / this.nside;\n points[0] = new Fxyf(xc + dc, yc + dc, xyf.face).toVec3();\n points[1] = new Fxyf(xc - dc, yc + dc, xyf.face).toVec3();\n points[2] = new Fxyf(xc - dc, yc - dc, xyf.face).toVec3();\n points[3] = new Fxyf(xc + dc, yc - dc, xyf.face).toVec3();\n return points;\n }\n getPointsForXyf(x, y, step, face) {\n let nside = step * Math.pow(2, this.order);\n let points = new Array();\n let xyf = new Xyf(x, y, face);\n let dc = 0.5 / nside;\n let xc = (xyf.ix + 0.5) / nside;\n let yc = (xyf.iy + 0.5) / nside;\n points[0] = new Fxyf(xc + dc, yc + dc, xyf.face).toVec3();\n points[1] = new Fxyf(xc - dc, yc + dc, xyf.face).toVec3();\n points[2] = new Fxyf(xc - dc, yc - dc, xyf.face).toVec3();\n points[3] = new Fxyf(xc + dc, yc - dc, xyf.face).toVec3();\n return points;\n }\n /** Returns the neighboring pixels of ipix.\n This method works in both RING and NEST schemes, but is\n considerably faster in the NEST scheme.\n @param ipix the requested pixel number.\n @return array with indices of the neighboring pixels.\n The returned array contains (in this order)\n the pixel numbers of the SW, W, NW, N, NE, E, SE and S neighbor\n of ipix. If a neighbor does not exist (this can only happen\n for the W, N, E and S neighbors), its entry is set to -1. */\n neighbours(ipix) {\n let result = new Int32Array(8);\n let xyf = this.nest2xyf(ipix);\n let ix = xyf.ix;\n let iy = xyf.iy;\n let face_num = xyf.face;\n var nsm1 = this.nside - 1;\n if ((ix > 0) && (ix < nsm1) && (iy > 0) && (iy < nsm1)) {\n let fpix = Math.floor(face_num << (2 * this.order));\n let px0 = this.spread_bits(ix);\n let py0 = this.spread_bits(iy) << 1;\n let pxp = this.spread_bits(ix + 1);\n let pyp = this.spread_bits(iy + 1) << 1;\n let pxm = this.spread_bits(ix - 1);\n let pym = this.spread_bits(iy - 1) << 1;\n result[0] = fpix + pxm + py0;\n result[1] = fpix + pxm + pyp;\n result[2] = fpix + px0 + pyp;\n result[3] = fpix + pxp + pyp;\n result[4] = fpix + pxp + py0;\n result[5] = fpix + pxp + pym;\n result[6] = fpix + px0 + pym;\n result[7] = fpix + pxm + pym;\n }\n else {\n for (let i = 0; i < 8; ++i) {\n let x = ix + this.xoffset[i];\n let y = iy + this.yoffset[i];\n let nbnum = 4;\n if (x < 0) {\n x += this.nside;\n nbnum -= 1;\n }\n else if (x >= this.nside) {\n x -= this.nside;\n nbnum += 1;\n }\n if (y < 0) {\n y += this.nside;\n nbnum -= 3;\n }\n else if (y >= this.nside) {\n y -= this.nside;\n nbnum += 3;\n }\n let f = this.facearray[nbnum][face_num];\n if (f >= 0) {\n let bits = this.swaparray[nbnum][face_num >>> 2];\n if ((bits & 1) > 0) {\n x = Math.floor(this.nside - x - 1);\n }\n if ((bits & 2) > 0) {\n y = Math.floor(this.nside - y - 1);\n }\n if ((bits & 4) > 0) {\n let tint = x;\n x = y;\n y = tint;\n }\n result[i] = this.xyf2nest(x, y, f);\n }\n else {\n result[i] = -1;\n }\n }\n }\n return result;\n }\n ;\n nside2order(nside) {\n return ((nside & (nside - 1)) != 0) ? -1 : Math.log2(nside);\n }\n ;\n nest2xyf(ipix) {\n let pix = Math.floor(ipix & (this.npface - 1));\n let xyf = new Xyf(this.compress_bits(pix), this.compress_bits(pix >> 1), Math.floor((ipix >> (2 * this.order))));\n return xyf;\n }\n ;\n xyf2nest(ix, iy, face_num) {\n return Math.floor(face_num << (2 * this.order))\n + this.spread_bits(ix) + (this.spread_bits(iy) << 1);\n }\n ;\n loc2pix(hploc) {\n let z = hploc.z;\n let phi = hploc.phi;\n let za = Math.abs(z);\n let tt = this.fmodulo((phi * this.inv_halfpi), 4.0); // in [0,4)\n let pixNo;\n if (za <= this.twothird) { // Equatorial region\n let temp1 = this.nside * (0.5 + tt);\n let temp2 = this.nside * (z * 0.75);\n let jp = Math.floor(temp1 - temp2); // index of ascending edge line\n let jm = Math.floor(temp1 + temp2); // index of descending edge line\n let ifp = Math.floor(jp >>> this.order); // in {0,4}\n let ifm = Math.floor(jm >>> this.order);\n let face_num = Math.floor((ifp == ifm) ? (ifp | 4) : ((ifp < ifm) ? ifp : (ifm + 8)));\n let ix = Math.floor(jm & (this.nside - 1));\n let iy = Math.floor(this.nside - (jp & (this.nside - 1)) - 1);\n pixNo = this.xyf2nest(ix, iy, face_num);\n }\n else { // polar region, za > 2/3\n let ntt = Math.min(3, Math.floor(tt));\n let tp = tt - ntt;\n let tmp = ((za < 0.99) || (!hploc.have_sth)) ?\n this.nside * Math.sqrt(3 * (1 - za)) :\n this.nside * hploc.sth / Math.sqrt((1.0 + za) / 3.);\n let jp = Math.floor(tp * tmp); // increasing edge line index\n let jm = Math.floor((1.0 - tp) * tmp); // decreasing edge line index\n if (jp >= this.nside) {\n jp = this.nside - 1; // for points too close to the boundary\n }\n if (jm >= this.nside) {\n jm = this.nside - 1;\n }\n if (z >= 0) {\n pixNo = this.xyf2nest(Math.floor(this.nside - jm - 1), Math.floor(this.nside - jp - 1), ntt);\n }\n else {\n pixNo = this.xyf2nest(Math.floor(jp), Math.floor(jm), ntt + 8);\n }\n }\n return pixNo;\n }\n ;\n /** Returns the normalized 3-vector corresponding to the center of the\n supplied pixel.\n @param pix long the requested pixel number.\n @return the pixel's center coordinates. */\n pix2vec(pix) {\n return this.pix2loc(pix).toVec3();\n }\n ;\n /** Returns the Zphi corresponding to the center of the supplied pixel.\n @param pix the requested pixel number.\n @return the pixel's center coordinates. */\n pix2zphi(pix) {\n return this.pix2loc(pix).toZphi();\n }\n pix2ang(pix, mirror) {\n return this.pix2loc(pix).toPointing(mirror);\n }\n /**\n * @param pix long\n * @return Hploc\n */\n pix2loc(pix) {\n let loc = new Hploc(undefined);\n let xyf = this.nest2xyf(pix);\n let jr = ((this.jrll[xyf.face]) << this.order) - xyf.ix - xyf.iy - 1;\n let nr;\n if (jr < this.nside) {\n nr = jr;\n let tmp = (nr * nr) * this.fact2;\n loc.z = 1 - tmp;\n if (loc.z > 0.99) {\n loc.sth = Math.sqrt(tmp * (2. - tmp));\n loc.have_sth = true;\n }\n }\n else if (jr > this.nl3) {\n nr = this.nl4 - jr;\n let tmp = (nr * nr) * this.fact2;\n loc.z = tmp - 1;\n if (loc.z < -0.99) {\n loc.sth = Math.sqrt(tmp * (2. - tmp));\n loc.have_sth = true;\n }\n }\n else {\n nr = this.nside;\n loc.z = (this.nl2 - jr) * this.fact1;\n }\n let tmp = (this.jpll[xyf.face]) * nr + xyf.ix - xyf.iy;\n // \tassert(tmp<8*nr); // must not happen\n if (tmp < 0) {\n tmp += 8 * nr;\n }\n loc.phi = (nr == this.nside) ? 0.75 * Constants.halfpi * tmp * this.fact1 : (0.5 * Constants.halfpi * tmp) / nr;\n // loc.setPhi((nr == this.nside) ? 0.75 * Constants.halfpi * tmp * this.fact1 : (0.5 * Constants.halfpi * tmp)/nr);\n return loc;\n }\n ;\n za2vec(z, a) {\n const sin_theta = Math.sqrt(1 - z * z);\n const X = sin_theta * Math.cos(a);\n const Y = sin_theta * Math.sin(a);\n return new Vec3(X, Y, z);\n }\n ang2vec(theta, phi) {\n const z = Math.cos(theta);\n return this.za2vec(z, phi);\n }\n vec2ang(v) {\n const { z, a } = this.vec2za(v.getX(), v.getY(), v.getZ());\n return { theta: Math.acos(z), phi: a };\n }\n vec2za(X, Y, z) {\n const r2 = X * X + Y * Y;\n if (r2 == 0)\n return { z: z < 0 ? -1 : 1, a: 0 };\n else {\n const PI2 = Math.PI / 2;\n const a = (Math.atan2(Y, X) + PI2) % PI2;\n z /= Math.sqrt(z * z + r2);\n return { z, a };\n }\n }\n ang2pix(ptg, mirror) {\n return this.loc2pix(new Hploc(ptg));\n }\n ;\n fmodulo(v1, v2) {\n if (v1 >= 0) {\n return (v1 < v2) ? v1 : v1 % v2;\n }\n var tmp = v1 % v2 + v2;\n return (tmp === v2) ? 0.0 : tmp;\n }\n ;\n compress_bits(v) {\n var raw = Math.floor((v & 0x5555)) | Math.floor(((v & 0x55550000) >>> 15));\n var compressed = this.ctab[raw & 0xff] | (this.ctab[raw >>> 8] << 4);\n return compressed;\n }\n ;\n spread_bits(v) {\n return Math.floor(this.utab[v & 0xff]) | Math.floor((this.utab[(v >>> 8) & 0xff] << 16))\n | Math.floor((this.utab[(v >>> 16) & 0xff] << 32)) | Math.floor((this.utab[(v >>> 24) & 0xff] << 48));\n }\n ;\n /**\n * Returns a range set of pixels that overlap with the convex polygon\n * defined by the {@code vertex} array.\n * <p>\n * This method is more efficient in the RING scheme.\n * <p>\n * This method may return some pixels which don't overlap with the polygon\n * at all. The higher {@code fact} is chosen, the fewer false positives are\n * returned, at the cost of increased run time.\n *\n * @param vertex\n * an array containing the vertices of the requested convex\n * polygon.\n * @param fact\n * The overlapping test will be done at the resolution\n * {@code fact*nside}. For NESTED ordering, {@code fact} must be\n * a power of 2, else it can be any positive integer. A typical\n * choice would be 4.\n * @return the requested set of pixel number ranges\n */\n queryPolygonInclusive(vertex, fact) {\n let inclusive = (fact != 0);\n let nv = vertex.length;\n // let ncirc = inclusive ? nv+1 : nv;\n if (!(nv >= 3)) {\n console.log(\"not enough vertices in polygon\");\n return;\n }\n let vv = new Array();\n for (let i = 0; i < nv; ++i) {\n vv[i] = Vec3.pointing2Vec3(vertex[i]);\n }\n let normal = new Array();\n let flip = 0;\n let index = 0;\n let back = false;\n while (index < vv.length) {\n let first = vv[index];\n let medium = null;\n let last = null;\n if (index == vv.length - 1) {\n last = vv[1];\n medium = vv[0];\n }\n else if (index == vv.length - 2) {\n last = vv[0];\n medium = vv[index + 1];\n }\n else {\n medium = vv[index + 1];\n last = vv[index + 2];\n }\n normal[index] = first.cross(medium).norm();\n let hnd = normal[index].dot(last);\n if (index == 0) {\n flip = (hnd < 0.) ? -1 : 1;\n let tmp = new Pointing(first); // TODO not used\n back = false;\n }\n else {\n let flipThnd = flip * hnd;\n if (flipThnd < 0) {\n let tmp = new Pointing(medium);\n vv.splice(index + 1, 1);\n normal.splice(index, 1);\n back = true;\n index -= 1;\n continue;\n }\n else {\n let tmp = new Pointing(first);\n back = false;\n }\n }\n normal[index].scale(flip);\n index += 1;\n }\n nv = vv.length;\n let ncirc = inclusive ? nv + 1 : nv;\n let rad = new Array(ncirc);\n rad = rad.fill(Constants.halfpi);\n // rad = rad.fill(1.5707963267948966);\n // let p = \"1.5707963267948966\";\n // rad = rad.fill(parseFloat(p));\n if (inclusive) {\n let cf = new CircleFinder(vv);\n normal[nv] = cf.getCenter();\n rad[nv] = Hploc.acos(cf.getCosrad());\n }\n return this.queryMultiDisc(normal, rad, fact);\n }\n ;\n /**\n * For NEST schema only\n *\n * @param normal:\n * Vec3[]\n * @param rad:\n * Float32Array\n * @param fact:\n * The overlapping test will be done at the resolution\n * {@code fact*nside}. For NESTED ordering, {@code fact} must be\n * a power of 2, else it can be any positive integer. A typical\n * choice would be 4.\n * @return RangeSet the requested set of pixel number ranges\n */\n queryMultiDisc(norm, rad, fact) {\n this.computeBn();\n let inclusive = (fact != 0);\n let nv = norm.length;\n // HealpixUtils.check(nv==rad.lengt0,\"inconsistent input arrays\");\n if (!(nv == rad.length)) {\n console.error(\"inconsistent input arrays\");\n return;\n }\n let res = new RangeSet(4 << 1);\n // Removed code for Scheme.RING\n let oplus = 0;\n if (inclusive) {\n if (!(Math.pow(2, this.order_max - this.order) >= fact)) {\n console.error(\"invalid oversampling factor\");\n }\n if (!((fact & (fact - 1)) == 0)) {\n console.error(\"oversampling factor must be a power of 2\");\n }\n oplus = this.ilog2(fact);\n }\n let omax = this.order + oplus; // the order up to which we test\n // TODO: ignore all disks with radius>=pi\n // let crlimit = new Float32Array[omax+1][nv][3];\n let crlimit = new Array(omax + 1);\n let o;\n let i;\n for (o = 0; o <= omax; ++o) { // prepare data at the required orders\n crlimit[o] = new Array(nv);\n let dr = this.bn[o].maxPixrad(); // safety distance\n for (i = 0; i < nv; ++i) {\n crlimit[o][i] = new Float64Array(3);\n crlimit[o][i][0] = (rad[i] + dr > Math.PI) ? -1 : Hploc.cos(rad[i] + dr);\n crlimit[o][i][1] = (o == 0) ? Hploc.cos(rad[i]) : crlimit[0][i][1];\n crlimit[o][i][2] = (rad[i] - dr < 0.) ? 1. : Hploc.cos(rad[i] - dr);\n }\n }\n let stk = new pstack(12 + 3 * omax);\n for (let i = 0; i < 12; i++) { // insert the 12 base pixels in reverse\n // order\n stk.push(11 - i, 0);\n }\n while (stk.size() > 0) { // as long as there are pixels on the stack\n // pop current pixel number and order from the stack\n let pix = stk.ptop();\n let o = stk.otop();\n stk.pop();\n let pv = this.bn[o].pix2vec(pix);\n let zone = 3;\n for (let i = 0; (i < nv) && (zone > 0); ++i) {\n let crad = pv.dot(norm[i]);\n for (let iz = 0; iz < zone; ++iz) {\n if (crad < crlimit[o][i][iz]) {\n zone = iz;\n }\n }\n }\n if (zone > 0) {\n this.check_pixel(o, omax, zone, res, pix, stk, inclusive);\n }\n }\n return res;\n }\n ;\n /** Integer base 2 logarithm.\n @param arg\n @return the largest integer {@code n} that fulfills {@code 2^n<=arg}.\n For negative arguments and zero, 0 is returned. */\n ilog2(arg) {\n let max = Math.max(arg, 1);\n return 31 - Math.clz32(max);\n }\n ;\n /** Computes the cosine of the angular distance between two z, phi positions\n on the unit sphere. */\n cosdist_zphi(z1, phi1, z2, phi2) {\n return z1 * z2 + Hploc.cos(phi1 - phi2) * Math.sqrt((1.0 - z1 * z1) * (1.0 - z2 * z2));\n }\n /**\n * @param int o\n * @param int omax\n * @param int zone\n * @param RangeSet pixset\n * @param long pix\n * @param pstack stk\n * @param boolean inclusive\n */\n check_pixel(o, omax, zone, pixset, pix, stk, inclusive) {\n if (zone == 0)\n return;\n if (o < this.order) {\n if (zone >= 3) { // output all subpixels\n let sdist = 2 * (this.order - o); // the \"bit-shift distance\" between map orders\n pixset.append1(pix << sdist, ((pix + 1) << sdist));\n }\n else { // (zone>=1)\n for (let i = 0; i < 4; ++i) {\n stk.push(4 * pix + 3 - i, o + 1); // add children\n }\n }\n }\n else if (o > this.order) { // this implies that inclusive==true\n if (zone >= 2) { // pixel center in shape\n pixset.append(pix >>> (2 * (o - this.order))); // output the parent pixel at order\n stk.popToMark(); // unwind the stack\n }\n else { // (zone>=1): pixel center in safety range\n if (o < omax) { // check sublevels\n for (let i = 0; i < 4; ++i) { // add children in reverse order\n stk.push(4 * pix + 3 - i, o + 1); // add children\n }\n }\n else { // at resolution limit\n pixset.append(pix >>> (2 * (o - this.order))); // output the parent pixel at order\n stk.popToMark(); // unwind the stack\n }\n }\n }\n else { // o==order\n if (zone >= 2) {\n pixset.append(pix);\n }\n else if (inclusive) { // and (zone>=1)\n if (this.order < omax) { // check sublevels\n stk.mark(); // remember current stack position\n for (let i = 0; i < 4; ++i) { // add children in reverse order\n stk.push(4 * pix + 3 - i, o + 1); // add children\n }\n }\n else { // at resolution limit\n pixset.append(pix); // output the pixel\n }\n }\n }\n }\n /** Returns the maximum angular distance between a pixel center and its\n corners.\n @return maximum angular distance between a pixel center and its\n corners. */\n maxPixrad() {\n let zphia = new Zphi(2. / 3., Math.PI / this.nl4);\n let xyz1 = this.convertZphi2xyz(zphia);\n let va = new Vec3(xyz1[0], xyz1[1], xyz1[2]);\n let t1 = 1. - 1. / this.nside;\n t1 *= t1;\n let zphib = new Zphi(1 - t1 / 3, 0);\n let xyz2 = this.convertZphi2xyz(zphib);\n let vb = new Vec3(xyz2[0], xyz2[1], xyz2[2]);\n return va.angle(vb);\n }\n ;\n /**\n * this is a workaround replacing the Vec3(Zphi) constructor.\n */\n convertZphi2xyz(zphi) {\n let sth = Math.sqrt((1.0 - zphi.z) * (1.0 + zphi.z));\n let x = sth * Hploc.cos(zphi.phi);\n let y = sth * Hploc.sin(zphi.phi);\n let z = zphi.z;\n return [x, y, z];\n }\n ;\n /** Returns a range set of pixels which overlap with a given disk. <p>\n This method is more efficient in the RING scheme. <p>\n This method may return some pixels which don't overlap with\n the polygon at all. The higher {@code fact} is chosen, the fewer false\n positives are returned, at the cost of increased run time.\n @param ptg the angular coordinates of the disk center\n @param radius the radius (in radians) of the disk\n @param fact The overlapping test will be done at the resolution\n {@code fact*nside}. For NESTED ordering, {@code fact} must be a power\n of 2, else it can be any positive integer. A typical choice would be 4.\n @return the requested set of pixel number ranges */\n queryDiscInclusive(ptg, radius, fact) {\n this.computeBn();\n let inclusive = (fact != 0);\n let pixset = new RangeSet();\n if (radius >= Math.PI) { // disk covers the whole sphere\n pixset.append1(0, this.npix);\n return pixset;\n }\n let oplus = 0;\n if (inclusive) {\n // HealpixUtils.check ((1L<<order_max)>=fact,\"invalid oversampling factor\");\n if (!((fact & (fact - 1)) == 0)) {\n console.error(\"oversampling factor must be a power of 2\");\n }\n oplus = this.ilog2(fact);\n }\n let omax = Math.min(this.order_max, this.order + oplus); // the order up to which we test\n let vptg = Vec3.pointing2Vec3(ptg);\n let crpdr = new Array(omax + 1);\n let crmdr = new Array(omax + 1);\n let cosrad = Hploc.cos(radius);\n let sinrad = Hploc.sin(radius);\n for (let o = 0; o <= omax; o++) { // prepare data at the required orders\n let dr = this.mpr[o]; // safety distance\n let cdr = this.cmpr[o];\n let sdr = this.smpr[o];\n crpdr[o] = (radius + dr > Math.PI) ? -1. : cosrad * cdr - sinrad * sdr;\n crmdr[o] = (radius - dr < 0.) ? 1. : cosrad * cdr + sinrad * sdr;\n }\n let stk = new pstack(12 + 3 * omax);\n for (let i = 0; i < 12; i++) { // insert the 12 base pixels in reverse order\n stk.push(11 - i, 0);\n }\n while (stk.size() > 0) { // as long as there are pixels on the stack\n // pop current pixel number and order from the stack\n let pix = stk.ptop();\n let curro = stk.otop();\n stk.pop();\n let pos = this.bn[curro].pix2zphi(pix);\n // cosine of angular distance between pixel center and disk center\n let cangdist = this.cosdist_zphi(vptg.z, ptg.phi, pos.z, pos.phi);\n if (cangdist > crpdr[curro]) {\n let zone = (cangdist < cosrad) ? 1 : ((cangdist <= crmdr[curro]) ? 2 : 3);\n this.check_pixel(curro, omax, zone, pixset, pix, stk, inclusive);\n }\n }\n return pixset;\n }\n}\n//# sourceMappingURL=Healpix.js.map","export { Constants } from \"./Constants.js\";\nexport { pstack } from \"./pstack.js\";\nexport { CircleFinder } from './CircleFinder.js';\nexport { Fxyf } from './Fxyf.js';\nexport { Healpix } from './Healpix.js';\nexport { Pointing } from './Pointing.js';\nexport { RangeSet } from './RangeSet.js';\nexport { Vec3 } from './Vec3.js';\nexport { Xyf } from './Xyf.js';\nexport { Zphi } from './Zphi.js';\nexport { Hploc } from './Hploc.js';\n//# sourceMappingURL=index.js.map","'use strict';\n\nimport { Healpix } from 'healpixjs';\nimport { bootSetup } from './Config.js';\n// import Camera from './Camera.js';\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\nclass Global {\n // --- cached / runtime state ---\n // private _camera: Camera | null;\n // private _gl: GL | null;\n private _healpix: Record<number, Healpix>;\n\n // --- config/state flags ---\n private _selectionnside: number;\n // private _healpix4footprints: boolean;\n\n private _useCORSProxy: boolean;\n private _corsProxyUrl: string;\n private _maxDecimals: number;\n private _debug: boolean;\n private _insideSphere: boolean;\n private _version: string;\n\n constructor() {\n\n this._useCORSProxy = bootSetup.useCORSProxy;\n this._corsProxyUrl = bootSetup.corsProxyUrl;\n this._maxDecimals = bootSetup.maxDecimals;\n this._debug = bootSetup.debug;\n this._insideSphere = bootSetup.insideView;\n this._version = bootSetup.version;\n\n this._healpix = {};\n\n this._selectionnside = 32;\n }\n\n init(): void {\n console.log('Global.init()');\n }\n\n // --- getters/setters ---\n\n get version(): string { return this._version; }\n\n set corsProxyUrl(url: string) { this._corsProxyUrl = url; }\n get corsProxyUrl(): string { return this._corsProxyUrl; }\n\n get useCORSProxy(): boolean { return this._useCORSProxy; }\n set useCORSProxy(enabled: boolean) { this._useCORSProxy = enabled; }\n\n get debug(): boolean { return this._debug; }\n\n getHealpix(order: number): Healpix {\n if (this._healpix[order] === undefined) {\n // order is HEALPix \"order\" ⇒ nside = 2^order\n this._healpix[order] = new Healpix(Math.pow(2, order));\n }\n return this._healpix[order];\n }\n\n get MAX_DECIMALS(): number { return this._maxDecimals; }\n\n set insideSphere(v: boolean) { this._insideSphere = v; }\n get insideSphere(): boolean { return this._insideSphere; }\n\n get nsideForSelection(): number { return this._selectionnside; }\n \n}\n\nconst global = new Global();\nexport default global;","/**\n * @author Fabrizio Giordano (Fab)\n */\nimport { vec3, mat4 } from \"gl-matrix\";\nimport {\n astroDegToSpherical,\n cartesianToSpherical,\n sphericalToCartesian,\n type SphericalCoords,\n} from \"./utils/Utils.js\";\n\nimport global from './Global.js'\n\ntype Vec3Tuple = [number, number, number];\n\ninterface CameraLike {\n getCameraMatrix(): mat4;\n}\n\nclass Camera implements CameraLike {\n\n private insideSphere = false;\n\n private cam_pos: vec3 = vec3.create(); // camera position\n private cam_speed = 1.0;\n\n private vMatrix: mat4 = mat4.create(); // view matrix\n private T: mat4 = mat4.create(); // translation matrix\n private R: mat4 = mat4.create(); // rotation matrix\n\n // Optional state used in rotate helpers\n private FoV = 180.0;\n private previousFoV = 180.0;\n private move: vec3 = vec3.create();\n private phi = 0; // accumulated yaw (radians)\n private theta = 0; // accumulated pitch (radians)\n private rotationSensitivity = 1.0\n\n // lock rotation around world axes\n private lockRotX = false;\n private lockRotY = false;\n private lockRotZ = false;\n\n constructor(in_position: vec3, in_sphere: boolean) {\n this.init(in_position, in_sphere);\n }\n\n private init(in_position: vec3, in_sphere: boolean): void {\n this.insideSphere = in_sphere;\n this.cam_pos = vec3.clone(in_position);\n\n this.vMatrix = mat4.create();\n this.T = mat4.create();\n this.R = mat4.create();\n\n mat4.translate(this.T, this.T, [this.cam_pos[0], this.cam_pos[1], this.cam_pos[2]]);\n\n // reset helpers\n this.FoV = this.previousFoV = 180.0;\n this.move = vec3.clone([0, 0, 0]);\n\n const raDeg = 0;\n const decDeg = 0;\n this.goTo(raDeg, decDeg);\n }\n\n goTo(raDeg: number, decDeg: number): void {\n\n // mirror RA\n const mirroredRA = 360 - raDeg;\n this.goToPhiTheta(astroDegToSpherical(mirroredRA, decDeg));\n }\n\n private goToPhiTheta(ptDeg: SphericalCoords): void {\n const xyz = sphericalToCartesian(ptDeg.phi, ptDeg.theta, this.cam_pos[2]);\n\n let cameraMatrix = mat4.create();\n cameraMatrix = mat4.translate(cameraMatrix, cameraMatrix, vec3.fromValues(xyz[0], xyz[1], xyz[2]));\n\n const focusPoint: Vec3Tuple = [0.0, 0.0, 0.0];\n const cameraUp: vec3 = vec3.clone([0.0, 1.0, 0.0]);\n const cameraPos: Vec3Tuple = [cameraMatrix[12], cameraMatrix[13], cameraMatrix[14]];\n\n cameraMatrix = mat4.targetTo(cameraMatrix, cameraPos, focusPoint, cameraUp);\n\n this.R = mat4.clone(cameraMatrix);\n this.R[12] = 0;\n this.R[13] = 0;\n this.R[14] = 0;\n\n const viewMatrix = mat4.create();\n if (this.cam_pos[2] !== 0) {\n mat4.invert(viewMatrix, cameraMatrix);\n }\n this.vMatrix = viewMatrix;\n }\n\n toggleInsideSphere(): void {\n // if (inside !== global.insideSphere) {\n // global.insideSphere = inside;\n\n if (global.insideSphere) {\n if (this.cam_pos[2] <= 2) {\n this.cam_pos[2] = -2 + this.cam_pos[2];\n } else {\n this.cam_pos[2] = -0.005;\n }\n } else {\n this.cam_pos[2] = 2.0 + this.cam_pos[2];\n }\n\n mat4.translate(this.T, mat4.create(), this.cam_pos);\n this.refreshViewMatrix();\n // }\n }\n\n zoom(inertia: number): void {\n this.move = vec3.clone([0, 0, 0]);\n this.move[2] += this.cam_speed * inertia;\n\n if (global.insideSphere) {\n if (this.cam_pos[2] + this.move[2] >= -0.005 && inertia > 0) {\n this.cam_pos[2] = -0.005;\n inertia = 0;\n } else if (this.cam_pos[2] + this.move[2] <= -0.9885 && inertia < 0) {\n this.cam_pos[2] = -0.9885;\n inertia = 0;\n } else {\n this.cam_pos[2] += this.move[2];\n }\n } else {\n // Keep zoom responsive near the sphere surface without the abrupt\n // threshold jumps that made the 0.2 -> 0.05 deg range feel sticky.\n const distanceFromSurface = Math.max(this.cam_pos[2] - 1, 1e-6);\n const normalizedDistance = Math.min(1, distanceFromSurface / 0.3);\n const zoomScale = 0.015 + 0.985 * Math.pow(normalizedDistance, 1.2);\n this.move[2] *= zoomScale;\n\n if (this.cam_pos[2] + this.move[2] <= 1.000001 && inertia < 0) {\n this.cam_pos[2] = 1.000001;\n } else {\n this.cam_pos[2] += this.move[2];\n }\n\n }\n\n const identity = mat4.create();\n mat4.translate(this.T, identity, this.cam_pos);\n\n this.refreshViewMatrix();\n }\n\n /**\n * Move the camera forward/backward along its current viewing direction.\n * Positive distance moves *forward* (toward where the camera is looking),\n * negative distance moves *backward*.\n *\n * This does not enforce inside/outside-sphere bounds; if you want clamping,\n * handle it before calling or we can extend this to mimic `zoom()` bounds.\n */\n moveAlongView(distance: number): void {\n // World-space forward vector: transform camera-space -Z by inverse rotation\n const R_inverse = mat4.create();\n mat4.invert(R_inverse, this.R);\n\n const forwardCam = vec3.fromValues(0, 0, -1); // camera looks along -Z in its local space\n const fwdWorld = vec3.create();\n vec3.transformMat4(fwdWorld, forwardCam, R_inverse);\n\n // Normalise to get direction only\n const len = Math.hypot(fwdWorld[0], fwdWorld[1], fwdWorld[2]);\n if (len > 0) {\n fwdWorld[0] /= len;\n fwdWorld[1] /= len;\n fwdWorld[2] /= len;\n }\n\n // Update camera position\n this.cam_pos[0] += fwdWorld[0] * distance;\n this.cam_pos[1] += fwdWorld[1] * distance;\n this.cam_pos[2] += fwdWorld[2] * distance;\n\n // Rebuild translation matrix and view matrix\n const identity = mat4.create();\n mat4.translate(this.T, identity, this.cam_pos);\n this.refreshViewMatrix();\n }\n\n translate(distance: number) {\n\n this.cam_pos[2] = distance + 1\n const identity = mat4.create();\n mat4.translate(this.T, identity, this.cam_pos);\n\n this.refreshViewMatrix();\n }\n\n rotateX(sign: number): void {\n if (this.lockRotX) return;\n const factorRad = sign * 0.01;\n this.theta += factorRad;\n mat4.rotate(this.R, this.R, factorRad, [1, 0, 0]);\n this.refreshViewMatrix();\n }\n\n rotateY(sign: number): void {\n if (this.lockRotY) return;\n const factorRad = sign * 0.01;\n this.phi += factorRad;\n mat4.rotate(this.R, this.R, factorRad, [0, 1, 0]);\n this.refreshViewMatrix();\n }\n\n rotateZ(sign: number): void {\n if (this.lockRotZ) return;\n const factorRad = sign * 0.01;\n // this.phi += factorRad;\n mat4.rotate(this.R, this.R, factorRad, [0, 0, 1]);\n this.refreshViewMatrix();\n }\n\n rotateXRadian(radian: number): void {\n if (this.lockRotX) return;\n mat4.rotate(this.R, this.R, radian, [1, 0, 0]);\n this.refreshViewMatrix();\n }\n\n rotateYRadian(radian: number): void {\n if (this.lockRotY) return;\n this.phi += radian;\n mat4.rotate(this.R, this.R, radian, [0, 1, 0]);\n this.refreshViewMatrix();\n }\n\n rotateZRadian(radian: number): void {\n if (this.lockRotZ) return;\n mat4.rotate(this.R, this.R, radian, [0, 0, 1]);\n this.refreshViewMatrix();\n }\n\n rotate(phi: number, theta: number): void {\n // If Z is locked, completely disable orbit rotation\n if (this.lockRotZ) {\n return;\n }\n\n const totRot = Math.sqrt(phi * phi + theta * theta);\n if (totRot === 0) return;\n\n // If both X and Y rotations are locked, nothing to do\n if (this.lockRotX && this.lockRotY) {\n return;\n }\n\n const pos = this.getCameraPosition();\n const dist2Center = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]);\n const distanceFromSurface = Math.max(dist2Center - 1, 1e-6);\n const normalizedDistance = Math.min(1, distanceFromSurface / 0.45);\n const distanceFactor = 0.02 + 0.98 * Math.pow(normalizedDistance, 1.55);\n\n // Keep tiny FoV more stable and predictable while preserving responsiveness\n // at medium and wide fields of view.\n const normalizedFoV = Math.min(1, this.FoV / 18);\n const fovFactor = 0.06 + 1.55 * Math.pow(normalizedFoV, 0.52);\n const usedRot = ((totRot * distanceFactor * fovFactor) / 1.9) * this.rotationSensitivity;\n\n // Build an axis from phi/theta, but zero components that are locked\n let axisX = this.lockRotX ? 0 : theta;\n let axisY = this.lockRotY ? 0 : phi;\n const axisLen = Math.sqrt(axisX * axisX + axisY * axisY);\n\n // If after locking we have no axis left, do nothing\n if (axisLen === 0) {\n return;\n }\n\n axisX /= axisLen;\n axisY /= axisLen;\n\n mat4.rotate(this.R, this.R, -usedRot, [axisX, axisY, 0]);\n this.refreshViewMatrix();\n }\n\n setRotationSensitivity(value: number): void {\n this.rotationSensitivity = Math.min(3, Math.max(0.2, value))\n }\n\n getRotationSensitivity(): number {\n return this.rotationSensitivity\n }\n\n // rotate(phi: number, theta: number): void {\n // // totRot is the magnitude of the requested rotation\n // const totRot = Math.sqrt(phi * phi + theta * theta);\n // if (totRot === 0) return;\n\n // // If both X and Y rotations are locked, nothing to do\n // if (this.lockRotX && this.lockRotY) {\n // return;\n // }\n\n // const pos = this.getCameraPosition();\n // const dist2Center = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]);\n // const usedRot = (totRot * (dist2Center - 1)) / 3.0;\n\n // // Build an axis from phi/theta, but zero components that are locked\n // let axisX = this.lockRotX ? 0 : theta;\n // let axisY = this.lockRotY ? 0 : phi;\n // const axisLen = Math.sqrt(axisX * axisX + axisY * axisY);\n\n // // If after locking we have no axis left, do nothing\n // if (axisLen === 0) {\n // return;\n // }\n\n // axisX /= axisLen;\n // axisY /= axisLen;\n\n // mat4.rotate(this.R, this.R, -usedRot, [axisX, axisY, 0]);\n // this.refreshViewMatrix();\n // }\n\n\n // rotate(phi: number, theta: number): void {\n // const totRot = Math.sqrt(phi * phi + theta * theta);\n // if (totRot === 0) return;\n\n // const pos = this.getCameraPosition();\n // const dist2Center = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]);\n // const usedRot = (totRot * (dist2Center - 1)) / 3.0;\n\n // mat4.rotate(this.R, this.R, -usedRot, [theta / totRot, phi / totRot, 0]);\n // this.refreshViewMatrix();\n // }\n\n private refreshViewMatrix(): void {\n const T_inverse = mat4.create();\n const R_inverse = mat4.create();\n\n mat4.invert(T_inverse, this.T);\n mat4.invert(R_inverse, this.R);\n\n mat4.multiply(this.vMatrix, T_inverse, R_inverse);\n }\n\n refreshFoV(currentFoV: number): void {\n this.previousFoV = this.FoV;\n this.FoV = currentFoV;\n }\n\n getCameraMatrix(): mat4 {\n return this.vMatrix;\n }\n\n getCameraPosition(): Vec3Tuple {\n const inv = mat4.create();\n if (!mat4.invert(inv, this.vMatrix)) {\n // fallback — we already maintain cam_pos\n return [this.cam_pos[0], this.cam_pos[1], this.cam_pos[2]];\n }\n return [inv[12], inv[13], inv[14]];\n }\n\n setCameraMatrix(viewMatrix: Float32Array<ArrayBufferLike>) {\n this.vMatrix = viewMatrix\n }\n\n\n setCameraPosition(position: [number, number, number]): void {\n\n\n // Update authoritative position\n this.cam_pos = vec3.fromValues(position[0], position[1], position[2]);\n\n // Rebuild translation matrix from cam_pos\n mat4.translate(this.T, mat4.create(), this.cam_pos);\n\n // Do NOT touch this.R here (keep orientation)\n // Recompute view: vMatrix = inv(T) * inv(R)\n this.refreshViewMatrix();\n }\n\n getCameraAngle(): SphericalCoords {\n const [x, y, z] = this.getCameraPosition();\n const posVec = vec3.fromValues(x, y, z);\n const ptDeg = cartesianToSpherical(posVec);\n // eslint-disable-next-line no-console\n console.log(\"[Camera::getCameraAngle]\", ptDeg);\n return ptDeg;\n }\n\n /**\n * Lock/unlock rotation around world axes X, Y, Z.\n * Passing `undefined` leaves that axis as-is.\n */\n setRotationLock(options: { x?: boolean; y?: boolean; z?: boolean }): void {\n if (options.x !== undefined) this.lockRotX = options.x;\n if (options.y !== undefined) this.lockRotY = options.y;\n if (options.z !== undefined) this.lockRotZ = options.z;\n }\n\n /** Convenience helpers */\n clearRotationLock(): void {\n this.lockRotX = this.lockRotY = this.lockRotZ = false;\n }\n\n isRotationLockedX(): boolean { return this.lockRotX; }\n isRotationLockedY(): boolean { return this.lockRotY; }\n isRotationLockedZ(): boolean { return this.lockRotZ; }\n}\n\nexport default Camera;\n","/**\n * @author Fabrizio Giordano (Fab)\n */\n\"use strict\";\n\nimport { vec3, mat4, ReadonlyVec3, ReadonlyMat4 } from \"gl-matrix\";\nimport { HealpixGrid } from \"../model/grid/HealpixGrid.js\";\nimport Camera from \"../Camera.js\";\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\n\nclass RayPickingUtils {\n private static lastNearestVisibleObjectIdx = -1;\n\n /** Get index of the last object found under the mouse (if any). */\n static getNearestVisibleObjectIdx(): number {\n return this.lastNearestVisibleObjectIdx;\n }\n\n /**\n * Builds a world-space ray from mouse coords.\n * @param mouseX ClientX (page pixels)\n * @param mouseY ClientY (page pixels)\n * @param pMatrix Projection matrix\n * @returns World-space direction (normalized) as a vec3\n */\n static getRayFromMouse(\n mouseX: number,\n mouseY: number,\n pMatrix: ReadonlyMat4,\n webgl: WebGL2RenderingContext,\n vMatrix: ReadonlyMat4\n ): vec3 {\n const gl = webgl as GL;\n const canvas = gl.canvas as HTMLCanvasElement;\n const rect = canvas.getBoundingClientRect();\n\n // mouseX / mouseY are already local to the canvas (CSS pixels)\n const canvasMX = mouseX;\n const canvasMY = mouseY;\n\n // Use rect.width / rect.height (CSS) for NDC\n const x = (2.0 * canvasMX) / rect.width - 1.0;\n const y = 1.0 - (2.0 * canvasMY) / rect.height;\n const z = -1.0;\n\n const rayClip: [number, number, number, number] = [x, y, z, 1.0];\n\n const pInv = mat4.create();\n mat4.invert(pInv, pMatrix);\n const rayEye4: [number, number, number, number] = [0, 0, 0, 0];\n RayPickingUtils.mat4MultiplyVec4(pInv, rayClip, rayEye4);\n\n // direction in eye space\n const rayEye: [number, number, number, number] = [rayEye4[0], rayEye4[1], -1.0, 0.0];\n\n const vInv = mat4.create();\n mat4.invert(vInv, vMatrix);\n const rayWorld4: [number, number, number, number] = [0, 0, 0, 0];\n RayPickingUtils.mat4MultiplyVec4(vInv, rayEye, rayWorld4);\n\n const rayWorld = vec3.fromValues(rayWorld4[0], rayWorld4[1], rayWorld4[2]);\n vec3.normalize(rayWorld, rayWorld);\n return rayWorld;\n }\n\n /** a*b (4x4 * vec4) → vec4 (in `out`) */\n private static mat4MultiplyVec4(\n a: ReadonlyMat4,\n b: Readonly<[number, number, number, number]>,\n out: [number, number, number, number]\n ): [number, number, number, number] {\n const d = b[0], e = b[1], g = b[2], w = b[3];\n out[0] = a[0] * d + a[4] * e + a[8] * g + a[12] * w;\n out[1] = a[1] * d + a[5] * e + a[9] * g + a[13] * w;\n out[2] = a[2] * d + a[6] * e + a[10] * g + a[14] * w;\n out[3] = a[3] * d + a[7] * e + a[11] * g + a[15] * w;\n return out;\n }\n\n /**\n * Ray–sphere intersection (world space).\n * @returns distance `t` along the ray to the first hit, or `-1` if no hit.\n */\n static raySphere(\n rayOrigWorld: ReadonlyVec3,\n rayDirectionWorld: ReadonlyVec3,\n healpixGridSingleton: HealpixGrid): number {\n\n let intersectionDistance = -1;\n const L = vec3.create();\n vec3.subtract(L, rayOrigWorld, healpixGridSingleton.center);\n\n const b = vec3.dot(rayDirectionWorld, L);\n const c = vec3.dot(L, L) - healpixGridSingleton.radius * healpixGridSingleton.radius;\n\n const disc = b * b - c;\n\n if (disc > 0.0) {\n const s = Math.sqrt(disc);\n const ta = -b + s;\n const tb = -b - s;\n\n if (ta < 0.0 && tb < 0.0) {\n // behind camera\n } else if (tb < 0.0) {\n intersectionDistance = ta;\n } else {\n intersectionDistance = Math.min(ta, tb);\n }\n } else if (disc === 0.0) {\n const t = -b; // tangent\n if (t >= 0.0) {\n intersectionDistance = t;\n }\n }\n\n return intersectionDistance;\n }\n\n /**\n * Compute intersection with a single model (defaults to the Healpix grid).\n * @returns model-space intersection point (vec3) if hit, otherwise empty array; and the picked model.\n */\n static getIntersectionPointWithSingleModel(\n mouseX: number, mouseY: number,\n healpixGrid: HealpixGrid,\n webgl: WebGL2RenderingContext,\n camera: Camera,\n pMatrix: ReadonlyMat4): number[] {\n\n const vMatrix = camera.getCameraMatrix();\n const rayWorld = RayPickingUtils.getRayFromMouse(mouseX, mouseY, pMatrix, webgl, vMatrix);\n\n const t = RayPickingUtils.raySphere(\n camera.getCameraPosition() as ReadonlyVec3,\n rayWorld, healpixGrid\n );\n\n let intersectionModelPoint: number[] = [];\n if (t >= 0) {\n // world intersection\n const worldHit = vec3.create();\n vec3.scale(worldHit, rayWorld, t);\n vec3.add(worldHit, camera.getCameraPosition() as ReadonlyVec3, worldHit);\n\n // world → model\n const worldHit4: [number, number, number, number] = [worldHit[0], worldHit[1], worldHit[2], 1.0];\n const modelHit4: [number, number, number, number] = [0, 0, 0, 0];\n // RayPickingUtils.mat4MultiplyVec4(healpixGridSingleton.getModelMatrixInverse(), worldHit4, modelHit4);\n RayPickingUtils.mat4MultiplyVec4(healpixGrid.getModelMatrixInverse(), worldHit4, modelHit4);\n\n intersectionModelPoint = [modelHit4[0], modelHit4[1], modelHit4[2]];\n }\n\n return intersectionModelPoint\n }\n}\n\nexport default RayPickingUtils;","/**\n * @author Fabrizio Giordano (Fab)\n */\nimport { vec3, ReadonlyVec3 } from \"gl-matrix\";\nimport { Vec3, Pointing, Healpix } from \"healpixjs\";\nimport global from \"../Global.js\";\nimport {\n cartesianToSpherical,\n sphericalToAstroDeg,\n raDegToHMS,\n decDegToDMS,\n type SphericalCoords,\n type AstroCoords,\n type HMS,\n type DMS,\n} from \"./Utils.js\";\n\ntype XYZ = [number, number, number];\n\nfunction toVec3(p: ReadonlyVec3 | XYZ): ReadonlyVec3 {\n return Array.isArray(p) ? (vec3.fromValues(p[0], p[1], p[2]) as ReadonlyVec3) : p;\n}\n\nclass MouseHelper {\n private _xyz: XYZ | null = null;\n private _raDecDeg: AstroCoords | null = null;\n private _phiThetaDeg: SphericalCoords | null = null;\n\n raHMS?: HMS;\n decDMS?: DMS;\n\n /**\n * @param in_xyz [x, y, z]\n * @param in_raDecDeg { ra, dec } in degrees (ICRS/J2000)\n * @param in_phiThetaDeg { phi, theta } in degrees (spherical)\n */\n constructor(\n in_xyz?: XYZ | null,\n in_raDecDeg?: AstroCoords | null,\n in_phiThetaDeg?: SphericalCoords | null\n ) {\n if (in_xyz != null) this._xyz = in_xyz;\n if (in_raDecDeg != null) this._raDecDeg = in_raDecDeg;\n if (in_phiThetaDeg != null) this._phiThetaDeg = in_phiThetaDeg;\n\n if (this._raDecDeg) {\n this.raHMS = raDegToHMS(this._raDecDeg.ra);\n this.decDMS = decDegToDMS(this._raDecDeg.dec);\n }\n }\n\n /** (Formerly `computeNpix256`) Uses global.nsideForSelection. */\n computeNpix(): number | null {\n if (!this._xyz) return null;\n const hp: Healpix = global.getHealpix(global.nsideForSelection);\n const v = new Vec3(this._xyz[0], this._xyz[1], this._xyz[2]);\n const ptg = new Pointing(v, false);\n return hp.ang2pix(ptg, false);\n }\n\n /** Update helper state from a world-space 3D point on the unit sphere. */\n update(mousePoint: ReadonlyVec3 | XYZ): void {\n const mp = toVec3(mousePoint);\n const sph = cartesianToSpherical(mp);\n const radec = sphericalToAstroDeg(sph.phi, sph.theta);\n\n this._xyz = [mp[0], mp[1], mp[2]];\n this._phiThetaDeg = sph;\n this._raDecDeg = radec;\n this.raHMS = raDegToHMS(radec.ra);\n this.decDMS = decDegToDMS(radec.dec);\n }\n\n clear(): void {\n this._xyz = null;\n this._raDecDeg = null;\n this._phiThetaDeg = null;\n this.raHMS = undefined;\n this.decDMS = undefined;\n }\n\n // --- getters ---\n get xyz(): XYZ | null {\n return this._xyz;\n }\n get x(): number | null {\n return this._xyz ? this._xyz[0] : null;\n }\n get y(): number | null {\n return this._xyz ? this._xyz[1] : null;\n }\n get z(): number | null {\n return this._xyz ? this._xyz[2] : null;\n }\n\n get ra(): number | null {\n return this._raDecDeg ? this._raDecDeg.ra : null;\n }\n get dec(): number | null {\n return this._raDecDeg ? this._raDecDeg.dec : null;\n }\n\n get phi(): number | null {\n return this._phiThetaDeg ? this._phiThetaDeg.phi : null;\n }\n get theta(): number | null {\n return this._phiThetaDeg ? this._phiThetaDeg.theta : null;\n }\n\n get raDecDeg(): AstroCoords | null {\n return this._raDecDeg;\n }\n get phiThetaDeg(): SphericalCoords | null {\n return this._phiThetaDeg;\n }\n}\n\nexport default MouseHelper;","// ShaderManager.ts\n\nexport type GLSLSource = string;\n\nexport default class ShaderManager {\n static catalogueVS(): GLSLSource {\n return `#version 300 es\n in vec4 aCatPosition;\n in float a_selected;\n in float a_pointsize;\n in float a_brightness;\n\n out float v_selected;\n out float v_brightness;\n out lowp vec4 vColor; // not used\n\n uniform mat4 uPMatrix;\n uniform mat4 uMVMatrix;\n\n void main() {\n\n gl_Position = (uPMatrix * uMVMatrix * aCatPosition);\n gl_PointSize = a_pointsize;\n v_selected = a_selected;\n v_brightness = a_brightness;\n }`;\n }\n\n static catalogueFS(): GLSLSource {\n return `#version 300 es\n precision mediump float;\n \n #ifdef GL_OES_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n #endif\n\n // https://www.desultoryquest.com/blog/drawing-anti-aliased-circular-points-using-opengl-slash-webgl/\n\n // precision mediump float;\n\n in float v_selected;\n in float v_brightness;\n\n uniform vec4 u_fragcolor;\n\n out vec4 fragColor;\n\n // varying float v_selected;\n // varying float v_brightness;\n\n const float EPSILON = 1e-10;\n \n vec3 RGBtoHCV(in vec3 rgb) {\n // RGB [0..1] to Hue-Chroma-Value [0..1]\n // Based on work by Sam Hocevar and Emil Persson\n vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1., 2. / 3.) : vec4(rgb.gb, 0., -1. / 3.);\n vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx);\n float c = q.x - min(q.w, q.y);\n float h = abs((q.w - q.y) / (6. * c + EPSILON) + q.z);\n return vec3(h, c, q.x);\n }\n\n vec3 RGBtoHSL(in vec3 rgb) {\n // RGB [0..1] to Hue-Saturation-Lightness [0..1]\n vec3 hcv = RGBtoHCV(rgb);\n //vec3 hcv = vec3(1., 1., 1.);\n float z = hcv.z - hcv.y * 0.5;\n float s = hcv.y / (1. - abs(z * 2. - 1.) + EPSILON);\n return vec3(hcv.x, s, z);\n }\n\n vec3 HUEtoRGB(in float hue){\n // Hue [0..1] to RGB [0..1]\n // See http://www.chilliant.com/rgb2hsv.html\n vec3 rgb = abs(hue * 6. - vec3(3, 2, 4)) * vec3(1, -1, -1) + vec3(-1, 2, 2);\n return clamp(rgb, 0., 1.);\n }\n\n vec3 HSLtoRGB(in vec3 hsl) {\n // Hue-Saturation-Lightness [0..1] to RGB [0..1]\n vec3 rgb = HUEtoRGB(hsl.x);\n float c = (1. - abs(2. * hsl.z - 1.)) * hsl.y;\n return (rgb - 0.5) * c + hsl.z;\n }\n \n void main() {\n\n float r = 0.0, delta = 0.0, alpha = 1.0;\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n r = dot(cxy, cxy);\n if (r > 1.0) {\n discard;\n }\n\n #ifdef GL_OES_standard_derivatives\n delta = fwidth(r);\n alpha = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n #endif\n\n if (v_selected == 1.0){\n // gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0) * (alpha);\n fragColor = vec4(1.0, 0.0, 0.0, 1.0) * (alpha);\n } else if (v_selected == 2.0){\n // gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0) * (alpha);\n fragColor = vec4(1.0, 1.0, 0.0, 1.0) * (alpha);\n }else{\n if (r < 0.4) {\n discard;\n }\n if ( v_brightness >= -1.0 && v_brightness <= 1.0) {\n // Round-trip RGB->HSL->RGB with time-dependent lightness\n vec3 hsl = RGBtoHSL(vec3(u_fragcolor));\n //hsl.z = pow(hsl.z, sin(iTime) + 1.5);\n // hsl.z = pow(hsl.z, v_brightness + 1.5);\n hsl.z = pow(hsl.z, v_brightness + 1.5);\n vec3 hslcolor = HSLtoRGB(hsl);\n // gl_FragColor = vec4(hslcolor, u_fragcolor[3]) * (alpha);\n fragColor = vec4(hslcolor, u_fragcolor[3]) * (alpha);\n } else {\n // gl_FragColor = u_fragcolor * (alpha);\n fragColor = u_fragcolor * (alpha);\n }\n }\n }`;\n }\n\n static footprintVS(): GLSLSource {\n return `#version 300 es\n precision highp float;\n\n layout(location = 0) in vec4 aCatPosition;\n\n uniform float u_pointsize;\n uniform mat4 uMVMatrix;\n uniform mat4 uPMatrix;\n\n void main() {\n gl_Position = uPMatrix * uMVMatrix * aCatPosition;\n gl_PointSize = u_pointsize; // Works in WebGL2\n }`;\n \n }\n\n static footprintFS(): GLSLSource {\n return `#version 300 es\n precision mediump float;\n\n uniform vec4 u_fragcolor;\n out vec4 fragColor;\n\n void main() {\n fragColor = u_fragcolor;\n }`;\n \n }\n\n static hipsVS(): GLSLSource {\n return `#version 300 es\n in vec3 aVertexPosition;\n in vec2 aTextureCoord;\n\n uniform mat4 uMMatrix;\n uniform mat4 uVMatrix;\n uniform mat4 uPMatrix;\n\n out vec2 vTextureCoord;\n\n void main() {\n gl_Position = uPMatrix * uVMatrix * uMMatrix * vec4(aVertexPosition, 1.0);\n vTextureCoord = aTextureCoord;\n }`;\n }\n\n static hipsNativeFS(): GLSLSource {\n return `#version 300 es\n precision mediump float;\n\n in vec2 vTextureCoord;\n\n uniform sampler2D uSampler0;\n uniform sampler2D uSampler1;\n uniform sampler2D uSampler2;\n uniform sampler2D uSampler3;\n uniform sampler2D uSampler4;\n uniform sampler2D uSampler5;\n uniform sampler2D uSampler6;\n uniform sampler2D uSampler7;\n\n uniform float uFactor0;\n uniform float uFactor1;\n uniform float uFactor2;\n uniform float uFactor3;\n uniform float uFactor4;\n uniform float uFactor5;\n uniform float uFactor6;\n uniform float uFactor7;\n\n out vec4 fragColor;\n\n void main() {\n vec3 finalColor = vec3(0.0);\n\n if (uFactor0 >= 0.0){\n vec4 mycolor;\n #if __VERSION__ > 120\n vec4 color0 = texture(uSampler0, vTextureCoord);\n #else\n vec4 color0 = texture2D(uSampler0, vTextureCoord);\n #endif\n mycolor = color0;\n finalColor += mycolor.rgb * uFactor0;\n } else if (uFactor7 >= 0.0){\n finalColor = vec3(1.0, 0.0, 0.0);\n }\n fragColor = vec4(finalColor, 1.0);\n }`;\n }\n\n static hipsGrayscaleFS(): GLSLSource {\n return `#version 300 es\n precision mediump float;\n\n in vec2 vTextureCoord;\n\n uniform sampler2D uSampler0;\n uniform sampler2D uSampler1;\n uniform sampler2D uSampler2;\n uniform sampler2D uSampler3;\n uniform sampler2D uSampler4;\n uniform sampler2D uSampler5;\n uniform sampler2D uSampler6;\n uniform sampler2D uSampler7;\n\n uniform float uFactor0;\n uniform float uFactor1;\n uniform float uFactor2;\n uniform float uFactor3;\n uniform float uFactor4;\n uniform float uFactor5;\n uniform float uFactor6;\n uniform float uFactor7;\n\n out vec4 fragColor;\n\n void main() {\n vec3 finalColor = vec3(0.0);\n\n if (uFactor0 >= 0.0){\n #if __VERSION__ > 120\n vec4 color0 = texture(uSampler0, vTextureCoord);\n #else\n vec4 color0 = texture2D(uSampler0, vTextureCoord);\n #endif\n float gray = 0.21 * color0.r + 0.71 * color0.g + 0.07 * color0.b;\n finalColor = color0.rgb * (1.0 - uFactor0) + vec3(gray) * uFactor0;\n }\n if (uFactor1 >= 0.0){\n #if __VERSION__ > 120\n vec4 color1 = texture(uSampler1, vTextureCoord);\n #else\n vec4 color1 = texture2D(uSampler1, vTextureCoord);\n #endif\n finalColor += color1.rgb * uFactor1;\n }\n if (uFactor2 >= 0.0){\n #if __VERSION__ > 120\n vec4 color2 = texture(uSampler2, vTextureCoord);\n #else\n vec4 color2 = texture2D(uSampler2, vTextureCoord);\n #endif\n finalColor += color2.rgb * uFactor2;\n }\n if (uFactor3 >= 0.0){\n #if __VERSION__ > 120\n vec4 color3 = texture(uSampler3, vTextureCoord);\n #else\n vec4 color3 = texture2D(uSampler3, vTextureCoord);\n #endif\n finalColor += color3.rgb * uFactor3;\n }\n if (uFactor4 >= 0.0){\n #if __VERSION__ > 120\n vec4 color4 = texture(uSampler4, vTextureCoord);\n #else\n vec4 color4 = texture2D(uSampler4, vTextureCoord);\n #endif\n finalColor += color4.rgb * uFactor4;\n }\n if (uFactor5 >= 0.0){\n #if __VERSION__ > 120\n vec4 color5 = texture(uSampler5, vTextureCoord);\n #else\n vec4 color5 = texture2D(uSampler5, vTextureCoord);\n #endif\n finalColor += color5.rgb * uFactor5;\n }\n if (uFactor6 >= 0.0){\n #if __VERSION__ > 120\n vec4 color6 = texture(uSampler6, vTextureCoord);\n #else\n vec4 color6 = texture2D(uSampler6, vTextureCoord);\n #endif\n finalColor += color6.rgb * uFactor6;\n }\n if (uFactor7 >= 0.0){\n #if __VERSION__ > 120\n vec4 color7 = texture(uSampler7, vTextureCoord);\n #else\n vec4 color7 = texture2D(uSampler7, vTextureCoord);\n #endif\n finalColor += color7.rgb * uFactor7;\n }\n fragColor = vec4(finalColor, 1.0);\n }`;\n }\n\n static hipsColorMapFS(): GLSLSource {\n return `#version 300 es\n precision mediump float;\n\n in vec2 vTextureCoord;\n\n // UBO\n layout (std140) uniform colormap {\n float r_palette[256];\n float g_palette[256];\n float b_palette[256];\n };\n\n uniform sampler2D uSampler0;\n uniform float uFactor0;\n\n out vec4 fragColor;\n\n void main() {\n #if __VERSION__ > 120\n vec4 color0 = texture(uSampler0, vTextureCoord);\n #else\n vec4 color0 = texture2D(uSampler0, vTextureCoord);\n #endif\n\n int x = int(color0.r * 255.0);\n float px = r_palette[x] / 256.0;\n\n int y = int(color0.g * 255.0);\n float py = g_palette[y] / 256.0;\n\n int z = int(color0.b * 255.0);\n float pz = b_palette[z] / 256.0;\n\n // uFactor0 reserved for future blending if needed\n fragColor = vec4(px, py, pz, 1.0);\n }`;\n }\n}","export type ColorMapName =\n | 'grayscale'\n | 'native'\n | 'planck'\n | 'cmb'\n | 'rainbow'\n | 'eosb'\n | 'cubehelix'\n | 'hot'\n | 'gray';\n\nexport interface ColorMap {\n name: string;\n r: Float32Array;\n g: Float32Array;\n b: Float32Array;\n // r: number[];\n // g: number[];\n // b: number[];\n}\n\nexport const COLOR_MAP_SAMPLE_COUNT = 256;\n\ntype ColorChannelSamples = {\n r: number[];\n g: number[];\n b: number[];\n};\n\nfunction validateColorChannel(name: string, values: number[]): void {\n if (!Array.isArray(values)) {\n throw new Error(`Channel \"${name}\" must be an array.`);\n }\n if (values.length !== COLOR_MAP_SAMPLE_COUNT) {\n throw new Error(\n `Channel \"${name}\" must contain exactly ${COLOR_MAP_SAMPLE_COUNT} samples.`,\n );\n }\n\n for (let i = 0; i < values.length; i += 1) {\n const value = values[i];\n if (!Number.isFinite(value)) {\n throw new Error(`Channel \"${name}\" contains a non-finite value at index ${i}.`);\n }\n if (value < 0 || value > 255) {\n throw new Error(`Channel \"${name}\" contains an out-of-range value at index ${i}. Expected 0..255.`);\n }\n }\n}\n\nfunction packColorChannel(values: number[]): Float32Array {\n const packed = new Float32Array(COLOR_MAP_SAMPLE_COUNT * 4);\n for (let i = 0; i < COLOR_MAP_SAMPLE_COUNT; i += 1) {\n packed[i * 4] = values[i];\n }\n return packed;\n}\n\nexport function createColorMapFromSamples(\n name: string,\n channels: ColorChannelSamples,\n): ColorMap {\n const trimmedName = name.trim();\n if (!trimmedName) {\n throw new Error(\"Color map name must not be empty.\");\n }\n\n validateColorChannel(\"r\", channels.r);\n validateColorChannel(\"g\", channels.g);\n validateColorChannel(\"b\", channels.b);\n\n return {\n name: trimmedName,\n r: packColorChannel(channels.r),\n g: packColorChannel(channels.g),\n b: packColorChannel(channels.b),\n };\n}\n\nexport const ColorMaps: Record<ColorMapName, ColorMap> = {\n grayscale: {\n name: 'grayscale',\n r: new Float32Array([]),\n g: new Float32Array([]),\n b: new Float32Array([]),\n // r: [],\n // g: [],\n // b: [],\n },\n\n native: {\n name: 'native',\n r: new Float32Array([]),\n g: new Float32Array([]),\n b: new Float32Array([]),\n // r: [],\n // g: [],\n // b: [],\n },\n planck: {\n name: 'planck',\n r: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.769231, 0.0, 0.0, 0.0, 1.53846, 0.0, 0.0, 0.0, 2.30769, 0.0, 0.0, 0.0,\n 3.07692, 0.0, 0.0, 0.0, 3.84615, 0.0, 0.0, 0.0, 4.61538, 0.0, 0.0, 0.0, 5.38462, 0.0, 0.0,\n 0.0, 6.15385, 0.0, 0.0, 0.0, 6.92308, 0.0, 0.0, 0.0, 7.69231, 0.0, 0.0, 0.0, 8.46154, 0.0,\n 0.0, 0.0, 9.23077, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 11.5385, 0.0, 0.0, 0.0, 13.0769, 0.0,\n 0.0, 0.0, 14.6154, 0.0, 0.0, 0.0, 16.1538, 0.0, 0.0, 0.0, 17.6923, 0.0, 0.0, 0.0, 19.2308,\n 0.0, 0.0, 0.0, 20.7692, 0.0, 0.0, 0.0, 22.3077, 0.0, 0.0, 0.0, 23.8462, 0.0, 0.0, 0.0,\n 25.3846, 0.0, 0.0, 0.0, 26.9231, 0.0, 0.0, 0.0, 28.4615, 0.0, 0.0, 0.0, 30.0, 0.0, 0.0, 0.0,\n 33.8462, 0.0, 0.0, 0.0, 37.6923, 0.0, 0.0, 0.0, 41.5385, 0.0, 0.0, 0.0, 45.3846, 0.0, 0.0,\n 0.0, 49.2308, 0.0, 0.0, 0.0, 53.0769, 0.0, 0.0, 0.0, 56.9231, 0.0, 0.0, 0.0, 60.7692, 0.0,\n 0.0, 0.0, 64.6154, 0.0, 0.0, 0.0, 68.4615, 0.0, 0.0, 0.0, 72.3077, 0.0, 0.0, 0.0, 76.1538,\n 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 88.5385, 0.0, 0.0, 0.0, 97.0769, 0.0, 0.0, 0.0, 105.615,\n 0.0, 0.0, 0.0, 114.154, 0.0, 0.0, 0.0, 122.692, 0.0, 0.0, 0.0, 131.231, 0.0, 0.0, 0.0,\n 139.769, 0.0, 0.0, 0.0, 148.308, 0.0, 0.0, 0.0, 156.846, 0.0, 0.0, 0.0, 165.385, 0.0, 0.0,\n 0.0, 173.923, 0.0, 0.0, 0.0, 182.462, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 193.846, 0.0, 0.0,\n 0.0, 196.692, 0.0, 0.0, 0.0, 199.538, 0.0, 0.0, 0.0, 202.385, 0.0, 0.0, 0.0, 205.231, 0.0,\n 0.0, 0.0, 208.077, 0.0, 0.0, 0.0, 210.923, 0.0, 0.0, 0.0, 213.769, 0.0, 0.0, 0.0, 216.615,\n 0.0, 0.0, 0.0, 219.462, 0.0, 0.0, 0.0, 222.308, 0.0, 0.0, 0.0, 225.154, 0.0, 0.0, 0.0, 228.0,\n 0.0, 0.0, 0.0, 229.182, 0.0, 0.0, 0.0, 230.364, 0.0, 0.0, 0.0, 231.545, 0.0, 0.0, 0.0,\n 232.727, 0.0, 0.0, 0.0, 233.909, 0.0, 0.0, 0.0, 235.091, 0.0, 0.0, 0.0, 236.273, 0.0, 0.0,\n 0.0, 237.455, 0.0, 0.0, 0.0, 238.636, 0.0, 0.0, 0.0, 239.818, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0,\n 0.0, 241.0, 0.0, 0.0, 0.0, 241.364, 0.0, 0.0, 0.0, 241.727, 0.0, 0.0, 0.0, 242.091, 0.0, 0.0,\n 0.0, 242.455, 0.0, 0.0, 0.0, 242.818, 0.0, 0.0, 0.0, 243.182, 0.0, 0.0, 0.0, 243.545, 0.0,\n 0.0, 0.0, 243.909, 0.0, 0.0, 0.0, 244.273, 0.0, 0.0, 0.0, 244.636, 0.0, 0.0, 0.0, 245.0, 0.0,\n 0.0, 0.0, 245.231, 0.0, 0.0, 0.0, 245.462, 0.0, 0.0, 0.0, 245.692, 0.0, 0.0, 0.0, 245.923,\n 0.0, 0.0, 0.0, 246.154, 0.0, 0.0, 0.0, 246.385, 0.0, 0.0, 0.0, 246.615, 0.0, 0.0, 0.0,\n 246.846, 0.0, 0.0, 0.0, 247.077, 0.0, 0.0, 0.0, 247.308, 0.0, 0.0, 0.0, 247.538, 0.0, 0.0,\n 0.0, 247.769, 0.0, 0.0, 0.0, 248.0, 0.0, 0.0, 0.0, 248.146, 0.0, 0.0, 0.0, 248.292, 0.0, 0.0,\n 0.0, 248.438, 0.0, 0.0, 0.0, 248.585, 0.0, 0.0, 0.0, 248.731, 0.0, 0.0, 0.0, 248.877, 0.0,\n 0.0, 0.0, 249.023, 0.0, 0.0, 0.0, 249.169, 0.0, 0.0, 0.0, 249.315, 0.0, 0.0, 0.0, 249.462,\n 0.0, 0.0, 0.0, 249.608, 0.0, 0.0, 0.0, 249.754, 0.0, 0.0, 0.0, 249.9, 0.0, 0.0, 0.0, 249.312,\n 0.0, 0.0, 0.0, 248.723, 0.0, 0.0, 0.0, 248.135, 0.0, 0.0, 0.0, 247.546, 0.0, 0.0, 0.0,\n 246.958, 0.0, 0.0, 0.0, 246.369, 0.0, 0.0, 0.0, 245.781, 0.0, 0.0, 0.0, 245.192, 0.0, 0.0,\n 0.0, 244.604, 0.0, 0.0, 0.0, 244.015, 0.0, 0.0, 0.0, 243.427, 0.0, 0.0, 0.0, 242.838, 0.0,\n 0.0, 0.0, 242.25, 0.0, 0.0, 0.0, 239.308, 0.0, 0.0, 0.0, 236.365, 0.0, 0.0, 0.0, 233.423, 0.0,\n 0.0, 0.0, 230.481, 0.0, 0.0, 0.0, 227.538, 0.0, 0.0, 0.0, 224.596, 0.0, 0.0, 0.0, 221.654,\n 0.0, 0.0, 0.0, 218.712, 0.0, 0.0, 0.0, 215.769, 0.0, 0.0, 0.0, 212.827, 0.0, 0.0, 0.0,\n 209.885, 0.0, 0.0, 0.0, 206.942, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 201.0, 0.0, 0.0, 0.0,\n 198.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 192.0, 0.0, 0.0, 0.0, 189.0, 0.0, 0.0, 0.0, 186.0,\n 0.0, 0.0, 0.0, 183.0, 0.0, 0.0, 0.0, 180.0, 0.0, 0.0, 0.0, 177.0, 0.0, 0.0, 0.0, 174.0, 0.0,\n 0.0, 0.0, 171.0, 0.0, 0.0, 0.0, 168.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 161.077, 0.0, 0.0,\n 0.0, 157.154, 0.0, 0.0, 0.0, 153.231, 0.0, 0.0, 0.0, 149.308, 0.0, 0.0, 0.0, 145.385, 0.0,\n 0.0, 0.0, 141.462, 0.0, 0.0, 0.0, 137.538, 0.0, 0.0, 0.0, 133.615, 0.0, 0.0, 0.0, 129.692,\n 0.0, 0.0, 0.0, 125.769, 0.0, 0.0, 0.0, 121.846, 0.0, 0.0, 0.0, 117.923, 0.0, 0.0, 0.0, 114.0,\n 0.0, 0.0, 0.0, 115.038, 0.0, 0.0, 0.0, 116.077, 0.0, 0.0, 0.0, 117.115, 0.0, 0.0, 0.0,\n 118.154, 0.0, 0.0, 0.0, 119.192, 0.0, 0.0, 0.0, 120.231, 0.0, 0.0, 0.0, 121.269, 0.0, 0.0,\n 0.0, 122.308, 0.0, 0.0, 0.0, 123.346, 0.0, 0.0, 0.0, 124.385, 0.0, 0.0, 0.0, 125.423, 0.0,\n 0.0, 0.0, 126.462, 0.0, 0.0, 0.0, 127.5, 0.0, 0.0, 0.0, 131.423, 0.0, 0.0, 0.0, 135.346, 0.0,\n 0.0, 0.0, 139.269, 0.0, 0.0, 0.0, 143.192, 0.0, 0.0, 0.0, 147.115, 0.0, 0.0, 0.0, 151.038,\n 0.0, 0.0, 0.0, 154.962, 0.0, 0.0, 0.0, 158.885, 0.0, 0.0, 0.0, 162.808, 0.0, 0.0, 0.0,\n 166.731, 0.0, 0.0, 0.0, 170.654, 0.0, 0.0, 0.0, 174.577, 0.0, 0.0, 0.0, 178.5, 0.0, 0.0, 0.0,\n 180.462, 0.0, 0.0, 0.0, 182.423, 0.0, 0.0, 0.0, 184.385, 0.0, 0.0, 0.0, 186.346, 0.0, 0.0,\n 0.0, 188.308, 0.0, 0.0, 0.0, 190.269, 0.0, 0.0, 0.0, 192.231, 0.0, 0.0, 0.0, 194.192, 0.0,\n 0.0, 0.0, 196.154, 0.0, 0.0, 0.0, 198.115, 0.0, 0.0, 0.0, 200.077, 0.0, 0.0, 0.0, 202.038,\n 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 205.962, 0.0, 0.0, 0.0, 207.923, 0.0, 0.0, 0.0, 209.885,\n 0.0, 0.0, 0.0, 211.846, 0.0, 0.0, 0.0, 213.808, 0.0, 0.0, 0.0, 215.769, 0.0, 0.0, 0.0,\n 217.731, 0.0, 0.0, 0.0, 219.692, 0.0, 0.0, 0.0, 221.654, 0.0, 0.0, 0.0, 223.615, 0.0, 0.0,\n 0.0, 225.577, 0.0, 0.0, 0.0, 227.538, 0.0, 0.0, 0.0, 229.5, 0.0, 0.0, 0.0, 230.481, 0.0, 0.0,\n 0.0, 231.462, 0.0, 0.0, 0.0, 232.442, 0.0, 0.0, 0.0, 233.423, 0.0, 0.0, 0.0, 234.404, 0.0,\n 0.0, 0.0, 235.385, 0.0, 0.0, 0.0, 236.365, 0.0, 0.0, 0.0, 237.346, 0.0, 0.0, 0.0, 238.327,\n 0.0, 0.0, 0.0, 239.308, 0.0, 0.0, 0.0, 240.288, 0.0, 0.0, 0.0, 241.269, 0.0, 0.0, 0.0, 242.25,\n 0.0, 0.0, 0.0, 242.642, 0.0, 0.0, 0.0, 243.035, 0.0, 0.0, 0.0, 243.427, 0.0, 0.0, 0.0,\n 243.819, 0.0, 0.0, 0.0, 244.212, 0.0, 0.0, 0.0, 244.604, 0.0, 0.0, 0.0, 244.996, 0.0, 0.0,\n 0.0, 245.388, 0.0, 0.0, 0.0, 245.781, 0.0, 0.0, 0.0, 246.173, 0.0, 0.0, 0.0, 246.565, 0.0,\n 0.0, 0.0, 246.958, 0.0, 0.0, 0.0, 247.35, 0.0, 0.0, 0.0, 247.814, 0.0, 0.0, 0.0, 248.277, 0.0,\n 0.0, 0.0, 248.741, 0.0, 0.0, 0.0, 249.205, 0.0, 0.0, 0.0, 249.668, 0.0, 0.0, 0.0, 250.132,\n 0.0, 0.0, 0.0, 250.595, 0.0, 0.0, 0.0, 251.059, 0.0, 0.0, 0.0, 251.523, 0.0, 0.0, 0.0,\n 251.986, 0.0, 0.0, 0.0, 252.45, 0.0, 0.0, 0.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 1.53846, 0.0, 0.0, 0.0, 3.07692, 0.0, 0.0, 0.0, 4.61538, 0.0, 0.0, 0.0,\n 6.15385, 0.0, 0.0, 0.0, 7.69231, 0.0, 0.0, 0.0, 9.23077, 0.0, 0.0, 0.0, 10.7692, 0.0, 0.0,\n 0.0, 12.3077, 0.0, 0.0, 0.0, 13.8462, 0.0, 0.0, 0.0, 15.3846, 0.0, 0.0, 0.0, 16.9231, 0.0,\n 0.0, 0.0, 18.4615, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 32.6154, 0.0, 0.0, 0.0, 45.2308, 0.0,\n 0.0, 0.0, 57.8462, 0.0, 0.0, 0.0, 70.4615, 0.0, 0.0, 0.0, 83.0769, 0.0, 0.0, 0.0, 95.6923,\n 0.0, 0.0, 0.0, 108.308, 0.0, 0.0, 0.0, 120.923, 0.0, 0.0, 0.0, 133.538, 0.0, 0.0, 0.0,\n 146.154, 0.0, 0.0, 0.0, 158.769, 0.0, 0.0, 0.0, 171.385, 0.0, 0.0, 0.0, 184.0, 0.0, 0.0, 0.0,\n 187.923, 0.0, 0.0, 0.0, 191.846, 0.0, 0.0, 0.0, 195.769, 0.0, 0.0, 0.0, 199.692, 0.0, 0.0,\n 0.0, 203.615, 0.0, 0.0, 0.0, 207.538, 0.0, 0.0, 0.0, 211.462, 0.0, 0.0, 0.0, 215.385, 0.0,\n 0.0, 0.0, 219.308, 0.0, 0.0, 0.0, 223.231, 0.0, 0.0, 0.0, 227.154, 0.0, 0.0, 0.0, 231.077,\n 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 235.308, 0.0, 0.0, 0.0, 235.615, 0.0, 0.0, 0.0, 235.923,\n 0.0, 0.0, 0.0, 236.231, 0.0, 0.0, 0.0, 236.538, 0.0, 0.0, 0.0, 236.846, 0.0, 0.0, 0.0,\n 237.154, 0.0, 0.0, 0.0, 237.462, 0.0, 0.0, 0.0, 237.769, 0.0, 0.0, 0.0, 238.077, 0.0, 0.0,\n 0.0, 238.385, 0.0, 0.0, 0.0, 238.692, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 239.077, 0.0, 0.0,\n 0.0, 239.154, 0.0, 0.0, 0.0, 239.231, 0.0, 0.0, 0.0, 239.308, 0.0, 0.0, 0.0, 239.385, 0.0,\n 0.0, 0.0, 239.462, 0.0, 0.0, 0.0, 239.538, 0.0, 0.0, 0.0, 239.615, 0.0, 0.0, 0.0, 239.692,\n 0.0, 0.0, 0.0, 239.769, 0.0, 0.0, 0.0, 239.846, 0.0, 0.0, 0.0, 239.923, 0.0, 0.0, 0.0, 240.0,\n 0.0, 0.0, 0.0, 240.091, 0.0, 0.0, 0.0, 240.182, 0.0, 0.0, 0.0, 240.273, 0.0, 0.0, 0.0,\n 240.364, 0.0, 0.0, 0.0, 240.455, 0.0, 0.0, 0.0, 240.545, 0.0, 0.0, 0.0, 240.636, 0.0, 0.0,\n 0.0, 240.727, 0.0, 0.0, 0.0, 240.818, 0.0, 0.0, 0.0, 240.909, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0,\n 0.0, 241.0, 0.0, 0.0, 0.0, 240.909, 0.0, 0.0, 0.0, 240.818, 0.0, 0.0, 0.0, 240.727, 0.0, 0.0,\n 0.0, 240.636, 0.0, 0.0, 0.0, 240.545, 0.0, 0.0, 0.0, 240.455, 0.0, 0.0, 0.0, 240.364, 0.0,\n 0.0, 0.0, 240.273, 0.0, 0.0, 0.0, 240.182, 0.0, 0.0, 0.0, 240.091, 0.0, 0.0, 0.0, 240.0, 0.0,\n 0.0, 0.0, 239.615, 0.0, 0.0, 0.0, 239.231, 0.0, 0.0, 0.0, 238.846, 0.0, 0.0, 0.0, 238.462,\n 0.0, 0.0, 0.0, 238.077, 0.0, 0.0, 0.0, 237.692, 0.0, 0.0, 0.0, 237.308, 0.0, 0.0, 0.0,\n 236.923, 0.0, 0.0, 0.0, 236.538, 0.0, 0.0, 0.0, 236.154, 0.0, 0.0, 0.0, 235.769, 0.0, 0.0,\n 0.0, 235.385, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 232.615, 0.0, 0.0, 0.0, 230.231, 0.0, 0.0,\n 0.0, 227.846, 0.0, 0.0, 0.0, 225.462, 0.0, 0.0, 0.0, 223.077, 0.0, 0.0, 0.0, 220.692, 0.0,\n 0.0, 0.0, 218.308, 0.0, 0.0, 0.0, 215.923, 0.0, 0.0, 0.0, 213.538, 0.0, 0.0, 0.0, 211.154,\n 0.0, 0.0, 0.0, 208.769, 0.0, 0.0, 0.0, 206.385, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 200.077,\n 0.0, 0.0, 0.0, 196.154, 0.0, 0.0, 0.0, 192.231, 0.0, 0.0, 0.0, 188.308, 0.0, 0.0, 0.0,\n 184.385, 0.0, 0.0, 0.0, 180.462, 0.0, 0.0, 0.0, 176.538, 0.0, 0.0, 0.0, 172.615, 0.0, 0.0,\n 0.0, 168.692, 0.0, 0.0, 0.0, 164.769, 0.0, 0.0, 0.0, 160.846, 0.0, 0.0, 0.0, 156.923, 0.0,\n 0.0, 0.0, 153.0, 0.0, 0.0, 0.0, 147.115, 0.0, 0.0, 0.0, 141.231, 0.0, 0.0, 0.0, 135.346, 0.0,\n 0.0, 0.0, 129.462, 0.0, 0.0, 0.0, 123.577, 0.0, 0.0, 0.0, 117.692, 0.0, 0.0, 0.0, 111.808,\n 0.0, 0.0, 0.0, 105.923, 0.0, 0.0, 0.0, 100.038, 0.0, 0.0, 0.0, 94.1538, 0.0, 0.0, 0.0,\n 88.2692, 0.0, 0.0, 0.0, 82.3846, 0.0, 0.0, 0.0, 76.5, 0.0, 0.0, 0.0, 73.0769, 0.0, 0.0, 0.0,\n 69.6538, 0.0, 0.0, 0.0, 66.2308, 0.0, 0.0, 0.0, 62.8077, 0.0, 0.0, 0.0, 59.3846, 0.0, 0.0,\n 0.0, 55.9615, 0.0, 0.0, 0.0, 52.5385, 0.0, 0.0, 0.0, 49.1154, 0.0, 0.0, 0.0, 45.6923, 0.0,\n 0.0, 0.0, 42.2692, 0.0, 0.0, 0.0, 38.8462, 0.0, 0.0, 0.0, 35.4231, 0.0, 0.0, 0.0, 32.0, 0.0,\n 0.0, 0.0, 29.5385, 0.0, 0.0, 0.0, 27.0769, 0.0, 0.0, 0.0, 24.6154, 0.0, 0.0, 0.0, 22.1538,\n 0.0, 0.0, 0.0, 19.6923, 0.0, 0.0, 0.0, 17.2308, 0.0, 0.0, 0.0, 14.7692, 0.0, 0.0, 0.0,\n 12.3077, 0.0, 0.0, 0.0, 9.84615, 0.0, 0.0, 0.0, 7.38462, 0.0, 0.0, 0.0, 4.92308, 0.0, 0.0,\n 0.0, 2.46154, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.80769, 0.0, 0.0, 0.0, 19.6154, 0.0, 0.0,\n 0.0, 29.4231, 0.0, 0.0, 0.0, 39.2308, 0.0, 0.0, 0.0, 49.0385, 0.0, 0.0, 0.0, 58.8462, 0.0,\n 0.0, 0.0, 68.6538, 0.0, 0.0, 0.0, 78.4615, 0.0, 0.0, 0.0, 88.2692, 0.0, 0.0, 0.0, 98.0769,\n 0.0, 0.0, 0.0, 107.885, 0.0, 0.0, 0.0, 117.692, 0.0, 0.0, 0.0, 127.5, 0.0, 0.0, 0.0, 131.423,\n 0.0, 0.0, 0.0, 135.346, 0.0, 0.0, 0.0, 139.269, 0.0, 0.0, 0.0, 143.192, 0.0, 0.0, 0.0,\n 147.115, 0.0, 0.0, 0.0, 151.038, 0.0, 0.0, 0.0, 154.962, 0.0, 0.0, 0.0, 158.885, 0.0, 0.0,\n 0.0, 162.808, 0.0, 0.0, 0.0, 166.731, 0.0, 0.0, 0.0, 170.654, 0.0, 0.0, 0.0, 174.577, 0.0,\n 0.0, 0.0, 178.5, 0.0, 0.0, 0.0, 180.462, 0.0, 0.0, 0.0, 182.423, 0.0, 0.0, 0.0, 184.385, 0.0,\n 0.0, 0.0, 186.346, 0.0, 0.0, 0.0, 188.308, 0.0, 0.0, 0.0, 190.269, 0.0, 0.0, 0.0, 192.231,\n 0.0, 0.0, 0.0, 194.192, 0.0, 0.0, 0.0, 196.154, 0.0, 0.0, 0.0, 198.115, 0.0, 0.0, 0.0,\n 200.077, 0.0, 0.0, 0.0, 202.038, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 205.962, 0.0, 0.0, 0.0,\n 207.923, 0.0, 0.0, 0.0, 209.885, 0.0, 0.0, 0.0, 211.846, 0.0, 0.0, 0.0, 213.808, 0.0, 0.0,\n 0.0, 215.769, 0.0, 0.0, 0.0, 217.731, 0.0, 0.0, 0.0, 219.692, 0.0, 0.0, 0.0, 221.654, 0.0,\n 0.0, 0.0, 223.615, 0.0, 0.0, 0.0, 225.577, 0.0, 0.0, 0.0, 227.538, 0.0, 0.0, 0.0, 229.5, 0.0,\n 0.0, 0.0, 230.481, 0.0, 0.0, 0.0, 231.462, 0.0, 0.0, 0.0, 232.442, 0.0, 0.0, 0.0, 233.423,\n 0.0, 0.0, 0.0, 234.404, 0.0, 0.0, 0.0, 235.385, 0.0, 0.0, 0.0, 236.365, 0.0, 0.0, 0.0,\n 237.346, 0.0, 0.0, 0.0, 238.327, 0.0, 0.0, 0.0, 239.308, 0.0, 0.0, 0.0, 240.288, 0.0, 0.0,\n 0.0, 241.269, 0.0, 0.0, 0.0, 242.25, 0.0, 0.0, 0.0, 242.642, 0.0, 0.0, 0.0, 243.035, 0.0, 0.0,\n 0.0, 243.427, 0.0, 0.0, 0.0, 243.819, 0.0, 0.0, 0.0, 244.212, 0.0, 0.0, 0.0, 244.604, 0.0,\n 0.0, 0.0, 244.996, 0.0, 0.0, 0.0, 245.388, 0.0, 0.0, 0.0, 245.781, 0.0, 0.0, 0.0, 246.173,\n 0.0, 0.0, 0.0, 246.565, 0.0, 0.0, 0.0, 246.958, 0.0, 0.0, 0.0, 247.35, 0.0, 0.0, 0.0, 247.814,\n 0.0, 0.0, 0.0, 248.277, 0.0, 0.0, 0.0, 248.741, 0.0, 0.0, 0.0, 249.205, 0.0, 0.0, 0.0,\n 249.668, 0.0, 0.0, 0.0, 250.132, 0.0, 0.0, 0.0, 250.595, 0.0, 0.0, 0.0, 251.059, 0.0, 0.0,\n 0.0, 251.523, 0.0, 0.0, 0.0, 251.986, 0.0, 0.0, 0.0, 252.45, 0.0, 0.0, 0.0\n ]),\n b: new Float32Array([\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 254.615, 0.0, 0.0, 0.0, 254.231, 0.0, 0.0, 0.0, 253.846,\n 0.0, 0.0, 0.0, 253.462, 0.0, 0.0, 0.0, 253.077, 0.0, 0.0, 0.0, 252.692, 0.0, 0.0, 0.0,\n 252.308, 0.0, 0.0, 0.0, 251.923, 0.0, 0.0, 0.0, 251.538, 0.0, 0.0, 0.0, 251.154, 0.0, 0.0,\n 0.0, 250.769, 0.0, 0.0, 0.0, 250.385, 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0, 249.615, 0.0, 0.0,\n 0.0, 249.231, 0.0, 0.0, 0.0, 248.846, 0.0, 0.0, 0.0, 248.462, 0.0, 0.0, 0.0, 248.077, 0.0,\n 0.0, 0.0, 247.692, 0.0, 0.0, 0.0, 247.308, 0.0, 0.0, 0.0, 246.923, 0.0, 0.0, 0.0, 246.538,\n 0.0, 0.0, 0.0, 246.154, 0.0, 0.0, 0.0, 245.769, 0.0, 0.0, 0.0, 245.385, 0.0, 0.0, 0.0, 245.0,\n 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0, 233.0, 0.0,\n 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 224.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0,\n 0.0, 218.0, 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0,\n 208.636, 0.0, 0.0, 0.0, 205.273, 0.0, 0.0, 0.0, 201.909, 0.0, 0.0, 0.0, 198.545, 0.0, 0.0,\n 0.0, 195.182, 0.0, 0.0, 0.0, 191.818, 0.0, 0.0, 0.0, 188.455, 0.0, 0.0, 0.0, 185.091, 0.0,\n 0.0, 0.0, 181.727, 0.0, 0.0, 0.0, 178.364, 0.0, 0.0, 0.0, 175.0, 0.0, 0.0, 0.0, 171.538, 0.0,\n 0.0, 0.0, 168.077, 0.0, 0.0, 0.0, 164.615, 0.0, 0.0, 0.0, 161.154, 0.0, 0.0, 0.0, 157.692,\n 0.0, 0.0, 0.0, 154.231, 0.0, 0.0, 0.0, 150.769, 0.0, 0.0, 0.0, 147.308, 0.0, 0.0, 0.0,\n 143.846, 0.0, 0.0, 0.0, 140.385, 0.0, 0.0, 0.0, 136.923, 0.0, 0.0, 0.0, 133.462, 0.0, 0.0,\n 0.0, 130.0, 0.0, 0.0, 0.0, 122.942, 0.0, 0.0, 0.0, 115.885, 0.0, 0.0, 0.0, 108.827, 0.0, 0.0,\n 0.0, 101.769, 0.0, 0.0, 0.0, 94.7115, 0.0, 0.0, 0.0, 87.6539, 0.0, 0.0, 0.0, 80.5962, 0.0,\n 0.0, 0.0, 73.5385, 0.0, 0.0, 0.0, 66.4808, 0.0, 0.0, 0.0, 59.4231, 0.0, 0.0, 0.0, 52.3654,\n 0.0, 0.0, 0.0, 45.3077, 0.0, 0.0, 0.0, 38.25, 0.0, 0.0, 0.0, 36.2885, 0.0, 0.0, 0.0, 34.3269,\n 0.0, 0.0, 0.0, 32.3654, 0.0, 0.0, 0.0, 30.4038, 0.0, 0.0, 0.0, 28.4423, 0.0, 0.0, 0.0,\n 26.4808, 0.0, 0.0, 0.0, 24.5192, 0.0, 0.0, 0.0, 22.5577, 0.0, 0.0, 0.0, 20.5962, 0.0, 0.0,\n 0.0, 18.6346, 0.0, 0.0, 0.0, 16.6731, 0.0, 0.0, 0.0, 14.7115, 0.0, 0.0, 0.0, 12.75, 0.0, 0.0,\n 0.0, 11.7692, 0.0, 0.0, 0.0, 10.7885, 0.0, 0.0, 0.0, 9.80769, 0.0, 0.0, 0.0, 8.82692, 0.0,\n 0.0, 0.0, 7.84615, 0.0, 0.0, 0.0, 6.86539, 0.0, 0.0, 0.0, 5.88461, 0.0, 0.0, 0.0, 4.90385,\n 0.0, 0.0, 0.0, 3.92308, 0.0, 0.0, 0.0, 2.94231, 0.0, 0.0, 0.0, 1.96154, 0.0, 0.0, 0.0,\n 0.980769, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.46154, 0.0, 0.0, 0.0, 4.92308, 0.0, 0.0, 0.0,\n 7.38462, 0.0, 0.0, 0.0, 9.84616, 0.0, 0.0, 0.0, 12.3077, 0.0, 0.0, 0.0, 14.7692, 0.0, 0.0,\n 0.0, 17.2308, 0.0, 0.0, 0.0, 19.6923, 0.0, 0.0, 0.0, 22.1538, 0.0, 0.0, 0.0, 24.6154, 0.0,\n 0.0, 0.0, 27.0769, 0.0, 0.0, 0.0, 29.5385, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0,\n 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0,\n 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0,\n 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 41.3077, 0.0, 0.0, 0.0,\n 50.6154, 0.0, 0.0, 0.0, 59.9231, 0.0, 0.0, 0.0, 69.2308, 0.0, 0.0, 0.0, 78.5385, 0.0, 0.0,\n 0.0, 87.8462, 0.0, 0.0, 0.0, 97.1539, 0.0, 0.0, 0.0, 106.462, 0.0, 0.0, 0.0, 115.769, 0.0,\n 0.0, 0.0, 125.077, 0.0, 0.0, 0.0, 134.385, 0.0, 0.0, 0.0, 143.692, 0.0, 0.0, 0.0, 153.0, 0.0,\n 0.0, 0.0, 156.923, 0.0, 0.0, 0.0, 160.846, 0.0, 0.0, 0.0, 164.769, 0.0, 0.0, 0.0, 168.692,\n 0.0, 0.0, 0.0, 172.615, 0.0, 0.0, 0.0, 176.538, 0.0, 0.0, 0.0, 180.462, 0.0, 0.0, 0.0,\n 184.385, 0.0, 0.0, 0.0, 188.308, 0.0, 0.0, 0.0, 192.231, 0.0, 0.0, 0.0, 196.154, 0.0, 0.0,\n 0.0, 200.077, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 205.962, 0.0, 0.0, 0.0, 207.923, 0.0, 0.0,\n 0.0, 209.885, 0.0, 0.0, 0.0, 211.846, 0.0, 0.0, 0.0, 213.808, 0.0, 0.0, 0.0, 215.769, 0.0,\n 0.0, 0.0, 217.731, 0.0, 0.0, 0.0, 219.692, 0.0, 0.0, 0.0, 221.654, 0.0, 0.0, 0.0, 223.615,\n 0.0, 0.0, 0.0, 225.577, 0.0, 0.0, 0.0, 227.538, 0.0, 0.0, 0.0, 229.5, 0.0, 0.0, 0.0, 230.481,\n 0.0, 0.0, 0.0, 231.462, 0.0, 0.0, 0.0, 232.442, 0.0, 0.0, 0.0, 233.423, 0.0, 0.0, 0.0,\n 234.404, 0.0, 0.0, 0.0, 235.385, 0.0, 0.0, 0.0, 236.365, 0.0, 0.0, 0.0, 237.346, 0.0, 0.0,\n 0.0, 238.327, 0.0, 0.0, 0.0, 239.308, 0.0, 0.0, 0.0, 240.288, 0.0, 0.0, 0.0, 241.269, 0.0,\n 0.0, 0.0, 242.25, 0.0, 0.0, 0.0, 242.838, 0.0, 0.0, 0.0, 243.427, 0.0, 0.0, 0.0, 244.015, 0.0,\n 0.0, 0.0, 244.604, 0.0, 0.0, 0.0, 245.192, 0.0, 0.0, 0.0, 245.781, 0.0, 0.0, 0.0, 246.369,\n 0.0, 0.0, 0.0, 246.958, 0.0, 0.0, 0.0, 247.546, 0.0, 0.0, 0.0, 248.135, 0.0, 0.0, 0.0,\n 248.723, 0.0, 0.0, 0.0, 249.312, 0.0, 0.0, 0.0, 249.9, 0.0, 0.0, 0.0, 250.096, 0.0, 0.0, 0.0,\n 250.292, 0.0, 0.0, 0.0, 250.488, 0.0, 0.0, 0.0, 250.685, 0.0, 0.0, 0.0, 250.881, 0.0, 0.0,\n 0.0, 251.077, 0.0, 0.0, 0.0, 251.273, 0.0, 0.0, 0.0, 251.469, 0.0, 0.0, 0.0, 251.665, 0.0,\n 0.0, 0.0, 251.862, 0.0, 0.0, 0.0, 252.058, 0.0, 0.0, 0.0, 252.254, 0.0, 0.0, 0.0, 252.45, 0.0,\n 0.0, 0.0, 252.682, 0.0, 0.0, 0.0, 252.914, 0.0, 0.0, 0.0, 253.145, 0.0, 0.0, 0.0, 253.377,\n 0.0, 0.0, 0.0, 253.609, 0.0, 0.0, 0.0, 253.841, 0.0, 0.0, 0.0, 254.073, 0.0, 0.0, 0.0,\n 254.305, 0.0, 0.0, 0.0, 254.536, 0.0, 0.0, 0.0, 254.768, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0\n ]),\n },\n cmb: {\n name: 'cmb',\n r: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 6.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 18.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0,\n 30.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 54.0, 0.0,\n 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0,\n 85.0, 0.0, 0.0, 0.0, 91.0, 0.0, 0.0, 0.0, 97.0, 0.0, 0.0, 0.0, 103.0, 0.0, 0.0, 0.0, 109.0,\n 0.0, 0.0, 0.0, 115.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 133.0, 0.0,\n 0.0, 0.0, 139.0, 0.0, 0.0, 0.0, 145.0, 0.0, 0.0, 0.0, 151.0, 0.0, 0.0, 0.0, 157.0, 0.0, 0.0,\n 0.0, 163.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0, 0.0, 176.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0,\n 188.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 206.0, 0.0, 0.0, 0.0, 212.0,\n 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 224.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 236.0, 0.0,\n 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 248.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 251.0, 0.0, 0.0,\n 0.0, 247.0, 0.0, 0.0, 0.0, 244.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0,\n 233.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 218.0,\n 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 204.0, 0.0,\n 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 197.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 190.0, 0.0, 0.0,\n 0.0, 186.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 179.0, 0.0, 0.0, 0.0, 175.0, 0.0, 0.0, 0.0,\n 172.0, 0.0, 0.0, 0.0, 168.0, 0.0, 0.0, 0.0, 164.0, 0.0, 0.0, 0.0, 161.0, 0.0, 0.0, 0.0, 157.0,\n 0.0, 0.0, 0.0, 154.0, 0.0, 0.0, 0.0, 150.0, 0.0, 0.0, 0.0, 146.0, 0.0, 0.0, 0.0, 143.0, 0.0,\n 0.0, 0.0, 139.0, 0.0, 0.0, 0.0, 136.0, 0.0, 0.0, 0.0, 132.0, 0.0, 0.0, 0.0, 128.0, 0.0, 0.0,\n 0.0, 125.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 118.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0,\n 110.0, 0.0, 0.0, 0.0, 107.0, 0.0, 0.0, 0.0, 103.0, 0.0, 0.0, 0.0, 100.0, 0.0, 0.0, 0.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 10.0, 0.0,\n 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 18.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0,\n 24.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 34.0, 0.0,\n 0.0, 0.0, 37.0, 0.0, 0.0, 0.0, 40.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0,\n 48.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 56.0, 0.0, 0.0, 0.0, 58.0, 0.0,\n 0.0, 0.0, 61.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 69.0, 0.0, 0.0, 0.0,\n 72.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 82.0, 0.0,\n 0.0, 0.0, 85.0, 0.0, 0.0, 0.0, 88.0, 0.0, 0.0, 0.0, 90.0, 0.0, 0.0, 0.0, 93.0, 0.0, 0.0, 0.0,\n 96.0, 0.0, 0.0, 0.0, 98.0, 0.0, 0.0, 0.0, 101.0, 0.0, 0.0, 0.0, 104.0, 0.0, 0.0, 0.0, 106.0,\n 0.0, 0.0, 0.0, 109.0, 0.0, 0.0, 0.0, 112.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0, 117.0, 0.0,\n 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 124.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0,\n 0.0, 129.0, 0.0, 0.0, 0.0, 132.0, 0.0, 0.0, 0.0, 134.0, 0.0, 0.0, 0.0, 137.0, 0.0, 0.0, 0.0,\n 139.0, 0.0, 0.0, 0.0, 142.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 147.0, 0.0, 0.0, 0.0, 150.0,\n 0.0, 0.0, 0.0, 152.0, 0.0, 0.0, 0.0, 155.0, 0.0, 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 160.0, 0.0,\n 0.0, 0.0, 162.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 167.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0,\n 0.0, 172.0, 0.0, 0.0, 0.0, 175.0, 0.0, 0.0, 0.0, 177.0, 0.0, 0.0, 0.0, 180.0, 0.0, 0.0, 0.0,\n 182.0, 0.0, 0.0, 0.0, 185.0, 0.0, 0.0, 0.0, 188.0, 0.0, 0.0, 0.0, 190.0, 0.0, 0.0, 0.0, 193.0,\n 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 203.0, 0.0,\n 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 213.0, 0.0, 0.0,\n 0.0, 215.0, 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0,\n 221.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 223.0,\n 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0, 224.0, 0.0, 0.0, 0.0, 224.0, 0.0, 0.0, 0.0, 224.0, 0.0,\n 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0,\n 0.0, 226.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0,\n 228.0, 0.0, 0.0, 0.0, 228.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0,\n 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 231.0, 0.0,\n 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0,\n 0.0, 233.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 234.0, 0.0, 0.0, 0.0,\n 234.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 236.0,\n 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0, 237.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 234.0, 0.0,\n 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0,\n 0.0, 227.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0,\n 222.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 219.0, 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 217.0,\n 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 214.0, 0.0, 0.0, 0.0, 213.0, 0.0, 0.0, 0.0, 211.0, 0.0,\n 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 206.0, 0.0, 0.0,\n 0.0, 205.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 202.0, 0.0, 0.0, 0.0, 201.0, 0.0, 0.0, 0.0,\n 199.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 197.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 194.0,\n 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 190.0, 0.0, 0.0, 0.0, 189.0, 0.0,\n 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 186.0, 0.0, 0.0, 0.0, 185.0, 0.0, 0.0, 0.0, 183.0, 0.0, 0.0,\n 0.0, 182.0, 0.0, 0.0, 0.0, 181.0, 0.0, 0.0, 0.0, 180.0, 0.0, 0.0, 0.0, 177.0, 0.0, 0.0, 0.0,\n 175.0, 0.0, 0.0, 0.0, 172.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0, 0.0, 167.0, 0.0, 0.0, 0.0, 165.0,\n 0.0, 0.0, 0.0, 162.0, 0.0, 0.0, 0.0, 160.0, 0.0, 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 155.0, 0.0,\n 0.0, 0.0, 152.0, 0.0, 0.0, 0.0, 150.0, 0.0, 0.0, 0.0, 147.0, 0.0, 0.0, 0.0, 145.0, 0.0, 0.0,\n 0.0, 142.0, 0.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 137.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0, 0.0,\n 132.0, 0.0, 0.0, 0.0, 130.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 125.0, 0.0, 0.0, 0.0, 122.0,\n 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 117.0, 0.0, 0.0, 0.0, 115.0, 0.0, 0.0, 0.0, 112.0, 0.0,\n 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 107.0, 0.0, 0.0, 0.0, 105.0, 0.0, 0.0, 0.0, 102.0, 0.0, 0.0,\n 0.0, 100.0, 0.0, 0.0, 0.0, 97.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 92.0, 0.0, 0.0, 0.0,\n 90.0, 0.0, 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 85.0, 0.0, 0.0, 0.0, 82.0, 0.0, 0.0, 0.0, 80.0, 0.0,\n 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, 73.0, 0.0, 0.0, 0.0, 71.0, 0.0, 0.0, 0.0,\n 69.0, 0.0, 0.0, 0.0, 68.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 62.0, 0.0,\n 0.0, 0.0, 61.0, 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0,\n 54.0, 0.0, 0.0, 0.0, 52.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 47.0, 0.0,\n 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 43.0, 0.0, 0.0, 0.0, 41.0, 0.0, 0.0, 0.0, 40.0, 0.0, 0.0, 0.0,\n 38.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0, 34.0, 0.0, 0.0, 0.0, 33.0, 0.0, 0.0, 0.0, 31.0, 0.0,\n 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0,\n 22.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 19.0, 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 0.0, 15.0, 0.0,\n 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0,\n 6.0, 0.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0\n ]),\n b: new Float32Array([\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 254.0, 0.0, 0.0, 0.0, 253.0, 0.0, 0.0, 0.0, 252.0, 0.0, 0.0, 0.0, 251.0,\n 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0, 249.0, 0.0, 0.0, 0.0, 248.0, 0.0, 0.0, 0.0, 247.0, 0.0,\n 0.0, 0.0, 246.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 244.0, 0.0, 0.0,\n 0.0, 243.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0,\n 239.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 237.0, 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0, 236.0,\n 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 234.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 232.0, 0.0,\n 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 228.0, 0.0, 0.0,\n 0.0, 227.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0,\n 224.0, 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 220.0,\n 0.0, 0.0, 0.0, 219.0, 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 217.0, 0.0, 0.0, 0.0, 217.0, 0.0,\n 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 206.0, 0.0, 0.0, 0.0, 201.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0,\n 0.0, 191.0, 0.0, 0.0, 0.0, 186.0, 0.0, 0.0, 0.0, 181.0, 0.0, 0.0, 0.0, 176.0, 0.0, 0.0, 0.0,\n 171.0, 0.0, 0.0, 0.0, 166.0, 0.0, 0.0, 0.0, 161.0, 0.0, 0.0, 0.0, 156.0, 0.0, 0.0, 0.0, 151.0,\n 0.0, 0.0, 0.0, 146.0, 0.0, 0.0, 0.0, 141.0, 0.0, 0.0, 0.0, 136.0, 0.0, 0.0, 0.0, 131.0, 0.0,\n 0.0, 0.0, 126.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 116.0, 0.0, 0.0, 0.0, 111.0, 0.0, 0.0,\n 0.0, 105.0, 0.0, 0.0, 0.0, 100.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 90.0, 0.0, 0.0, 0.0,\n 85.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, 70.0, 0.0, 0.0, 0.0, 65.0, 0.0,\n 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0,\n 40.0, 0.0, 0.0, 0.0, 35.0, 0.0, 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 20.0, 0.0,\n 0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0\n ]),\n },\n\n rainbow: {\n name: 'rainbow',\n r: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 18.0, 0.0,\n 0.0, 0.0, 22.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 31.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0,\n 40.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 54.0, 0.0, 0.0, 0.0, 58.0, 0.0,\n 0.0, 0.0, 61.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 68.0, 0.0, 0.0, 0.0, 69.0, 0.0, 0.0, 0.0,\n 72.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 79.0, 0.0, 0.0, 0.0, 80.0, 0.0,\n 0.0, 0.0, 82.0, 0.0, 0.0, 0.0, 83.0, 0.0, 0.0, 0.0, 85.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0,\n 86.0, 0.0, 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 88.0, 0.0, 0.0, 0.0, 86.0, 0.0, 0.0, 0.0, 87.0, 0.0,\n 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 85.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0,\n 84.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0, 83.0, 0.0, 0.0, 0.0, 79.0, 0.0, 0.0, 0.0, 78.0, 0.0,\n 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 71.0, 0.0, 0.0, 0.0, 70.0, 0.0, 0.0, 0.0,\n 68.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 58.0, 0.0, 0.0, 0.0, 55.0, 0.0,\n 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 43.0, 0.0, 0.0, 0.0, 40.0, 0.0, 0.0, 0.0,\n 36.0, 0.0, 0.0, 0.0, 33.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 16.0, 0.0,\n 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 21.0, 0.0,\n 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 33.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0,\n 46.0, 0.0, 0.0, 0.0, 51.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 67.0, 0.0,\n 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 89.0, 0.0, 0.0, 0.0,\n 93.0, 0.0, 0.0, 0.0, 97.0, 0.0, 0.0, 0.0, 101.0, 0.0, 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 114.0,\n 0.0, 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 135.0, 0.0,\n 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 153.0, 0.0, 0.0, 0.0, 157.0, 0.0, 0.0,\n 0.0, 161.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0,\n 182.0, 0.0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 203.0,\n 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 225.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 246.0, 0.0, 0.0,\n 0.0, 250.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 4.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 25.0,\n 0.0, 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0,\n 0.0, 51.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0, 0.0, 72.0,\n 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0, 89.0, 0.0, 0.0, 0.0, 93.0, 0.0, 0.0,\n 0.0, 97.0, 0.0, 0.0, 0.0, 106.0, 0.0, 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0,\n 119.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0, 0.0, 140.0,\n 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 152.0, 0.0, 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 161.0, 0.0,\n 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 174.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0,\n 0.0, 187.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0,\n 208.0, 0.0, 0.0, 0.0, 216.0, 0.0, 0.0, 0.0, 220.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 229.0,\n 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 246.0, 0.0, 0.0, 0.0, 250.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 233.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 216.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0,\n 0.0, 208.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0,\n 187.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 174.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0, 0.0, 165.0,\n 0.0, 0.0, 0.0, 161.0, 0.0, 0.0, 0.0, 153.0, 0.0, 0.0, 0.0, 148.0, 0.0, 0.0, 0.0, 144.0, 0.0,\n 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0,\n 0.0, 119.0, 0.0, 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 106.0, 0.0, 0.0, 0.0, 102.0, 0.0, 0.0, 0.0,\n 97.0, 0.0, 0.0, 0.0, 89.0, 0.0, 0.0, 0.0, 85.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 76.0, 0.0,\n 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0,\n 51.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 34.0, 0.0, 0.0, 0.0, 29.0, 0.0,\n 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0\n ]),\n b: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 7.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 14.0, 0.0,\n 0.0, 0.0, 19.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 28.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0,\n 38.0, 0.0, 0.0, 0.0, 43.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 59.0, 0.0,\n 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 68.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0,\n 81.0, 0.0, 0.0, 0.0, 86.0, 0.0, 0.0, 0.0, 91.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 100.0,\n 0.0, 0.0, 0.0, 104.0, 0.0, 0.0, 0.0, 109.0, 0.0, 0.0, 0.0, 113.0, 0.0, 0.0, 0.0, 118.0, 0.0,\n 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 132.0, 0.0, 0.0, 0.0, 136.0, 0.0, 0.0,\n 0.0, 141.0, 0.0, 0.0, 0.0, 145.0, 0.0, 0.0, 0.0, 150.0, 0.0, 0.0, 0.0, 154.0, 0.0, 0.0, 0.0,\n 159.0, 0.0, 0.0, 0.0, 163.0, 0.0, 0.0, 0.0, 168.0, 0.0, 0.0, 0.0, 173.0, 0.0, 0.0, 0.0, 177.0,\n 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 186.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 195.0, 0.0,\n 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0, 0.0, 214.0, 0.0, 0.0,\n 0.0, 218.0, 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0, 0.0,\n 236.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 246.0, 0.0,\n 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0,\n 0.0, 220.0, 0.0, 0.0, 0.0, 216.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0,\n 199.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 178.0,\n 0.0, 0.0, 0.0, 174.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 157.0, 0.0,\n 0.0, 0.0, 152.0, 0.0, 0.0, 0.0, 148.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0,\n 0.0, 131.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0,\n 110.0, 0.0, 0.0, 0.0, 106.0, 0.0, 0.0, 0.0, 102.0, 0.0, 0.0, 0.0, 97.0, 0.0, 0.0, 0.0, 89.0,\n 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0,\n 0.0, 63.0, 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 42.0,\n 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 34.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0,\n 0.0, 16.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0\n ]),\n },\n eosb: {\n name: 'eosb',\n r: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 18.0,\n 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 49.0, 0.0, 0.0,\n 0.0, 57.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 81.0, 0.0, 0.0, 0.0, 91.0, 0.0, 0.0, 0.0,\n 100.0, 0.0, 0.0, 0.0, 109.0, 0.0, 0.0, 0.0, 118.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 136.0,\n 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 139.0, 0.0, 0.0, 0.0, 163.0, 0.0, 0.0, 0.0, 173.0, 0.0,\n 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0,\n 0.0, 218.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 213.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0,\n 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 253.0, 0.0, 0.0, 0.0, 251.0, 0.0, 0.0, 0.0, 249.0, 0.0,\n 0.0, 0.0, 247.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0,\n 0.0, 215.0, 0.0, 0.0, 0.0, 214.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 234.0, 0.0, 0.0, 0.0,\n 232.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 228.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 224.0,\n 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 216.0, 0.0,\n 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 213.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0,\n 0.0, 207.0, 0.0, 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 181.0, 0.0, 0.0, 0.0,\n 179.0, 0.0, 0.0, 0.0, 197.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 192.0,\n 0.0, 0.0, 0.0, 190.0, 0.0, 0.0, 0.0, 188.0, 0.0, 0.0, 0.0, 186.0, 0.0, 0.0, 0.0, 184.0, 0.0,\n 0.0, 0.0, 164.0, 0.0, 0.0, 0.0, 162.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 176.0, 0.0, 0.0,\n 0.0, 175.0, 0.0, 0.0, 0.0, 173.0, 0.0, 0.0, 0.0, 171.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0,\n 167.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 147.0, 0.0, 0.0, 0.0, 145.0, 0.0, 0.0, 0.0, 159.0,\n 0.0, 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 156.0, 0.0, 0.0, 0.0, 154.0, 0.0, 0.0, 0.0, 152.0, 0.0,\n 0.0, 0.0, 150.0, 0.0, 0.0, 0.0, 148.0, 0.0, 0.0, 0.0, 146.0, 0.0, 0.0, 0.0, 130.0, 0.0, 0.0,\n 0.0, 128.0, 0.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 138.0, 0.0, 0.0, 0.0, 137.0, 0.0, 0.0, 0.0,\n 135.0, 0.0, 0.0, 0.0, 133.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 129.0, 0.0, 0.0, 0.0, 127.0,\n 0.0, 0.0, 0.0, 113.0, 0.0, 0.0, 0.0, 111.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 119.0, 0.0,\n 0.0, 0.0, 117.0, 0.0, 0.0, 0.0, 117.0, 0.0, 0.0, 0.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.0,\n 0.0, 0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 31.0, 0.0, 0.0, 0.0, 39.0, 0.0, 0.0,\n 0.0, 47.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 79.0,\n 0.0, 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 103.0, 0.0, 0.0, 0.0, 111.0, 0.0,\n 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0, 0.0, 129.0, 0.0, 0.0,\n 0.0, 136.0, 0.0, 0.0, 0.0, 159.0, 0.0, 0.0, 0.0, 167.0, 0.0, 0.0, 0.0, 175.0, 0.0, 0.0, 0.0,\n 183.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 215.0,\n 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 247.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0,\n 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 229.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0,\n 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0,\n 255.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 250.0,\n 0.0, 0.0, 0.0, 246.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 233.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0,\n 0.0, 212.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0,\n 195.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 160.0,\n 0.0, 0.0, 0.0, 156.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 161.0, 0.0,\n 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 153.0, 0.0, 0.0, 0.0, 148.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0,\n 0.0, 140.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 118.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0,\n 125.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 116.0,\n 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0, 112.0, 0.0, 0.0, 0.0, 99.0, 0.0, 0.0, 0.0, 97.0, 0.0,\n 0.0, 0.0, 106.0, 0.0, 0.0, 0.0, 104.0, 0.0, 0.0, 0.0, 102.0, 0.0, 0.0, 0.0, 99.0, 0.0, 0.0,\n 0.0, 97.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 93.0, 0.0, 0.0, 0.0, 91.0, 0.0, 0.0, 0.0, 80.0,\n 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0, 82.0, 0.0, 0.0, 0.0, 80.0, 0.0, 0.0,\n 0.0, 78.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 70.0,\n 0.0, 0.0, 0.0, 61.0, 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 61.0, 0.0, 0.0,\n 0.0, 59.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 50.0,\n 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0, 0.0, 40.0, 0.0, 0.0, 0.0, 42.0, 0.0, 0.0,\n 0.0, 40.0, 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0, 33.0, 0.0, 0.0, 0.0, 31.0,\n 0.0, 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0,\n 0.0, 21.0, 0.0, 0.0, 0.0, 19.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 14.0, 0.0, 0.0, 0.0, 12.0,\n 0.0, 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0,\n 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0\n ]),\n b: new Float32Array([\n 116.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 136.0,\n 0.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 148.0, 0.0, 0.0, 0.0, 153.0, 0.0,\n 0.0, 0.0, 157.0, 0.0, 0.0, 0.0, 145.0, 0.0, 0.0, 0.0, 149.0, 0.0, 0.0, 0.0, 170.0, 0.0, 0.0,\n 0.0, 174.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0,\n 191.0, 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 183.0, 0.0, 0.0, 0.0, 187.0,\n 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 216.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 225.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0,\n 0.0, 221.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 247.0, 0.0, 0.0, 0.0,\n 239.0, 0.0, 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 207.0,\n 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 172.0, 0.0, 0.0, 0.0, 164.0, 0.0, 0.0, 0.0, 175.0, 0.0,\n 0.0, 0.0, 167.0, 0.0, 0.0, 0.0, 159.0, 0.0, 0.0, 0.0, 151.0, 0.0, 0.0, 0.0, 143.0, 0.0, 0.0,\n 0.0, 135.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 100.0, 0.0, 0.0, 0.0,\n 93.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 87.0, 0.0, 0.0, 0.0, 79.0, 0.0, 0.0, 0.0, 71.0, 0.0,\n 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 39.0, 0.0, 0.0, 0.0,\n 28.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 7.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0\n ]),\n },\n cubehelix: {\n name: 'cubehelix',\n r: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0,\n 0.0, 8.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 13.0,\n 0.0, 0.0, 0.0, 14.0, 0.0, 0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 0.0, 18.0, 0.0, 0.0,\n 0.0, 19.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 22.0,\n 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0,\n 0.0, 25.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0,\n 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0,\n 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 26.0,\n 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0,\n 0.0, 24.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 23.0,\n 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0,\n 0.0, 22.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0,\n 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0,\n 0.0, 20.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 21.0,\n 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0,\n 0.0, 23.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 0.0, 24.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 26.0,\n 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 28.0, 0.0, 0.0, 0.0, 30.0, 0.0, 0.0,\n 0.0, 31.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 33.0, 0.0, 0.0, 0.0, 35.0, 0.0, 0.0, 0.0, 36.0,\n 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 39.0, 0.0, 0.0, 0.0, 41.0, 0.0, 0.0, 0.0, 43.0, 0.0, 0.0,\n 0.0, 45.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 49.0, 0.0, 0.0, 0.0, 51.0, 0.0, 0.0, 0.0, 53.0,\n 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 62.0, 0.0, 0.0,\n 0.0, 65.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0, 0.0, 70.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 75.0,\n 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 81.0, 0.0, 0.0, 0.0, 83.0, 0.0, 0.0, 0.0, 86.0, 0.0, 0.0,\n 0.0, 89.0, 0.0, 0.0, 0.0, 92.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0, 0.0, 98.0, 0.0, 0.0, 0.0,\n 101.0, 0.0, 0.0, 0.0, 104.0, 0.0, 0.0, 0.0, 107.0, 0.0, 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 113.0,\n 0.0, 0.0, 0.0, 116.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 126.0, 0.0,\n 0.0, 0.0, 129.0, 0.0, 0.0, 0.0, 132.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0, 0.0, 138.0, 0.0, 0.0,\n 0.0, 141.0, 0.0, 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 147.0, 0.0, 0.0, 0.0, 150.0, 0.0, 0.0, 0.0,\n 153.0, 0.0, 0.0, 0.0, 155.0, 0.0, 0.0, 0.0, 158.0, 0.0, 0.0, 0.0, 161.0, 0.0, 0.0, 0.0, 164.0,\n 0.0, 0.0, 0.0, 166.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0, 171.0, 0.0, 0.0, 0.0, 174.0, 0.0,\n 0.0, 0.0, 176.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 181.0, 0.0, 0.0, 0.0, 183.0, 0.0, 0.0,\n 0.0, 185.0, 0.0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 189.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0,\n 193.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 199.0,\n 0.0, 0.0, 0.0, 201.0, 0.0, 0.0, 0.0, 202.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 204.0, 0.0,\n 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 206.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0,\n 0.0, 209.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0,\n 211.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0,\n 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 212.0, 0.0,\n 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0, 0.0, 211.0, 0.0, 0.0,\n 0.0, 210.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0, 0.0,\n 208.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 206.0,\n 0.0, 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 203.0, 0.0,\n 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 202.0, 0.0, 0.0, 0.0, 201.0, 0.0, 0.0, 0.0, 201.0, 0.0, 0.0,\n 0.0, 200.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0,\n 197.0, 0.0, 0.0, 0.0, 197.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 195.0,\n 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 194.0, 0.0,\n 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0,\n 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0,\n 193.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 194.0, 0.0, 0.0, 0.0, 195.0,\n 0.0, 0.0, 0.0, 195.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 197.0, 0.0,\n 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 199.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0,\n 0.0, 202.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 204.0, 0.0, 0.0, 0.0, 205.0, 0.0, 0.0, 0.0,\n 206.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0, 0.0, 209.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 212.0,\n 0.0, 0.0, 0.0, 213.0, 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0, 217.0, 0.0, 0.0, 0.0, 218.0, 0.0,\n 0.0, 0.0, 220.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 223.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0,\n 0.0, 227.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0, 0.0,\n 234.0, 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 242.0,\n 0.0, 0.0, 0.0, 244.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 247.0, 0.0, 0.0, 0.0, 249.0, 0.0,\n 0.0, 0.0, 251.0, 0.0, 0.0, 0.0, 253.0, 0.0, 0.0, 0.0, 255.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0,\n 0.0, 2.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 5.0, 0.0,\n 0.0, 0.0, 6.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0, 0.0, 7.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 9.0,\n 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0,\n 0.0, 13.0, 0.0, 0.0, 0.0, 14.0, 0.0, 0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 0.0, 18.0,\n 0.0, 0.0, 0.0, 19.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 22.0, 0.0, 0.0,\n 0.0, 24.0, 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 26.0, 0.0, 0.0, 0.0, 28.0, 0.0, 0.0, 0.0, 29.0,\n 0.0, 0.0, 0.0, 31.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 34.0, 0.0, 0.0, 0.0, 35.0, 0.0, 0.0,\n 0.0, 37.0, 0.0, 0.0, 0.0, 38.0, 0.0, 0.0, 0.0, 40.0, 0.0, 0.0, 0.0, 41.0, 0.0, 0.0, 0.0, 43.0,\n 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0,\n 0.0, 52.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 58.0,\n 0.0, 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 62.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0,\n 0.0, 67.0, 0.0, 0.0, 0.0, 69.0, 0.0, 0.0, 0.0, 71.0, 0.0, 0.0, 0.0, 73.0, 0.0, 0.0, 0.0, 74.0,\n 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 79.0, 0.0, 0.0, 0.0, 81.0, 0.0, 0.0,\n 0.0, 83.0, 0.0, 0.0, 0.0, 84.0, 0.0, 0.0, 0.0, 86.0, 0.0, 0.0, 0.0, 88.0, 0.0, 0.0, 0.0, 89.0,\n 0.0, 0.0, 0.0, 91.0, 0.0, 0.0, 0.0, 92.0, 0.0, 0.0, 0.0, 94.0, 0.0, 0.0, 0.0, 95.0, 0.0, 0.0,\n 0.0, 97.0, 0.0, 0.0, 0.0, 98.0, 0.0, 0.0, 0.0, 99.0, 0.0, 0.0, 0.0, 101.0, 0.0, 0.0, 0.0,\n 102.0, 0.0, 0.0, 0.0, 103.0, 0.0, 0.0, 0.0, 104.0, 0.0, 0.0, 0.0, 106.0, 0.0, 0.0, 0.0, 107.0,\n 0.0, 0.0, 0.0, 108.0, 0.0, 0.0, 0.0, 109.0, 0.0, 0.0, 0.0, 110.0, 0.0, 0.0, 0.0, 111.0, 0.0,\n 0.0, 0.0, 112.0, 0.0, 0.0, 0.0, 113.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0,\n 0.0, 115.0, 0.0, 0.0, 0.0, 116.0, 0.0, 0.0, 0.0, 116.0, 0.0, 0.0, 0.0, 117.0, 0.0, 0.0, 0.0,\n 118.0, 0.0, 0.0, 0.0, 118.0, 0.0, 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 119.0, 0.0, 0.0, 0.0, 120.0,\n 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0,\n 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0,\n 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0,\n 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0,\n 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 122.0, 0.0,\n 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0,\n 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0,\n 121.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0,\n 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0,\n 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0,\n 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 121.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0,\n 122.0, 0.0, 0.0, 0.0, 122.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 123.0, 0.0, 0.0, 0.0, 124.0,\n 0.0, 0.0, 0.0, 124.0, 0.0, 0.0, 0.0, 125.0, 0.0, 0.0, 0.0, 125.0, 0.0, 0.0, 0.0, 126.0, 0.0,\n 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 128.0, 0.0, 0.0, 0.0, 129.0, 0.0, 0.0,\n 0.0, 130.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 131.0, 0.0, 0.0, 0.0, 132.0, 0.0, 0.0, 0.0,\n 133.0, 0.0, 0.0, 0.0, 135.0, 0.0, 0.0, 0.0, 136.0, 0.0, 0.0, 0.0, 137.0, 0.0, 0.0, 0.0, 138.0,\n 0.0, 0.0, 0.0, 139.0, 0.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 142.0, 0.0, 0.0, 0.0, 143.0, 0.0,\n 0.0, 0.0, 144.0, 0.0, 0.0, 0.0, 146.0, 0.0, 0.0, 0.0, 147.0, 0.0, 0.0, 0.0, 149.0, 0.0, 0.0,\n 0.0, 150.0, 0.0, 0.0, 0.0, 152.0, 0.0, 0.0, 0.0, 154.0, 0.0, 0.0, 0.0, 155.0, 0.0, 0.0, 0.0,\n 157.0, 0.0, 0.0, 0.0, 158.0, 0.0, 0.0, 0.0, 160.0, 0.0, 0.0, 0.0, 162.0, 0.0, 0.0, 0.0, 164.0,\n 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 167.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0, 171.0, 0.0,\n 0.0, 0.0, 172.0, 0.0, 0.0, 0.0, 174.0, 0.0, 0.0, 0.0, 176.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0,\n 0.0, 180.0, 0.0, 0.0, 0.0, 182.0, 0.0, 0.0, 0.0, 183.0, 0.0, 0.0, 0.0, 185.0, 0.0, 0.0, 0.0,\n 187.0, 0.0, 0.0, 0.0, 189.0, 0.0, 0.0, 0.0, 191.0, 0.0, 0.0, 0.0, 193.0, 0.0, 0.0, 0.0, 194.0,\n 0.0, 0.0, 0.0, 196.0, 0.0, 0.0, 0.0, 198.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 202.0, 0.0,\n 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 205.0, 0.0, 0.0, 0.0, 207.0, 0.0, 0.0, 0.0, 208.0, 0.0, 0.0,\n 0.0, 210.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 213.0, 0.0, 0.0, 0.0, 215.0, 0.0, 0.0, 0.0,\n 216.0, 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 219.0, 0.0, 0.0, 0.0, 221.0, 0.0, 0.0, 0.0, 222.0,\n 0.0, 0.0, 0.0, 224.0, 0.0, 0.0, 0.0, 225.0, 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 228.0, 0.0,\n 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 232.0, 0.0, 0.0,\n 0.0, 233.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0, 0.0, 236.0, 0.0, 0.0, 0.0, 237.0, 0.0, 0.0, 0.0,\n 238.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 241.0,\n 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 244.0, 0.0, 0.0, 0.0, 244.0, 0.0,\n 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 246.0, 0.0, 0.0, 0.0, 247.0, 0.0, 0.0, 0.0, 247.0, 0.0, 0.0,\n 0.0, 248.0, 0.0, 0.0, 0.0, 248.0, 0.0, 0.0, 0.0, 249.0, 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0,\n 250.0, 0.0, 0.0, 0.0, 251.0, 0.0, 0.0, 0.0, 251.0, 0.0, 0.0, 0.0, 252.0, 0.0, 0.0, 0.0, 252.0,\n 0.0, 0.0, 0.0, 253.0, 0.0, 0.0, 0.0, 253.0, 0.0, 0.0, 0.0, 254.0, 0.0, 0.0, 0.0, 255.0, 0.0,\n 0.0, 0.0\n ]),\n b: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0,\n 0.0, 8.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 15.0,\n 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 0.0, 19.0, 0.0, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0,\n 0.0, 25.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 0.0, 29.0, 0.0, 0.0, 0.0, 31.0, 0.0, 0.0, 0.0, 33.0,\n 0.0, 0.0, 0.0, 35.0, 0.0, 0.0, 0.0, 37.0, 0.0, 0.0, 0.0, 39.0, 0.0, 0.0, 0.0, 41.0, 0.0, 0.0,\n 0.0, 43.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 50.0,\n 0.0, 0.0, 0.0, 52.0, 0.0, 0.0, 0.0, 54.0, 0.0, 0.0, 0.0, 56.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0,\n 0.0, 59.0, 0.0, 0.0, 0.0, 60.0, 0.0, 0.0, 0.0, 62.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 65.0,\n 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0, 0.0, 69.0, 0.0, 0.0, 0.0, 70.0, 0.0, 0.0,\n 0.0, 71.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 73.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 74.0,\n 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0,\n 0.0, 77.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 78.0,\n 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0,\n 0.0, 77.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 77.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 76.0,\n 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 73.0, 0.0, 0.0,\n 0.0, 73.0, 0.0, 0.0, 0.0, 72.0, 0.0, 0.0, 0.0, 71.0, 0.0, 0.0, 0.0, 70.0, 0.0, 0.0, 0.0, 69.0,\n 0.0, 0.0, 0.0, 68.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0, 0.0, 66.0, 0.0, 0.0,\n 0.0, 65.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 63.0, 0.0, 0.0, 0.0, 61.0, 0.0, 0.0, 0.0, 60.0,\n 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 58.0, 0.0, 0.0, 0.0, 58.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0,\n 0.0, 56.0, 0.0, 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 54.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 52.0,\n 0.0, 0.0, 0.0, 51.0, 0.0, 0.0, 0.0, 51.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 49.0, 0.0, 0.0,\n 0.0, 49.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 47.0,\n 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0,\n 0.0, 46.0, 0.0, 0.0, 0.0, 46.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 47.0, 0.0, 0.0, 0.0, 47.0,\n 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 48.0, 0.0, 0.0, 0.0, 49.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0,\n 0.0, 50.0, 0.0, 0.0, 0.0, 51.0, 0.0, 0.0, 0.0, 52.0, 0.0, 0.0, 0.0, 53.0, 0.0, 0.0, 0.0, 55.0,\n 0.0, 0.0, 0.0, 56.0, 0.0, 0.0, 0.0, 57.0, 0.0, 0.0, 0.0, 59.0, 0.0, 0.0, 0.0, 60.0, 0.0, 0.0,\n 0.0, 62.0, 0.0, 0.0, 0.0, 64.0, 0.0, 0.0, 0.0, 65.0, 0.0, 0.0, 0.0, 67.0, 0.0, 0.0, 0.0, 69.0,\n 0.0, 0.0, 0.0, 71.0, 0.0, 0.0, 0.0, 74.0, 0.0, 0.0, 0.0, 76.0, 0.0, 0.0, 0.0, 78.0, 0.0, 0.0,\n 0.0, 81.0, 0.0, 0.0, 0.0, 83.0, 0.0, 0.0, 0.0, 86.0, 0.0, 0.0, 0.0, 88.0, 0.0, 0.0, 0.0, 91.0,\n 0.0, 0.0, 0.0, 94.0, 0.0, 0.0, 0.0, 96.0, 0.0, 0.0, 0.0, 99.0, 0.0, 0.0, 0.0, 102.0, 0.0, 0.0,\n 0.0, 105.0, 0.0, 0.0, 0.0, 108.0, 0.0, 0.0, 0.0, 111.0, 0.0, 0.0, 0.0, 114.0, 0.0, 0.0, 0.0,\n 117.0, 0.0, 0.0, 0.0, 120.0, 0.0, 0.0, 0.0, 124.0, 0.0, 0.0, 0.0, 127.0, 0.0, 0.0, 0.0, 130.0,\n 0.0, 0.0, 0.0, 133.0, 0.0, 0.0, 0.0, 136.0, 0.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 143.0, 0.0,\n 0.0, 0.0, 146.0, 0.0, 0.0, 0.0, 149.0, 0.0, 0.0, 0.0, 153.0, 0.0, 0.0, 0.0, 156.0, 0.0, 0.0,\n 0.0, 159.0, 0.0, 0.0, 0.0, 162.0, 0.0, 0.0, 0.0, 165.0, 0.0, 0.0, 0.0, 169.0, 0.0, 0.0, 0.0,\n 172.0, 0.0, 0.0, 0.0, 175.0, 0.0, 0.0, 0.0, 178.0, 0.0, 0.0, 0.0, 181.0, 0.0, 0.0, 0.0, 184.0,\n 0.0, 0.0, 0.0, 186.0, 0.0, 0.0, 0.0, 189.0, 0.0, 0.0, 0.0, 192.0, 0.0, 0.0, 0.0, 195.0, 0.0,\n 0.0, 0.0, 197.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 203.0, 0.0, 0.0, 0.0, 205.0, 0.0, 0.0,\n 0.0, 207.0, 0.0, 0.0, 0.0, 210.0, 0.0, 0.0, 0.0, 212.0, 0.0, 0.0, 0.0, 214.0, 0.0, 0.0, 0.0,\n 216.0, 0.0, 0.0, 0.0, 218.0, 0.0, 0.0, 0.0, 220.0, 0.0, 0.0, 0.0, 222.0, 0.0, 0.0, 0.0, 224.0,\n 0.0, 0.0, 0.0, 226.0, 0.0, 0.0, 0.0, 227.0, 0.0, 0.0, 0.0, 229.0, 0.0, 0.0, 0.0, 230.0, 0.0,\n 0.0, 0.0, 231.0, 0.0, 0.0, 0.0, 233.0, 0.0, 0.0, 0.0, 234.0, 0.0, 0.0, 0.0, 235.0, 0.0, 0.0,\n 0.0, 236.0, 0.0, 0.0, 0.0, 237.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0,\n 239.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 242.0,\n 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0,\n 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0,\n 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0,\n 242.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 241.0,\n 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 241.0, 0.0, 0.0, 0.0, 240.0, 0.0,\n 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0,\n 0.0, 239.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0,\n 238.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 238.0,\n 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 238.0, 0.0, 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 239.0, 0.0,\n 0.0, 0.0, 239.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0, 0.0, 240.0, 0.0, 0.0,\n 0.0, 241.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 242.0, 0.0, 0.0, 0.0, 243.0, 0.0, 0.0, 0.0,\n 244.0, 0.0, 0.0, 0.0, 245.0, 0.0, 0.0, 0.0, 246.0, 0.0, 0.0, 0.0, 247.0, 0.0, 0.0, 0.0, 248.0,\n 0.0, 0.0, 0.0, 249.0, 0.0, 0.0, 0.0, 250.0, 0.0, 0.0, 0.0, 252.0, 0.0, 0.0, 0.0, 253.0, 0.0,\n 0.0, 0.0, 255.0, 0.0, 0.0, 0.0\n ]),\n },\n hot: {\n name: 'hot',\n r: new Float32Array([\n 0.0, 4.0, 8.0, 12.0, 16.0, 20.0, 24.0, 28.0, 32.0, 36.0, 40.0, 44.0, 48.0, 52.0, 56.0, 60.0,\n 64.0, 68.0, 72.0, 76.0, 80.0, 84.0, 88.0, 92.0, 96.0, 100.0, 104.0, 108.0, 112.0, 116.0,\n 120.0, 124.0, 128.0, 132.0, 136.0, 140.0, 144.0, 148.0, 152.0, 156.0, 160.0, 164.0, 168.0,\n 172.0, 176.0, 180.0, 184.0, 188.0, 192.0, 196.0, 200.0, 204.0, 208.0, 212.0, 216.0, 220.0,\n 224.0, 228.0, 232.0, 236.0, 240.0, 244.0, 248.0, 252.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0\n ]),\n g: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.30769,\n 4.61538, 6.92308, 9.23077, 11.5385, 13.8462, 16.1538, 18.4615, 20.7692, 23.0769, 25.3846, 27.6923,\n 30.0, 32.3077, 34.6154, 36.9231, 39.2308, 41.5385, 43.8462, 46.1538, 48.4615, 50.7692, 53.0769,\n 55.3846, 57.6923, 60.0, 62.3077, 64.6154, 66.9231, 69.2308, 71.5385, 73.8462, 76.1538, 78.4615,\n 80.7692, 83.0769, 85.3846, 87.6923, 90.0, 92.3077, 94.6154, 96.9231, 99.2308, 101.538, 103.846, 106.154,\n 108.462, 110.769, 113.077, 115.385, 117.692, 120.0, 122.308, 124.615, 126.923, 129.231, 131.538,\n 133.846, 136.154, 138.462, 140.769, 143.077, 145.385, 147.692, 150.0, 152.308, 154.615, 156.923,\n 159.231, 161.538, 163.846, 166.154, 168.462, 170.769, 173.077, 175.385, 177.692, 180.0, 182.308,\n 184.615, 186.923, 189.231, 191.538, 193.846, 196.154, 198.462, 200.769, 203.077, 205.385,\n 207.692, 210.0, 212.308, 214.615, 216.923, 219.231, 221.538, 223.846, 226.154, 228.462, 230.769,\n 233.077, 235.385, 237.692, 240.0, 242.308, 244.615, 246.923, 249.231, 251.538, 253.846, 255.0,\n 255.0, 255.0, 255.0, 255.0, 255.0, 255.0\n ]),\n b: new Float32Array([\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,\n 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.980769,\n 1.96154, 2.94231, 3.92308, 4.90385, 5.88461, 6.86539, 7.84615, 8.82692, 9.80769, 10.7885, 11.7692, 12.75,\n 13.7308, 14.7115, 15.6923, 16.6731, 17.6538, 18.6346, 19.6154, 20.5962, 21.5769, 22.5577, 23.5385,\n 24.5192, 25.5, 26.4808, 27.4615, 28.4423, 29.4231, 30.4038, 31.3846, 32.3654, 33.3462, 34.3269,\n 35.3077, 36.2885, 37.2692, 38.25, 39.2308, 40.2115, 41.1923, 42.1731, 43.1538, 44.1346, 45.1154, 46.0962,\n 47.0769, 48.0577, 49.0385, 50.0192, 51.0, 51.9808, 52.9615, 53.9423, 54.9231, 55.9038, 56.8846,\n 57.8654, 58.8462, 59.8269, 60.8077, 61.7885, 62.7692, 63.75, 64.7308, 65.7115, 66.6923, 67.6731,\n 68.6538, 69.6346, 70.6154, 71.5962, 72.5769, 73.5577, 74.5385, 75.5192, 76.5, 77.4808, 78.4615, 79.4423,\n 80.4231, 81.4038, 82.3846, 83.3654, 84.3462, 85.3269, 86.3077, 87.2885, 88.2692, 89.25, 90.2308,\n 91.2115, 92.1923, 93.1731, 94.1538, 95.1346, 96.1154, 97.0962, 98.0769, 99.0577, 100.038,\n 101.019, 102.0, 102.981, 103.962, 104.942, 105.923, 106.904, 107.885, 108.865, 109.846, 110.827,\n 111.808, 112.788, 113.769, 114.75, 115.731, 116.711, 117.692, 118.673, 119.654, 120.634,\n 121.615, 122.596, 123.577, 124.557, 125.538, 126.519, 127.5\n ])\n },\n gray: {\n name: 'gray',\n r: new Float32Array([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,\n 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,\n 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,\n 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,\n 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,\n 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,\n 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,\n 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,\n 165, 166, 167, 168, 169, 170, 171, 172,\n 173, 174, 175, 176, 177,\n 178, 179,\n 180,\n 181,\n 182,\n 183,\n 184,\n 185,\n 186,\n 187,\n 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,\n 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,\n 213, 214, 215, 216, 217, 218, 219, 220,\n 221, 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 228,\n 229,\n 230,\n 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,\n 243, 244, 245, 246, 247, 248, 249, 250,\n 251,\n 252,\n 253,\n 254,\n 255\n ]),\n g: new Float32Array([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,\n 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,\n 57,\n 58,\n 59,\n 60,\n 61,\n 62,\n 63,\n 64,\n 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,\n 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 100,\n 101,\n 102,\n 103,\n 104,\n 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,\n 115,\n 116,\n 117,\n 118,\n 119,\n 120,\n 121,\n 122,\n 123,\n 124,\n 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,\n 135,\n 136,\n 137,\n 138,\n 139,\n 140,\n 141,\n 142,\n 143,\n 144,\n 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,\n 155,\n 156,\n 157,\n 158,\n 159,\n 160,\n 161,\n 162,\n 163,\n 164,\n 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,\n 175,\n 176,\n 177,\n 178,\n 179,\n 180,\n 181,\n 182,\n 183,\n 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,\n 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,\n 207,\n 208,\n 209,\n 210,\n 211,\n 212,\n 213,\n 214,\n 215,\n 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,\n 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,\n 238,\n 239,\n 240,\n 241,\n 242,\n 243,\n 244,\n 245,\n 246,\n 247, 248, 249, 250,\n 251,\n 252,\n 253,\n 254,\n 255\n ]),\n b: new Float32Array([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,\n 59,\n 60,\n 61,\n 62,\n 63,\n 64,\n 65,\n 66,\n 67,\n 68,\n 69,\n 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,\n 117,\n 118,\n 119,\n 120,\n 121,\n 122,\n 123,\n 124,\n 125,\n 126,\n 127,\n 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,\n 145,\n 146,\n 147,\n 148,\n 149,\n 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,\n 165,\n 166,\n 167,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,\n 193,\n 194,\n 195,\n 196,\n 197,\n 198,\n 199,\n 200,\n 201,\n 202,\n 203,\n 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,\n 221,\n 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 228,\n 229,\n 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,\n 241,\n 242,\n 243,\n 244,\n 245,\n 246,\n 247,\n 248,\n 249,\n 250,\n 251,\n 252,\n 253,\n 254,\n 255\n ])\n },\n}\n\nexport default ColorMaps;\n","// HiPSShaderProgram.ts\nimport ShaderManager from './ShaderManager.js'\nimport { ColorMaps } from '../model/ColorMaps.js'\n\ntype GL = WebGL2RenderingContext;\n\ntype UniformNames = {\n sampler: string\n factor: string\n m_perspective: string\n m_model: string\n m_view: string\n colormapIdx: string\n colormap_red: string\n colormap_green: string\n colormap_blue: string\n}\n\ntype AttributeNames = {\n vertex_pos: string\n text_coords: string\n}\n\ntype Locations = {\n pMatrix: WebGLUniformLocation | null\n mMatrix: WebGLUniformLocation | null\n vMatrix: WebGLUniformLocation | null\n sampler: WebGLUniformLocation | null\n textureAlpha: WebGLUniformLocation | null\n clorMapIdx: WebGLUniformLocation | null\n vertexPositionAttribute: number\n textureCoordAttribute: number\n}\n\n// export default class HiPSShaderProgram {\nexport class HiPSShaderProgram {\n private _colorMapBlockIndex: number | null = null;\n private _runtimeColorMap:\n | { r: Float32Array; g: Float32Array; b: Float32Array }\n | undefined;\n\n private _shaderProgram: WebGLProgram | undefined\n private _vertexShader!: WebGLShader\n private _fragmentShader!: WebGLShader\n\n private _UBO_colorMapBuffer: WebGLBuffer | null = null\n private _UBO_colorMapVariableInfo: Record<\n 'r_palette' | 'g_palette' | 'b_palette',\n { index: number; offset: number }\n > = {\n r_palette: { index: 0, offset: 0 },\n g_palette: { index: 0, offset: 0 },\n b_palette: { index: 0, offset: 0 }\n }\n\n readonly gl_uniforms: UniformNames\n readonly gl_attributes: AttributeNames\n readonly locations: Locations\n private _webgl: WebGL2RenderingContext\n\n constructor(webgl: WebGL2RenderingContext) {\n this._webgl = webgl\n this.gl_uniforms = {\n sampler: 'uSampler0',\n factor: 'uFactor0',\n m_perspective: 'uPMatrix',\n m_model: 'uMMatrix',\n m_view: 'uVMatrix',\n colormapIdx: 'cmapIdx',\n colormap_red: 'r',\n colormap_green: 'g',\n colormap_blue: 'b'\n }\n\n this.gl_attributes = {\n vertex_pos: 'aVertexPosition',\n text_coords: 'aTextureCoord'\n }\n\n this.locations = {\n pMatrix: null,\n mMatrix: null,\n vMatrix: null,\n sampler: null,\n textureAlpha: null,\n clorMapIdx: null,\n vertexPositionAttribute: -1,\n textureCoordAttribute: -1\n }\n }\n\n get shaderProgram(): WebGLProgram {\n const gl = this._webgl as GL\n if (!this._shaderProgram) {\n // const gl = global.gl as GL\n this._shaderProgram = gl.createProgram() as WebGLProgram\n this.initShaders()\n }\n ; gl.useProgram(this._shaderProgram)\n return this._shaderProgram\n }\n\n setRuntimeColorMap(\n colorMap:\n | { r: Float32Array; g: Float32Array; b: Float32Array }\n | undefined,\n ): void {\n this._runtimeColorMap = colorMap\n }\n\n private initShaders(): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n\n const fragmentShaderStr = ShaderManager.hipsNativeFS()\n this._fragmentShader = gl.createShader(gl.FRAGMENT_SHADER) as WebGLShader\n gl.shaderSource(this._fragmentShader, fragmentShaderStr)\n gl.compileShader(this._fragmentShader)\n if (!gl.getShaderParameter(this._fragmentShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._fragmentShader) || 'Fragment shader compile error')\n return\n }\n\n const vertexShaderStr = ShaderManager.hipsVS()\n this._vertexShader = gl.createShader(gl.VERTEX_SHADER) as WebGLShader\n gl.shaderSource(this._vertexShader, vertexShaderStr)\n gl.compileShader(this._vertexShader)\n if (!gl.getShaderParameter(this._vertexShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._vertexShader) || 'Vertex shader compile error')\n return\n }\n\n gl.attachShader(this._shaderProgram as WebGLProgram, this._vertexShader)\n gl.attachShader(this._shaderProgram as WebGLProgram, this._fragmentShader)\n gl.linkProgram(this._shaderProgram as WebGLProgram)\n\n if (!gl.getProgramParameter(this._shaderProgram as WebGLProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders')\n }\n }\n\n enableProgram(): void {\n // (global.gl as GL).useProgram(this._shaderProgram as WebGLProgram)\n (this._webgl as GL).useProgram(this.shaderProgram as WebGLProgram)\n\n }\n\n setGrayscaleShader(): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n gl.detachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n const fragmentShaderStr = ShaderManager.hipsGrayscaleFS()\n this.changeFSShader(fragmentShaderStr)\n }\n\n setNativeShader(): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n gl.detachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n const fragmentShaderStr = ShaderManager.hipsNativeFS()\n this.changeFSShader(fragmentShaderStr)\n }\n\n setColorMapShader(): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n\n // Swap fragment shader\n gl.detachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n const fragmentShaderStr = ShaderManager.hipsColorMapFS()\n this.changeFSShader(fragmentShaderStr)\n\n // UBO discovery for the \"colormap\" block\n const blockIndex = gl.getUniformBlockIndex(\n this.shaderProgram as WebGLProgram,\n 'colormap'\n )\n\n // INVALID_INDEX == 0xFFFFFFFF in WebGL2\n if (blockIndex === gl.INVALID_INDEX) {\n console.warn(\n 'HiPSShaderProgram: uniform block \"colormap\" not found in hipsColorMapFS()'\n );\n this._colorMapBlockIndex = null;\n this._UBO_colorMapBuffer = null;\n return; // do NOT proceed with UBO setup\n }\n this._colorMapBlockIndex = blockIndex;\n\n\n // const blockSize = gl.getActiveUniformBlockParameter(\n // this.shaderProgram as WebGLProgram,\n // blockIndex,\n // gl.UNIFORM_BLOCK_DATA_SIZE\n // ) as number\n\n const uboVariableNames = ['r_palette', 'g_palette', 'b_palette'] as const\n\n const uboVariableIndices = gl.getUniformIndices(\n this.shaderProgram as WebGLProgram,\n uboVariableNames as unknown as string[]\n ) as number[]\n\n const uboVariableOffsets = gl.getActiveUniforms(\n this.shaderProgram as WebGLProgram,\n uboVariableIndices,\n gl.UNIFORM_OFFSET\n ) as number[]\n\n // Create buffer only once\n if (!this._UBO_colorMapBuffer) {\n this._UBO_colorMapBuffer = gl.createBuffer()\n gl.bindBuffer(gl.UNIFORM_BUFFER, this._UBO_colorMapBuffer)\n\n // std140 layout: 256 floats each padded to 16 bytes => 4096 bytes per palette, total 12288\n const BYTES = 12288; // 3 * 4096\n gl.bufferData(gl.UNIFORM_BUFFER, BYTES, gl.STATIC_DRAW)\n gl.bindBuffer(gl.UNIFORM_BUFFER, null)\n\n gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, this._UBO_colorMapBuffer)\n }\n\n // Store offsets\n uboVariableNames.forEach((name, index) => {\n this._UBO_colorMapVariableInfo[name] = {\n index: uboVariableIndices[index],\n offset: uboVariableOffsets[index]\n }\n })\n }\n\n private changeFSShader(fragmentShaderStr: string): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n this._fragmentShader = gl.createShader(gl.FRAGMENT_SHADER) as WebGLShader\n gl.shaderSource(this._fragmentShader, fragmentShaderStr)\n gl.compileShader(this._fragmentShader)\n if (!gl.getShaderParameter(this._fragmentShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._fragmentShader) || 'Fragment shader compile error')\n return\n }\n gl.attachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n gl.linkProgram(this.shaderProgram as WebGLProgram)\n if (!gl.getProgramParameter(this.shaderProgram as WebGLProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders')\n }\n gl.useProgram(this.shaderProgram as WebGLProgram)\n }\n\n enableShaders(\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx: number\n ): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n gl.useProgram(this.shaderProgram as WebGLProgram)\n\n this.locations.pMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_perspective\n )\n this.locations.mMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_model\n )\n this.locations.vMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_view\n )\n this.locations.sampler = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.sampler\n )\n this.locations.textureAlpha = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.factor\n )\n this.locations.clorMapIdx = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.colormapIdx\n )\n\n\n // NEW\n // if (this.locations.clorMapIdx) {\n gl.uniform1i(this.locations.clorMapIdx, colorMapIdx);\n // }\n\n // Make sampler explicit: we always use TEXTURE0 in your draw code\n if (this.locations.sampler) {\n gl.uniform1i(this.locations.sampler, 0);\n }\n // END NEW\n\n this.locations.vertexPositionAttribute = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.vertex_pos\n )\n this.locations.textureCoordAttribute = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.text_coords\n )\n\n if (colorMapIdx >= 2 && this._UBO_colorMapBuffer && this._colorMapBlockIndex !== null) {\n gl.uniformBlockBinding(\n this.shaderProgram as WebGLProgram,\n this._colorMapBlockIndex,\n 0\n );\n gl.bindBuffer(gl.UNIFORM_BUFFER, this._UBO_colorMapBuffer);\n\n let currentColorMap:\n | { r: Float32Array; g: Float32Array; b: Float32Array }\n | undefined;\n\n\n if (colorMapIdx === 2) {\n currentColorMap = {\n r: ColorMaps.planck.r,\n g: ColorMaps.planck.g,\n b: ColorMaps.planck.b,\n };\n } else if (colorMapIdx === 3) {\n currentColorMap = {\n r: ColorMaps.cmb.r,\n g: ColorMaps.cmb.g,\n b: ColorMaps.cmb.b,\n };\n } else if (colorMapIdx === 4) {\n currentColorMap = {\n r: ColorMaps.rainbow.r,\n g: ColorMaps.rainbow.g,\n b: ColorMaps.rainbow.b,\n };\n } else if (colorMapIdx === 5) {\n currentColorMap = {\n r: ColorMaps.eosb.r,\n g: ColorMaps.eosb.g,\n b: ColorMaps.eosb.b,\n };\n } else if (colorMapIdx === 6) {\n currentColorMap = {\n r: ColorMaps.cubehelix.r,\n g: ColorMaps.cubehelix.g,\n b: ColorMaps.cubehelix.b,\n };\n } else if (colorMapIdx === 7) {\n currentColorMap = {\n r: ColorMaps.hot.r,\n g: ColorMaps.hot.g,\n b: ColorMaps.hot.b,\n };\n } else if (colorMapIdx === 8) {\n currentColorMap = {\n r: ColorMaps.gray.r,\n g: ColorMaps.gray.g,\n b: ColorMaps.gray.b,\n };\n }\n\n if (!currentColorMap) {\n currentColorMap = this._runtimeColorMap\n }\n\n if (currentColorMap) {\n const info = this._UBO_colorMapVariableInfo;\n\n gl.bufferSubData(gl.UNIFORM_BUFFER, info.r_palette.offset, currentColorMap.r, 0);\n gl.bufferSubData(gl.UNIFORM_BUFFER, info.g_palette.offset, currentColorMap.g, 0);\n gl.bufferSubData(gl.UNIFORM_BUFFER, info.b_palette.offset, currentColorMap.b, 0);\n }\n\n gl.bindBuffer(gl.UNIFORM_BUFFER, null);\n }\n\n gl.uniformMatrix4fv(this.locations.mMatrix, false, mMatrix)\n gl.uniformMatrix4fv(this.locations.pMatrix, false, pMatrix)\n gl.uniformMatrix4fv(this.locations.vMatrix, false, vMatrix)\n }\n}\n","/**\n * @author Fabrizio Giordano (Fab)\n */\n\nimport { vec3, mat4, ReadonlyVec3, ReadonlyMat4 } from \"gl-matrix\";\nimport global from \"../Global.js\";\n\nimport { HiPSShaderProgram } from '../shader/HiPSShaderProgram.js'\n// import { VisibleTilesManager } from \"./hips/VisibleTilesManager.js\";\n// import { TileBuffer } from \"./hips/TileBuffer.js\";\nimport Camera from \"../Camera.js\";\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\nexport interface SkyEntityDrawInput {\n fovDeg?: number\n // cameraMatrix?: Float32Array\n camera: Camera\n pMatrix: ReadonlyMat4\n}\n\nexport abstract class AbstractSkyEntity {\n // Public-ish properties used elsewhere in the app\n public refreshMe = false;\n public fovX_deg = 180;\n public fovY_deg = 180;\n public xRad: number;\n public yRad: number;\n public prevFoV = this.fovX_deg;\n public _name: string;\n // public insideSphere: boolean = bootSetup.insideSphere\n\n // Picking/sphere\n public center: vec3;\n public radius: number;\n public isGalacticHips: boolean;\n\n // GL resources\n protected vertexTextureCoordBuffer: WebGLBuffer | null = null;\n protected vertexPositionBuffer: WebGLBuffer | null = null;\n protected vertexIndexBuffer: WebGLBuffer | null = null;\n protected shaderProgram: WebGLProgram | null = null;\n\n // Matrices\n protected T: mat4 = mat4.create();\n protected R: mat4 = mat4.create();\n protected modelMatrix: mat4 = mat4.create();\n protected inverseModelMatrix: mat4 = mat4.create();\n\n // Precomputed transform from galactic to equatorial (already inverted)\n protected galacticMatrixInverted: mat4 = mat4.create();\n\n protected _webgl: WebGL2RenderingContext\n protected _hipsShaderProgram: HiPSShaderProgram;\n // protected _visibleTilesManager: VisibleTilesManager\n // protected _tileBuffer: TileBuffer\n\n constructor(\n in_radius: number,\n in_position: ReadonlyVec3,\n in_xRad: number,\n in_yRad: number,\n in_name: string,\n webgl: WebGL2RenderingContext,\n isGalacticHips?: boolean,\n ) {\n this._webgl = webgl\n this.xRad = in_xRad;\n this.yRad = in_yRad;\n this._name = in_name;\n this.center = vec3.clone(in_position);\n this.radius = in_radius;\n // this.insideSphere = global.insideSphere\n this.isGalacticHips = !!isGalacticHips;\n\n // Fill the matrix via Float32Array.set (safer than mat4.set with 16 scalars)\n mat4.set(\n this.galacticMatrixInverted,\n -0.054875582456588745, -0.8734370470046997, -0.48383501172065735, 0,\n 0.49410945177078247, -0.4448296129703522, 0.7469822764396667, 0,\n -0.8676661849021912, -0.19807636737823486, 0.4559837877750397, 0,\n 0, 0, 0, 1,\n )\n // this._tileBuffer = new TileBuffer(1, this._webgl)\n // this._visibleTilesManager = new VisibleTilesManager(this._tileBuffer)\n \n // this._visibleTilesManager = new VisibleTilesManager()\n this._hipsShaderProgram = new HiPSShaderProgram(this._webgl)\n }\n\n get name() {\n return this._name\n }\n\n get hipsShaderProgram() {\n return this._hipsShaderProgram\n }\n // get tileBuffer() {\n // return this._tileBuffer\n // }\n get webgl() {\n return this._webgl\n }\n /** GL setup and initial model transform */\n initGL(gl: GL): void {\n // GL resources\n this.vertexTextureCoordBuffer = gl.createBuffer();\n this.vertexPositionBuffer = gl.createBuffer();\n this.vertexIndexBuffer = gl.createBuffer();\n this.shaderProgram = gl.createProgram();\n\n // Reset object transforms\n this.T = mat4.create();\n this.R = mat4.create();\n this.modelMatrix = mat4.create();\n this.inverseModelMatrix = mat4.create();\n\n // Initial pose\n this.translate(this.center);\n this.rotate(this.xRad, this.yRad);\n }\n\n translate(translation: ReadonlyVec3): void {\n mat4.translate(this.T, this.T, translation);\n this.refreshModelMatrix();\n }\n\n rotate(rad1: number, rad2: number): void {\n mat4.rotate(this.R, this.R, rad2, [0, 0, 1]);\n mat4.rotate(this.R, this.R, rad1, [1, 0, 0]);\n this.refreshModelMatrix();\n }\n\n rotateFromZero(rad1: number, rad2: number): void {\n mat4.identity(this.R);\n mat4.rotate(this.R, this.R, rad1, [1, 0, 0]);\n mat4.rotate(this.R, this.R, rad2, [0, 0, 1]);\n this.refreshModelMatrix();\n }\n\n protected refreshModelMatrix(): void {\n const R_inverse = mat4.create();\n mat4.invert(R_inverse, this.R);\n mat4.multiply(this.modelMatrix, this.T, R_inverse);\n\n // Flip Y if we're outside the sphere\n if (!global.insideSphere) {\n this.modelMatrix[1] = -this.modelMatrix[1];\n this.modelMatrix[5] = -this.modelMatrix[5];\n this.modelMatrix[9] = -this.modelMatrix[9];\n this.modelMatrix[13] = -this.modelMatrix[13];\n }\n\n // Apply galactic frame transform if needed\n if (this.isGalacticHips) {\n mat4.multiply(this.modelMatrix, this.modelMatrix, this.galacticMatrixInverted);\n }\n }\n\n getModelMatrixInverse(): ReadonlyMat4 {\n mat4.identity(this.inverseModelMatrix);\n mat4.invert(this.inverseModelMatrix, this.modelMatrix);\n return this.inverseModelMatrix;\n }\n\n getModelMatrix(): ReadonlyMat4 {\n return this.modelMatrix;\n }\n\n setModelMatrix(modelMatrix: ReadonlyMat4) {\n this.modelMatrix = modelMatrix\n }\n\n /** Children with hierarchical geometry (e.g., HiPS) can override this. */\n setGeometryNeedsToBeRefreshed(): void {\n (this as any).refreshGeometryOnFoVChanged = false;\n }\n\n // Helpers operating on raw mat4 buffers (kept from your JS)\n rotateX(m: mat4, angle: number): mat4 {\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const mv1 = m[1], mv5 = m[5], mv9 = m[9];\n\n m[1] = m[1] * c - m[2] * s;\n m[5] = m[5] * c - m[6] * s;\n m[9] = m[9] * c - m[10] * s;\n\n m[2] = m[2] * c + mv1 * s;\n m[6] = m[6] * c + mv5 * s;\n m[10] = m[10] * c + mv9 * s;\n\n return m;\n }\n\n rotateY(m: mat4, angle: number): mat4 {\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const mv0 = m[0], mv4 = m[4], mv8 = m[8];\n\n m[0] = c * m[0] + s * m[2];\n m[4] = c * m[4] + s * m[6];\n m[8] = c * m[8] + s * m[10];\n\n m[2] = c * m[2] - s * mv0;\n m[6] = c * m[6] - s * mv4;\n m[10] = c * m[10] - s * mv8;\n\n return m;\n }\n\n // ---------- Abstract hooks ----------\n \n abstract draw(input: SkyEntityDrawInput): void;\n\n}","// FoVHelper.ts\n'use strict'\n\nclass FoVHelper {\n getHiPSNorder(fov: number): number {\n if (fov >= 179) return 0\n if (fov >= 90) return 1\n if (fov >= 30) return 2\n if (fov >= 20) return 3\n if (fov >= 6) return 4\n if (fov >= 3.2) return 5\n if (fov >= 1.6) return 6\n if (fov >= 0.85) return 7\n if (fov >= 0.42) return 8\n if (fov >= 0.21) return 9\n if (fov >= 0.12) return 10\n if (fov >= 0.06) return 11\n if (fov >= 0.015) return 12\n return 13\n }\n\n getRADegSteps(fov: number): { raStep: number; decStep: number } {\n let raStep: number\n let decStep: number\n\n if (fov >= 179) { raStep = 10; decStep = 10 }\n else if (fov >= 25) { raStep = 9; decStep = 9 }\n else if (fov >= 12.5){ raStep = 8; decStep = 8 }\n else if (fov >= 6) { raStep = 6; decStep = 6 }\n else if (fov >= 3.2) { raStep = 5; decStep = 5 }\n else if (fov >= 1.6) { raStep = 4; decStep = 4 }\n else if (fov >= 0.85){ raStep = 3; decStep = 3 }\n else if (fov >= 0.42){ raStep = 2; decStep = 2 }\n else if (fov >= 0.21){ raStep = 1; decStep = 1 }\n else if (fov >= 0.12){ raStep = 0.5; decStep = 0.5 }\n else if (fov >= 0.06){ raStep = 0.25; decStep = 0.25 }\n else { raStep = 10; decStep = 10 }\n\n return { raStep, decStep }\n }\n\n getRefOrder(order: number): number {\n switch (order) {\n case 0:\n case 1:\n case 2:\n case 3:\n return order + 6\n case 4:\n case 5:\n case 6:\n case 7:\n return order + 5\n case 8:\n return order + 4\n default:\n return order + 3\n }\n }\n}\n\nexport const fovHelper = new FoVHelper()\nexport default FoVHelper\n","'use strict'\n\nimport global from '../../Global.js'\n// import { hipsShaderProgram } from '../../shader/HiPSShaderProgram.js'\nimport { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js'\n// import { newTileBuffer } from './TileBuffer.js'\nimport { TileBuffer } from './TileBuffer.js'\nimport { fovHelper } from './FoVHelper.js'\nimport {HiPS} from './HiPS.js'\n\ninterface Vec3 { x: number; y: number; z: number }\ninterface Xyf { ix: number; iy: number; face: number }\ninterface HealpixLike {\n order: number\n nest2xyf(nest: number): Xyf\n xyf2nest(x: number, y: number, face: number): number\n getBoundaries(nest: number): Vec3[]\n getPointsForXyfNoStep(x: number, y: number, face: number): Vec3[]\n}\n\nclass AncestorTile {\n private _hips: HiPS\n private _tileno: number\n private _baseurl: string\n private _order: number\n\n private _ready = false\n private _format: string\n \n private _isGalacticHips: boolean\n\n public opacity = 1.0\n private _hipsShaderIndex = 0\n private _pixels: number[] = []\n\n private _texture: WebGLTexture | null = null\n private _image!: HTMLImageElement\n private _texurl = ''\n\n\n private vertexPosition!: Float32Array[]\n private vertexPositionBuffer!: WebGLBuffer[]\n private vertexIndices!: Uint16Array\n private vertexIndexBuffer!: WebGLBuffer\n private _tileBuffer: TileBuffer\n private _hipsShaderProgram: HiPSShaderProgram\n private _webgl: WebGL2RenderingContext\n\n constructor(tileno: number, order: number, hips: HiPS, tileBuffer: TileBuffer, hipsShaderProgram: HiPSShaderProgram, webgl: WebGL2RenderingContext) {\n\n this._hipsShaderProgram = hipsShaderProgram\n this._tileBuffer = tileBuffer\n this._hips = hips\n this._tileno = tileno\n this._webgl = webgl\n\n this._format = hips.format\n this._baseurl = hips.baseURL\n\n this._isGalacticHips = hips.isGalacticHips\n\n this._order = order\n this.initImage()\n }\n\n // Kept for API parity; there is no interval created in this class.\n destroyIntervals(): void {\n // no-op\n }\n\n private initImage(): void {\n const dirnumber = Math.floor(this._tileno / 10000) * 10000\n this._texurl = `${this._baseurl}/Norder${this._order}/Dir${dirnumber}/Npix${this._tileno}.${this._format}`\n\n this._image = new Image()\n this._image.onload = () => this.imageLoaded()\n this._image.onerror = () => {\n console.error('File not found? %s', this._texurl)\n }\n this._image.crossOrigin = 'anonymous'\n // If you ever need FITS handling, call this.loadImage() instead.\n this._image.src = this._texurl\n }\n\n private imageLoaded(): void {\n this.textureLoaded()\n this.initModelBuffer()\n\n const gl = this._webgl\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image)\n\n this._ready = true\n }\n\n private textureLoaded(): void {\n // hipsShaderProgram.enableProgram()\n this._hipsShaderProgram.enableProgram()\n\n const gl = this._webgl\n this._texture = gl.createTexture()\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n\n if (!gl.isTexture(this._texture)) {\n console.log('error in texture')\n }\n }\n\n private initModelBuffer(): void {\n const gl = this._webgl\n this.vertexPosition = []\n this.vertexPositionBuffer = []\n this.vertexIndices = new Uint16Array()\n // this.vertexIndexBuffer created later\n\n const reforder = fovHelper.getRefOrder(this._order)\n const orighealpix = global.getHealpix(this._order) as HealpixLike\n const origxyf = orighealpix.nest2xyf(this._tileno)\n\n const orderjump = reforder - this._order\n\n const dxmin = origxyf.ix << orderjump\n const dxmax = (origxyf.ix << orderjump) + (1 << orderjump)\n const dymin = origxyf.iy << orderjump\n const dymax = (origxyf.iy << orderjump) + (1 << orderjump)\n\n const healpix = global.getHealpix(reforder) as HealpixLike\n\n this._pixels = []\n\n // Using getBoundaries (like the JS source)\n this.setupPositionAndTexture4Quadrant(dxmin, dxmax / 2, dymin, dymax / 2, 0, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant(dxmax / 2, dxmax, dymin, dymax / 2, 1, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant(dxmin, dxmax / 2, dymax / 2, dymax, 2, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant(dxmax / 2, dxmax, dymax / 2, dymax, 3, healpix, orderjump, origxyf)\n\n const pixelsXQuadrant = this.vertexPosition[0].length / 20\n this.vertexIndices = this.computeVertexIndices(pixelsXQuadrant)\n\n this.vertexIndexBuffer = gl.createBuffer() as WebGLBuffer\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndices, gl.STATIC_DRAW)\n }\n\n private computeVertexIndices(pixelsXQuadrant: number): Uint16Array {\n const vertexIndices = new Uint16Array(6 * pixelsXQuadrant)\n let baseFaceIndex = 0\n for (let j = 0; j < pixelsXQuadrant; j++) {\n vertexIndices[6 * j] = baseFaceIndex\n vertexIndices[6 * j + 1] = baseFaceIndex + 1\n vertexIndices[6 * j + 2] = baseFaceIndex + 2\n\n vertexIndices[6 * j + 3] = baseFaceIndex + 2\n vertexIndices[6 * j + 4] = baseFaceIndex + 3\n vertexIndices[6 * j + 5] = baseFaceIndex\n\n baseFaceIndex += 4\n }\n return vertexIndices\n }\n\n // Version that uses getPointsForXyfNoStep (kept for reference; not used in this class)\n private setupPositionAndTexture4Quadrant2(\n dxmin: number,\n dxmax: number,\n dymin: number,\n dymax: number,\n qidx: number,\n healpix: HealpixLike,\n orderjump: number,\n origxyf: Xyf\n ): void {\n this.vertexPosition[qidx] = new Float32Array(20 * (dxmax - dxmin) * (dymax - dymin))\n\n const step = 1 / (1 << orderjump)\n let p = 0\n\n for (let dx = dxmin; dx < dxmax; dx++) {\n for (let dy = dymin; dy < dymax; dy++) {\n const facesVec3Array = healpix.getPointsForXyfNoStep(dx, dy, origxyf.face)\n const uindex = dy - (origxyf.iy << orderjump)\n const vindex = dx - (origxyf.ix << orderjump)\n\n this.vertexPosition[qidx][20 * p] = facesVec3Array[0].x\n this.vertexPosition[qidx][20 * p + 1] = facesVec3Array[0].y\n this.vertexPosition[qidx][20 * p + 2] = facesVec3Array[0].z\n this.vertexPosition[qidx][20 * p + 3] = step + step * uindex\n this.vertexPosition[qidx][20 * p + 4] = 1 - (step + step * vindex)\n\n this.vertexPosition[qidx][20 * p + 5] = facesVec3Array[1].x\n this.vertexPosition[qidx][20 * p + 6] = facesVec3Array[1].y\n this.vertexPosition[qidx][20 * p + 7] = facesVec3Array[1].z\n this.vertexPosition[qidx][20 * p + 8] = step + step * uindex\n this.vertexPosition[qidx][20 * p + 9] = 1 - step * vindex\n\n this.vertexPosition[qidx][20 * p + 10] = facesVec3Array[2].x\n this.vertexPosition[qidx][20 * p + 11] = facesVec3Array[2].y\n this.vertexPosition[qidx][20 * p + 12] = facesVec3Array[2].z\n this.vertexPosition[qidx][20 * p + 13] = step * uindex\n this.vertexPosition[qidx][20 * p + 14] = 1 - step * vindex\n\n this.vertexPosition[qidx][20 * p + 15] = facesVec3Array[3].x\n this.vertexPosition[qidx][20 * p + 16] = facesVec3Array[3].y\n this.vertexPosition[qidx][20 * p + 17] = facesVec3Array[3].z\n this.vertexPosition[qidx][20 * p + 18] = step * uindex\n this.vertexPosition[qidx][20 * p + 19] = 1 - (step + step * vindex)\n p++\n }\n }\n\n this.vertexPositionBuffer[qidx] = this._webgl.createBuffer()\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.vertexPositionBuffer[qidx])\n this._webgl.bufferData(\n this._webgl.ARRAY_BUFFER,\n this.vertexPosition[qidx],\n this._webgl.STATIC_DRAW\n )\n }\n\n // Version used by the original JS, collecting _pixels via xyf2nest + getBoundaries\n private setupPositionAndTexture4Quadrant(\n dxmin: number,\n dxmax: number,\n dymin: number,\n dymax: number,\n qidx: number,\n healpix: HealpixLike,\n orderjump: number,\n origxyf: Xyf\n ): void {\n const gl = this._webgl\n this.vertexPosition[qidx] = new Float32Array(20 * (dxmax - dxmin) * (dymax - dymin))\n\n const step = 1 / (1 << orderjump)\n let p = 0\n\n for (let dx = dxmin; dx < dxmax; dx++) {\n for (let dy = dymin; dy < dymax; dy++) {\n const ipix3 = healpix.xyf2nest(dx, dy, origxyf.face)\n this._pixels.push(ipix3)\n\n const facesVec3Array = healpix.getBoundaries(ipix3)\n const uindex = dy - (origxyf.iy << orderjump)\n const vindex = dx - (origxyf.ix << orderjump)\n\n this.vertexPosition[qidx][20 * p] = facesVec3Array[0].x\n this.vertexPosition[qidx][20 * p + 1] = facesVec3Array[0].y\n this.vertexPosition[qidx][20 * p + 2] = facesVec3Array[0].z\n this.vertexPosition[qidx][20 * p + 3] = step + step * uindex\n this.vertexPosition[qidx][20 * p + 4] = 1 - (step + step * vindex)\n\n this.vertexPosition[qidx][20 * p + 5] = facesVec3Array[1].x\n this.vertexPosition[qidx][20 * p + 6] = facesVec3Array[1].y\n this.vertexPosition[qidx][20 * p + 7] = facesVec3Array[1].z\n this.vertexPosition[qidx][20 * p + 8] = step + step * uindex\n this.vertexPosition[qidx][20 * p + 9] = 1 - step * vindex\n\n this.vertexPosition[qidx][20 * p + 10] = facesVec3Array[2].x\n this.vertexPosition[qidx][20 * p + 11] = facesVec3Array[2].y\n this.vertexPosition[qidx][20 * p + 12] = facesVec3Array[2].z\n this.vertexPosition[qidx][20 * p + 13] = step * uindex\n this.vertexPosition[qidx][20 * p + 14] = 1 - step * vindex\n\n this.vertexPosition[qidx][20 * p + 15] = facesVec3Array[3].x\n this.vertexPosition[qidx][20 * p + 16] = facesVec3Array[3].y\n this.vertexPosition[qidx][20 * p + 17] = facesVec3Array[3].z\n this.vertexPosition[qidx][20 * p + 18] = step * uindex\n this.vertexPosition[qidx][20 * p + 19] = 1 - (step + step * vindex)\n p++\n }\n }\n\n this.vertexPositionBuffer[qidx] = gl.createBuffer() as WebGLBuffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer[qidx])\n gl.bufferData(gl.ARRAY_BUFFER, this.vertexPosition[qidx], gl.STATIC_DRAW)\n }\n\n public draw(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx: number\n ): boolean {\n if (!this._ready) return false\n\n\n // this._image.onload = () => this.imageLoaded()\n\n \n let quadrantsToDraw: Set<number> = new Set([0, 1, 2, 3])\n if (visibleOrder > this._order) {\n const q = this.drawChildren(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx)\n if (q) quadrantsToDraw = q\n }\n\n this._hipsShaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx)\n\n const gl = this._webgl\n gl.enableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n gl.enableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n gl.uniform1f(this._hipsShaderProgram.locations.textureAlpha, this.opacity)\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer)\n const elemno = this.vertexIndices.length\n\n quadrantsToDraw.forEach((qidx) => {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer[qidx])\n\n gl.vertexAttribPointer(\n this._hipsShaderProgram.locations.vertexPositionAttribute,\n 3,\n gl.FLOAT,\n false,\n 5 * 4,\n 0\n )\n gl.vertexAttribPointer(\n this._hipsShaderProgram.locations.textureCoordAttribute,\n 2,\n gl.FLOAT,\n false,\n 5 * 4,\n 3 * 4\n )\n\n gl.drawElements(gl.TRIANGLES, elemno, gl.UNSIGNED_SHORT, 0)\n })\n\n gl.disableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n gl.disableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n \n return true\n }\n\n private drawChildren(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx: number\n ): Set<number> | undefined {\n const quadrantsToDraw = new Set<number>([0, 1, 2, 3])\n const childrenOrder = this._order + 1\n if (!visibleTilesMap.has(childrenOrder)) return\n\n for (let c = 0; c < 4; c++) {\n const childTileNo = (this._tileno << 2) + c\n const visibleChildren = visibleTilesMap.get(childrenOrder)!\n if (visibleChildren.includes(childTileNo)) {\n const childTile = this._isGalacticHips\n ? this._tileBuffer.getGalTile(childTileNo, childrenOrder, this._hips)\n : this._tileBuffer.getTile(childTileNo, childrenOrder, this._hips)\n \n // childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx)\n childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx, this._hipsShaderProgram)\n if ((childTile as any)._ready) {\n quadrantsToDraw.delete((childTile as any)._tileno - (this._tileno << 2))\n }\n }\n }\n return quadrantsToDraw\n }\n}\n\nexport default AncestorTile","'use strict'\n\nimport { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js'\nimport global from '../../Global.js'\nimport { TileBuffer } from './TileBuffer.js'\nimport {HiPS} from './HiPS.js'\n\n\nexport default class AllSky {\n private _ready = false\n private _hips: HiPS\n\n private _format: string\n private _baseurl: string\n private _isGalacticHips: boolean\n\n private _order = 3\n public opacity = 1.0\n\n private _hipsShaderIndex = 0\n private _texture: WebGLTexture | null = null\n private _image!: HTMLImageElement\n private _texurl!: string\n\n private _textureLoaded = false\n\n private _maxTiles = 0\n private _numFacesXTile = 0\n private _numFaces = 0\n\n private vertexPosition!: Float32Array\n private vertexPositionBuffer!: WebGLBuffer\n private vertexIndexBuffer!: WebGLBuffer\n private vidx = 0\n private _webgl: WebGL2RenderingContext\n private _tileBuffer: TileBuffer\n private _hipsShaderProgram\n\n constructor(hips: HiPS, webgl: WebGL2RenderingContext, tileBuffer: TileBuffer, hipsShaderProgram: HiPSShaderProgram) {\n this._tileBuffer = tileBuffer\n this._hips = hips\n this._webgl = webgl\n this._format = hips.format\n this._baseurl = hips.baseURL\n this._isGalacticHips = hips.isGalacticHips\n this._hipsShaderProgram = hipsShaderProgram\n\n this.initImage()\n }\n\n private initImage(): void {\n this._image = new Image()\n this._texurl = `${this._baseurl}/Norder3/Allsky.${this._format}`\n\n this._image.onload = () => this.imageLoaded()\n this._image.onerror = () => {\n console.error('File not found? %s', this._texurl)\n }\n\n this._image.setAttribute('crossorigin', 'anonymous')\n this._image.src = this._texurl\n }\n\n private imageLoaded(): void {\n this.textureLoaded()\n this.initModelBuffer()\n\n this._textureLoaded = true\n this._ready = true\n }\n\n private textureLoaded(): void {\n // hipsShaderProgram.enableProgram()\n this._hipsShaderProgram.enableProgram()\n\n const gl = this._webgl as WebGL2RenderingContext\n this._texture = gl.createTexture()\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n\n // gl.uniform1i(hipsShaderProgram.shaderProgram.samplerUniform, this._hipsShaderIndex)\n\n if (!gl.isTexture(this._texture)) {\n console.log('error in texture')\n }\n\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image)\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n\n const useMipmaps = true\n gl.texParameteri(\n gl.TEXTURE_2D,\n gl.TEXTURE_MIN_FILTER,\n useMipmaps ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR\n );\n // MAG filter: ONLY NEAREST or LINEAR are valid\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n // gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR)\n // gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR_MIPMAP_LINEAR)\n // gl.generateMipmap(gl.TEXTURE_2D)\n\n if (useMipmaps) gl.generateMipmap(gl.TEXTURE_2D);\n\n }\n\n private initModelBuffer(): void {\n const gl = this._webgl\n\n const orderjump = 1\n const tgtHpxOrder = this._order + orderjump\n const healpix = global.getHealpix(this._order)\n this._maxTiles = healpix.getNPix()\n const tgtHealpix = global.getHealpix(tgtHpxOrder)\n\n this._numFacesXTile = 4 ** orderjump // used in gl.draw\n this._numFaces = this._numFacesXTile * this._maxTiles\n this.vertexPosition = new Float32Array(20 * this._numFaces)\n\n let sindex = 0\n let tindex = 0\n this.vidx = 0\n\n for (let t = 0; t < this._maxTiles; t++) {\n const xyf = healpix.nest2xyf(t)\n const dxmin = xyf.ix << orderjump\n const dxmax = (xyf.ix << orderjump) + (1 << orderjump)\n const dymin = xyf.iy << orderjump\n const dymax = (xyf.iy << orderjump) + (1 << orderjump)\n\n this.setupPositionAndTexture4Quadrant(\n sindex,\n tindex,\n dxmin,\n dxmin + (dxmax - dxmin) / 2,\n dymin,\n dymin + (dymax - dymin) / 2,\n tgtHealpix,\n xyf,\n 0,\n 0\n )\n this.setupPositionAndTexture4Quadrant(\n sindex,\n tindex,\n dxmin + (dxmax - dxmin) / 2,\n dxmax,\n dymin,\n dymin + (dymax - dymin) / 2,\n tgtHealpix,\n xyf,\n 0,\n 1\n )\n this.setupPositionAndTexture4Quadrant(\n sindex,\n tindex,\n dxmin,\n dxmin + (dxmax - dxmin) / 2,\n dymin + (dymax - dymin) / 2,\n dymax,\n tgtHealpix,\n xyf,\n 1,\n 0\n )\n this.setupPositionAndTexture4Quadrant(\n sindex,\n tindex,\n dxmin + (dxmax - dxmin) / 2,\n dxmax,\n dymin + (dymax - dymin) / 2,\n dymax,\n tgtHealpix,\n xyf,\n 1,\n 1\n )\n\n sindex++\n if (sindex === 27) {\n tindex++\n sindex = 0\n }\n }\n\n const vertexIndices = new Uint16Array(6 * this._numFaces)\n let baseFaceIndex = 0\n for (let i = 0; i < this._numFaces; i++) {\n vertexIndices[6 * i] = baseFaceIndex\n vertexIndices[6 * i + 1] = baseFaceIndex + 1\n vertexIndices[6 * i + 2] = baseFaceIndex + 3\n\n vertexIndices[6 * i + 3] = baseFaceIndex + 1\n vertexIndices[6 * i + 4] = baseFaceIndex + 2\n vertexIndices[6 * i + 5] = baseFaceIndex + 3\n\n baseFaceIndex += 4\n }\n\n this.vertexPositionBuffer = gl.createBuffer() as WebGLBuffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer)\n gl.bufferData(gl.ARRAY_BUFFER, this.vertexPosition, gl.STATIC_DRAW)\n\n this.vertexIndexBuffer = gl.createBuffer() as WebGLBuffer\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, vertexIndices, gl.STATIC_DRAW)\n }\n\n private setupPositionAndTexture4Quadrant(\n sindex: number,\n tindex: number,\n dxmin: number,\n dxmax: number,\n dymin: number,\n dymax: number,\n tgthealpix: any,\n xyf: any,\n qx: number,\n qy: number\n ): void {\n let facesVec3Array: Array<{ x: number; y: number; z: number }> = []\n\n const factor = 2 ** (tgthealpix.order - 3)\n const s_step = 1 / (27 * factor) // 0.037037037...\n const t_step = 1 / (29 * factor) // 0.034482759...\n\n const s_pixel_size = s_step / 64\n const t_pixel_size = t_step / 64\n\n const base_s = factor * s_step * sindex + s_step * qx\n const base_t = factor * t_step * tindex + t_step * qy\n\n for (let dx = dxmin; dx < dxmax; dx++) {\n for (let dy = dymin; dy < dymax; dy++) {\n facesVec3Array = tgthealpix.getPointsForXyfNoStep(dx, dy, xyf.face)\n\n // bottom right\n this.vertexPosition[20 * this.vidx] = facesVec3Array[0].x\n this.vertexPosition[20 * this.vidx + 1] = facesVec3Array[0].y\n this.vertexPosition[20 * this.vidx + 2] = facesVec3Array[0].z\n this.vertexPosition[20 * this.vidx + 3] = s_step + base_s - s_pixel_size\n this.vertexPosition[20 * this.vidx + 4] = 1 - (t_step + base_t) + t_pixel_size\n\n // top right\n this.vertexPosition[20 * this.vidx + 5] = facesVec3Array[1].x\n this.vertexPosition[20 * this.vidx + 6] = facesVec3Array[1].y\n this.vertexPosition[20 * this.vidx + 7] = facesVec3Array[1].z\n this.vertexPosition[20 * this.vidx + 8] = s_step + base_s - s_pixel_size\n this.vertexPosition[20 * this.vidx + 9] = 1 - base_t - t_pixel_size\n\n // top left\n this.vertexPosition[20 * this.vidx + 10] = facesVec3Array[2].x\n this.vertexPosition[20 * this.vidx + 11] = facesVec3Array[2].y\n this.vertexPosition[20 * this.vidx + 12] = facesVec3Array[2].z\n this.vertexPosition[20 * this.vidx + 13] = base_s + s_pixel_size\n this.vertexPosition[20 * this.vidx + 14] = 1 - base_t - t_pixel_size\n\n // bottom left\n this.vertexPosition[20 * this.vidx + 15] = facesVec3Array[3].x\n this.vertexPosition[20 * this.vidx + 16] = facesVec3Array[3].y\n this.vertexPosition[20 * this.vidx + 17] = facesVec3Array[3].z\n this.vertexPosition[20 * this.vidx + 18] = base_s + s_pixel_size\n this.vertexPosition[20 * this.vidx + 19] = 1 - (t_step + base_t) + t_pixel_size\n\n this.vidx++\n }\n }\n }\n\n /**\n * Renders the all-sky layer and, when available, delegates to higher-resolution child tiles.\n * Returns `true` if it attempted to draw (ready), `false` if still not ready.\n */\n public draw(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx: number\n ): boolean {\n if (!this._ready) return false\n\n let allSkyTiles2Skip: number[] = []\n if (visibleOrder >= this._order) {\n const skipped = this.drawChildren(\n visibleOrder,\n visibleTilesMap,\n pMatrix,\n vMatrix,\n mMatrix,\n colorMapIdx\n )\n if (skipped) allSkyTiles2Skip = skipped\n }\n\n const gl = this._webgl as WebGL2RenderingContext\n\n this._hipsShaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx)\n gl.enableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n gl.enableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n // hipsShaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx)\n // gl.enableVertexAttribArray((hipsShaderProgram as any).locations.vertexPositionAttribute)\n // gl.enableVertexAttribArray((hipsShaderProgram as any).locations.textureCoordAttribute)\n\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n // gl.uniform1f(hipsShaderProgram.locations.textureAlpha, this.opacity)\n gl.uniform1f(this._hipsShaderProgram.locations.textureAlpha, this.opacity)\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer)\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer)\n\n gl.vertexAttribPointer(\n // hipsShaderProgram.locations.vertexPositionAttribute,\n this._hipsShaderProgram.locations.vertexPositionAttribute,\n 3, gl.FLOAT, false, 5 * 4, 0\n )\n gl.vertexAttribPointer(\n // hipsShaderProgram.locations.textureCoordAttribute,\n this._hipsShaderProgram.locations.textureCoordAttribute,\n 2, gl.FLOAT, false, 5 * 4, 3 * 4\n )\n\n for (let t = 0; t < this._maxTiles; t++) {\n if (!allSkyTiles2Skip.includes(t)) {\n gl.drawElements(\n gl.TRIANGLES,\n 6 * this._numFacesXTile,\n gl.UNSIGNED_SHORT,\n 12 * t * this._numFacesXTile\n )\n }\n }\n\n gl.disableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n gl.disableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n // gl.disableVertexAttribArray(hipsShaderProgram.locations.vertexPositionAttribute)\n // gl.disableVertexAttribArray(hipsShaderProgram.locations.textureCoordAttribute)\n\n return true\n }\n\n private drawChildren(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Float32Array,\n vMatrix: Float32Array,\n mMatrix: Float32Array,\n colorMapIdx: number\n ): number[] | undefined {\n const childrenOrder = this._order\n if (!visibleTilesMap.has(childrenOrder)) return\n\n const visibleTiles = visibleTilesMap.get(childrenOrder) as number[]\n const allSkyTiles2Skip: number[] = []\n\n for (let i = 0; i < visibleTiles.length; i++) {\n const tileno = visibleTiles[i]\n const childTile = this._isGalacticHips\n ? this._tileBuffer.getGalTile(tileno, childrenOrder, this._hips)\n : this._tileBuffer.getTile(tileno, childrenOrder, this._hips)\n // const childTile = this._isGalacticHips\n // ? newTileBuffer.getGalTile(tileno, childrenOrder, this._hips)\n // : newTileBuffer.getTile(tileno, childrenOrder, this._hips)\n\n // childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx)\n childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx, this._hipsShaderProgram)\n if (childTile.getReadyState()) {\n allSkyTiles2Skip.push(tileno)\n }\n }\n return allSkyTiles2Skip\n }\n}","'use strict'\n/**\n * @author Fabrizio Giordano (Fab77)\n */\n\nimport {AbstractSkyEntity, SkyEntityDrawInput} from '../AbstractSkyEntity.js'\nimport { fovHelper } from './FoVHelper.js'\nimport ColorMaps, { ColorMap } from '../ColorMaps.js'\n// import { hipsShaderProgram } from '../../shader/HiPSShaderProgram.js'\n// import { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js'\nimport AncestorTile from './AncestorTile.js'\nimport AllSky from './AllSky.js'\n// import global from '../../Global.js'\nimport {HiPSDescriptor} from './HiPSDescriptor.js'\n// import computePerspectiveMatrixSingleton from '../../utils/ComputePerspectiveMatrix.js'\nimport { HealpixGrid } from '../grid/HealpixGrid.js'\nimport { ReadonlyMat4 } from 'gl-matrix'\n\n\nexport class HiPS extends AbstractSkyEntity {\n \n private _ancestorTiles: AncestorTile[]\n private _allSkyTile: AllSky | null\n private _descriptor: HiPSDescriptor\n\n private _format: string\n private _baseurl: string\n private _maxorder: number\n private _minorder: number\n\n private _visibleorder = 3\n private _allSky = true\n\n public samplerIdx = 0\n public colorMapIdx = 0\n public colorMap = ColorMaps['native']\n private _healpixGrid: HealpixGrid\n\n // exposed read-only helpers\n get maxOrder(): number { return this._maxorder }\n get minOrder(): number { return this._minorder }\n get baseURL(): string { return this._baseurl }\n get format(): string { return this._format }\n get propertiesRawText(): string { return this._descriptor.propertiesRawText }\n get properties(): ReadonlyMap<string, string> { return this._descriptor.properties }\n\n constructor(\n radius: number,\n position: [number, number, number],\n xrad: number,\n yrad: number,\n descriptor: HiPSDescriptor,\n webgl: WebGL2RenderingContext,\n healpixGrid: HealpixGrid\n ) {\n super(radius, position, xrad, yrad, descriptor.surveyName, webgl, descriptor.isGalactic)\n this._descriptor = descriptor\n // this.initGL((global as any).gl as WebGL2RenderingContext)\n this.initGL(webgl as WebGL2RenderingContext)\n this._healpixGrid = healpixGrid\n \n // newTileBuffer.addHiPS(this)\n this._healpixGrid.visibleTilesManager.tileBuffer.addHiPS(this)\n\n // DEBUG logs kept from JS (optional)\n // eslint-disable-next-line no-console\n console.log('HiPS frame ' + descriptor.hipsFrame)\n // eslint-disable-next-line no-console\n console.log('HiPS minOrder ' + descriptor.minOrder)\n\n this._format = descriptor.imgFormats[0]\n this._baseurl = descriptor.url\n this._maxorder = descriptor.maxOrder\n this._minorder = descriptor.minOrder\n\n this.initShaders()\n\n // pick initial order from a starting FoV\n const fov = 180\n let order = fovHelper.getHiPSNorder(fov)\n this._visibleorder = Math.min(order, this._maxorder)\n\n this._ancestorTiles = []\n this._allSkyTile = null\n\n // auto-detect all-sky: original code forces true\n this._allSky = true\n if (this._allSky) {\n this._allSkyTile = new AllSky(this, this._webgl, this._healpixGrid.visibleTilesManager.tileBuffer, super.hipsShaderProgram)\n } else {\n for (let t = 0; t < 12; t++) {\n this._ancestorTiles.push(new AncestorTile(t, 0, this, this._healpixGrid.visibleTilesManager.tileBuffer, super.hipsShaderProgram, this._webgl))\n }\n }\n }\n\n getProperty(key: string): string | undefined {\n return this._descriptor.getProperty(key)\n }\n\n changeFormat(format: string): void {\n this._format = format\n // original code referenced _tileBuffer; if you have one, wire it back.\n // Keeping calls no-op to avoid breaking at runtime if _tileBuffer is undefined.\n // (newVisibleTilesManager + TileBuffer drive the actual tile lifecycle)\n // @ts-ignore\n if (this._tileBuffer?.clearAll) this._tileBuffer.clearAll()\n // @ts-ignore\n if (this._tileBuffer) this._tileBuffer._format = this._format\n const pixelByOrder =\n this.isGalacticHips\n ? this._healpixGrid.visibleTilesManager.galVisibleTilesByOrder\n : this._healpixGrid.visibleTilesManager.visibleTilesByOrder\n // const pixelByOrder =\n // this.isGalacticHips\n // ? visibleTilesManager.galVisibleTilesByOrder\n // : visibleTilesManager.visibleTilesByOrder\n // @ts-ignore\n if (this._tileBuffer?.updateTiles) this._tileBuffer.updateTiles(pixelByOrder.pixels, pixelByOrder.order)\n }\n\n /**\n * Shader colormap switcher\n * 0 -> native\n * 1 -> grayscale\n * 2 -> planck\n * 3 -> cmb\n * 4 -> rainbow\n * 5 -> eosb\n * 6 -> cubehelix\n */\n changeColorMap(colorMap: ColorMap): void {\n console.log('HiPS.changeColorMap -> shaderProgram', super.hipsShaderProgram.shaderProgram);\n\n this.colorMap = colorMap\n switch (colorMap.name) {\n case 'grayscale':\n this.colorMapIdx = 1\n // hipsShaderProgram.setGrayscaleShader()\n this.colorMap = ColorMaps['grayscale']\n super.hipsShaderProgram.setGrayscaleShader()\n break\n case 'planck':\n this.colorMapIdx = 2\n this.colorMap = ColorMaps['planck']\n // hipsShaderProgram.setColorMapShader()\n super.hipsShaderProgram.setColorMapShader()\n break\n case 'cmb':\n this.colorMapIdx = 3\n this.colorMap = ColorMaps['cmb']\n // hipsShaderProgram.setColorMapShader()\n super.hipsShaderProgram.setColorMapShader()\n break\n case 'rainbow':\n this.colorMapIdx = 4\n this.colorMap = ColorMaps['rainbow']\n // hipsShaderProgram.setColorMapShader()\n super.hipsShaderProgram.setColorMapShader()\n break\n case 'eosb':\n this.colorMapIdx = 5\n this.colorMap = ColorMaps['eosb']\n super.hipsShaderProgram.setColorMapShader()\n // hipsShaderProgram.setColorMapShader()\n break\n case 'cubehelix':\n this.colorMapIdx = 6\n this.colorMap = ColorMaps['cubehelix']\n super.hipsShaderProgram.setColorMapShader()\n // hipsShaderProgram.setColorMapShader()\n break\n case 'hot':\n this.colorMapIdx = 7\n this.colorMap = ColorMaps['hot']\n super.hipsShaderProgram.setColorMapShader()\n // hipsShaderProgram.setColorMapShader()\n break\n case 'gray':\n this.colorMapIdx = 8\n this.colorMap = ColorMaps['gray']\n super.hipsShaderProgram.setColorMapShader()\n // hipsShaderProgram.setColorMapShader()\n break\n case 'native':\n this.colorMapIdx = 0\n this.colorMap = ColorMaps['native']\n super.hipsShaderProgram.setNativeShader()\n break\n default:\n this.colorMapIdx = 9\n this.colorMap = colorMap\n super.hipsShaderProgram.setColorMapShader()\n }\n }\n\n private initShaders(): void {\n super.hipsShaderProgram.enableProgram()\n // hipsShaderProgram.enableProgram()\n // this.shaderProgram = super.hipsShaderProgram.shaderProgram\n // this.shaderProgram = hipsShaderProgram.shaderProgram\n }\n\n getCurrentHealpixOrder(): number {\n return this._visibleorder\n }\n\n private refresh(): void {\n // const fov = healpixGridSingleton.getMinFoV()\n const fov = this._healpixGrid.getMinFoV()\n this._visibleorder = Math.min(fovHelper.getHiPSNorder(fov), this._maxorder)\n }\n\n draw(input: SkyEntityDrawInput): void {\n \n const vMatrix = input.camera.getCameraMatrix() as Float32Array\n if (!vMatrix) return\n\n const pMatrix = input.pMatrix\n if (!pMatrix) return\n\n this.refresh()\n \n // const pMatrix = computePerspectiveMatrixSingleton.pMatrix as Float32Array\n const mMatrix = this.getModelMatrix() as Float32Array\n super.hipsShaderProgram.setRuntimeColorMap(this.colorMap)\n\n if (this._allSky && this._allSkyTile) {\n if (this.isGalacticHips) {\n this._allSkyTile.draw(\n this._healpixGrid.visibleTilesManager.galVisibleTilesByOrder.order,\n this._healpixGrid.visibleTilesManager.galAncestorsMap,\n // visibleTilesManager.galVisibleTilesByOrder.order,\n // visibleTilesManager.galAncestorsMap,\n pMatrix as Float32Array,\n vMatrix,\n mMatrix,\n this.colorMapIdx\n )\n } else {\n this._allSkyTile.draw(\n this._healpixGrid.visibleTilesManager.visibleTilesByOrder.order,\n this._healpixGrid.visibleTilesManager.ancestorsMap,\n // visibleTilesManager.visibleTilesByOrder.order,\n // visibleTilesManager.ancestorsMap,\n pMatrix as Float32Array,\n vMatrix,\n mMatrix,\n this.colorMapIdx\n )\n }\n return\n }\n\n // Non all-sky path\n const order = this.isGalacticHips\n ? this._healpixGrid.visibleTilesManager.galVisibleTilesByOrder.order\n : this._healpixGrid.visibleTilesManager.visibleTilesByOrder.order\n // ? visibleTilesManager.galVisibleTilesByOrder.order\n // : visibleTilesManager.visibleTilesByOrder.order\n const map = this.isGalacticHips\n ? this._healpixGrid.visibleTilesManager.galAncestorsMap\n : this._healpixGrid.visibleTilesManager.ancestorsMap\n // ? visibleTilesManager.galAncestorsMap\n // : visibleTilesManager.ancestorsMap\n\n this._ancestorTiles.forEach((ancestor) => {\n ancestor.draw(order, map, pMatrix as Float32Array, vMatrix, mMatrix, this.colorMapIdx)\n })\n }\n}\n\n// export default HiPS\n","import { mat4, ReadonlyMat4 } from \"gl-matrix\";\nimport Camera from \"../Camera.js\";\n\nexport class PerspectiveMatrixManager {\n private _pMatrix: ReadonlyMat4\n private _aspectRatio = 1;\n\n constructor (canvas: HTMLCanvasElement,\n camera: Camera,\n fovDeg: number,\n nearPlane: number = 0.1,\n insideSphere: boolean){\n this._pMatrix = this.computePerspectiveMatrix(canvas, camera, fovDeg, nearPlane, insideSphere)\n }\n\n get pMatrix(): ReadonlyMat4 {\n return this._pMatrix;\n }\n set pMatrix(pMatrix:Float32Array) {\n this._pMatrix = pMatrix;\n }\n\n computePerspectiveMatrix(\n canvas: HTMLCanvasElement,\n camera: Camera,\n fovDeg: number,\n nearPlane: number = 0.1,\n insideSphere: boolean\n ): mat4 {\n this._aspectRatio = canvas.width / canvas.height;\n\n const p = mat4.create();\n let farPlane: number;\n\n if (insideSphere) {\n // Inside the sphere: cap slightly beyond radius\n farPlane = 1.1;\n } else {\n const camMat = camera.getCameraMatrix() as any;\n const distCamera = -Number(camMat[14]); // camera z translation\n const r = 1; // HiPS sphere radius (inject real value if available)\n\n // Guard against negative due to rounding/logic\n const c2 = Math.sqrt(Math.max(distCamera ** 2 - r ** 2, 0));\n const beta = Math.atan2(c2, r);\n const cf = c2 * Math.sin(beta);\n farPlane = cf > 0 ? cf : r;\n }\n\n mat4.perspective(p, (fovDeg * Math.PI) / 180, this._aspectRatio, nearPlane, farPlane);\n this._pMatrix = p;\n return p;\n }\n}\n","/**\n * Enum for coordinate types.\n * @author Fabrizio Giordano (Fab77)\n */\nexport enum CoordsType {\n CARTESIAN = \"cartesian\",\n SPHERICAL = \"spherical\",\n ASTRO = \"astro\",\n}\n\n// export default CoordsType;","/**\n * @author Fabrizio Giordano (Fab77)\n */\n'use strict';\n\nimport { vec3 } from 'gl-matrix';\nimport {\n cartesianToSpherical,\n sphericalToCartesian,\n sphericalToAstroDeg,\n astroDegToSpherical,\n type SphericalCoords,\n} from '../utils/Utils.js';\nimport {CoordsType} from '../utils/CoordsType.js';\nimport global from '../Global.js';\n\nexport type CartesianOpts = { x: number; y: number; z: number };\nexport type AstroOpts = { raDeg: number; decDeg: number };\nexport type SphericalOpts = { phiDeg: number; thetaDeg: number };\nexport type PointInitOpts = CartesianOpts | AstroOpts | SphericalOpts;\n\nexport class Point {\n private _x!: number;\n private _y!: number;\n private _z!: number;\n private _xyz!: [number, number, number];\n\n private _raDeg!: number;\n private _decDeg!: number;\n private _raRad!: number;\n private _decRad!: number;\n private _raDecDeg!: [number, number];\n\n constructor(in_options: PointInitOpts, in_type: CoordsType) {\n this._xyz = [0, 0, 0];\n this._raDecDeg = [0, 0];\n\n // Prefer config value if present, fallback to 12\n const MAX_DECIMALS: number =\n global.MAX_DECIMALS ?? 12;\n\n if (in_type === CoordsType.CARTESIAN) {\n const { x, y, z } = in_options as CartesianOpts;\n this._x = Number(x.toFixed(MAX_DECIMALS));\n this._y = Number(y.toFixed(MAX_DECIMALS));\n this._z = Number(z.toFixed(MAX_DECIMALS));\n this._xyz = [this._x, this._y, this._z];\n\n const [ra, dec] = this.computeAstroCoords();\n this._raDeg = Number(ra);\n this._decDeg = Number(dec);\n this._raRad = (this._raDeg * Math.PI) / 180;\n this._decRad = (this._decDeg * Math.PI) / 180;\n this._raDecDeg = [this._raDeg, this._decDeg];\n } else if (in_type === CoordsType.ASTRO) {\n const { raDeg, decDeg } = in_options as AstroOpts;\n this._raDeg = Number(raDeg);\n this._decDeg = Number(decDeg);\n this._raDecDeg = [this._raDeg, this._decDeg];\n this._raRad = (this._raDeg * Math.PI) / 180;\n this._decRad = (this._decDeg * Math.PI) / 180;\n\n const [x, y, z] = this.computeCartesianCoords();\n this._x = Number(x.toFixed(MAX_DECIMALS));\n this._y = Number(y.toFixed(MAX_DECIMALS));\n this._z = Number(z.toFixed(MAX_DECIMALS));\n this._xyz = [this._x, this._y, this._z];\n } else if (in_type === CoordsType.SPHERICAL) {\n // Not implemented in original; keep behavior\n console.log(`${CoordsType.SPHERICAL} not implemented yet`);\n this._x = 0; this._y = 0; this._z = 0;\n this._raDeg = 0; this._decDeg = 0;\n this._raRad = 0; this._decRad = 0;\n } else {\n console.error('CoordsType ' + String(in_type) + ' not recognised.');\n // Initialize to zeroed state to keep object consistent\n this._x = 0; this._y = 0; this._z = 0;\n this._raDeg = 0; this._decDeg = 0;\n this._raRad = 0; this._decRad = 0;\n }\n }\n\n private computeAstroCoords(): [number, number] {\n const phiThetaDeg = cartesianToSpherical(\n vec3.fromValues(this._xyz[0], this._xyz[1], this._xyz[2])\n );\n const rad = sphericalToAstroDeg(phiThetaDeg.phi, phiThetaDeg.theta);\n return [rad.ra, rad.dec];\n }\n\n private computeCartesianCoords(): [number, number, number] {\n const phiThetaDeg = astroDegToSpherical(this._raDeg, this._decDeg);\n const [x, y, z] = sphericalToCartesian(phiThetaDeg.phi, phiThetaDeg.theta, 1);\n return [x, y, z];\n }\n\n /**\n * @return {phi, theta} (degrees)\n */\n computeHealpixPhiTheta(): SphericalCoords {\n return astroDegToSpherical(this._raDeg, this._decDeg);\n }\n\n /** Scale the vector by a given factor */\n scale(n: number): Point {\n return new Point({ x: this.x * n, y: this.y * n, z: this.z * n }, CoordsType.CARTESIAN);\n }\n\n dot(v: Point): number {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n }\n\n cross(v: Point): Point {\n return new Point(\n {\n x: this.y * v.z - v.y * this.z,\n y: this.z * v.x - v.z * this.x,\n z: this.x * v.y - v.x * this.y,\n },\n CoordsType.CARTESIAN\n );\n }\n\n norm(): Point {\n const d = 1 / this.length();\n return new Point({ x: this.x * d, y: this.y * d, z: this.z * d }, CoordsType.CARTESIAN);\n }\n\n length(): number {\n return Math.sqrt(this.lengthSquared());\n }\n\n lengthSquared(): number {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n\n subtract(v: Point): Point {\n return new Point(\n { x: this.x - v.x, y: this.y - v.y, z: this.z - v.z },\n CoordsType.CARTESIAN\n );\n }\n\n add(v: Point): Point {\n return new Point(\n { x: this.x + v.x, y: this.y + v.y, z: this.z + v.z },\n CoordsType.CARTESIAN\n );\n }\n\n get x(): number { return this._x; }\n get y(): number { return this._y; }\n get z(): number { return this._z; }\n get xyz(): [number, number, number] { return this._xyz; }\n\n get raDeg(): number { return this._raDeg; }\n get decDeg(): number { return this._decDeg; }\n get raDecDeg(): [number, number] { return this._raDecDeg; }\n\n toADQL(): string {\n return `${this._raDecDeg[0]},${this._raDecDeg[1]}`;\n }\n\n toString(): string {\n return `(raDeg, decDeg) => (${this._raDecDeg[0]},${this._raDecDeg[1]}) (x, y,z) => (${this._xyz[0]},${this._xyz[1]},${this._xyz[2]})`;\n }\n}\n\n","'use strict';\n/**\n * @author Fabrizio Giordano (Fab)\n */\n\nimport { Point } from '../model/Point.js';\nimport RayPickingUtils from './RayPickingUtils.js';\nimport { CoordsType } from './CoordsType.js';\nimport { mat4, ReadonlyMat4 } from 'gl-matrix';\n// import computePerspectiveMatrixSingleton from './ComputePerspectiveMatrix.js';\nimport Camera from '../Camera.js';\nimport { AbstractSkyEntity } from '../model/AbstractSkyEntity.js';\nimport { HealpixGrid } from '../model/grid/HealpixGrid.js';\n\nexport class FoVUtils {\n /**\n * Return the minimum FoV value between `_fovY_deg` and `_fovX_deg`.\n * (Kept here for parity; this class doesn’t maintain those fields.)\n */\n getMinFoV(this: { _fovY_deg: number; _fovX_deg: number }): number {\n return this._fovY_deg <= this._fovX_deg ? this._fovY_deg : this._fovX_deg;\n }\n\n /**\n * Compute the FoV polygon as a list of Points (clockwise).\n * Uses ray picking + frustum planes against a unit sphere.\n */\n static getFoVPolygon(\n // _pMatrix: ReadonlyMat4 | null,\n camera: Camera,\n canvas: HTMLCanvasElement,\n model: AbstractSkyEntity,\n healpixGrid: HealpixGrid,\n webgl: WebGL2RenderingContext,\n pMatrix: ReadonlyMat4\n ): Point[] {\n // const pMatrix = (computePerspectiveMatrixSingleton.pMatrix ??\n // _pMatrix) as ReadonlyMat4;\n // const pMatrix = computePerspectiveMatrixSingleton.pMatrix as ReadonlyMat4 \n const vMatrix = camera.getCameraMatrix();\n const mMatrix = model.getModelMatrix();\n const canvasWidth = canvas.clientWidth;\n const canvasHeight = canvas.clientHeight;\n\n let points: Point[] = [];\n\n // First check: does the sphere cover the whole screen?\n const intersectionWithModel = RayPickingUtils.getIntersectionPointWithSingleModel(0, 0, healpixGrid, webgl, camera, pMatrix);\n\n if (intersectionWithModel.length > 0) {\n // Fully covered → grab corners + midpoints (CASE C)\n const cornersPoints = FoVUtils.getScreenCornersIntersection(\n pMatrix,\n camera,\n canvas, healpixGrid, webgl\n );\n points = cornersPoints;\n } else {\n // Partial coverage: build frustum planes\n let M = mat4.create();\n M = mat4.multiply(M, vMatrix, mMatrix);\n M = mat4.multiply(M, pMatrix, M);\n\n const topPlane = [M[3] - M[1], M[7] - M[5], M[11] - M[9], M[15] - M[13]]; // m41-m21, ...\n const bottomPlane = [M[3] + M[1], M[7] + M[5], M[11] + M[9], M[15] + M[13]];\n const rightPlane = [M[3] - M[0], M[7] - M[4], M[11] - M[8], M[15] - M[12]];\n const leftPlane = [M[3] + M[0], M[7] + M[4], M[11] + M[8], M[15] + M[12]];\n\n const intersectionTopMiddle = RayPickingUtils.getIntersectionPointWithSingleModel(canvasWidth / 2, 0, healpixGrid, webgl, camera, pMatrix);\n const intersectionRightMiddle = RayPickingUtils.getIntersectionPointWithSingleModel(canvasWidth, canvasHeight / 2, healpixGrid, webgl, camera, pMatrix);\n\n // CASE A: zoomed out, hemisphere fully visible\n if (\n intersectionTopMiddle.length === 0 &&\n intersectionRightMiddle.length === 0\n ) {\n const topPoints = FoVUtils.getNearestSpherePoint(topPlane);\n const bottomPoints = FoVUtils.getNearestSpherePoint(bottomPlane);\n const leftPoints = FoVUtils.getNearestSpherePoint(leftPlane);\n const rightPoints = FoVUtils.getNearestSpherePoint(rightPlane);\n\n const middleLeftTop = FoVUtils.computeMiddlePoint(leftPoints[0], topPoints[0])[0];\n const middleTopRight = FoVUtils.computeMiddlePoint(topPoints[0], rightPoints[0])[0];\n const middleRightBottom = FoVUtils.computeMiddlePoint(rightPoints[0], bottomPoints[0])[0];\n const middleBottomLeft = FoVUtils.computeMiddlePoint(bottomPoints[0], leftPoints[0])[0];\n\n points.push(\n topPoints[0],\n middleTopRight,\n rightPoints[0],\n middleRightBottom,\n bottomPoints[0],\n middleBottomLeft,\n leftPoints[0],\n middleLeftTop\n );\n }\n // CASE E: no intersection on top/bottom planes\n else if (intersectionTopMiddle.length === 0) {\n const topPoints = FoVUtils.getNearestSpherePoint(topPlane);\n const bottomPoints = FoVUtils.getNearestSpherePoint(bottomPlane);\n const leftPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n leftPlane,\n bottomPlane,\n topPlane\n );\n const rightPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n rightPlane,\n topPlane,\n bottomPlane\n );\n\n const middleLeftTop = FoVUtils.computeMiddlePoint(leftPoints[1], topPoints[0])[0];\n const middleTopRight = FoVUtils.computeMiddlePoint(topPoints[0], rightPoints[0])[0];\n const middleRightBottom = FoVUtils.computeMiddlePoint(rightPoints[1], bottomPoints[0])[0];\n const middleBottomLeft = FoVUtils.computeMiddlePoint(bottomPoints[0], leftPoints[0])[0];\n\n points.push(\n topPoints[0],\n middleTopRight,\n rightPoints[0],\n rightPoints[1],\n middleRightBottom,\n bottomPoints[0],\n middleBottomLeft,\n leftPoints[0],\n leftPoints[1],\n middleLeftTop\n );\n }\n // CASE D: no intersection on right/left planes\n else if (intersectionRightMiddle.length === 0) {\n const topPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n topPlane,\n leftPlane,\n rightPlane\n );\n const bottomPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n bottomPlane,\n rightPlane,\n leftPlane\n );\n const leftPoints = FoVUtils.getNearestSpherePoint(leftPlane);\n const rightPoints = FoVUtils.getNearestSpherePoint(rightPlane);\n\n const middleLeftTop = FoVUtils.computeMiddlePoint(leftPoints[0], topPoints[0])[0];\n const middleTopRight = FoVUtils.computeMiddlePoint(topPoints[1], rightPoints[0])[0];\n const middleRightBottom = FoVUtils.computeMiddlePoint(rightPoints[0], bottomPoints[0])[0];\n const middleBottomLeft = FoVUtils.computeMiddlePoint(bottomPoints[1], leftPoints[0])[0];\n\n points.push(\n topPoints[0],\n topPoints[1],\n middleTopRight,\n rightPoints[0],\n middleRightBottom,\n bottomPoints[0],\n bottomPoints[1],\n middleBottomLeft,\n leftPoints[0],\n middleLeftTop\n );\n }\n // CASE B: all frustum planes intersect\n else {\n const topPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n topPlane,\n leftPlane,\n rightPlane\n );\n const bottomPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n bottomPlane,\n rightPlane,\n leftPlane\n );\n const leftPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n leftPlane,\n bottomPlane,\n topPlane\n );\n const rightPoints = FoVUtils.getFrustumIntersectionWithSphere(\n M,\n rightPlane,\n topPlane,\n bottomPlane\n );\n\n points.push(\n topPoints[0],\n topPoints[1],\n rightPoints[0],\n rightPoints[1],\n bottomPoints[0],\n bottomPoints[1],\n leftPoints[0],\n leftPoints[1]\n );\n }\n }\n\n return points;\n }\n\n /**\n * Ray pick against 8 key screen positions (corners + midpoints).\n * Returns Points in clockwise order starting from top-left.\n */\n static getScreenCornersIntersection(\n pMatrix: ReadonlyMat4, camera: Camera, canvas: HTMLCanvasElement, healpixGrid: HealpixGrid, webgl: WebGL2RenderingContext): Point[] {\n const w = canvas.clientWidth;\n const h = canvas.clientHeight;\n\n const topLeft = RayPickingUtils.getIntersectionPointWithSingleModel(0, 0, healpixGrid, webgl, camera, pMatrix);\n const middleTop = RayPickingUtils.getIntersectionPointWithSingleModel(w / 2, 0, healpixGrid, webgl, camera, pMatrix);\n const topRight = RayPickingUtils.getIntersectionPointWithSingleModel(w, 0, healpixGrid, webgl, camera, pMatrix);\n\n const middleRight = RayPickingUtils.getIntersectionPointWithSingleModel(w, h / 2, healpixGrid, webgl, camera, pMatrix);\n\n const bottomRight = RayPickingUtils.getIntersectionPointWithSingleModel(w, h, healpixGrid, webgl, camera, pMatrix);\n const middleBottom = RayPickingUtils.getIntersectionPointWithSingleModel(w / 2, h, healpixGrid, webgl, camera, pMatrix);\n const bottomLeft = RayPickingUtils.getIntersectionPointWithSingleModel(0, h, healpixGrid, webgl, camera, pMatrix);\n\n const middleLeft = RayPickingUtils.getIntersectionPointWithSingleModel(0, h / 2, healpixGrid, webgl, camera, pMatrix);\n\n const out: Point[] = [];\n const pushIf = (ip: number[]) => {\n if (ip.length > 0) {\n out.push(new Point({ x: ip[0], y: ip[1], z: ip[2] }, CoordsType.CARTESIAN));\n }\n };\n\n pushIf(topLeft);\n pushIf(middleTop);\n pushIf(topRight);\n pushIf(middleRight);\n pushIf(bottomRight);\n pushIf(middleBottom);\n pushIf(bottomLeft);\n pushIf(middleLeft);\n\n return out;\n }\n\n /** Returns the center point (in J2000) of the current view as a `Point`. */\n static getCenterJ2000(canvas: HTMLCanvasElement,\n healpixGrid: HealpixGrid,\n webgl: WebGL2RenderingContext,\n camera: Camera, pMatrix: ReadonlyMat4): Point {\n const w = canvas.clientWidth;\n const h = canvas.clientHeight;\n\n const center = RayPickingUtils.getIntersectionPointWithSingleModel(w / 2, h / 2, healpixGrid, webgl, camera, pMatrix);\n if (center.length <= 0) throw Error(`Central point is null`)\n return new Point(\n { x: center[0], y: center[1], z: center[2] },\n CoordsType.CARTESIAN\n );\n }\n\n /** Middle point on the unit sphere along the arc between two 3D points. */\n static computeMiddlePoint(p1: Point, p2: Point): Point[] {\n // midpoint of segment\n const xm = (p1.x + p2.x) / 2;\n const ym = (p1.y + p2.y) / 2;\n const zm = (p1.z + p2.z) / 2;\n\n // project the midpoint back to unit sphere\n const len = Math.hypot(xm, ym, zm) || 1;\n const x = xm / len;\n const y = ym / len;\n const z = zm / len;\n\n return [new Point({ x, y, z }, CoordsType.CARTESIAN)];\n }\n\n /**\n * Nearest intersection point between a frustum plane and the unit sphere,\n * using the plane normal.\n */\n static getNearestSpherePoint(plane: number[]): Point[] {\n const [A, B, C, D] = plane;\n\n const R = 1;\n const invLen = 1 / Math.sqrt(A * A + B * B + C * C);\n const t1 = R * invLen;\n const t2 = -R * invLen;\n\n const P1: [number, number, number] = [A * t1, B * t1, C * t1];\n const P2: [number, number, number] = [A * t2, B * t2, C * t2];\n\n const den = Math.sqrt(A * A + B * B + C * C) || 1;\n const dist1 = Math.abs(A * P1[0] + B * P1[1] + C * P1[2] + D) / den;\n const dist2 = Math.abs(A * P2[0] + B * P2[1] + C * P2[2] + D) / den;\n\n const P = dist1 <= dist2 ? P1 : P2;\n return [new Point({ x: P[0], y: P[1], z: P[2] }, CoordsType.CARTESIAN)];\n }\n\n /**\n * Intersections between a frustum plane and the unit sphere,\n * computed via two perpendicular planes.\n * Returns two points (first from `plane4Circle_1`, second from `plane4Circle_2`).\n */\n static getFrustumIntersectionWithSphere(\n _M: ReadonlyMat4,\n plane4Sphere: number[],\n plane4Circle_1: number[],\n plane4Circle_2: number[]\n ): Point[] {\n const [A0, B0, C0, D0] = plane4Sphere;\n\n // center of the circle (projection of sphere center onto plane)\n const denom0 = (A0 * A0 + B0 * B0 + C0 * C0) || 1;\n const x_c = -(A0 * D0) / denom0;\n const y_c = -(B0 * D0) / denom0;\n const z_c = -(C0 * D0) / denom0;\n\n const d = Math.abs(D0) / Math.sqrt(denom0); // distance from sphere center (0,0,0)\n const R = 1;\n\n const out: Point[] = [];\n\n if (R > d) {\n const r = Math.sqrt(R * R - d * d);\n\n const pick = (plane: number[]): [number, number, number] => {\n const [A, B, C, D] = plane;\n const invLen = 1 / Math.sqrt(A * A + B * B + C * C);\n const t1 = r * invLen;\n const t2 = -r * invLen;\n\n const P1: [number, number, number] = [x_c + A * t1, y_c + B * t1, z_c + C * t1];\n const P2: [number, number, number] = [x_c + A * t2, y_c + B * t2, z_c + C * t2];\n\n const den = Math.sqrt(A * A + B * B + C * C) || 1;\n const dist1 = Math.abs(A * P1[0] + B * P1[1] + C * P1[2] + D) / den;\n const dist2 = Math.abs(A * P2[0] + B * P2[1] + C * P2[2] + D) / den;\n\n return dist1 <= dist2 ? P1 : P2;\n };\n\n const P_intersection_1 = pick(plane4Circle_1);\n const P_intersection_2 = pick(plane4Circle_2);\n\n out.push(\n new Point({ x: P_intersection_1[0], y: P_intersection_1[1], z: P_intersection_1[2] }, CoordsType.CARTESIAN),\n new Point({ x: P_intersection_2[0], y: P_intersection_2[1], z: P_intersection_2[2] }, CoordsType.CARTESIAN)\n );\n } else if (R === d) {\n // Tangent: both intersections collapse to the circle center on the plane\n out.push(\n new Point({ x: x_c, y: y_c, z: z_c }, CoordsType.CARTESIAN),\n new Point({ x: x_c, y: y_c, z: z_c }, CoordsType.CARTESIAN)\n );\n } else {\n // No intersection; return empty to avoid pushing undefined values\n // console.log('Frustum plane not intersecting the sphere');\n }\n\n return out;\n }\n\n /** Build ADQL string from an array of Points (ra,dec pairs). */\n static getAstroFoVPolygon(points: Point[]): string {\n return points.map(p => p.toADQL()).join(',');\n }\n}","import * as glMatrix from \"./common.js\";\n\n/**\n * 4 Dimensional Vector\n * @module vec4\n */\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n return out;\n}\n\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {ReadonlyVec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\nexport function fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the source vector\n * @returns {vec4} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\nexport function set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n\n/**\n * Math.ceil the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to ceil\n * @returns {vec4} out\n */\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n\n/**\n * Math.floor the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to floor\n * @returns {vec4} out\n */\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n\n/**\n * symmetric round the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to round\n * @returns {vec4} out\n */\nexport function round(out, a) {\n out[0] = glMatrix.round(a[0]);\n out[1] = glMatrix.round(a[1]);\n out[2] = glMatrix.round(a[2]);\n out[3] = glMatrix.round(a[3]);\n return out;\n}\n\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.sqrt(x * x + y * y + z * z + w * w);\n}\n\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n\n/**\n * Calculates the length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.sqrt(x * x + y * y + z * z + w * w);\n}\n\n/**\n * Calculates the squared length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to negate\n * @returns {vec4} out\n */\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to invert\n * @returns {vec4} out\n */\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to normalize\n * @returns {vec4} out\n */\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n\n/**\n * Returns the cross-product of three vectors in a 4-dimensional space\n *\n * @param {ReadonlyVec4} out the receiving vector\n * @param {ReadonlyVec4} u the first vector\n * @param {ReadonlyVec4} v the second vector\n * @param {ReadonlyVec4} w the third vector\n * @returns {vec4} result\n */\nexport function cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec4} out\n */\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns {vec4} out\n */\nexport function random(out, scale) {\n scale = scale === undefined ? 1.0 : scale;\n\n // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n var v1, v2, v3, v4;\n var s1, s2;\n var rand;\n rand = glMatrix.RANDOM();\n v1 = rand * 2 - 1;\n v2 = (4 * glMatrix.RANDOM() - 2) * Math.sqrt(rand * -rand + rand);\n s1 = v1 * v1 + v2 * v2;\n rand = glMatrix.RANDOM();\n v3 = rand * 2 - 1;\n v4 = (4 * glMatrix.RANDOM() - 2) * Math.sqrt(rand * -rand + rand);\n s2 = v3 * v3 + v4 * v4;\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec4} out\n */\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyQuat} q normalized quaternion to transform with\n * @returns {vec4} out\n */\nexport function transformQuat(out, a, q) {\n // Fast Vector Rotation using Quaternions by Robert Eisele\n // https://raw.org/proof/vector-rotation-using-quaternions/\n\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var vx = a[0],\n vy = a[1],\n vz = a[2];\n\n // t = q x v\n var tx = qy * vz - qz * vy;\n var ty = qz * vx - qx * vz;\n var tz = qx * vy - qy * vx;\n\n // t = 2t\n tx = tx + tx;\n ty = ty + ty;\n tz = tz + tz;\n\n // v + w t + q x t\n out[0] = vx + qw * tx + qy * tz - qz * ty;\n out[1] = vy + qw * ty + qz * tx - qx * tz;\n out[2] = vz + qw * tz + qx * ty - qy * tx;\n out[3] = a[3];\n return out;\n}\n\n/**\n * Set the components of a vec4 to zero\n *\n * @param {vec4} out the receiving vector\n * @returns {vec4} out\n */\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec4} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n return \"vec4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\nexport var sub = subtract;\n\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\nexport var div = divide;\n\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\nexport var dist = distance;\n\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\nexport var sqrDist = squaredDistance;\n\n/**\n * Alias for {@link vec4.length}\n * @function\n */\nexport var len = length;\n\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\nexport var sqrLen = squaredLength;\n\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n if (!stride) {\n stride = 4;\n }\n if (!offset) {\n offset = 0;\n }\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n return a;\n };\n}();","// GridShaderManager.ts\n'use strict'\n\nclass GridShaderManager {\n static healpixGridVS(): string {\n return `#version 300 es\n in vec4 aCatPosition;\n uniform mat4 uMVMatrix;\n uniform mat4 uPMatrix;\n\n void main() {\n gl_Position = uPMatrix * uMVMatrix * aCatPosition;\n gl_PointSize = 7.0;\n }`\n }\n\n static healpixGridFS(): string {\n return `#version 300 es\n precision mediump float;\n\n uniform vec4 u_fragcolor;\n out vec4 fragColor;\n\n void main() {\n // fragColor = vec4(1.0, 0.0, 0.0, 1.0);\n fragColor = u_fragcolor;\n }`\n }\n}\n\nexport default GridShaderManager","/**\n * @author Fabrizio Giordano (Fab)\n * @param in_radius - number\n * @param in_gl - GL context\n * @param in_position - array of double e.g. [0.0, 0.0, 0.0]\n */\n\ntype DivSet = {\n div: HTMLDivElement;\n textNode: Text;\n style: CSSStyleDeclaration;\n};\n\nclass GridTextHelper {\n private _divEqContainerElement: HTMLElement | null;\n private _divHPXContainerElement: HTMLElement | null;\n private _divSets: DivSet[];\n private _divSetNdx: number;\n\n constructor() {\n this._divEqContainerElement = document.querySelector<HTMLElement>('#gridcoords');\n this._divHPXContainerElement = document.querySelector<HTMLElement>('#gridhpx');\n this._divSetNdx = 0;\n this._divSets = [];\n }\n\n initHtml(): void {\n // Kept for API parity; nothing required here with current logic.\n }\n\n resetDivSets(): void {\n // Hide remaining divs and reset index\n for (; this._divSetNdx < this._divSets.length; ++this._divSetNdx) {\n this._divSets[this._divSetNdx].style.display = 'none';\n }\n this._divSetNdx = 0;\n }\n\n /**\n * Add / reuse a floating label for HPX coordinates\n */\n addHPXDivSet(msg: string, x: number, y: number): void {\n let divSet = this._divSets[this._divSetNdx++];\n\n // Create on demand\n if (!divSet) {\n const div = document.createElement('div');\n const textNode = document.createTextNode('');\n div.className = 'floating-div-ra'; // style like RA tags\n\n div.appendChild(textNode);\n\n if (!this._divHPXContainerElement) {\n this._divHPXContainerElement = document.querySelector<HTMLElement>('#gridhpx');\n }\n if (!this._divHPXContainerElement) {\n // If container is still missing, abort gracefully\n return;\n }\n this._divHPXContainerElement.appendChild(div);\n\n divSet = { div, textNode, style: div.style };\n this._divSets.push(divSet);\n }\n\n // Show & position\n divSet.style.display = 'block';\n divSet.style.left = `${Math.floor(x + 25)}px`;\n divSet.style.top = `${Math.floor(y)}px`;\n divSet.textNode.nodeValue = msg;\n }\n\n /**\n * Add / reuse a floating label for Equatorial coords\n * @param type 'ra' or 'dec'\n */\n addEqDivSet(msg: string, x: number, y: number, type: 'ra' | 'dec'): void {\n let divSet = this._divSets[this._divSetNdx++];\n\n if (!divSet) {\n const div = document.createElement('div');\n const textNode = document.createTextNode('');\n div.className = type === 'ra' ? 'floating-div-ra' : 'floating-div-dec';\n div.appendChild(textNode);\n\n if (!this._divEqContainerElement) {\n this._divEqContainerElement = document.querySelector<HTMLElement>('#gridcoords');\n }\n if (!this._divEqContainerElement) {\n // If container is still missing, abort gracefully\n return;\n }\n this._divEqContainerElement.appendChild(div);\n\n divSet = { div, textNode, style: div.style };\n this._divSets.push(divSet);\n }\n\n divSet.style.display = 'block';\n\n if (type === 'ra') {\n divSet.style.left = `${Math.floor(x + 25)}px`;\n divSet.style.top = `${Math.floor(y)}px`;\n } else {\n divSet.style.left = `${Math.floor(x)}px`;\n divSet.style.top = `${Math.floor(y + 25)}px`;\n }\n\n divSet.textNode.nodeValue = msg;\n }\n}\n\n// export const gridTextHelper = new GridTextHelper();\nexport default GridTextHelper;","'use strict'\n/**\n * FoV singleton (TypeScript)\n * - Uses computePerspectiveMatrixSingleton.pMatrix\n * - Guards acos domain (numeric safety)\n * - Uses vec3.transformMat4 instead of custom mat4*vec3\n * - Keeps original “insideSphere ? 360 - angle : angle” behavior\n */\n\nimport { vec3, mat4, ReadonlyMat4 } from 'gl-matrix'\nimport RayPickingUtils from '../utils/RayPickingUtils.js'\nimport { radToDeg } from '../utils/Utils.js'\n// import computePerspectiveMatrixSingleton from '../utils/ComputePerspectiveMatrix.js'\nimport { HealpixGrid } from './grid/HealpixGrid.js'\nimport Camera from '../Camera.js'\n// import healpixGridSingleton from './grid/HealpixGridSingleton.js'\n\n\n\ntype FoVComputed = {\n angleDeg: number;\n distance: number\n}\n\n\nexport class FoV {\n private static readonly MIN_FOV_DEG = 1e-6\n\n private fovXDeg = 180\n private fovYDeg = 180\n private ratio = +0\n private _minFoV = 180\n private _webgl: WebGL2RenderingContext\n\n constructor(webgl: WebGL2RenderingContext) {\n this._webgl = webgl\n }\n\n /** Recomputes FoV for current camera + projection */\n public getFoV(insideSphere: boolean, healpixGridSingleton: HealpixGrid, \n camera: Camera, pMatrix: ReadonlyMat4): FoV {\n // const gl = webgl\n const gl = this._webgl\n\n if (!gl || !gl.canvas) {\n // Handle the error or assign default values\n this.fovXDeg = 180\n this.fovYDeg = 180\n this._minFoV = this.minFoV\n return this\n }\n\n // horizontal FoV: ray through (centerY)\n // const xFoVComputed = this.computeAngle(0, gl.canvas.height / 2, insideSphere, healpixGridSingleton, camera)\n const canvas = gl.canvas as HTMLCanvasElement;\n const rect = canvas.getBoundingClientRect();\n const canvasWidth = rect.width;\n const canvasHeight = rect.height;\n\n // const xFoVComputed = this.computeAngle(0, gl.canvas.height / 2, insideSphere, healpixGridSingleton, camera, pMatrix)\n const xFoVComputed = this.computeAngle(0, canvasHeight / 2, insideSphere, healpixGridSingleton, camera, pMatrix)\n this.fovXDeg = xFoVComputed.angleDeg\n\n // vertical FoV: ray through (centerX)\n // const yFoVComputed = this.computeAngle(gl.canvas.width / 2, 0, insideSphere, healpixGridSingleton, camera, pMatrix)\n const yFoVComputed = this.computeAngle(canvasWidth / 2, 0, insideSphere, healpixGridSingleton, camera, pMatrix)\n this.fovYDeg = yFoVComputed.angleDeg\n\n this._minFoV = this.minFoV\n this.ratio = this.computeRatio(camera)\n return this\n }\n\n private computeRatio(camera: Camera): number {\n // const camera = global.camera\n if (!camera) throw Error(\"Camera not defined\")\n const pos = camera.getCameraPosition()\n const distanceFromCenter = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2])\n // const distanceFromSphere = distanceFromCenter - healpixGridSingleton.RADIUS\n const ratio = distanceFromCenter / this.fovYDeg\n return ratio\n }\n\n\n\n public changeMinFov(deg: number) {\n console.log(\"inside changeMinFov\")\n if (this.fovYDeg <= this.fovXDeg) {\n this.fovYDeg = deg\n } else {\n this.fovXDeg = deg\n }\n console.log(\"changeMinFov: ping\")\n this.minFoV\n // this.fovYDeg <= this.fovXDeg ? this.fovYDeg = deg : this.fovXDeg = deg\n }\n\n\n get minFoV(): number {\n const minFov = this.fovYDeg <= this.fovXDeg ? this.fovYDeg : this.fovXDeg\n this._minFoV = Math.max(minFov, FoV.MIN_FOV_DEG)\n return this._minFoV\n }\n\n get xFoV(): number {\n return this.fovXDeg\n }\n\n get yFoV(): number {\n return this.fovYDeg\n }\n\n public computeDistanceFromAngle(angleDeg: number): number {\n const desiredFoV = angleDeg\n const distance = desiredFoV * this.ratio\n // return Math.abs(distance)\n return distance\n }\n\n /** FoV half-screen chord angle doubled (deg) along a given canvas axis */\n private computeAngle(\n canvasX: number, canvasY: number,\n insideSphere: boolean,\n healpixGridSingleton: HealpixGrid,\n camera: Camera,\n pMatrix: ReadonlyMat4): FoVComputed {\n\n // const pMatrix = computePerspectiveMatrixSingleton.pMatrix\n if (!pMatrix) {\n // Handle the error or assign a default value\n console.warn('FoV: projection matrix is null')\n return { angleDeg: 180, distance: 1 }\n }\n const vMatrix = camera.getCameraMatrix()\n if (!camera) {\n // Handle the error or assign a default value\n console.warn('FoV: camera is null')\n return { angleDeg: 180, distance: 1 }\n }\n const rayWorld = RayPickingUtils.getRayFromMouse(canvasX, canvasY, pMatrix, this._webgl, vMatrix)\n\n const intersectionDistance = RayPickingUtils.raySphere(\n camera.getCameraPosition(),\n rayWorld,\n healpixGridSingleton\n )\n\n let angleDeg: number\n if (intersectionDistance > 0) {\n // world-space intersection point on the sphere\n const hit = vec3.create()\n vec3.scale(hit, rayWorld, intersectionDistance)\n vec3.add(hit, camera.getCameraPosition(), hit)\n\n const center = healpixGridSingleton.center\n\n // vectors from sphere center\n const vHit = vec3.create()\n vec3.subtract(vHit, hit, center)\n\n // reference vector: rotate world +Z into current camera orientation, then from center\n const refWorldZ = vec3.fromValues(center[0], center[1], center[2] + healpixGridSingleton.radius)\n\n const vInv = mat4.create()\n mat4.invert(vInv, camera.getCameraMatrix())\n const refCamZ = vec3.create()\n vec3.transformMat4(refCamZ, refWorldZ, vInv)\n\n const vRef = vec3.create()\n vec3.subtract(vRef, refCamZ, center)\n\n // angle between vHit and vRef, doubled\n const dot = vec3.dot(vHit, vRef)\n const n1 = vec3.length(vHit)\n const n2 = vec3.length(vRef)\n // numeric safety for acos\n const c = Math.min(1, Math.max(-1, dot / (n1 * n2)))\n const angleRad = Math.acos(c)\n angleDeg = 2 * radToDeg(angleRad)\n } else {\n angleDeg = 180\n }\n\n const finalAngle = insideSphere ? 360 - angleDeg : angleDeg\n // return insideSphere ? 360 - angleDeg : angleDeg\n\n return { angleDeg: finalAngle, distance: intersectionDistance }\n }\n\n /**\n * Computes the camera position (x,y,z) along the current view direction that would\n * yield the requested minFoV (in degrees), assuming the camera is OUTSIDE the sphere.\n * This method does NOT mutate the camera; it only returns the suggested position.\n *\n * Geometry: for a sphere of radius R observed from distance d (from center),\n * the apparent angular diameter is 2*arcsin(R/d). Our minFoV is that angular diameter\n * along the tighter axis; we solve for d and place the camera on the current\n * center→camera direction with that distance.\n *\n * @param targetMinFoVDeg Desired min FoV in degrees, 0 < targetMinFoVDeg < 180\n * @returns Tuple [x, y, z] for the recommended camera position in world coordinates.\n */\n public computeCameraPositionForMinFoV(targetMinFoVDeg: number): [number, number, number] {\n // const camera = global.camera\n // const center = healpixGridSingleton.center\n // const R = healpixGridSingleton.radius\n\n // if (!camera) {\n // console.warn('FoV.computeCameraPositionForMinFoV: camera not available; returning a sensible default.')\n // return [center[0], center[1], center[2] + 2 * R]\n // }\n\n // // Clamp and validate input\n // const eps = 1e-6\n // const clamped = Math.max(eps, Math.min(180 - eps, targetMinFoVDeg))\n // const halfRad = (clamped * Math.PI / 180) * 0.5\n\n // // Distance from center needed to achieve the angular diameter\n // // minFoV = 2 * arcsin(R / d) => d = R / sin(minFoV/2)\n // const sinHalf = Math.sin(halfRad)\n // if (sinHalf <= 0) {\n // console.warn('FoV.computeCameraPositionForMinFoV: invalid targetMinFoVDeg, using fallback.')\n // return [center[0], center[1], center[2] + 2 * R]\n // }\n // let d = R / sinHalf\n\n // // Ensure we remain strictly outside the sphere\n // d = Math.max(d, R + 1e-4)\n\n // // Use the current center→camera direction to keep orientation\n // const camPos = camera.getCameraPosition()\n // let dirX = camPos[0] - center[0]\n // let dirY = camPos[1] - center[1]\n // let dirZ = camPos[2] - center[2]\n // const len = Math.hypot(dirX, dirY, dirZ)\n // if (len < eps) {\n // // If somehow at the center, use +Z as a default direction\n // dirX = 0; dirY = 0; dirZ = 1;\n // } else {\n // dirX /= len\n // dirY /= len\n // dirZ /= len\n // }\n\n // const newX = center[0] + dirX * d\n // const newY = center[1] + dirY * d\n // const newZ = center[2] + dirZ * d\n\n // return [newX, newY, newZ]\n return [0, 0, 0];\n }\n\n\n\n /**\n * Computes the camera world-space position required to achieve a target FoV (deg),\n * keeping the same viewing direction. Acts as the inverse of computeAngle().\n *\n * @param targetFoVDeg desired full FoV angle in degrees (0 < FoV < 180)\n * @param canvasWidth canvas width in pixels\n * @param canvasHeight canvas height in pixels\n * @returns [x, y, z] coordinates for the new camera position\n */\n public computeCameraPositionForFoV(\n targetFoVDeg: number\n ): [number, number, number] {\n // const camera = global.camera;\n // const center = healpixGridSingleton.center;\n // const R = healpixGridSingleton.radius;\n\n // if (!camera) {\n // console.warn(\"FoV.computeCameraPositionForFoV: camera missing.\");\n // return [center[0], center[1], center[2] + 2 * R];\n // }\n\n // const eps = 1e-6;\n // const clamped = Math.max(eps, Math.min(180 - eps, targetFoVDeg));\n // const halfRad = (clamped * Math.PI) / 360.0; // half-angle in radians\n\n // // Distance from center that yields this FoV\n // const sinHalf = Math.sin(halfRad);\n // if (sinHalf <= 0) {\n // console.warn(\"FoV.computeCameraPositionForFoV: invalid FoV.\");\n // return [center[0], center[1], center[2] + 2 * R];\n // }\n // let d = R / sinHalf;\n\n // // Slightly outside sphere to avoid clipping\n // d = Math.max(d, R + 1e-4);\n\n // // Get current viewing direction\n // const camPos = camera.getCameraPosition();\n // let dirX = camPos[0] - center[0];\n // let dirY = camPos[1] - center[1];\n // let dirZ = camPos[2] - center[2];\n // const len = Math.hypot(dirX, dirY, dirZ);\n // if (len < eps) {\n // dirX = 0; dirY = 0; dirZ = 1;\n // } else {\n // dirX /= len;\n // dirY /= len;\n // dirZ /= len;\n // }\n\n // const newX = center[0] + dirX * d;\n // const newY = center[1] + dirY * d;\n // const newZ = center[2] + dirZ * d;\n\n // return [newX, newY, newZ];\n return [0, 0, 0];\n }\n\n /**\n * Return a camera position such that the sphere's apparent angular diameter\n * (the silhouette, not the surface coverage) equals targetAngularDiameterDeg.\n * Keeps current view direction; does not mutate the camera.\n *\n * @param targetAngularDiameterDeg desired apparent diameter in degrees (0<α<180)\n * @returns [x,y,z] world position\n */\n public computeCameraPositionForAngularDiameter(\n targetAngularDiameterDeg: number\n ): [number, number, number] {\n // const camera = global.camera;\n // const center = healpixGridSingleton.center;\n // const R = healpixGridSingleton.radius;\n\n // if (!camera) {\n // console.warn('computeCameraPositionForAngularDiameter: camera missing.');\n // return [center[0], center[1], center[2] + 2 * R];\n // }\n\n // const eps = 1e-6;\n // const α = Math.max(eps, Math.min(180 - eps, targetAngularDiameterDeg));\n // const half = (α * Math.PI) / 360.0;\n // const sinHalf = Math.sin(half);\n\n // // d = R / sin(α/2)\n // let d = R / sinHalf;\n // d = Math.max(d, R + 1e-4); // stay outside\n\n // // project along current center→camera direction\n // const [cx, cy, cz] = center as [number, number, number];\n // const [px, py, pz] = camera.getCameraPosition();\n // let dx = px - cx, dy = py - cy, dz = pz - cz;\n // const L = Math.hypot(dx, dy, dz);\n // if (L < eps) { dx = 0; dy = 0; dz = 1; } else { dx /= L; dy /= L; dz /= L; }\n\n // return [cx + dx * d, cy + dy * d, cz + dz * d];\n return [0, 0, 0];\n }\n}\n","class Point2D {\n private _x: number;\n private _y: number;\n\n constructor(x: number, y: number) {\n this._x = x;\n this._y = y;\n }\n\n get x(): number {\n return this._x;\n }\n\n get y(): number {\n return this._y;\n }\n}\n\nexport default Point2D;","import {Point} from \"../model/Point.js\";\nimport Point2D from \"../model/Point2D.js\";\nimport {CoordsType} from \"./CoordsType.js\";\n\ntype ProjectionFlag = 0 | 1 | 2;\n\nexport interface SelectionObj {\n poly4selection: Point2D[][];\n flag: ProjectionFlag;\n maxx: number;\n maxy: number;\n minx: number;\n miny: number;\n}\n\nclass GeomUtils {\n // Orthodromic (great-circle) distance in radians\n static orthodromicDistance(p1: Point, p2: Point): number {\n return Math.acos(\n Math.sin(p1.decDeg * Math.PI / 180) * Math.sin(p2.decDeg * Math.PI / 180) +\n Math.cos(p1.decDeg * Math.PI / 180) * Math.cos(p2.decDeg * Math.PI / 180) *\n Math.cos((p2.raDeg - p1.raDeg) * Math.PI / 180)\n );\n }\n\n /**\n * Decide the 2D projection strategy and pre-project polygons for point-in-polygon tests.\n * Returns the projected polygons + bbox + a flag describing the projection used:\n * 0 → all points in same hemisphere with |Dec| > 10 → stereographic-like projection using x,y from 3D\n * 1 → all points in equatorial belt (|Dec| < 10) → use RA/Dec directly\n * 2 → equatorial belt and polygon crosses RA=0 → shift RA>180 by -360\n */\n static computeSelectionObject(polygons: Point[][]): SelectionObj {\n let poly4selection: Point2D[][] = [];\n let flag: ProjectionFlag = 0;\n\n let maxx: number | undefined;\n let maxy: number | undefined;\n let minx: number | undefined;\n let miny: number | undefined;\n\n const DEC_THRESHOLD = 10;\n // 1 → northern hemisphere (Dec > +10), -1 → southern (Dec < -10), 0 → equatorial belt\n let hemisphere = 0;\n\n if (polygons[0][0].decDeg >= DEC_THRESHOLD) {\n hemisphere = 1;\n } else if (polygons[0][0].decDeg <= -DEC_THRESHOLD) {\n hemisphere = -1;\n } else {\n flag = 1;\n }\n\n // Case flag = 0 → stereographic-like projection using x,y,z from 3D point\n if (flag === 0) {\n const first = GeomUtils.projectIn2D(polygons[0][0]);\n maxx = minx = first.x;\n maxy = miny = first.y;\n\n for (const currpoly of polygons) {\n const selpoly: Point2D[] = [];\n for (const point of currpoly) {\n // If a point violates the hemisphere constraint, fall back to belt logic\n if (\n (point.decDeg > hemisphere * DEC_THRESHOLD && hemisphere === -1) ||\n (point.decDeg < hemisphere * DEC_THRESHOLD && hemisphere === 1)\n ) {\n flag = 1;\n poly4selection = [];\n break;\n }\n const p = GeomUtils.projectIn2D(point);\n selpoly.push(p);\n\n if (p.x > (maxx as number)) maxx = p.x;\n if (p.y > (maxy as number)) maxy = p.y;\n if (p.x < (minx as number)) minx = p.x;\n if (p.y < (miny as number)) miny = p.y;\n }\n poly4selection.push(selpoly);\n }\n }\n\n if (flag === 0) {\n return {\n poly4selection,\n flag,\n maxx: maxx as number,\n maxy: maxy as number,\n minx: minx as number,\n miny: miny as number,\n };\n }\n\n // Case flag = 1 or 2 → work directly in (RA,Dec)\n const RA_THRESHOLD = 180;\n let belowThreshold = polygons[0][0].raDeg < RA_THRESHOLD;\n\n maxx = minx = polygons[0][0].raDeg;\n maxy = miny = polygons[0][0].decDeg;\n\n for (const currpoly of polygons) {\n const selpoly: Point2D[] = [];\n for (const point of currpoly) {\n const p = new Point2D(point.raDeg, point.decDeg);\n selpoly.push(p);\n\n if (point.raDeg > maxx) maxx = point.raDeg;\n if (point.decDeg > maxy) maxy = point.decDeg;\n if (point.raDeg < minx) minx = point.raDeg;\n if (point.decDeg < miny) miny = point.decDeg;\n\n // Detect crossing of RA=0 meridian\n if (\n (point.raDeg >= RA_THRESHOLD && belowThreshold) ||\n (point.raDeg <= RA_THRESHOLD && !belowThreshold)\n ) {\n flag = 2;\n poly4selection = [];\n break;\n }\n }\n poly4selection.push(selpoly);\n }\n\n if (flag === 1) {\n return {\n poly4selection,\n flag,\n maxx,\n maxy,\n minx,\n miny,\n };\n }\n\n // Case flag = 2 → shift RA>180 by -360 to unwrap around RA=0\n let startRA = polygons[0][0].raDeg;\n maxx = startRA >= RA_THRESHOLD ? startRA - 360 : startRA;\n maxy = polygons[0][0].decDeg;\n minx = maxx;\n miny = maxy;\n\n for (const currpoly of polygons) {\n const selpoly: Point2D[] = [];\n for (const point of currpoly) {\n const curra = point.raDeg >= RA_THRESHOLD ? point.raDeg - 360 : point.raDeg;\n\n if (curra > maxx) maxx = curra;\n if (point.decDeg > maxy) maxy = point.decDeg;\n if (curra < minx) minx = curra;\n if (point.decDeg < miny) miny = point.decDeg;\n\n selpoly.push(new Point2D(curra, point.decDeg));\n }\n poly4selection.push(selpoly);\n }\n\n return {\n poly4selection,\n flag,\n maxx,\n maxy,\n minx,\n miny,\n };\n }\n\n /** Stereographic projection from 3D point on unit sphere onto plane */\n static stereographic(point: Point): { x: number; y: number } {\n const x = Number(point.xyz[0]);\n const y = Number(point.xyz[1]);\n const z = Number(point.xyz[2]);\n return {\n x: (2 * x) / (1 - z),\n y: (2 * y) / (1 - z),\n };\n }\n\n static projectIn2D(point: Point): Point2D {\n const p = GeomUtils.stereographic(point);\n return new Point2D(p.x, p.y);\n }\n\n /**\n * Robust point-in-polygon (ray casting) using the precomputed selection object.\n * Works with any of the three flags (0,1,2).\n */\n static checkPointInsidePolygon5(selectionObj: SelectionObj, point: Point): boolean {\n let p0: Point2D;\n\n if (selectionObj.flag === 0) {\n p0 = GeomUtils.projectIn2D(point);\n } else if (selectionObj.flag === 1) {\n p0 = new Point2D(point.raDeg, point.decDeg);\n } else {\n const RA_THRESHOLD = 180;\n const raShifted = point.raDeg >= RA_THRESHOLD ? point.raDeg - 360 : point.raDeg;\n p0 = new Point2D(raShifted, point.decDeg);\n }\n\n const p1 = new Point2D(p0.x, p0.y + 2 * Math.abs(selectionObj.maxy - selectionObj.miny));\n\n // quick reject by bbox\n if (\n p0.x > selectionObj.maxx ||\n p0.x < selectionObj.minx ||\n p0.y > selectionObj.maxy ||\n p0.y < selectionObj.miny\n ) {\n return false;\n }\n\n // Ray casting against each sub-polygon\n for (const currpoly of selectionObj.poly4selection) {\n let intersections = 0;\n\n for (let i = 0; i < currpoly.length - 1; i++) {\n const p2 = currpoly[i];\n const p3 = currpoly[i + 1];\n\n const denominator = (p3.y - p2.y) * (p1.x - p0.x) - (p3.x - p2.x) * (p1.y - p0.y);\n const numerator01 = (p3.x - p2.x) * (p0.y - p2.y) - (p3.y - p2.y) * (p0.x - p2.x);\n const numerator23 = (p1.x - p0.x) * (p0.y - p2.y) - (p1.y - p0.y) * (p0.x - p2.x);\n\n if (denominator !== 0) {\n const lamda01 = numerator01 / denominator;\n const lambda23 = numerator23 / denominator;\n if (lamda01 >= 0 && lamda01 <= 1 && lambda23 >= 0 && lambda23 <= 1) {\n intersections++;\n }\n }\n }\n\n // close the polygon: last with first\n {\n const p2 = currpoly[currpoly.length - 1];\n const p3 = currpoly[0];\n\n const denominator = (p3.y - p2.y) * (p1.x - p0.x) - (p3.x - p2.x) * (p1.y - p0.y);\n const numerator01 = (p3.x - p2.x) * (p0.y - p2.y) - (p3.y - p2.y) * (p0.x - p2.x);\n const numerator23 = (p1.x - p0.x) * (p0.y - p2.y) - (p1.y - p0.y) * (p0.x - p2.x);\n\n if (denominator !== 0) {\n const lamda01 = numerator01 / denominator;\n const lambda23 = numerator23 / denominator;\n if (lamda01 >= 0 && lamda01 <= 1 && lambda23 >= 0 && lambda23 <= 1) {\n intersections++;\n }\n }\n }\n\n if (intersections % 2 === 1) {\n return true; // inside this subpolygon\n }\n }\n\n return false;\n }\n\n // Legacy version kept for reference; now typed and using getters\n static checkPointInsidePolygon4(polygons: Point[][], point: Point): boolean {\n const p0 = GeomUtils.projectIn2D(point);\n\n let maxdist = point.raDeg + 15;\n if (maxdist > 360) maxdist = point.raDeg - 15;\n\n const p1point = new Point({ raDeg: maxdist, decDeg: point.decDeg }, CoordsType.ASTRO);\n const p1 = GeomUtils.projectIn2D(p1point);\n\n for (const currpoly of polygons) {\n let intersections = 0;\n\n for (let i = 0; i < currpoly.length - 1; i++) {\n const p2 = GeomUtils.projectIn2D(currpoly[i]);\n const p3 = GeomUtils.projectIn2D(currpoly[i + 1]);\n\n const denominator = (p3.y - p2.y) * (p1.x - p0.x) - (p3.x - p2.x) * (p1.y - p0.y);\n const numerator01 = (p3.x - p2.x) * (p0.y - p2.y) - (p3.y - p2.y) * (p0.x - p2.x);\n const numerator23 = (p1.x - p0.x) * (p0.y - p2.y) - (p1.y - p0.y) * (p0.x - p2.x);\n\n if (denominator !== 0) {\n const lamda01 = numerator01 / denominator;\n const lambda23 = numerator23 / denominator;\n if (lamda01 >= 0 && lamda01 <= 1 && lambda23 >= 0 && lambda23 <= 1) {\n intersections++;\n }\n }\n }\n\n {\n const p2 = GeomUtils.projectIn2D(currpoly[currpoly.length - 1]);\n const p3 = GeomUtils.projectIn2D(currpoly[0]);\n\n const denominator = (p3.y - p2.y) * (p1.x - p0.x) - (p3.x - p2.x) * (p1.y - p0.y);\n const numerator01 = (p3.x - p2.x) * (p0.y - p2.y) - (p3.y - p2.y) * (p0.x - p2.x);\n const numerator23 = (p1.x - p0.x) * (p0.y - p2.y) - (p1.y - p0.y) * (p0.x - p2.x);\n\n if (denominator !== 0) {\n const lamda01 = numerator01 / denominator;\n const lambda23 = numerator23 / denominator;\n if (lamda01 >= 0 && lamda01 <= 1 && lambda23 >= 0 && lambda23 <= 1) {\n intersections++;\n }\n }\n }\n\n if (intersections % 2 === 1) return true;\n }\n\n return false;\n }\n}\n\nexport default GeomUtils;","// Tile.ts\nimport global from '../../Global.js'\nimport { TileBuffer } from './TileBuffer.js'\nimport { fovHelper } from './FoVHelper.js'\nimport {HiPS} from './HiPS.js'\nimport { VisibleTilesManager } from './VisibleTilesManager.js'\nimport { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js'\n\n// ---- Local helper types (adapt or import real ones if you have them) ----\n\ninterface ShaderLocations {\n pMatrix: WebGLUniformLocation | null;\n mMatrix: WebGLUniformLocation | null;\n vMatrix: WebGLUniformLocation | null;\n sampler: WebGLUniformLocation | null;\n textureAlpha: WebGLUniformLocation | null;\n clorMapIdx: WebGLUniformLocation | null;\n vertexPositionAttribute: number;\n textureCoordAttribute: number;\n}\n\ntype Mat4 = Float32Array;\n\n// ------------------------------------------------------------------------\n\nexport default class Tile {\n private _hips: HiPS\n private _tileno: number\n private _baseurl: string\n private _order: number\n\n private _format: string\n private _maxorder: number\n private _isGalacticHips: boolean\n\n private _ready = false\n private _abort = false\n private _image!: HTMLImageElement\n private _textureLoaded = false\n private _texture?: WebGLTexture\n private _texurl = ''\n\n private _hipsShaderIndex = 0\n\n private _cacheTime0?: number\n private _inView = true\n private _amIStillInFoV_requsetID: number\n\n // geometry buffers\n private vertexPosition: Float32Array[] = []\n private vertexPositionBuffer: WebGLBuffer[] = []\n private vertexIndices: Uint16Array | Uint32Array = new Uint16Array()\n private vertexIndexBuffer?: WebGLBuffer\n\n private _tileBuffer: TileBuffer\n\n public opacity = 1.0\n private _webgl: WebGL2RenderingContext\n private _visibleTileManager: VisibleTilesManager\n // private _hipsShaderProgram\n\n constructor(tileno: number, order: number,\n hips: HiPS, tileBuffer: TileBuffer,\n webgl: WebGL2RenderingContext,\n visibleTileManager: VisibleTilesManager,\n // hipsShaderProgram: HiPSShaderProgram\n) {\n\n // this._hipsShaderProgram = hipsShaderProgram\n this._visibleTileManager = visibleTileManager\n this._webgl = webgl\n this._tileBuffer = tileBuffer\n this._hips = hips\n this._tileno = tileno\n\n this._format = hips.format\n this._baseurl = hips.baseURL\n this._maxorder = hips.maxOrder\n this._isGalacticHips = hips.isGalacticHips\n\n this._order = order\n\n this._amIStillInFoV_requsetID = window.setInterval(() => {\n this.amIStillInFoV()\n }, 5000)\n\n this.initImage()\n }\n\n destroyIntervals(): void {\n window.clearInterval(this._amIStillInFoV_requsetID)\n }\n\n getReadyState(): boolean {\n return this._ready\n }\n\n get cacheTime0(): number | undefined {\n return this._cacheTime0\n }\n\n resetCacheTime0(): void {\n this._cacheTime0 = undefined\n }\n\n setCacheTime0(): void {\n this._cacheTime0 = new Date().getTime()\n }\n\n private initImage(): void {\n if (this._order > this._maxorder) {\n this._ready = false\n this._abort = true\n this.destroyIntervals()\n console.warn(\n `[Tile] Skipping tile request above max order: requested order ${this._order}, max order ${this._maxorder}, url ${this._baseurl}`\n )\n return\n }\n\n this._image = new Image()\n\n const dirnumber = Math.floor(this._tileno / 10000) * 10000\n this._texurl = `${this._baseurl}/Norder${this._order}/Dir${dirnumber}/Npix${this._tileno}.${this._format}`\n\n this._image.onload = () => this.imageLoaded()\n this._image.onerror = () => {\n // console.error('File not found?', this._texurl)\n this._ready = false\n this._abort = true\n this.destroyIntervals()\n }\n\n this._image.crossOrigin = 'anonymous'\n this._image.src = this._texurl\n }\n\n private imageLoaded(): void {\n\n // this.textureLoaded()\n // this.initModelBuffer()\n // this._textureLoaded = true\n this._ready = true\n }\n\n // private textureLoaded(): void {\n private textureLoaded(hipsShaderProgram: HiPSShaderProgram): void {\n \n \n // this._hipsShaderProgram.enableProgram()\n hipsShaderProgram.enableProgram()\n const gl = this._webgl as WebGL2RenderingContext\n this._texture = gl.createTexture()!\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true)\n gl.bindTexture(gl.TEXTURE_2D, this._texture)\n\n if (!gl.isTexture(this._texture)) {\n console.log('error in texture')\n }\n\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture!)\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image)\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n\n // FIX: use the sampler location we fetched in enableShaders()\n // gl.uniform1i((this._hipsShaderProgram.locations as ShaderLocations).sampler, this._hipsShaderIndex)\n // gl.uniform1i((hipsShaderProgram.locations as ShaderLocations).sampler, this._hipsShaderIndex)\n\n if (!gl.isTexture(this._texture)) {\n console.warn('Texture creation failed')\n }\n this.initModelBuffer()\n this._textureLoaded = true\n }\n\n private initModelBuffer(): void {\n const gl = this._webgl as WebGL2RenderingContext\n\n this.vertexPosition = []\n this.vertexPositionBuffer = []\n this.vertexIndices = new Uint16Array()\n\n const reforder = fovHelper.getRefOrder(this._order)\n\n const orighealpix = global.getHealpix(this._order)\n const origxyf = orighealpix.nest2xyf(this._tileno)\n const orderjump = reforder - this._order\n\n const dxmin = origxyf.ix << orderjump\n const dxmax = (origxyf.ix << orderjump) + (1 << orderjump)\n const dymin = origxyf.iy << orderjump\n const dymax = (origxyf.iy << orderjump) + (1 << orderjump)\n\n const healpix = global.getHealpix(reforder)\n\n this.setupPositionAndTexture4Quadrant2(dxmin, dxmin + (dxmax - dxmin) / 2, dymin, dymin + (dymax - dymin) / 2, 0, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant2(dxmin + (dxmax - dxmin) / 2, dxmax, dymin, dymin + (dymax - dymin) / 2, 1, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant2(dxmin, dxmin + (dxmax - dxmin) / 2, dymin + (dymax - dymin) / 2, dymax, 2, healpix, orderjump, origxyf)\n this.setupPositionAndTexture4Quadrant2(dxmin + (dxmax - dxmin) / 2, dxmax, dymin + (dymax - dymin) / 2, dymax, 3, healpix, orderjump, origxyf)\n\n const pixelsXQuadrant = this.vertexPosition[0].length / 20\n const idx = this.computeVertexIndices(pixelsXQuadrant)\n\n // If large, upgrade to Uint32 indices\n if (idx.length > 65535) {\n // Optional: require OES_element_index_uint if you’re still on WebGL1\n this.vertexIndices = new Uint32Array(idx)\n } else {\n this.vertexIndices = new Uint16Array(idx)\n }\n\n this.vertexIndexBuffer = gl.createBuffer()!\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndices, gl.STATIC_DRAW)\n }\n\n private computeVertexIndices(pixelsXQuadrant: number): Uint32Array {\n const vertexIndices = new Uint32Array(6 * pixelsXQuadrant)\n let baseFaceIndex = 0\n for (let j = 0; j < pixelsXQuadrant; j++) {\n const b = baseFaceIndex\n vertexIndices[6 * j] = b\n vertexIndices[6 * j + 1] = b + 1\n vertexIndices[6 * j + 2] = b + 2\n vertexIndices[6 * j + 3] = b + 2\n vertexIndices[6 * j + 4] = b + 3\n vertexIndices[6 * j + 5] = b\n baseFaceIndex += 4\n }\n return vertexIndices\n }\n\n private setupPositionAndTexture4Quadrant2(\n dxmin: number,\n dxmax: number,\n dymin: number,\n dymax: number,\n qidx: number,\n healpix: any,\n orderjump: number,\n origxyf: any\n ): void {\n const gl = this._webgl as WebGL2RenderingContext\n this.vertexPosition[qidx] = new Float32Array(20 * (dxmax - dxmin) * (dymax - dymin))\n\n const step = 1 / (1 << orderjump)\n let p = 0\n\n const s_pixel_size = 0\n const t_pixel_size = 0\n\n for (let dx = dxmin; dx < dxmax; dx++) {\n for (let dy = dymin; dy < dymax; dy++) {\n const facesVec3Array = healpix.getPointsForXyfNoStep(dx, dy, origxyf.face)\n const uindex = dy - (origxyf.iy << orderjump)\n const vindex = dx - (origxyf.ix << orderjump)\n\n // v0\n this.vertexPosition[qidx][20 * p] = facesVec3Array[0].x\n this.vertexPosition[qidx][20 * p + 1] = facesVec3Array[0].y\n this.vertexPosition[qidx][20 * p + 2] = facesVec3Array[0].z\n this.vertexPosition[qidx][20 * p + 3] = step + step * uindex + s_pixel_size\n this.vertexPosition[qidx][20 * p + 4] = 1 - (step + step * vindex) - t_pixel_size\n // v1\n this.vertexPosition[qidx][20 * p + 5] = facesVec3Array[1].x\n this.vertexPosition[qidx][20 * p + 6] = facesVec3Array[1].y\n this.vertexPosition[qidx][20 * p + 7] = facesVec3Array[1].z\n this.vertexPosition[qidx][20 * p + 8] = step + step * uindex + s_pixel_size\n this.vertexPosition[qidx][20 * p + 9] = 1 - step * vindex + t_pixel_size\n // v2\n this.vertexPosition[qidx][20 * p + 10] = facesVec3Array[2].x\n this.vertexPosition[qidx][20 * p + 11] = facesVec3Array[2].y\n this.vertexPosition[qidx][20 * p + 12] = facesVec3Array[2].z\n this.vertexPosition[qidx][20 * p + 13] = step * uindex - s_pixel_size\n this.vertexPosition[qidx][20 * p + 14] = 1 - step * vindex + t_pixel_size\n // v3\n this.vertexPosition[qidx][20 * p + 15] = facesVec3Array[3].x\n this.vertexPosition[qidx][20 * p + 16] = facesVec3Array[3].y\n this.vertexPosition[qidx][20 * p + 17] = facesVec3Array[3].z\n this.vertexPosition[qidx][20 * p + 18] = step * uindex - s_pixel_size\n this.vertexPosition[qidx][20 * p + 19] = 1 - (step + step * vindex) - t_pixel_size\n p++\n }\n }\n\n this.vertexPositionBuffer[qidx] = gl.createBuffer()!\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer[qidx])\n gl.bufferData(gl.ARRAY_BUFFER, this.vertexPosition[qidx], gl.STATIC_DRAW)\n }\n\n get inView(): boolean {\n return this._inView\n }\n\n private moveToCache(): void {\n // newTileBuffer.moveTileToCache(this._tileno, this._order, this._hips)\n this._tileBuffer.moveTileToCache(this._tileno, this._order, this._hips)\n this._inView = false\n this.destroyIntervals()\n }\n\n amIStillInFoV(): void {\n if (this._textureLoaded) this._ready = true\n\n if (this._isGalacticHips) {\n if (this._visibleTileManager.galAncestorsMap.has(this._order)) {\n if (!this._visibleTileManager.galAncestorsMap.get(this._order)!.includes(this._tileno)) {\n this.moveToCache()\n } else {\n this._inView = true\n }\n }\n // if (visibleTilesManager.galAncestorsMap.has(this._order)) {\n // if (!visibleTilesManager.galAncestorsMap.get(this._order)!.includes(this._tileno)) {\n // this.moveToCache()\n // } else {\n // this._inView = true\n // }\n // }\n\n if (this._order == this._visibleTileManager.visibleOrder) {\n if (!this._visibleTileManager.galVisibleTilesByOrder.pixels.includes(this._tileno)) {\n this.moveToCache()\n } else {\n this._inView = true\n }\n }\n // if (this._order == visibleTilesManager.visibleOrder) {\n // if (!visibleTilesManager.galVisibleTilesByOrder.pixels.includes(this._tileno)) {\n // this.moveToCache()\n // } else {\n // this._inView = true\n // }\n // }\n } else {\n if (this._visibleTileManager.ancestorsMap.has(this._order)) {\n if (!this._visibleTileManager.ancestorsMap.get(this._order)!.includes(this._tileno)) {\n this.moveToCache()\n } else {\n this._inView = true\n }\n }\n // if (visibleTilesManager.ancestorsMap.has(this._order)) {\n // if (!visibleTilesManager.ancestorsMap.get(this._order)!.includes(this._tileno)) {\n // this.moveToCache()\n // } else {\n // this._inView = true\n // }\n // }\n\n if (this._order == this._visibleTileManager.visibleOrder) {\n if (!this._visibleTileManager.visibleTilesByOrder.pixels.includes(this._tileno)) {\n this.moveToCache()\n } else {\n this._inView = true\n }\n }\n // if (this._order == visibleTilesManager.visibleOrder) {\n // if (!visibleTilesManager.visibleTilesByOrder.pixels.includes(this._tileno)) {\n // this.moveToCache()\n // } else {\n // this._inView = true\n // }\n // }\n }\n }\n\n draw(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Mat4,\n vMatrix: Mat4,\n mMatrix: Mat4,\n colorMapIdx: number,\n hipsShaderProgram: HiPSShaderProgram\n ): void {\n if (!this._ready || this._abort) return\n \n if (!this._textureLoaded) {\n this.textureLoaded(hipsShaderProgram)\n }\n\n let quadrantsToDraw = new Set<number>([0, 1, 2, 3])\n if (visibleOrder > this._order && this._order < this._maxorder) {\n // const kids = this.drawChildren(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx)\n const kids = this.drawChildren(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx, hipsShaderProgram)\n if (kids) quadrantsToDraw = kids\n }\n const gl = this._webgl as WebGL2RenderingContext\n hipsShaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx)\n // this._hipsShaderProgram.enableShaders(pMatrix, vMatrix, mMatrix, colorMapIdx)\n \n // Enable attributes (these locations are retrieved in enableShaders)\n // gl.enableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n // gl.enableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n gl.enableVertexAttribArray((hipsShaderProgram.locations as ShaderLocations).vertexPositionAttribute)\n gl.enableVertexAttribArray((hipsShaderProgram.locations as ShaderLocations).textureCoordAttribute)\n\n gl.activeTexture(gl.TEXTURE0 + this._hipsShaderIndex)\n gl.bindTexture(gl.TEXTURE_2D, this._texture!)\n // gl.uniform1f(this._hipsShaderProgram.locations.textureAlpha, this.opacity)\n gl.uniform1f((hipsShaderProgram.locations as ShaderLocations).textureAlpha, this.opacity)\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer!)\n const elemno = this.vertexIndices.length\n const indexType = this.vertexIndices instanceof Uint32Array ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT\n\n quadrantsToDraw.forEach((qidx) => {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer[qidx])\n\n gl.vertexAttribPointer(\n // this._hipsShaderProgram.locations.vertexPositionAttribute,\n (hipsShaderProgram.locations as ShaderLocations).vertexPositionAttribute,\n 3, gl.FLOAT, false, 5 * 4, 0\n )\n gl.vertexAttribPointer(\n // this._hipsShaderProgram.locations.textureCoordAttribute,\n (hipsShaderProgram.locations as ShaderLocations).textureCoordAttribute,\n 2, gl.FLOAT, false, 5 * 4, 3 * 4\n )\n\n gl.drawElements(gl.TRIANGLES, elemno, indexType, 0)\n })\n\n // gl.disableVertexAttribArray(this._hipsShaderProgram.locations.vertexPositionAttribute)\n // gl.disableVertexAttribArray(this._hipsShaderProgram.locations.textureCoordAttribute)\n gl.disableVertexAttribArray((hipsShaderProgram.locations as ShaderLocations).vertexPositionAttribute)\n gl.disableVertexAttribArray((hipsShaderProgram.locations as ShaderLocations).textureCoordAttribute)\n }\n\n private drawChildren(\n visibleOrder: number,\n visibleTilesMap: Map<number, number[]>,\n pMatrix: Mat4,\n vMatrix: Mat4,\n mMatrix: Mat4,\n colorMapIdx: number,\n hipsShaderProgram: HiPSShaderProgram\n ): Set<number> | undefined {\n const quadrantsToDraw = new Set<number>([0, 1, 2, 3])\n const childrenOrder = this._order + 1\n if (!visibleTilesMap.has(childrenOrder)) return\n\n for (let c = 0; c < 4; c++) {\n const childTileNo = (this._tileno << 2) + c\n const list = visibleTilesMap.get(childrenOrder)!\n if (list.includes(childTileNo)) {\n const childTile = this._isGalacticHips\n ? this._tileBuffer.getGalTile(childTileNo, childrenOrder, this._hips)\n : this._tileBuffer.getTile(childTileNo, childrenOrder, this._hips)\n // const childTile = this._isGalacticHips\n // ? newTileBuffer.getGalTile(childTileNo, childrenOrder, this._hips)\n // : newTileBuffer.getTile(childTileNo, childrenOrder, this._hips)\n\n // childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx)\n childTile.draw(visibleOrder, visibleTilesMap, pMatrix, vMatrix, mMatrix, colorMapIdx, hipsShaderProgram)\n if (childTile._ready) {\n quadrantsToDraw.delete(childTileNo - (this._tileno << 2))\n }\n }\n }\n return quadrantsToDraw\n }\n}\n","// TileBuffer.ts\nimport Tile from './Tile.js' // adjust if your file is named differently\nimport {HiPS} from './HiPS.js'\nimport { VisibleTilesManager } from './VisibleTilesManager.js'\nimport { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js'\n\n// export default class TileBuffer {\nexport class TileBuffer {\n // Equatorial\n private _tiles: Map<string, Tile>\n private _cachedTiles: Map<string, Tile>\n private _activeHiPS: Map<HiPS, Map<string, Tile>>\n\n // Galactic\n private _galTiles: Map<string, Tile>\n private _galCachedTiles: Map<string, Tile>\n private _galActiveHiPS: Map<HiPS, Map<string, Tile>>\n\n private _cacheAliveMilliSeconds: number\n private _cleanerId: number\n\n private _webgl: WebGL2RenderingContext\n private _visibleTileManager: VisibleTilesManager\n private _hipsShaderProgram\n\n constructor(minutesToLiveInCache = 1, webgl: WebGL2RenderingContext,\n hipsShaderProgram: HiPSShaderProgram,\n visibleTileManager: VisibleTilesManager) {\n\n this._hipsShaderProgram = hipsShaderProgram\n this._visibleTileManager = visibleTileManager\n this._webgl = webgl\n this._tiles = new Map()\n this._cachedTiles = new Map()\n this._activeHiPS = new Map()\n\n this._galTiles = new Map()\n this._galCachedTiles = new Map()\n this._galActiveHiPS = new Map()\n\n this._cacheAliveMilliSeconds = minutesToLiveInCache * 60 * 1000\n\n this._cleanerId = window.setInterval(() => {\n this.cacheCleaner()\n }, 10_000)\n }\n\n /** Register an equatorial HiPS into the buffer. */\n addHiPS(hips: HiPS): void {\n if (this._activeHiPS.has(hips)) {\n console.error('HiPS already present in TileBuffer')\n return\n }\n this._activeHiPS.set(hips, new Map())\n }\n\n /** Register a galactic HiPS into the buffer. */\n addGalHiPS(hips: HiPS): void {\n if (this._galActiveHiPS.has(hips)) {\n console.error('HiPS already present in TileBuffer')\n return\n }\n this._galActiveHiPS.set(hips, new Map())\n }\n\n /** Preload/add tile for every registered equatorial HiPS. */\n addTile(order: number, tileno: number): void {\n for (const hips of this._activeHiPS.keys()) {\n if (order > hips.maxOrder) {\n continue\n }\n this.getTile(tileno, order, hips)\n }\n }\n\n /** Preload/add tile for every registered galactic HiPS. */\n addGalTile(order: number, tileno: number): void {\n for (const hips of this._galActiveHiPS.keys()) {\n if (order > hips.maxOrder) {\n continue\n }\n this.getGalTile(tileno, order, hips)\n }\n }\n\n /** Fetch (or create) an equatorial tile, reviving from cache if present. */\n getTile(tileno: number, order: number, hips: HiPS): Tile {\n const tileKey = this.key(order, tileno, hips.baseURL)\n\n if (!this._tiles.has(tileKey)) {\n if (this._cachedTiles.has(tileKey)) {\n const tile = this._cachedTiles.get(tileKey)!\n this._tiles.set(tileKey, tile)\n this._cachedTiles.delete(tileKey)\n tile.resetCacheTime0()\n } else {\n // const tile = new Tile(tileno, order, hips as any, this, this._webgl, this._visibleTileManager, this._hipsShaderProgram)\n const tile = new Tile(tileno, order, hips as any, this, this._webgl, this._visibleTileManager)\n this._tiles.set(tileKey, tile)\n }\n }\n return this._tiles.get(tileKey)!\n }\n\n /** Fetch (or create) a galactic tile, reviving from cache if present. */\n getGalTile(tileno: number, order: number, hips: HiPS): Tile {\n const tileKey = this.key(order, tileno, hips.baseURL)\n\n if (!this._galTiles.has(tileKey)) {\n if (this._galCachedTiles.has(tileKey)) {\n const tile = this._galCachedTiles.get(tileKey)!\n this._galTiles.set(tileKey, tile)\n this._galCachedTiles.delete(tileKey)\n tile.resetCacheTime0()\n } else {\n // const tile = new Tile(tileno, order, hips as any, this, this._webgl, this._visibleTileManager, this._hipsShaderProgram)\n const tile = new Tile(tileno, order, hips as any, this, this._webgl, this._visibleTileManager)\n this._galTiles.set(tileKey, tile)\n }\n }\n return this._galTiles.get(tileKey)!\n }\n\n /** Move a tile (equatorial or galactic) into cache. */\n moveTileToCache(tileno: number, order: number, hips: HiPS): void {\n const tileKey = this.key(order, tileno, hips.baseURL)\n\n if (this._tiles.has(tileKey)) {\n const tile = this._tiles.get(tileKey)!\n tile.setCacheTime0()\n this._cachedTiles.set(tileKey, tile)\n this._tiles.delete(tileKey)\n }\n if (this._galTiles.has(tileKey)) {\n const tile = this._galTiles.get(tileKey)!\n tile.setCacheTime0()\n this._galCachedTiles.set(tileKey, tile)\n this._galTiles.delete(tileKey)\n }\n }\n\n /** Periodically purge stale cached tiles. */\n private cacheCleaner(): void {\n const now = Date.now()\n\n for (const [tileKey, tile] of this._cachedTiles) {\n const t0 = tile.cacheTime0\n if (!tile.inView && t0 !== undefined && now - t0 > this._cacheAliveMilliSeconds) {\n tile.destroyIntervals()\n this._cachedTiles.delete(tileKey)\n }\n }\n\n for (const [tileKey, tile] of this._galCachedTiles) {\n const t0 = tile.cacheTime0\n if (!tile.inView && t0 !== undefined && now - t0 > this._cacheAliveMilliSeconds) {\n tile.destroyIntervals()\n this._galCachedTiles.delete(tileKey)\n }\n }\n }\n\n /** Compose a stable key for maps. */\n private key(order: number, tileno: number, baseURL: string): string {\n return `${order}#${tileno}#${baseURL}`\n }\n\n /** Optional: call to stop internal timers if you dispose this buffer. */\n dispose(): void {\n window.clearInterval(this._cleanerId)\n }\n}\n\n// Singleton (kept for compatibility with your original export)\n// export const newTileBuffer = new TileBuffer()\n","import global from '../../Global.js';\nimport { Pointing, Vec3, Healpix } from 'healpixjs';\nimport RayPickingUtils from '../../utils/RayPickingUtils.js';\n// import { newTileBuffer } from './TileBuffer.js';\nimport { TileBuffer } from './TileBuffer.js';\nimport { vec4, mat4, ReadonlyMat4 } from 'gl-matrix';\n// import healpixGridSingleton from '../grid/HealpixGridSingleton.js';\n// import {HealpixGridSingleton} from '../grid/HealpixGridSingleton.js';\nimport { bootSetup } from '../../Config.js';\nimport { HealpixGrid } from '../grid/HealpixGrid.js';\nimport { HiPSShaderProgram } from '../../shader/HiPSShaderProgram.js';\nimport Camera from '../../Camera.js';\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\ninterface VisibleTiles {\n pixels: number[];\n order: number;\n}\n\n\nexport class VisibleTilesManager {\n private _visibleTilesByOrder: VisibleTiles;\n private _ancestorsMap: Map<number, number[]>;\n\n private initialised: boolean;\n\n private _galVisibleTilesByOrder: VisibleTiles;\n private _galAncestorsMap: Map<number, number[]>;\n private _galacticMatrixInverted: mat4;\n private _galacticMatrix: mat4;\n private insideSphere: boolean = bootSetup.insideSphere\n private _tileBuffer: TileBuffer\n private _healpixGrid: HealpixGrid;\n private _webgl: WebGL2RenderingContext;\n\n constructor(webgl: WebGL2RenderingContext, hipsShaderProgram: HiPSShaderProgram, healpixGrid: HealpixGrid) {\n \n this._webgl = webgl\n this._healpixGrid = healpixGrid\n this._visibleTilesByOrder = { pixels: [], order: 0 };\n this._ancestorsMap = new Map();\n this.initialised = false;\n\n this._galVisibleTilesByOrder = { pixels: [], order: 0 };\n this._galAncestorsMap = new Map();\n\n // Matrices for galactic <-> equatorial\n this._galacticMatrixInverted = mat4.create();\n this._galacticMatrix = mat4.create();\n\n // From https://observablehq.com/@fil/galactic-rotations (single-precision friendly)\n // This matrix is (galactic -> equatorial); we store its inverse too.\n mat4.set(\n this._galacticMatrixInverted,\n -0.054876, -0.873437, -0.483835, 0, \n 0.494109, -0.44483, 0.746982, -0, \n -0.867666, -0.198076, 0.455984, 0, \n 0, 0, 0, 1\n )\n mat4.invert(this._galacticMatrix, this._galacticMatrixInverted);\n this._tileBuffer = new TileBuffer(1, webgl, hipsShaderProgram, this)\n }\n\n get healpixGrid() {\n return this._healpixGrid\n }\n\n get tileBuffer() { \n return this._tileBuffer\n }\n\n init(insideSphere: boolean): void {\n this.initialised = true;\n this.insideSphere = insideSphere\n // this.computeVisiblePixels();\n // setInterval(() => this.computeVisiblePixels(), 500);\n }\n\n getVisibleOrder(): number {\n // return healpixGridSingleton.visibleorder;\n return this._healpixGrid.visibleorder;\n }\n\n\n // computeVisiblePixels(): void {\n computeVisiblePixels(order: number, webgl: WebGL2RenderingContext, camera: Camera, pMatrix: ReadonlyMat4): void {\n if (!this.initialised) return;\n\n // let order = healpixGridSingleton.visibleorder;\n if (global.insideSphere && order < 3) {\n order = 3;\n }\n\n this._ancestorsMap.set(order, []);\n this._galAncestorsMap.set(order, []);\n\n let pixels: number[] = [];\n let galTiles: number[] = [];\n\n if (order === 0) {\n const geomhealpix: Healpix = global.getHealpix(0);\n const npix = geomhealpix.getNPix();\n for (let i = 0; i < npix; i++) {\n pixels.push(i);\n this._ancestorsMap.get(order)!.push(i);\n galTiles.push(i);\n this._galAncestorsMap.get(order)!.push(i);\n }\n } else {\n const geomhealpix: Healpix = global.getHealpix(order);\n // const maxX = (global.gl as GL).canvas.width;\n // const maxY = (global.gl as GL).canvas.height;\n const maxX = (webgl as GL).canvas.width;\n const maxY = (webgl as GL).canvas.height;\n\n // Sample a grid of screen points, project to the sphere, then to galactic\n for (let i = 0; i <= maxX; i += maxX / 30) {\n for (let j = 0; j <= maxY; j += maxY / 30) {\n const hit = RayPickingUtils.getIntersectionPointWithSingleModel(\n i,\n j, this._healpixGrid, this._webgl, camera, pMatrix\n );\n\n if (hit.length > 0) {\n // Equatorial -> Galactic (use _galacticMatrix)\n const galVec = vec4.create();\n vec4.transformMat4(galVec, [hit[0], hit[1], hit[2], 1], this._galacticMatrix);\n\n // Index in galactic HEALPix\n const galPoint = new Pointing(new Vec3(galVec[0], galVec[1], galVec[2]));\n const galTileNo = geomhealpix.ang2pix(galPoint);\n\n // Index in equatorial HEALPix\n const curPoint = new Pointing(new Vec3(hit[0], hit[1], hit[2]));\n const currPixNo = geomhealpix.ang2pix(curPoint);\n\n if (!pixels.includes(currPixNo)) {\n pixels.push(currPixNo);\n this._ancestorsMap.get(order)!.push(currPixNo);\n // newTileBuffer.addTile(order, currPixNo);\n this._tileBuffer.addTile(order, currPixNo);\n }\n\n if (!galTiles.includes(galTileNo)) {\n galTiles.push(galTileNo);\n this._galAncestorsMap.get(order)!.push(galTileNo);\n // newTileBuffer.addGalTile(order, galTileNo);\n this._tileBuffer.addGalTile(order, galTileNo);\n }\n }\n }\n }\n }\n\n this._visibleTilesByOrder = { pixels: pixels, order: order };\n this._galVisibleTilesByOrder = { pixels: galTiles, order: order };\n\n // Build ancestor pyramids down to order 0\n for (let o = 1; o < order; o++) {\n const tgtOrder = order - o;\n const list = this._ancestorsMap.get(tgtOrder) ?? [];\n this._ancestorsMap.set(tgtOrder, list);\n\n for (let p = 0; p < pixels.length; p++) {\n const parent = pixels[p] >> (2 * o);\n if (!list.includes(parent)) {\n list.push(parent);\n // newTileBuffer.addTile(tgtOrder, parent);\n this._tileBuffer.addTile(tgtOrder, parent);\n }\n }\n }\n\n for (let o = 1; o < order; o++) {\n const tgtOrder = order - o;\n const list = this._galAncestorsMap.get(tgtOrder) ?? [];\n this._galAncestorsMap.set(tgtOrder, list);\n\n for (let p = 0; p < galTiles.length; p++) {\n const parent = galTiles[p] >> (2 * o);\n if (!list.includes(parent)) {\n list.push(parent);\n // newTileBuffer.addGalTile(tgtOrder, parent);\n this._tileBuffer.addGalTile(tgtOrder, parent);\n }\n }\n }\n }\n\n get visibleTilesByOrder(): VisibleTiles {\n return this._visibleTilesByOrder;\n }\n\n get ancestorsMap(): Map<number, number[]> {\n return this._ancestorsMap;\n }\n\n get galVisibleTilesByOrder(): VisibleTiles {\n return this._galVisibleTilesByOrder;\n }\n\n get galAncestorsMap(): Map<number, number[]> {\n return this._galAncestorsMap;\n }\n\n get visibleOrder(): number {\n return this._visibleTilesByOrder.order;\n }\n}\n\n// export const visibleTilesManager = new VisibleTilesManager();","'use strict';\n\nimport {AbstractSkyEntity, SkyEntityDrawInput } from '../AbstractSkyEntity.js';\nimport global from '../../Global.js';\n\nimport { mat4, vec4, ReadonlyMat4 } from 'gl-matrix';\nimport { Healpix } from 'healpixjs';\n\nimport { fovHelper } from '../hips/FoVHelper.js';\nimport {FoVUtils} from '../../utils/FoVUtils.js';\nimport { FoV } from '../FoV.js';\n\nimport {CoordsType} from '../../utils/CoordsType.js';\nimport {Point} from '../Point.js';\n\nimport GridShaderManager from '../../shader/GridShaderManager.js';\nimport GeomUtils from '../../utils/GeomUtils.js';\nimport GridTextHelper from './GridTextHelper.js';\nimport { colorHex2RGB } from '../../utils/Utils.js';\nimport { VisibleTilesManager } from '../hips/VisibleTilesManager.js';\nimport { bootSetup } from '../../Config.js';\nimport Camera from '../../Camera.js';\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\ninterface BoundVec {\n x: number;\n y: number;\n z: number;\n}\n\n\nexport class HealpixGrid extends AbstractSkyEntity {\n\n static ELEM_SIZE = 3;\n static BYTES_X_ELEM = new Float32Array().BYTES_PER_ELEMENT;\n\n private _visibleorder = 0;\n private showGrid: boolean = false\n private _shaderProgram!: WebGLProgram;\n private fragmentShader!: WebGLShader;\n private vertexShader!: WebGLShader;\n\n private defaultColor = '#ec0acaff'\n private gridText: GridTextHelper = new GridTextHelper()\n // private _hipsShaderProgram: HiPSShaderProgram\n\n private _attribLocations: { position: number; selected: number; pointSize: number; color: number } = {\n position: 0,\n selected: 1,\n pointSize: 2,\n color: 3,\n };\n\n private _nPrimitiveFlags = 0;\n\n private _vertexCataloguePositionBuffer!: WebGLBuffer;\n private _indexBuffer!: WebGLBuffer;\n\n private _vertexCataloguePosition: Float32Array = new Float32Array(0);\n private _indexes: Uint32Array = new Uint32Array(0);\n\n private _fovObj!: FoV;\n\n static INITIAL_FOV = 180;\n static RADIUS = 1;\n static INITIAL_POSITION: [number, number, number] = [0.0, 0.0, 0.0];\n static INITIAL_PhiRad = 0;\n static INITIAL_ThetaRad = 0;\n private _visibleTilesManager: VisibleTilesManager;\n \n\n constructor(webgl: WebGL2RenderingContext) {\n super(HealpixGrid.RADIUS, HealpixGrid.INITIAL_POSITION, HealpixGrid.INITIAL_PhiRad, HealpixGrid.INITIAL_ThetaRad, 'healpix-grid', webgl);\n this.init()\n this._visibleTilesManager = new VisibleTilesManager(this._webgl, super.hipsShaderProgram, this)\n this._visibleTilesManager.init(bootSetup.insideSphere)\n }\n\n init(): void {\n console.log('HealpixGridSingleton.init()');\n this.initGL(super.webgl as GL);\n\n this._shaderProgram = (super.webgl as GL).createProgram() as WebGLProgram;\n this.initShaders();\n\n const order = fovHelper.getHiPSNorder(HealpixGrid.INITIAL_FOV);\n this._visibleorder = order;\n\n this._nPrimitiveFlags = 0;\n\n this._vertexCataloguePositionBuffer = (super.webgl as GL).createBuffer()!;\n this._indexBuffer = (super.webgl as GL).createBuffer()!;\n\n this._vertexCataloguePosition = new Float32Array(0);\n\n this._fovObj = new FoV(super.webgl);\n }\n\n get fovObj(): FoV {\n return this._fovObj\n }\n\n get RADIUS(): number {\n return HealpixGrid.RADIUS\n }\n\n get INITIAL_POSITION(): [number, number, number] {\n return HealpixGrid.INITIAL_POSITION\n }\n\n get INITIAL_PhiRad(): number {\n return HealpixGrid.INITIAL_PhiRad\n }\n\n get INITIAL_ThetaRad(): number {\n return HealpixGrid.INITIAL_ThetaRad\n }\n\n refreshFoV(camera: Camera, pMatrix: ReadonlyMat4) {\n return this._fovObj.getFoV(global.insideSphere, this, camera, pMatrix) ;\n }\n\n getFoV(): FoV {\n return this._fovObj\n }\n\n getMinFoV() {\n return this._fovObj.minFoV;\n }\n\n private initShaders(): void {\n const gl = super.webgl as GL;\n\n const fragmentShaderStr = GridShaderManager.healpixGridFS();\n this.fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)!;\n gl.shaderSource(this.fragmentShader, fragmentShaderStr);\n gl.compileShader(this.fragmentShader);\n if (!gl.getShaderParameter(this.fragmentShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this.fragmentShader) || 'Fragment shader compile error');\n return;\n }\n\n const vertexShaderStr = GridShaderManager.healpixGridVS();\n this.vertexShader = gl.createShader(gl.VERTEX_SHADER)!;\n gl.shaderSource(this.vertexShader, vertexShaderStr);\n gl.compileShader(this.vertexShader);\n if (!gl.getShaderParameter(this.vertexShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this.vertexShader) || 'Vertex shader compile error');\n return;\n }\n\n gl.attachShader(this._shaderProgram, this.vertexShader);\n gl.attachShader(this._shaderProgram, this.fragmentShader);\n gl.linkProgram(this._shaderProgram);\n\n if (!gl.getProgramParameter(this._shaderProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders');\n }\n gl.useProgram(this._shaderProgram);\n }\n\n initBuffers(pixels: number[], order: number): void {\n\n this._nPrimitiveFlags = 0;\n\n const healpix: Healpix = global.getHealpix(order);\n const subhpx: Healpix = global.getHealpix(order + 1);\n const subsubhpx: Healpix = global.getHealpix(order + 2);\n\n let positionIndex = 0;\n let vIdx = 0;\n const R = 1.0;\n\n const MAX_UINT = 0xffffffff;\n\n this._indexes = new Uint32Array(17 * pixels.length);\n this._vertexCataloguePosition = new Float32Array(3 * 16 * pixels.length);\n\n for (let p = 0; p < pixels.length; p++) {\n const vecs = healpix.getBoundaries(pixels[p]) as BoundVec[];\n\n const cpix0 = pixels[p] << 2;\n const cpix1 = cpix0 + 1;\n const cpix2 = cpix0 + 2;\n const cpix3 = cpix0 + 3;\n\n const cp0vecs = subhpx.getBoundaries(cpix0) as BoundVec[];\n const cp3vecs = subhpx.getBoundaries(cpix3) as BoundVec[];\n\n // helper to push a vertex\n const pushV = (v: BoundVec) => {\n this._vertexCataloguePosition[positionIndex] = R * v.x;\n this._vertexCataloguePosition[positionIndex + 1] = R * v.y;\n this._vertexCataloguePosition[positionIndex + 2] = R * v.z;\n this._indexes[vIdx] = Math.floor(positionIndex / 3);\n vIdx += 1;\n positionIndex += 3;\n };\n\n // v0(3/0)\n pushV(vecs[0]);\n\n // v1(15/2)\n let subcpix3 = cpix3 << 2;\n let subcpix3_3 = subcpix3 + 3;\n let tmp = subsubhpx.getBoundaries(subcpix3_3) as BoundVec[];\n pushV(tmp[1]);\n\n // v1(3/1)\n pushV(cp3vecs[1]);\n\n // v0(2/2)\n let subcpix2 = cpix2 << 2;\n let subcpix2_2 = subcpix2 + 2;\n tmp = subsubhpx.getBoundaries(subcpix2_2) as BoundVec[];\n pushV(tmp[0]);\n\n // v1(0/0)\n pushV(vecs[1]);\n\n // v2(2/2)\n pushV(tmp[2]);\n\n // v1(0/1)\n pushV(cp0vecs[1]);\n\n // v1(0/2)\n let subcpix0 = cpix0 << 2;\n let subcpix0_2 = subcpix0;\n tmp = subsubhpx.getBoundaries(subcpix0_2) as BoundVec[];\n pushV(tmp[1]);\n\n // v2(0/0)\n pushV(vecs[2]);\n\n // v3(0/2)\n pushV(tmp[3]);\n\n // v3(0/1)\n pushV(cp0vecs[3]);\n\n // v2(5/2)\n let subcpix1 = cpix1 << 2;\n let subcpix1_1 = subcpix1 + 1;\n tmp = subsubhpx.getBoundaries(subcpix1_1) as BoundVec[];\n pushV(tmp[2]);\n\n // v3(0/0)\n pushV(vecs[3]);\n\n // v0(5/2)\n pushV(tmp[0]);\n\n // v3(3/1)\n pushV(cp3vecs[3]);\n\n tmp = subsubhpx.getBoundaries(subcpix3_3) as BoundVec[];\n pushV(tmp[3]);\n\n // primitive restart\n this._indexes[vIdx] = MAX_UINT;\n this._nPrimitiveFlags += 1;\n vIdx += 1;\n }\n\n }\n\n // updateTiles(pixels: number[], order: number) {\n // return (this as any)._tileBuffer.updateTiles(pixels, order);\n // }\n\n\n private refresh(camera: Camera, pMatrix: ReadonlyMat4): void {\n\n this.refreshFoV(camera, pMatrix);\n const fov = this.getMinFoV();\n // expose to global (legacy)\n // (global as any).hipsFoV = fov;\n // global.order = fovHelper.getHiPSNorder(fov);\n // this._visibleorder = global.order;\n this._visibleorder = fovHelper.getHiPSNorder(fov);\n }\n\n private enableShader(in_mMatrix: ReadonlyMat4, pMatrix: ReadonlyMat4, vMatrix: ReadonlyMat4): void {\n const gl = super.webgl as GL;\n\n gl.useProgram(this._shaderProgram);\n // TODO move locations retrieval elsewhere\n\n // Uniform locations\n const uMV = gl.getUniformLocation(this._shaderProgram, 'uMVMatrix');\n const uP = gl.getUniformLocation(this._shaderProgram, 'uPMatrix');\n const uColor = (super.webgl as GL).getUniformLocation(this._shaderProgram, 'u_fragcolor');\n\n // Attribute locations\n this._attribLocations.position = gl.getAttribLocation(this._shaderProgram, 'aCatPosition');\n\n let mvMatrix = mat4.create();\n // mvMatrix = mat4.multiply(mvMatrix, (global.camera as any).getCameraMatrix(), in_mMatrix);\n mvMatrix = mat4.multiply(mvMatrix, vMatrix, in_mMatrix);\n\n if (uMV) gl.uniformMatrix4fv(uMV, false, mvMatrix as Float32Array);\n if (uP) gl.uniformMatrix4fv(uP, false, pMatrix as Float32Array);\n if (uColor) {\n const rgb = colorHex2RGB(this.defaultColor);\n gl.uniform4f(uColor, rgb[0], rgb[1], rgb[2], 1.0);\n }\n }\n\n isVisible(): boolean {\n return this.showGrid\n }\n\n toggleShowGrid() {\n this.showGrid = !this.showGrid\n }\n\n get visibleTilesManager(){\n return this._visibleTilesManager\n }\n\n draw(input: SkyEntityDrawInput): void {\n const gl = super.webgl as GL;\n\n const mMatrix = this.getModelMatrix();\n // const vMatrix = input.camera.getCameraMatrix()\n const camera = input.camera\n if (!camera ) return\n const vMatrix = camera.getCameraMatrix()\n\n const pMatrix = input.pMatrix\n if (!pMatrix ) return\n \n this.refresh(camera, pMatrix);\n\n if (!this.showGrid) {\n\n // gridTextHelper.resetDivSets();\n this.gridText.resetDivSets();\n return;\n }\n\n // const visibleTiles = visibleTilesManager.visibleTilesByOrder\n const visibleTiles = this._visibleTilesManager.visibleTilesByOrder\n const pixels = visibleTiles.pixels;\n const order = visibleTiles.order;\n\n this.initBuffers(pixels, order);\n\n \n // const pMatrix = computePerspectiveMatrixSingleton.pMatrix as ReadonlyMat4;\n this.enableShader(mMatrix, pMatrix, vMatrix);\n\n // Upload positions\n gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexCataloguePositionBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, this._vertexCataloguePosition, gl.STATIC_DRAW);\n\n gl.vertexAttribPointer(\n this._attribLocations.position,\n HealpixGrid.ELEM_SIZE,\n gl.FLOAT,\n false,\n HealpixGrid.BYTES_X_ELEM * HealpixGrid.ELEM_SIZE,\n 0\n );\n gl.enableVertexAttribArray(this._attribLocations.position);\n\n // Index buffer\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this._indexes, gl.STATIC_DRAW);\n\n gl.drawElements(\n gl.LINE_LOOP,\n this._vertexCataloguePosition.length / 3 + this._nPrimitiveFlags,\n gl.UNSIGNED_INT,\n 0\n );\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n\n // Project and label pixel centers that are inside current FoV\n let mvMatrix = mat4.create();\n // mvMatrix = mat4.multiply(mvMatrix, (global.camera as any).getCameraMatrix(), mMatrix);\n mvMatrix = mat4.multiply(mvMatrix, vMatrix, mMatrix);\n\n let mvpMatrix = mat4.create();\n mvpMatrix = mat4.multiply(mvpMatrix, pMatrix, mvMatrix);\n\n // FIX: pass model & pMatrix to match FoVUtils TS signature\n const center = FoVUtils.getCenterJ2000(gl.canvas as HTMLCanvasElement, this, this._webgl, camera, pMatrix);\n\n const fovMin = (this.getMinFoV() * Math.PI) / 180 / 2;\n\n for (let p = 0; p < pixels.length; p++) {\n const pixCenter = (global.getHealpix(this._visibleorder).pix2vec(pixels[p]) as BoundVec);\n // const pixCenter = (global.getHealpix(global.order).pix2vec(pixels[p]) as BoundVec);\n\n const point = new Point(\n { x: pixCenter.x, y: pixCenter.y, z: pixCenter.z },\n CoordsType.CARTESIAN\n );\n\n const distance = GeomUtils.orthodromicDistance(center, point);\n if (distance < fovMin) {\n const vertex: [number, number, number, number] = [pixCenter.x, pixCenter.y, pixCenter.z, 1];\n const clipspace = vec4.create();\n vec4.transformMat4(clipspace, vertex, mvpMatrix);\n\n // NDC divide\n clipspace[0] /= clipspace[3];\n clipspace[1] /= clipspace[3];\n\n // clip → pixels\n const pixelX = (clipspace[0] * 0.5 + 0.5) * gl.canvas.width;\n const pixelY = (clipspace[1] * -0.5 + 0.5) * gl.canvas.height;\n\n this.gridText.addHPXDivSet(this._visibleorder + '/' + pixels[p], pixelX, pixelY);\n // gridTextHelper.addHPXDivSet(this._visibleorder + '/' + pixels[p], pixelX, pixelY);\n }\n }\n\n // gridTextHelper.resetDivSets();\n this.gridText.resetDivSets();\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n }\n\n get visibleorder(): number {\n return this._visibleorder;\n }\n}\n\n// const healpixGridSingleton = new HealpixGridSingleton();\n// export default healpixGridSingleton;","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { vec4, mat4, ReadonlyMat4 } from 'gl-matrix';\n\nimport { fovHelper } from '../hips/FoVHelper.js';\nimport { colorHex2RGB, degToRad } from '../../utils/Utils.js';\nimport GridShaderManager from '../../shader/GridShaderManager.js';\nimport { Point } from '../Point.js';\nimport { CoordsType } from '../../utils/CoordsType.js';\nimport { FoVUtils } from '../../utils/FoVUtils.js';\n\nimport GridTextHelper from './GridTextHelper.js';\nimport { HealpixGrid } from './HealpixGrid.js';\nimport { AbstractSkyEntity, SkyEntityDrawInput } from '../AbstractSkyEntity.js';\n// import healpixGridSingleton from './HealpixGridSingleton.js';\n// import computePerspectiveMatrixSingleton from '../../utils/ComputePerspectiveMatrix.js';\n// import Camera from '../../Camera.js';\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\n\n/** Equatorial grid rendered as RA/Dec great-circle line loops */\nexport class EquatorialGrid extends AbstractSkyEntity {\n\tstatic ELEM_SIZE = 3;\n\tstatic BYTES_X_ELEM = new Float32Array().BYTES_PER_ELEMENT;\n\n\tprivate showGrid: boolean = false\n\n\t// private _gl: GL;\n\tprivate _shaderProgram!: WebGLProgram;\n\tprivate _vertexShader!: WebGLShader;\n\tprivate _fragmentShader!: WebGLShader;\n\n\tprivate defaultColor = '#41d421'\n\tprivate gridText: GridTextHelper = new GridTextHelper()\n\n\tprivate _attribLocations: { position: number; selected: number; pointSize: number; color: number } = {\n\t\tposition: 0,\n\t\tselected: 1,\n\t\tpointSize: 2,\n\t\tcolor: 3,\n\t};\n\n\n\tprivate _phiVertexPositionBuffer!: WebGLBuffer;\n\tprivate _thetaVertexPositionBuffer!: WebGLBuffer;\n\n\tprivate _fov!: number;\n\n\t// Step sizes (degrees + radians) and label caches\n\tprivate _phiStep = 0;\n\tprivate _phiStepRad = 0;\n\tprivate _thetaStep = 0;\n\tprivate _thetaStepRad = 0;\n\n\tprivate _phiArray: Float32Array[] = [];\n\tprivate _thetaArray: Float32Array[] = [];\n\n\t// For placing text labels near current view center:\n\t// - _dec4Labels: key = RA(deg), value = points along that RA ring (for Dec labels)\n\t// - _ra4Labels : key = Dec(deg), value = points along that Dec ring (for RA labels)\n\tprivate _dec4Labels: Map<number, number[][]> = new Map();\n\tprivate _ra4Labels: Map<number, number[][]> = new Map();\n\tprivate _healpixGrid: HealpixGrid;\n\n\t/**\n\t * @param radius Not used by current implementation (sphere is unit-radius)\n\t * @param fov Field of view in degrees\n\t */\n\tconstructor(webgl: WebGL2RenderingContext, healpixGrid: HealpixGrid) {\n\t\tsuper(HealpixGrid.RADIUS, HealpixGrid.INITIAL_POSITION, HealpixGrid.INITIAL_PhiRad, HealpixGrid.INITIAL_ThetaRad, 'equatorial-grid', webgl);\n\t\tthis._healpixGrid = healpixGrid\n\t}\n\n\tinit(fov: number) {\n\t\tthis._fov = fov\n\n\t\tthis.initGL(super.webgl as GL);\n\n\t\t// Program & buffers\n\t\tthis._shaderProgram = (super.webgl as GL).createProgram() as WebGLProgram;\n\t\tthis.initShaders();\n\n\t\tthis._phiVertexPositionBuffer = (super.webgl as GL).createBuffer()!;\n\t\tthis._thetaVertexPositionBuffer = (super.webgl as GL).createBuffer()!;\n\n\t\t// Build initial RA/Dec line buffers\n\t\tthis.initBuffers(this._fov);\n\t}\n\n\t/** Compile/link shaders and fetch uniform/attribute locations */\n\tprivate initShaders(): void {\n\t\t// Fragment\n\t\tconst fsSource = GridShaderManager.healpixGridFS();\n\t\tthis._fragmentShader = (super.webgl as GL).createShader((super.webgl as GL).FRAGMENT_SHADER)!;\n\t\t(super.webgl as GL).shaderSource(this._fragmentShader, fsSource);\n\t\t(super.webgl as GL).compileShader(this._fragmentShader);\n\t\tif (!(super.webgl as GL).getShaderParameter(this._fragmentShader, (super.webgl as GL).COMPILE_STATUS)) {\n\t\t\t// Keep identical behavior (alert) but surface errors in console too\n\t\t\tconst log = (super.webgl as GL).getShaderInfoLog(this._fragmentShader) || 'Unknown fragment shader error';\n\t\t\tconsole.error(log);\n\t\t\talert(log);\n\t\t\treturn;\n\t\t}\n\n\t\t// Vertex\n\t\tconst vsSource = GridShaderManager.healpixGridVS();\n\t\tthis._vertexShader = (super.webgl as GL).createShader((super.webgl as GL).VERTEX_SHADER)!;\n\t\t(super.webgl as GL).shaderSource(this._vertexShader, vsSource);\n\t\t(super.webgl as GL).compileShader(this._vertexShader);\n\t\tif (!(super.webgl as GL).getShaderParameter(this._vertexShader, (super.webgl as GL).COMPILE_STATUS)) {\n\t\t\tconst log = (super.webgl as GL).getShaderInfoLog(this._vertexShader) || 'Unknown vertex shader error';\n\t\t\tconsole.error(log);\n\t\t\talert(log);\n\t\t\treturn;\n\t\t}\n\n\t\t// Link\n\t\t(super.webgl as GL).attachShader(this._shaderProgram, this._vertexShader);\n\t\t(super.webgl as GL).attachShader(this._shaderProgram, this._fragmentShader);\n\t\t(super.webgl as GL).linkProgram(this._shaderProgram);\n\n\t\tif (!(super.webgl as GL).getProgramParameter(this._shaderProgram, (super.webgl as GL).LINK_STATUS)) {\n\t\t\talert('Could not initialise shaders');\n\t\t}\n\n\t\t(super.webgl as GL).useProgram(this._shaderProgram);\n\n\t}\n\n\t/** Build RA/Dec line vertex arrays based on FoV step helper */\n\tprivate initBuffers(fovDeg: number): void {\n\t\tconst R = 1.0;\n\n\t\tconst steps = fovHelper.getRADegSteps(fovDeg);\n\t\tconst phiStep = steps.raStep as number; // RA step (deg)\n\t\tconst thetaStep = steps.decStep as number; // Dec step (deg)\n\n\t\tthis._phiStep = phiStep;\n\t\tthis._phiStepRad = degToRad(phiStep);\n\t\tthis._thetaStep = thetaStep;\n\t\tthis._thetaStepRad = degToRad(thetaStep);\n\n\t\tthis._ra4Labels = new Map();\n\t\tthis._dec4Labels = new Map();\n\t\tthis._phiArray = [];\n\t\tthis._thetaArray = [];\n\n\t\t// Lines of constant Dec (varying RA): for each Dec, a ring with vertices every phiStep°\n\t\tfor (let theta = thetaStep; theta < 180; theta += thetaStep) {\n\t\t\tconst phiVertexPosition = new Float32Array((360 / phiStep) * 3);\n\n\t\t\tconst thetaRad = degToRad(theta);\n\t\t\tfor (let phi = 0; phi < 360; phi += phiStep) {\n\t\t\t\tconst phiRad = degToRad(phi);\n\t\t\t\tconst x = R * Math.sin(thetaRad) * Math.cos(phiRad);\n\t\t\t\tconst y = R * Math.sin(thetaRad) * Math.sin(phiRad);\n\t\t\t\tconst z = R * Math.cos(thetaRad);\n\n\t\t\t\tconst idx = Math.floor(phi / phiStep);\n\t\t\t\tphiVertexPosition[3 * idx + 0] = x;\n\t\t\t\tphiVertexPosition[3 * idx + 1] = y;\n\t\t\t\tphiVertexPosition[3 * idx + 2] = z;\n\n\t\t\t\tif (!this._dec4Labels.has(phi)) this._dec4Labels.set(phi, []);\n\t\t\t\tthis._dec4Labels.get(phi)!.push([x, y, z]);\n\t\t\t}\n\n\t\t\tthis._phiArray.push(phiVertexPosition);\n\t\t}\n\n\t\t// Lines of constant RA (varying Dec): for each RA, a ring with vertices every thetaStep°\n\t\tfor (let phi = 0; phi < 360; phi += phiStep) {\n\t\t\tconst thetaVertexPosition = new Float32Array((360 / thetaStep) * 3);\n\n\t\t\tconst phiRad = degToRad(phi);\n\t\t\tfor (let theta = 0; theta < 360; theta += thetaStep) {\n\t\t\t\tconst thetaRad = degToRad(theta);\n\t\t\t\tconst x = R * Math.sin(thetaRad) * Math.cos(phiRad);\n\t\t\t\tconst y = R * Math.sin(thetaRad) * Math.sin(phiRad);\n\t\t\t\tconst z = R * Math.cos(thetaRad);\n\n\t\t\t\tconst idx = Math.floor(theta / thetaStep);\n\t\t\t\tthetaVertexPosition[3 * idx + 0] = x;\n\t\t\t\tthetaVertexPosition[3 * idx + 1] = y;\n\t\t\t\tthetaVertexPosition[3 * idx + 2] = z;\n\n\t\t\t\tconst decKey = 90 - theta; // original code’s keying for RA labels\n\t\t\t\tif (!this._ra4Labels.has(decKey)) this._ra4Labels.set(decKey, []);\n\t\t\t\tthis._ra4Labels.get(decKey)!.push([x, y, z]);\n\t\t\t}\n\n\t\t\tthis._thetaArray.push(thetaVertexPosition);\n\t\t}\n\t}\n\n\t/** Update buffers when FoV (in degrees) changes */\n\trefresh(fovDeg: number): void {\n\t\t// const fovDeg = healpixGridSingleton.getMinFoV()\n\t\tif (this._fov !== fovDeg) {\n\t\t\tthis._fov = fovDeg;\n\t\t\tthis.initBuffers(this._fov);\n\t\t}\n\t}\n\n\tprivate vectorDistance(p1: Point, p2: Point): number {\n\t\tconst dx = p1.x - p2.x;\n\t\tconst dy = p1.y - p2.y;\n\t\tconst dz = p1.z - p2.z;\n\t\treturn Math.sqrt(dx * dx + dy * dy + dz * dz);\n\t}\n\n\tprivate enableShader(mMatrix: ReadonlyMat4, pMatrix: ReadonlyMat4, vMatrix: ReadonlyMat4): void {\n\t\tconst gl = super.webgl as GL;\n\t\tgl.useProgram(this._shaderProgram);\n\n\t\t// uMVMatrix = camera * model\n\t\tconst mvMatrix = mat4.create();\n\t\t// mat4.multiply(mvMatrix, (global.camera as any).getCameraMatrix() as mat4, mMatrix);\n\t\tmat4.multiply(mvMatrix, vMatrix as mat4, mMatrix);\n\n\t\t// TODO move locations retrieval elsewhere\n\n\t\t// Uniform locations\n\t\tconst uMVMatrixLoc = gl.getUniformLocation(this._shaderProgram, 'uMVMatrix');\n\t\tconst uPMatrixLoc = gl.getUniformLocation(this._shaderProgram, 'uPMatrix');\n\t\tconst uColor = gl.getUniformLocation(this._shaderProgram, 'u_fragcolor');\n\n\t\t// Attribute locations\n\t\tthis._attribLocations.position = gl.getAttribLocation(this._shaderProgram, 'aCatPosition');\n\n\t\tif (uMVMatrixLoc) gl.uniformMatrix4fv(uMVMatrixLoc, false, mvMatrix as Float32Array);\n\t\tif (uPMatrixLoc) gl.uniformMatrix4fv(uPMatrixLoc, false, pMatrix as Float32Array);\n\t\tif (uColor) {\n\t\t\tconst rgb = colorHex2RGB(this.defaultColor);\n\t\t\tgl.uniform4f(uColor, rgb[0], rgb[1], rgb[2], 1.0);\n\t\t}\n\n\t}\n\n\tisVisible(): boolean {\n\t\treturn this.showGrid\n\t}\n\n\ttoggleShowGrid() {\n\t\tthis.showGrid = !this.showGrid\n\t}\n\t/**\n\t * @param mMatrix model matrix associated with current HiPS (or scene) transform\n\t * @param fovObj current field-of-view (degrees). If your FoV type differs,\n\t * pass the numeric value here; this signature matches original usage.\n\t */\n\tdraw(input: SkyEntityDrawInput): void {\n\t\tconst fovDeg = input.fovDeg\n\t\tif (!fovDeg) return\n\n\t\tconst gl = super.webgl as GL;\n\t\tconst mMatrix = this.getModelMatrix();\n\n\t\tconst camera = input.camera\n\t\tif (!camera) return\n\t\tconst vMatrix = camera.getCameraMatrix()\n\n\t\tconst pMatrix = input.pMatrix\n\t\tif (!pMatrix) return\n\n\t\tif (!vMatrix) return\n\t\tif (this._thetaArray.length === 0) return;\n\n\t\tthis.refresh(fovDeg);\n\n\t\tif (!this.showGrid) {\n\t\t\t// gridTextHelper.resetDivSets();\n\t\t\tthis.gridText.resetDivSets();\n\t\t\treturn;\n\t\t}\n\n\t\t// const pMatrix = computePerspectiveMatrixSingleton.pMatrix as ReadonlyMat4;\n\t\t\n\t\tthis.enableShader(mMatrix, pMatrix, vMatrix);\n\n\t\t// Draw Dec rings\n\t\tfor (let i = 0; i < this._phiArray.length; i++) {\n\t\t\t(super.webgl as GL).bindBuffer((super.webgl as GL).ARRAY_BUFFER, this._phiVertexPositionBuffer);\n\t\t\t(super.webgl as GL).bufferData((super.webgl as GL).ARRAY_BUFFER, this._phiArray[i], (super.webgl as GL).STATIC_DRAW);\n\t\t\t(super.webgl as GL).vertexAttribPointer(this._attribLocations.position, 3, (super.webgl as GL).FLOAT, false, 0, 0);\n\t\t\t(super.webgl as GL).enableVertexAttribArray(this._attribLocations.position);\n\n\t\t\t(super.webgl as GL).drawArrays((super.webgl as GL).LINE_LOOP, 0, 360 / this._phiStep);\n\t\t}\n\n\t\t// Draw RA rings\n\t\tfor (let j = 0; j < this._thetaArray.length; j++) {\n\t\t\t(super.webgl as GL).bindBuffer((super.webgl as GL).ARRAY_BUFFER, this._thetaVertexPositionBuffer);\n\t\t\t(super.webgl as GL).bufferData((super.webgl as GL).ARRAY_BUFFER, this._thetaArray[j], (super.webgl as GL).STATIC_DRAW);\n\t\t\t(super.webgl as GL).vertexAttribPointer(this._attribLocations.position, 3, (super.webgl as GL).FLOAT, false, 0, 0);\n\t\t\t(super.webgl as GL).enableVertexAttribArray(this._attribLocations.position);\n\n\t\t\t(super.webgl as GL).drawArrays((super.webgl as GL).LINE_LOOP, 0, 360 / this._thetaStep);\n\t\t}\n\n\t\t// Label layout (HTML overlay)\n\t\tconst center = FoVUtils.getCenterJ2000(gl.canvas as HTMLCanvasElement, this._healpixGrid, this._webgl, camera, pMatrix);\n\n\t\t// MVP = P * V * M\n\t\tconst mvMatrix = mat4.create();\n\t\t// mat4.multiply(mvMatrix, (global.camera as any).getCameraMatrix() as unknown as mat4, mMatrix);\n\t\tmat4.multiply(mvMatrix, vMatrix, mMatrix);\n\t\tconst mvpMatrix = mat4.create();\n\t\tmat4.multiply(mvpMatrix, pMatrix, mvMatrix);\n\n\t\t// Dec labels (loop over RA keys)\n\t\tfor (const [raDegKey, points] of this._dec4Labels.entries()) {\n\t\t\tif (Math.abs(raDegKey - center.raDeg) <= this._phiStep) {\n\t\t\t\tfor (let p = 0; p < points.length; p++) {\n\t\t\t\t\tconst [x, y, z] = points[p];\n\t\t\t\t\tconst phiPoint: [number, number, number, number] = [x, y, z, 1];\n\t\t\t\t\tconst point = new Point({ x, y, z }, CoordsType.CARTESIAN);\n\t\t\t\t\tconst decDeg = point.decDeg;\n\n\t\t\t\t\tif (Math.abs(decDeg - center.decDeg) < 60) {\n\t\t\t\t\t\tconst clipspace = vec4.create();\n\t\t\t\t\t\tvec4.transformMat4(clipspace, phiPoint, mvpMatrix);\n\n\t\t\t\t\t\t// perspective divide\n\t\t\t\t\t\tclipspace[0] /= clipspace[3];\n\t\t\t\t\t\tclipspace[1] /= clipspace[3];\n\n\t\t\t\t\t\t// clip->pixel\n\t\t\t\t\t\tconst pixelX = (clipspace[0] * 0.5 + 0.5) * (super.webgl as GL).canvas.width;\n\t\t\t\t\t\tconst pixelY = (clipspace[1] * -0.5 + 0.5) * (super.webgl as GL).canvas.height;\n\t\t\t\t\t\tthis.gridText.addEqDivSet(decDeg.toFixed(2), pixelX, pixelY, 'dec');\n\t\t\t\t\t\t// gridTextHelper.addEqDivSet(decDeg.toFixed(2), pixelX, pixelY, 'dec');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// RA labels (loop over Dec keys)\n\t\tfor (const [decDegKey, points] of this._ra4Labels.entries()) {\n\t\t\tif (Math.abs(decDegKey - center.decDeg) <= this._thetaStep) {\n\t\t\t\tfor (let p = 0; p < points.length; p++) {\n\t\t\t\t\tconst [x, y, z] = points[p];\n\t\t\t\t\tconst phiPoint: [number, number, number, number] = [x, y, z, 1];\n\t\t\t\t\tconst point = new Point({ x, y, z }, CoordsType.CARTESIAN);\n\t\t\t\t\tconst d = this.vectorDistance(point, center);\n\n\t\t\t\t\tconst raDeg = point.raDeg;\n\t\t\t\t\tif (d < degToRad(50)) {\n\t\t\t\t\t\tconst clipspace = vec4.create();\n\t\t\t\t\t\tvec4.transformMat4(clipspace, phiPoint, mvpMatrix);\n\n\t\t\t\t\t\tclipspace[0] /= clipspace[3];\n\t\t\t\t\t\tclipspace[1] /= clipspace[3];\n\n\t\t\t\t\t\tconst pixelX = (clipspace[0] * 0.5 + 0.5) * (super.webgl as GL).canvas.width;\n\t\t\t\t\t\tconst pixelY = (clipspace[1] * -0.5 + 0.5) * (super.webgl as GL).canvas.height;\n\n\t\t\t\t\t\t// gridTextHelper.addEqDivSet(raDeg.toFixed(2), pixelX, pixelY, 'ra');\n\t\t\t\t\t\tthis.gridText.addEqDivSet(raDeg.toFixed(2), pixelX, pixelY, 'ra');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.gridText.resetDivSets();\n\t\t// gridTextHelper.resetDivSets();\n\n\t\t// Cleanup\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n\t}\n}\n\n// const equatorialGridSingleton = new EquatorialGrid();\n// export default equatorialGridSingleton;","import { bootSetup } from './Config.js'\nimport Camera from './Camera.js'\nimport RayPickingUtils from './utils/RayPickingUtils.js'\nimport global from './Global.js'\nimport MouseHelper from './utils/MouseHelper.js'\n\nimport {\n cartesianToSpherical,\n sphericalToAstroDeg,\n raDegToHMS,\n decDegToDMS,\n AstroCoords,\n HMS,\n SphericalCoords,\n DMS,\n} from './utils/Utils.js'\n\n\nimport { HiPS } from './model/hips/HiPS.js'\nimport { HiPSDescriptor } from './model/hips/HiPSDescriptor.js'\nimport { PerspectiveMatrixManager } from './utils/PerspectiveMatrixManager.js'\nimport { FoV } from './model/FoV.js'\nimport { Point } from './model/Point.js'\nimport { FoVUtils } from './utils/FoVUtils.js'\nimport { CatalogueGL } from './model/catalogues/CatalogueGL.js'\nimport { FootprintSetGL, HoveredFootprintDetail } from './model/footprints/FootprintSetGL.js'\nimport { Source } from './model/Source.js'\n\nimport { EquatorialGrid } from './model/grid/EquatorialGrid.js'\nimport { HealpixGrid } from './model/grid/HealpixGrid.js'\nimport { SkyEntityDrawInput } from './model/AbstractSkyEntity.js'\nimport { CoordsType } from './utils/CoordsType.js'\nimport ColorMaps, { ColorMapName, ColorMap } from './model/ColorMaps.js'\n\nexport type PointCoordinates = {\n astroDeg: AstroCoords\n raHMS: HMS\n decDMS: DMS\n sphericalDeg: SphericalCoords\n}\n\nexport type CameraChangedDetail = {\n colorMap: ColorMap\n fovDeg: number;\n fovXDeg: number;\n fovYDeg: number;\n position: [number, number, number];\n vMatrix: Float32Array;\n pMatrix: Float32Array;\n mMatrix: Float32Array;\n camera: Camera,\n timestamp: number;\n centralPoint: Point,\n mouseHoverPoint: PointCoordinates | undefined,\n getFoVPolygon: Point[],\n};\n\n\n/**\n * AstroSphere — main WebGL scene controller (TS port)\n */\nclass AstroSphere {\n private static readonly MIN_WHEEL_SCALE = 0.85\n private static readonly MAX_WHEEL_SCALE = 1.8\n\n private _camera!: Camera\n private _perspectiveMatrixManager: PerspectiveMatrixManager\n\n private centralPoinCoords: PointCoordinates | undefined\n private mousePointCoords: PointCoordinates | undefined\n\n private canvas: HTMLCanvasElement\n private _healpixGrid: HealpixGrid\n private _equatorialGrid: EquatorialGrid\n\n\n private mouseHelper: MouseHelper\n\n private mouseDown = false\n private lastMouseX: number | null = null\n private lastMouseY: number | null = null\n private inertiaX = 0.0\n private inertiaY = 0.0\n private zoomInertia = 0.0\n private pointerDownX: number | null = null\n private pointerDownY: number | null = null\n private pointerDownAt = 0\n\n private _activeHiPS: HiPS | null = null\n\n private startup = true\n\n private fov: FoV\n\n private activeCatalogues: CatalogueGL[] = []\n private activeFootprintSets: FootprintSetGL[] = []\n private _webgl: WebGL2RenderingContext\n private _selectedColorMap: any\n private _cameraStatusChanged: boolean = false\n private lastHoveredSource: Source | null = null\n private lastHoveredCatalogue: CatalogueGL | null = null\n private zoomSensitivity = 1.0\n\n constructor(canvas: HTMLCanvasElement, webgl: WebGL2RenderingContext) {\n console.log('[AstroSphere] new instance for canvas', canvas.id);\n // Keep global GL context (as in original JS)\n this._webgl = webgl\n this.mouseHelper = new MouseHelper()\n this.canvas = canvas\n\n const nativeColorMap: ColorMapName = 'native'\n this._selectedColorMap = ColorMaps[nativeColorMap]\n\n global.insideSphere = bootSetup.insideSphere\n\n this.initCamera()\n\n this._healpixGrid = new HealpixGrid(this._webgl)\n this._perspectiveMatrixManager = new PerspectiveMatrixManager(canvas, this._camera, bootSetup.camera_fov_deg, bootSetup.camera_near_plane, bootSetup.insideSphere)\n this._perspectiveMatrixManager.computePerspectiveMatrix(canvas, this._camera, bootSetup.camera_fov_deg, bootSetup.camera_near_plane, bootSetup.insideSphere)\n\n this._equatorialGrid = new EquatorialGrid(this._webgl, this._healpixGrid)\n this._equatorialGrid.init(this._healpixGrid.getMinFoV())\n\n this.updateCentralPoint()\n this.startup = true\n this.addEventListeners(canvas)\n this.fov = this._healpixGrid.refreshFoV(this._camera, this._perspectiveMatrixManager.pMatrix)\n this._camera.refreshFoV(this.fov.minFoV)\n\n }\n\n private initCamera() {\n if (bootSetup.insideSphere) {\n this._camera = new Camera([0.0, 0.0, -0.005], true)\n } else {\n this._camera = new Camera([0.0, 0.0, 4.0], false)\n }\n }\n\n setCamera(camera: Camera) {\n this._camera = camera\n }\n\n setCameraRotationSensitivity(value: number): void {\n this._camera.setRotationSensitivity(value)\n }\n\n getCameraRotationSensitivity(): number {\n return this._camera.getRotationSensitivity()\n }\n\n get healpixGrid() {\n return this._healpixGrid\n }\n\n get equatorialGrid() {\n return this._equatorialGrid\n }\n\n // This is a lickely a duplication of FoVUtils.getCenterJ2000(this.canvas)\n private updateCentralPoint(): PointCoordinates {\n\n\n const sphericalCoords = this.getPhiThetaDeg(this.canvas)\n const astroCoords = sphericalToAstroDeg(sphericalCoords.phi, sphericalCoords.theta)\n const raHMS = raDegToHMS(astroCoords.ra)\n const decDMS = decDegToDMS(astroCoords.dec)\n this.centralPoinCoords = {\n astroDeg: astroCoords,\n sphericalDeg: sphericalCoords,\n raHMS: raHMS,\n decDMS: decDMS\n }\n return this.centralPoinCoords\n }\n\n\n private updateLastMousePoint(): PointCoordinates {\n\n const sphericalCoords = { phi: this.mouseHelper.phi, theta: this.mouseHelper.theta } as SphericalCoords\n const astroCoords = { ra: this.mouseHelper.ra, dec: this.mouseHelper.dec } as AstroCoords\n const raHMS = this.mouseHelper.raHMS as HMS\n const decDMS = this.mouseHelper.decDMS as DMS\n this.mousePointCoords = {\n astroDeg: astroCoords,\n sphericalDeg: sphericalCoords,\n raHMS: raHMS,\n decDMS: decDMS\n }\n return this.mousePointCoords\n }\n\n private clearLastMousePoint(): void {\n this.mousePointCoords = undefined\n }\n\n // This should call FoVUtils.getJ200Centre(this.canvas)\n getCentralPointCoordinates(): PointCoordinates | undefined {\n return this.centralPoinCoords\n }\n\n getLastMousePointCoordinates(): PointCoordinates | undefined {\n return this.mousePointCoords\n }\n\n private clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n }\n\n private computeZoomStep(currentFov: number, deltaY: number): number {\n const direction = deltaY < 0 ? -1 : 1\n const wheelScale = this.clamp(\n Math.abs(deltaY) / 120,\n AstroSphere.MIN_WHEEL_SCALE,\n AstroSphere.MAX_WHEEL_SCALE,\n )\n\n // Continuous wheel response:\n // - broad FoV stays responsive without large jumps\n // - narrow FoV keeps a usable floor to avoid the 0.1 -> 0.02 deg stall\n const baseMagnitude = this.clamp(\n 0.0012 + 0.0025 * Math.sqrt(Math.max(currentFov, 0)),\n 0.0012,\n 0.04,\n )\n\n return direction * baseMagnitude * wheelScale * this.zoomSensitivity\n }\n\n setZoomSensitivity(value: number): void {\n this.zoomSensitivity = this.clamp(value, 0.2, 3)\n }\n\n getZoomSensitivity(): number {\n return this.zoomSensitivity\n }\n\n\n private emitCameraChanged(reason: string) {\n // avoid dispatch before scene is ready\n if (!this._activeHiPS) return;\n if (!(this._healpixGrid as any)?.fovObj) return;\n\n const detail = this.getCurrentStatus();\n if (!detail) return;\n\n // optional debug\n // console.log('[AstroSphere] emit camera-changed:', reason);\n\n this.canvas.dispatchEvent(\n new CustomEvent<CameraChangedDetail>('camera-changed', {\n detail,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private addEventListeners(canvas: HTMLCanvasElement) {\n if (global.debug) {\n console.log('[AstroSphere::addEventListeners]')\n }\n\n const CLICK_MAX_DISTANCE_PX = 4;\n const CLICK_MAX_DURATION_MS = 250;\n\n const rect = canvas.getBoundingClientRect();\n this.lastMouseX = rect.left; // locale al canvas\n this.lastMouseY = rect.top;\n\n const handleMouseDown = (event: PointerEvent) => {\n canvas.setPointerCapture(event.pointerId)\n this.mouseDown = true\n\n const rect = canvas.getBoundingClientRect();\n this.lastMouseX = event.clientX - rect.left; // locale al canvas\n this.lastMouseY = event.clientY - rect.top; // locale al canvas\n this.pointerDownX = this.lastMouseX;\n this.pointerDownY = this.lastMouseY;\n this.pointerDownAt = Date.now();\n\n const mousePoint = RayPickingUtils.getIntersectionPointWithSingleModel(\n this.lastMouseX,\n this.lastMouseY,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix\n );\n\n if (mousePoint && mousePoint.length > 0) {\n this.mouseHelper.update(mousePoint);\n\n this.updateLastMousePoint();\n } else {\n this.clearLastMousePoint();\n }\n\n event.preventDefault()\n\n return false\n }\n\n const handleMouseUp = (event: PointerEvent) => {\n canvas.releasePointerCapture(event.pointerId)\n this.mouseDown = false\n document.body.style.cursor = 'auto'\n\n if (event.button !== 0) {\n event.preventDefault()\n return false\n }\n\n const rect = canvas.getBoundingClientRect();\n const localX = event.clientX - rect.left;\n const localY = event.clientY - rect.top;\n this.lastMouseX = localX;\n this.lastMouseY = localY;\n\n const moveDist = Math.hypot(\n localX - (this.pointerDownX ?? localX),\n localY - (this.pointerDownY ?? localY)\n );\n const elapsedMs = Date.now() - this.pointerDownAt;\n const isClick = moveDist <= CLICK_MAX_DISTANCE_PX && elapsedMs <= CLICK_MAX_DURATION_MS;\n\n if (isClick) {\n const mousePoint = RayPickingUtils.getIntersectionPointWithSingleModel(\n localX,\n localY,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix\n );\n\n if (mousePoint && mousePoint.length > 0) {\n this.mouseHelper.update(mousePoint);\n this.updateLastMousePoint();\n\n for (const cat of this.activeCatalogues) {\n const clickResult = cat.selectPrimarySourceFromClick(this.mouseHelper);\n if (!clickResult?.sources.length) continue;\n this._webgl.canvas.dispatchEvent(\n new CustomEvent('source-clicked', {\n detail: {\n source: clickResult.sources,\n selectionState: clickResult.selectionState,\n catalogue: cat,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n for (const fset of this.activeFootprintSets) {\n const clickResult =\n fset.selectPrimaryFootprintFromClick(this.mouseHelper);\n if (!clickResult?.footprints.length) continue;\n this._webgl.canvas.dispatchEvent(\n new CustomEvent('footprint-clicked', {\n detail: {\n footprint: clickResult.footprints,\n selectionState: clickResult.selectionState,\n footprintSet: fset,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n }\n } else {\n this.clearLastMousePoint();\n }\n }\n\n const handleMouseMove = (event: PointerEvent) => {\n const rect = canvas.getBoundingClientRect();\n\n // 🔹 canvas-local coordinates\n const localX = event.clientX - rect.left;\n const localY = event.clientY - rect.top;\n\n const newX = localX;\n const newY = localY;\n\n // if (!healpixGridSingleton) return;\n if (!this._healpixGrid) return;\n\n\n if (this.mouseDown) {\n document.body.style.cursor = 'grab';\n // Rotation deltas – either use client-space or local-space, but be consistent\n const deltaX = ((newX - (this.lastMouseX ?? newX)) * Math.PI) / canvas.width;\n const deltaY = ((newY - (this.lastMouseY ?? newY)) * Math.PI) / canvas.height;\n\n this.inertiaX += 0.1 * deltaX;\n this.inertiaY += 0.1 * deltaY;\n\n this.updateCentralPoint();\n\n } else {\n // Use canvas-local coords for picking\n const mousePoint = RayPickingUtils.getIntersectionPointWithSingleModel(\n localX,\n localY,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix\n );\n\n if (mousePoint && mousePoint.length > 0) {\n this.mouseHelper.update(mousePoint);\n\n this.updateLastMousePoint();\n } else {\n this.clearLastMousePoint();\n }\n }\n\n if (!this.centralPoinCoords) {\n this.updateCentralPoint();\n }\n\n this.lastMouseX = newX;\n this.lastMouseY = newY;\n\n this._cameraStatusChanged = true\n this.emitCameraChanged('pointermove');\n event.preventDefault();\n };\n\n const handleMouseWheel = (event: WheelEvent) => {\n const currentFov = this._healpixGrid.getMinFoV()\n const zoomStep = this.computeZoomStep(currentFov, event.deltaY)\n\n // Apply wheel zoom immediately and discard any queued inertia so reversing\n // direction feels responsive instead of \"buffered\".\n this.zoomInertia = 0\n this._camera.zoom(zoomStep)\n\n this.fov = this._healpixGrid.refreshFoV(this._camera, this._perspectiveMatrixManager.pMatrix)\n this._camera.refreshFoV(this.fov.minFoV)\n \n this._cameraStatusChanged = true\n this.emitCameraChanged('wheel');\n event.preventDefault()\n }\n\n const handleContextMenu = (event: MouseEvent) => {\n event.preventDefault();\n\n const rect = canvas.getBoundingClientRect();\n const localX = event.clientX - rect.left;\n const localY = event.clientY - rect.top;\n\n const mousePoint = RayPickingUtils.getIntersectionPointWithSingleModel(\n localX,\n localY,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix\n );\n\n if (!mousePoint || mousePoint.length === 0) {\n return false;\n }\n\n this.mouseHelper.update(mousePoint);\n this.updateLastMousePoint();\n\n for (const cat of this.activeCatalogues) {\n const pickResult = cat.getSourcesFromPointer(this.mouseHelper);\n if (!pickResult?.sources.length) continue;\n\n this._webgl.canvas.dispatchEvent(\n new CustomEvent('source-contextmenu', {\n detail: {\n source: pickResult.sources,\n catalogue: cat,\n clientX: event.clientX,\n clientY: event.clientY,\n },\n bubbles: true,\n composed: true,\n })\n );\n break;\n }\n\n for (const fset of this.activeFootprintSets) {\n const pickResult = fset.getFootprintsFromPointer(this.mouseHelper);\n if (!pickResult?.footprints.length) continue;\n\n this._webgl.canvas.dispatchEvent(\n new CustomEvent('footprint-contextmenu', {\n detail: {\n footprint: pickResult.footprints,\n footprintSet: fset,\n clientX: event.clientX,\n clientY: event.clientY,\n },\n bubbles: true,\n composed: true,\n })\n );\n break;\n }\n\n return false;\n }\n\n\n const onKeyDown = (evt: KeyboardEvent) => {\n if (!evt.ctrlKey) {\n return;\n }\n\n // console.log('[AstroSphere::onKeyDown] key=', evt.key)\n switch (evt.key) {\n case '1':\n // Free camera\n this._camera.clearRotationLock();\n break;\n\n case '2':\n // Lock X axis rotation\n this._camera.setRotationLock({ x: true, y: false, z: false });\n break;\n\n case '3':\n // Lock Y axis rotation\n this._camera.setRotationLock({ x: false, y: true, z: false });\n break;\n\n case '4':\n // Lock Z axis rotation\n this._camera.setRotationLock({ x: false, y: false, z: true });\n break;\n }\n }\n\n console.log('[AstroSphere] registering pointer and wheel listeners on canvas');\n canvas.onpointerdown = handleMouseDown\n canvas.onpointerup = handleMouseUp\n canvas.onpointermove = handleMouseMove\n canvas.onpointerleave = () => {\n this.clearLastMousePoint();\n this._cameraStatusChanged = true;\n this.emitCameraChanged('pointerleave');\n }\n\n console.log('[AstroSphere] adding wheel event listener with passive: false');\n canvas.addEventListener('wheel', handleMouseWheel, { passive: false })\n canvas.addEventListener('contextmenu', handleContextMenu)\n\n\n console.log('[AstroSphere] registering global keydown listener on document');\n document.addEventListener('keydown', onKeyDown, { capture: true });\n\n\n }\n\n // REVIEW THIS METHOD AND MOVE IT \n getPhiThetaDeg(canvas: HTMLCanvasElement) {\n const rect = canvas.getBoundingClientRect();\n const maxX = rect.width\n const maxY = rect.height\n const pickerPoint = RayPickingUtils.getIntersectionPointWithSingleModel(\n maxX / 2,\n maxY / 2,\n this._healpixGrid,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix\n )\n\n return cartesianToSpherical(pickerPoint)\n }\n\n activateHiPS(hipsDescriptor: HiPSDescriptor) {\n\n this._activeHiPS = new HiPS(\n 1,\n [0.0, 0.0, 0.0],\n 0,\n 0,\n hipsDescriptor,\n this._webgl,\n this._healpixGrid\n )\n }\n\n // Catalogue section\n async showCatalogue(cat: CatalogueGL) {\n // console.log(cat)\n if (cat) this.activeCatalogues.push(cat)\n return cat\n }\n\n deleteCatalogue(catalogue: CatalogueGL) {\n this.activeCatalogues = this.activeCatalogues.filter(c => c !== catalogue);\n }\n // End Catalogue section\n\n // Footprint section\n async showFootprintSet(fset: FootprintSetGL) {\n // console.log(fset)\n if (fset) this.activeFootprintSets.push(fset)\n return fset\n }\n\n deleteFootprintSet(footprintSet: FootprintSetGL) {\n this.activeFootprintSets = this.activeFootprintSets.filter(fst => fst !== footprintSet);\n }\n\n getHoveredFootprints(): HoveredFootprintDetail[] {\n let footprintsHovered: HoveredFootprintDetail[] = []\n this.activeFootprintSets.forEach(fset => {\n footprintsHovered.push(fset.hoveredFootprints)\n });\n return footprintsHovered\n }\n // End Footprint section\n\n\n goTo(raDeg: number, decDeg: number): void {\n this._camera.goTo(raDeg, decDeg)\n }\n\n getFoV(): FoV {\n return this.fov\n }\n\n getFoVPolygon(): Point[] {\n if (this.healpixGrid == null) throw new Error(`healpixGrid is ${this.healpixGrid}`)\n return FoVUtils.getFoVPolygon(this._camera, this.canvas, this._healpixGrid, this._healpixGrid, this._webgl, this._perspectiveMatrixManager.pMatrix)\n }\n\n changeFoV(deg: number) {\n const distance = this._healpixGrid.getFoV().computeDistanceFromAngle(deg)\n this._camera.translate(distance)\n this.fov = this._healpixGrid.refreshFoV(this._camera, this._perspectiveMatrixManager.pMatrix)\n this._camera.refreshFoV(this.fov.minFoV)\n }\n\n changeFoV2(deg: number) {\n const newCameraPos = this._healpixGrid.getFoV().computeCameraPositionForFoV(deg)\n this._camera.setCameraPosition(newCameraPos)\n }\n\n changeFoV3(deg: number) {\n const newPos = this._healpixGrid.getFoV().computeCameraPositionForAngularDiameter(deg);\n this._camera.setCameraPosition(newPos);\n\n\n // Recompute projection after moving the camera\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n this.canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane, false\n );\n }\n\n getInsideSphere(): boolean {\n return global.insideSphere\n }\n\n toggleInsideSphere() {\n global.insideSphere = !global.insideSphere\n // console.log(global.insideSphere)\n this._camera.toggleInsideSphere()\n }\n\n\n // imposta posizione camera\n public setCameraPosition(pos: [number, number, number]) {\n this._camera.setCameraPosition(pos);\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n this.canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n global.insideSphere\n );\n }\n\n // imposta orientamento camera tramite view matrix\n public setCameraMatrix(viewMatrix: Float32Array) {\n this._camera.setCameraMatrix(viewMatrix);\n\n this._perspectiveMatrixManager.computePerspectiveMatrix(\n this.canvas,\n this._camera,\n bootSetup.camera_fov_deg,\n bootSetup.camera_near_plane,\n global.insideSphere\n );\n }\n\n private _refreshingStatus: boolean = false\n // set completo camera (pos + orientamento)\n public applyFullCameraState(detail: CameraChangedDetail, applyColor: boolean) {\n\n this._refreshingStatus = true\n this._camera = detail.camera\n // this.goTo(detail.centralPoint.raDeg, detail.centralPoint.decDeg)\n\n this._healpixGrid.setModelMatrix(detail.mMatrix)\n this._perspectiveMatrixManager.pMatrix = detail.pMatrix\n\n this.setCameraMatrix(detail.vMatrix);\n // this.goTo(detail.centralPoint.raDeg, detail.centralPoint.decDeg)\n if (applyColor) {\n this._activeHiPS?.changeColorMap(detail.colorMap)\n }\n this._refreshingStatus = false\n }\n\n public getCurrentStatus(): CameraChangedDetail | null {\n this.updateCentralPoint();\n const centralradeg = this.centralPoinCoords?.astroDeg.ra\n const centraldecdeg = this.centralPoinCoords?.astroDeg.dec\n // if (!centraldecdeg || !centralradeg) {\n if (centralradeg == null || centraldecdeg == null) {\n return null\n }\n // if (this._rotating && centraldecdeg && centralradeg) {\n const detail: CameraChangedDetail = {\n fovDeg: this.fov.minFoV,\n fovXDeg: this.fov.xFoV,\n fovYDeg: this.fov.yFoV,\n position: this._camera.getCameraPosition(),\n vMatrix: this._camera.getCameraMatrix() as Float32Array,\n pMatrix: this._perspectiveMatrixManager.pMatrix as Float32Array,\n mMatrix: this._healpixGrid.getModelMatrix() as Float32Array,\n camera: this._camera,\n timestamp: performance.now(),\n centralPoint: new Point({ raDeg: centralradeg, decDeg: centraldecdeg }, CoordsType.ASTRO),\n mouseHoverPoint: this.mousePointCoords,\n colorMap: this._selectedColorMap,\n getFoVPolygon: this.getFoVPolygon(),\n };\n return detail\n // }\n // return null\n }\n\n changeColorMap(cm: ColorMap) {\n if (!this._activeHiPS) return\n this._selectedColorMap = cm\n this._activeHiPS?.changeColorMap(cm)\n }\n\n private prevFov: number = 0\n private prevCentralRaDeg: number | null = null;\n private prevCentralDecDeg: number | null = null;\n\n get activeHiPS(): HiPS | null {\n return this._activeHiPS\n }\n\n draw(canvas: HTMLCanvasElement) {\n\n if (this._refreshingStatus) return\n if (!this._webgl) return\n if (!this._activeHiPS) return\n\n if (!this._healpixGrid || Object.keys(this._healpixGrid).length === 0) return\n if ((this._healpixGrid as any).fovObj === undefined) return\n\n // In WebGL2, OES_element_index_uint is core, no need to fetch the extension each frame.\n // global.gl.getExtension('OES_element_index_uint')\n // global.gl.clear(global.gl.COLOR_BUFFER_BIT | global.gl.DEPTH_BUFFER_BIT)\n\n this._perspectiveMatrixManager.computePerspectiveMatrix(canvas, this._camera, bootSetup.camera_fov_deg, bootSetup.camera_near_plane, global.insideSphere)\n\n let cameraRotated = false\n let THETA = 0\n let PHI = 0\n\n this._webgl.viewport(0, 0, this._webgl.drawingBufferWidth, this._webgl.drawingBufferHeight);\n this._webgl.clear(this._webgl.COLOR_BUFFER_BIT | this._webgl.DEPTH_BUFFER_BIT)\n\n // Zoom inertia\n if (this.zoomInertia !== 0) {\n if (Math.abs(this.zoomInertia) > 0.0001) {\n this._camera.zoom(this.zoomInertia)\n this.zoomInertia *= 0.95\n\n this.fov = this._healpixGrid.refreshFoV(this._camera, this._perspectiveMatrixManager.pMatrix)\n this._camera.refreshFoV(this.fov.minFoV)\n if (this.prevFov !== this.fov.minFoV) {\n\n if (!this.centralPoinCoords) {\n this.centralPoinCoords = this.updateCentralPoint()\n }\n\n\n this.prevFov = this.fov.minFoV\n }\n } else {\n this.zoomInertia = 0\n }\n this._cameraStatusChanged = true\n }\n\n // Rotation inertia\n if (this.mouseDown || Math.abs(this.inertiaX) > 0.02 || Math.abs(this.inertiaY) > 0.02) {\n cameraRotated = true\n THETA = this.inertiaY\n PHI = this.inertiaX\n this.inertiaX *= 0.95\n this.inertiaY *= 0.95\n this._camera.rotate(PHI, THETA)\n this._perspectiveMatrixManager.computePerspectiveMatrix(canvas, this._camera, bootSetup.camera_fov_deg, bootSetup.camera_near_plane, global.insideSphere)\n } else {\n this.inertiaY = 0\n this.inertiaX = 0\n }\n\n // Se la camera è ruotata (anche solo per inerzia), aggiorna punto centrale + emetti cameraChanged\n if (cameraRotated) {\n // Ricalcola il punto centrale\n const center = this.updateCentralPoint()\n const centralRaDeg = center.astroDeg.ra\n const centralDecDeg = center.astroDeg.dec;\n\n\n // Evita spam: emetti solo se è cambiato abbastanza\n const raChanged =\n this.prevCentralRaDeg === null ||\n Math.abs(centralRaDeg - this.prevCentralRaDeg) > 1e-5;\n const decChanged =\n this.prevCentralDecDeg === null ||\n Math.abs(centralDecDeg - this.prevCentralDecDeg) > 1e-5;\n\n if (raChanged || decChanged) {\n\n this.prevCentralRaDeg = centralRaDeg;\n this.prevCentralDecDeg = centralDecDeg;\n }\n }\n\n if (this._cameraStatusChanged) {\n const detail = this.getCurrentStatus()\n if (detail) {\n // console.log('[AstroSphere::draw] emitting camera-changed event due to camera status change', detail)\n // console.log('[AstroSphere::draw] inertia', this.zoomInertia, this.inertiaX, this.inertiaY)\n this.canvas.dispatchEvent(\n new CustomEvent<CameraChangedDetail>('camera-changed', {\n detail,\n bubbles: true, composed: true,\n })\n );\n }\n if (!this.startup) {\n this._cameraStatusChanged = false\n }\n\n }\n\n // GL state\n this._webgl.disable(this._webgl.DEPTH_TEST)\n this._webgl.enable(this._webgl.BLEND)\n this._webgl.enable(this._webgl.CULL_FACE)\n this._webgl.cullFace(global.insideSphere ? this._webgl.BACK : this._webgl.FRONT)\n this._webgl.blendFunc(this._webgl.SRC_ALPHA, this._webgl.ONE_MINUS_SRC_ALPHA)\n\n const visibleOrder = Math.min(\n this._healpixGrid.visibleorder,\n this._activeHiPS.maxOrder,\n )\n this._healpixGrid.visibleTilesManager.computeVisiblePixels(\n visibleOrder,\n this._webgl,\n this._camera,\n this._perspectiveMatrixManager.pMatrix,\n )\n\n // DRAW HiPS\n const skyEntityDrawInput: SkyEntityDrawInput = {\n fovDeg: this._healpixGrid.getMinFoV(),\n camera: this._camera,\n pMatrix: this._perspectiveMatrixManager.pMatrix\n }\n this._activeHiPS.draw(skyEntityDrawInput)\n\n this._healpixGrid.draw(skyEntityDrawInput)\n this._equatorialGrid.draw(skyEntityDrawInput)\n\n this._webgl.enable(this._webgl.DEPTH_TEST)\n this._webgl.disable(this._webgl.CULL_FACE)\n\n if (this.startup) {\n this.startup = false\n const phiTheta = this.getPhiThetaDeg(canvas)\n const raDecDeg = sphericalToAstroDeg(phiTheta.phi, phiTheta.theta)\n const raHMS = raDegToHMS(raDecDeg.ra)\n const decDMS = decDegToDMS(raDecDeg.dec)\n this.prevFov = this._healpixGrid.getMinFoV()\n this._cameraStatusChanged = true;\n console.log('(startup coords)', {\n raDeg: raDecDeg.ra,\n decDeg: raDecDeg.dec,\n raHMS,\n decDMS,\n })\n }\n\n\n this.activeCatalogues.forEach(cat => {\n if (this._activeHiPS) {\n cat.draw(this._activeHiPS.getModelMatrix() as Float32Array, this.mouseHelper, this._camera.getCameraMatrix() as Float32Array, this._perspectiveMatrixManager.pMatrix as Float32Array)\n }\n })\n \n this.emitHoveredSourceIfChanged();\n\n this.activeFootprintSets.forEach(fst => {\n if (this._activeHiPS) {\n fst.draw(this._activeHiPS.getModelMatrix() as Float32Array, this.mouseHelper, this._camera.getCameraMatrix() as Float32Array, this._perspectiveMatrixManager.pMatrix as Float32Array)\n }\n })\n\n\n }\n\n private emitHoveredSourceIfChanged() {\n let nextHoveredSource: Source | null = null;\n let nextHoveredCatalogue: CatalogueGL | null = null;\n\n for (const cat of this.activeCatalogues) {\n const hovered = cat.getPrimaryHoveredSource();\n if (!hovered) continue;\n nextHoveredSource = hovered;\n nextHoveredCatalogue = cat;\n break;\n }\n\n const unchanged = nextHoveredSource === this.lastHoveredSource\n && nextHoveredCatalogue === this.lastHoveredCatalogue;\n if (unchanged) return;\n\n this.lastHoveredSource = nextHoveredSource;\n this.lastHoveredCatalogue = nextHoveredCatalogue;\n\n this._webgl.canvas.dispatchEvent(\n new CustomEvent('source-hovered', {\n detail: { source: nextHoveredSource, catalogue: nextHoveredCatalogue },\n bubbles: true,\n composed: true,\n })\n );\n }\n}\nexport default AstroSphere\n","// HiPSDescriptor.ts\n'use strict'\n\nexport interface HiPSDataRange {\n min: number | undefined\n max: number | undefined\n}\n\nexport type HiPSFrame = 'equatorial' | 'galactic' | string\n\nexport class HiPSDescriptor {\n private _minOrder: number = 3\n private _imgformats: string[] = []\n private _datarange: HiPSDataRange = { min: undefined, max: undefined }\n private _maxOrder: number | undefined\n private _tilewidth: number | undefined\n private _hipsFrame: HiPSFrame | undefined\n private _hipsName: string = 'NONAME'\n private _hipsurl: string\n private _emMin: number | undefined\n private _emMax: number | undefined\n private _isGalctic: boolean = false\n private _propertiesRawText: string\n private _propertiesMap: Map<string, string> = new Map()\n\n constructor(hipsproperties: string, hipsurl: string) {\n this._hipsurl = hipsurl\n\n this._propertiesRawText = hipsproperties\n const lines = hipsproperties.split(/\\r\\n|\\n/)\n for (const raw of lines) {\n const line = raw.trim()\n if (!line || line.startsWith('#')) continue\n\n const maybeKey = line.slice(0, line.indexOf('=')).trim()\n const maybeValue = this.getValue(line)\n if (maybeKey && maybeValue !== undefined) {\n this._propertiesMap.set(maybeKey, maybeValue)\n }\n\n if (line.startsWith('hips_tile_format') || line.startsWith('format')) {\n // normalize jpeg→jpg\n const list = this.getValue(line)?.replace(/jpeg/gi, 'jpg') ?? ''\n this._imgformats = list.split(/\\s+/).filter(Boolean)\n } else if (line.startsWith('hips_data_range')) {\n const v = this.getValue(line)\n if (v) {\n const [minStr, maxStr] = v.split(/\\s+/)\n this._datarange.min = parseFloat(minStr)\n this._datarange.max = parseFloat(maxStr)\n }\n } else if (line.startsWith('hips_tile_width')) {\n const n = Number(this.getValue(line))\n this._tilewidth = Number.isFinite(n) ? n : undefined\n } else if (line.startsWith('hips_order_min')) {\n const n = Number(this.getValue(line))\n this._minOrder = Number.isFinite(n) ? n : this._minOrder\n } else if (line.startsWith('hips_order') || line.startsWith('maxOrder')) {\n const n = Number(this.getValue(line))\n this._maxOrder = Number.isFinite(n) ? n : this._maxOrder\n } else if (line.startsWith('hips_frame') || line.startsWith('frame')) {\n this._hipsFrame = this.getValue(line) as HiPSFrame\n } else if (line.startsWith('obs_collection') || line.startsWith('label')) {\n this._hipsName = this.getValue(line) ?? this._hipsName\n } else if (line.startsWith('em_min')) {\n const n = Number(this.getValue(line))\n this._emMin = Number.isFinite(n) ? n : undefined\n } else if (line.startsWith('em_max')) {\n const n = Number(this.getValue(line))\n this._emMax = Number.isFinite(n) ? n : undefined\n }\n \n }\n\n if (!this._hipsName) {\n console.warn(`[HiPSDescriptor] hipsName not defined in properties of ${this._hipsurl}. Defaulting to 'NONAME'.`)\n }\n if (!this._hipsFrame) {\n console.warn(\n `[HiPSDescriptor] hips_frame not defined in properties of ${this._hipsurl}. Defaulting to 'equatorial'.`\n )\n this._hipsFrame = 'equatorial'\n }\n this._isGalctic = this._hipsFrame.toLowerCase().includes('gal')\n\n if (this._maxOrder === undefined || this._imgformats.length === 0) {\n throw new Error(\n `[HiPSDescriptor] Invalid properties for ${this._hipsurl}. maxOrder=${this._maxOrder}, imgFormats.length=${this._imgformats.length}`\n )\n }\n }\n\n private getValue(line: string): string | undefined {\n const idx = line.indexOf('=')\n if (idx < 0) return undefined\n return line.slice(idx + 1).trim()\n }\n\n // --- Getters ---\n get propertiesRawText(){\n return this._propertiesRawText\n }\n\n get properties(): ReadonlyMap<string, string> {\n return new Map(this._propertiesMap)\n }\n\n getProperty(key: string): string | undefined {\n return this._propertiesMap.get(key)\n }\n\n get surveyName(): string {\n return this._hipsName\n }\n\n get url(): string {\n return this._hipsurl\n }\n\n get maxOrder(): number {\n return this._maxOrder as number\n }\n\n get minOrder(): number {\n return this._minOrder\n }\n\n get imgFormats(): string[] {\n return this._imgformats\n }\n\n get hipsFrame(): HiPSFrame {\n return this._hipsFrame as HiPSFrame\n }\n\n get isGalactic(): boolean {\n return this._isGalctic\n }\n\n get emMin(): number | undefined {\n return this._emMin\n }\n\n get emMax(): number | undefined {\n return this._emMax\n }\n\n get tileWidth(): number | undefined {\n return this._tilewidth\n }\n\n get dataRange(): HiPSDataRange {\n return this._datarange\n }\n}\n","'use strict';\n\nimport { Healpix, Vec3, Pointing } from 'healpixjs';\nimport global from '../Global.js';\nimport {Point} from './Point.js';\n\nexport interface SourceDetail {\n key: string;\n value: string | number;\n valueType?: string;\n unit?: string;\n}\n\nexport class Source {\n private _point: Point;\n private _name?: string;\n private _details: any[];\n private _h_pix!: number;\n private _shapesize: number;\n private _brightnessFactor: number;\n\n /**\n * @param in_point Point.js (Cartesian/RA-Dec wrapper)\n * @param in_details Optional array of key/value metadata\n */\n constructor(in_point: Point, in_details: any[] = []) {\n this._point = in_point;\n this._details = in_details;\n this._shapesize = 16.0;\n this._brightnessFactor = -99;\n\n this.computeHealpixPixel();\n }\n \n getDetailByindex(index: number): string | number | undefined {\n if (index < 0 || index >= this._details.length) {\n return undefined;\n }\n return this._details[index];\n }\n\n get details(): any[] {\n return this._details;\n }\n private computeHealpixPixel(): void {\n // Get Healpix instance from global\n const healpix: Healpix = global.getHealpix(global.nsideForSelection);\n const vec3 = new Vec3(this._point.x, this._point.y, this._point.z);\n const ptg = new Pointing(vec3, false);\n this._h_pix = healpix.ang2pix(ptg, false);\n }\n\n get point(): Point {\n return this._point;\n }\n\n get name(): string | undefined {\n return this._name;\n }\n\n get healpixPixel(): number {\n return this._h_pix;\n }\n\n get shapeSize(): number {\n return this._shapesize;\n }\n set shapeSize(size: number) {\n this._shapesize = size;\n }\n\n get brightnessFactor(): number {\n return this._brightnessFactor;\n }\n /**\n * @param factor Must be in [-1..1]\n */\n set brightnessFactor(factor: number) {\n this._brightnessFactor = factor;\n }\n}","// HiPSShaderProgram.ts\nimport { mat4 } from 'gl-matrix';\nimport ShaderManager from './ShaderManager.js'\n\ntype GL = WebGL2RenderingContext;\n\ntype UniformNames = {\n vertex_color: string,\n m_perspective: string,\n m_model_view: string,\n}\n\ntype AttributeNames = {\n vertex_pos: string\n vertex_selected: string\n point_size: string\n point_hue: string\n}\n\ntype Locations = {\n pMatrix: WebGLUniformLocation | null\n mvMatrix: WebGLUniformLocation | null\n color: WebGLUniformLocation | null\n position: number\n hovered: number\n pointSize: number\n brightness: number\n}\n\n// export default class CatalogueShaderProgram {\nexport class CatalogueShaderProgram {\n private _shaderProgram: WebGLProgram | undefined\n private _vertexShader!: WebGLShader\n private _fragmentShader!: WebGLShader\n\n readonly gl_uniforms: UniformNames\n readonly gl_attributes: AttributeNames\n readonly locations: Locations\n private _webgl: WebGL2RenderingContext;\n\n \n constructor(webgl: WebGL2RenderingContext) {\n this._webgl = webgl\n this.gl_uniforms = {\n vertex_color: 'u_fragcolor',\n m_perspective: 'uPMatrix',\n m_model_view: 'uMVMatrix'\n }\n\n this.gl_attributes = {\n vertex_pos: 'aCatPosition',\n vertex_selected: 'a_selected',\n point_size: 'a_pointsize',\n point_hue: 'a_brightness'\n }\n\n this.locations = {\n pMatrix: null,\n mvMatrix: null,\n color: null,\n position: -1,\n hovered: -1,\n pointSize: -1,\n brightness: -1\n }\n }\n\n get shaderProgram(): WebGLProgram {\n if (!this._shaderProgram) {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n this._shaderProgram = gl.createProgram() as WebGLProgram\n this.initShaders()\n }\n return this._shaderProgram\n }\n\n private initShaders(): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n\n const fragmentShaderStr = ShaderManager.catalogueFS()\n this._fragmentShader = gl.createShader(gl.FRAGMENT_SHADER) as WebGLShader\n gl.shaderSource(this._fragmentShader, fragmentShaderStr)\n gl.compileShader(this._fragmentShader)\n console.log('FS log:', gl.getShaderInfoLog(this._fragmentShader) || 'ok');\n if (!gl.getShaderParameter(this._fragmentShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._fragmentShader) || 'Fragment shader compile error')\n return\n }\n\n const vertexShaderStr = ShaderManager.catalogueVS()\n this._vertexShader = gl.createShader(gl.VERTEX_SHADER) as WebGLShader\n gl.shaderSource(this._vertexShader, vertexShaderStr)\n gl.compileShader(this._vertexShader)\n console.log('VS log:', gl.getShaderInfoLog(this._vertexShader) || 'ok');\n if (!gl.getShaderParameter(this._vertexShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._vertexShader) || 'Vertex shader compile error')\n return\n }\n\n gl.attachShader(this.shaderProgram as WebGLProgram, this._vertexShader)\n gl.attachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n gl.linkProgram(this.shaderProgram as WebGLProgram)\n\n if (!gl.getProgramParameter(this.shaderProgram as WebGLProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders')\n }\n\n // shaderUtility.useProgram(this.shaderProgram)\n gl.useProgram(this.shaderProgram);\n\n this.locations.position = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.vertex_pos\n )\n this.locations.hovered = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.vertex_selected\n )\n this.locations.pointSize = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.point_size\n )\n this.locations.brightness = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.point_hue\n )\n this.locations.color = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.vertex_color\n )\n\n\n }\n\n enableShaders(\n pMatrix: Float32Array,\n modelMatrix: Float32Array,\n viewMatrix: Float32Array\n ): void {\n // const gl = global.gl as GL\n const gl = this._webgl as GL\n \n // shaderUtility.useProgram(this.shaderProgram)\n gl.useProgram(this.shaderProgram);\n\n\n this.locations.pMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_perspective\n )\n\n this.locations.mvMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_model_view\n )\n\n let mvMatrix = mat4.create()\n mvMatrix = mat4.multiply(mvMatrix, viewMatrix, modelMatrix)\n gl.uniformMatrix4fv(this.locations.pMatrix, false, pMatrix)\n gl.uniformMatrix4fv(this.locations.mvMatrix, false, mvMatrix as Float32Array)\n }\n}\n\n// export const catalogueShaderProgram = new CatalogueShaderProgram()","'use strict'\n/**\n * @author Fabrizio Giordano (Fab77)\n */\n\nexport type DetailValue = string | number;\n\nexport enum ColumnType {\n STRING = \"STRING\",\n NUMBER = \"NUMBER\",\n GEOM_RA = \"GEOM_RA\",\n GEOM_DEC = \"GEOM_DEC\",\n GEOM_FOOTPRINT = \"GEOM_FOOTPRINT\",\n MAIN_NAME = \"MAIN_NAME\"\n}\n\nexport interface MetadataInit {\n index: number;\n name: string;\n columnType: ColumnType;\n description?: string; // default: \"\"\n unit: string\n details?: Map<string, DetailValue>;\n}\n\nexport class MetadataColumn {\n \n private _index: number // mandatory\n\n private _name: string // mandatory\n private _description: string = \"\" // mandatory default \"\"\n private _columnType: ColumnType // mandatory\n private _unit: string // mandatory\n private _details: Map<string, string | number> = new Map()\n\n constructor(init: MetadataInit) {\n \n if (!init.name) throw new Error(`No name column defined.`)\n this._name = init.name\n\n if (init.index < 0 || isNaN(init.index)) throw new Error(`No index column defined.`)\n this._index = init.index\n \n this._columnType = init.columnType ?? ColumnType.STRING;\n\n this._unit = init.unit ?? \"\"\n\n this._description = init.description ?? \"\"\n \n if (init.details) this._details = new Map(init.details)\n }\n\n get details(): ReadonlyMap<string, DetailValue> {\n return new Map(this._details);\n }\n\n /** Get any detail; optional fallback. */\n getDetail(key: string, fallback?: DetailValue): DetailValue | undefined {\n return this._details.has(key) ? this._details.get(key) : fallback;\n }\n\n /** Type-leaning getters with fallbacks. */\n getString(key: string, fallback = \"\"): string {\n const v = this._details.get(key);\n return typeof v === \"string\" ? v : fallback;\n }\n\n getNumber(key: string, fallback = NaN): number {\n const v = this._details.get(key);\n return typeof v === \"number\" ? v : fallback;\n }\n\n /** Set or update a detail. */\n setDetail(key: string, value: DetailValue): void {\n this._details.set(key, value);\n }\n\n /** Add many details at once. */\n setDetails(details: Record<string, DetailValue> | Map<string, DetailValue>): void {\n const entries = details instanceof Map ? details.entries() : Object.entries(details);\n for (const [k, v] of entries) this._details.set(k, v);\n }\n\n /** Keys, values, entries (as arrays). */\n detailKeys(): string[] {\n return Array.from(this._details.keys());\n }\n\n detailValues(): DetailValue[] {\n return Array.from(this._details.values());\n }\n\n detailEntries(): [string, DetailValue][] {\n return Array.from(this._details.entries());\n }\n\n // ---------- core getters/setters ----------\n get name(): string {\n return this._name;\n }\n\n get description(): string {\n return this._description;\n }\n\n get columnType(): string {\n return this._columnType;\n }\n\n get index(): number | undefined {\n return this._index;\n }\n\n get unit(): string {\n return this._unit\n }\n\n // ---------- serialisation ----------\n toJSON(): Record<string, unknown> {\n return {\n name: this._name,\n description: this._description,\n columnType: this._columnType,\n index: this._index,\n unit: this._unit,\n details: Object.fromEntries(this._details),\n };\n }\n\n\n}","import { ColumnType, MetadataColumn } from \"./MetadataColumn.js\"\n\nexport class MetadataManager {\n\n static STANDARD_SIZE: string = \"STANDARD_SIZE\"\n static STANDARD_HUE: string = \"STANDARD_HUE\"\n\n private _outlineColumnList: MetadataColumn[] = []\n private _raColumnList: MetadataColumn[] = []\n private _decColumnList: MetadataColumn[] = []\n private _shapeColumnList: MetadataColumn[] = []\n private _hueColumnList: MetadataColumn[] = []\n\n private _selectedOutlineColumn?: MetadataColumn\n private _selectedRaColumn?: MetadataColumn\n private _selectedDecColumn?: MetadataColumn\n private _selectedShapeColumn?: MetadataColumn\n private _selectedHueColumn?: MetadataColumn\n private _selectedNameColumn?: MetadataColumn\n\n private _columns: MetadataColumn[] = []\n\n constructor(metadataColumns: MetadataColumn[]) {\n metadataColumns.forEach(c => {\n if (c.columnType == ColumnType.NUMBER) {\n this.addHueColumn(c)\n this.addShapeColumn(c)\n }\n if (c.columnType == ColumnType.GEOM_RA) {\n this.addRaColumn(c)\n }\n if (c.columnType == ColumnType.GEOM_DEC) {\n this.addDecColumn(c)\n }\n if (c.columnType == ColumnType.GEOM_FOOTPRINT) {\n this.addOutlineColumn(c)\n }\n if (c.columnType == ColumnType.MAIN_NAME) {\n this._selectedNameColumn = c\n }\n\n this._columns.push(c)\n })\n\n // if (!this._selectedNameColumn) {\n // throw new Error(\"No name column found\")\n // }\n }\n\n addOutlineColumn(outlineColumn: MetadataColumn) {\n this._outlineColumnList.push(outlineColumn)\n this._selectedOutlineColumn = outlineColumn\n }\n\n addRaColumn(column: MetadataColumn) {\n this._selectedRaColumn = this._selectedRaColumn || column\n this._raColumnList.push(column)\n }\n\n addDecColumn(column: MetadataColumn) {\n this._selectedDecColumn = this._selectedDecColumn || column\n this._decColumnList.push(column)\n }\n\n addHueColumn(column: MetadataColumn) {\n this._hueColumnList.push(column)\n }\n\n addShapeColumn(column: MetadataColumn) {\n this._shapeColumnList.push(column)\n }\n\n get selectedRaColumn(): MetadataColumn | undefined {\n return this._selectedRaColumn\n }\n get selectedDecColumn(): MetadataColumn | undefined {\n return this._selectedDecColumn\n }\n get selectedHueColumn(): MetadataColumn | undefined {\n return this._selectedHueColumn\n }\n get selectedShapeColumn(): MetadataColumn | undefined {\n return this._selectedShapeColumn\n }\n get selectedOutlineColumn(): MetadataColumn | undefined {\n return this._selectedOutlineColumn\n }\n get selectedNameColumn(): MetadataColumn | undefined {\n return this._selectedNameColumn\n }\n get columns(): MetadataColumn[] {\n return this._columns\n }\n\n get raColumnList() {\n return this._raColumnList\n }\n get decColumnList() {\n return this._decColumnList\n }\n get outlineColumnList() {\n return this._outlineColumnList\n }\n get hueColumnList() {\n return this._hueColumnList\n }\n get shapeColumnList() {\n return this._shapeColumnList\n }\n\n set selectedRaColumn(columnName: string) {\n this._selectedRaColumn = this._raColumnList.find(c => c.name === columnName) || this._selectedRaColumn\n }\n set selectedDecColumn(columnName: string) {\n this._selectedDecColumn = this._decColumnList.find(c => c.name === columnName) || this._selectedDecColumn\n }\n set selectedHueColumn(columnName: string) {\n this._selectedHueColumn = this._hueColumnList.find(c => c.name === columnName)\n }\n set selectedShapeColumn(columnName: string) {\n this._selectedShapeColumn = this._shapeColumnList.find(c => c.name === columnName)\n }\n set selectedNameColumn(columnName: string) {\n this._selectedNameColumn = this._shapeColumnList.find(c => c.name === columnName)\n }\n\n resetShapeColumn() {\n this._selectedShapeColumn = undefined\n }\n\n resetHueColumn() {\n this._selectedHueColumn = undefined\n }\n\n\n}","import {Source} from '../Source.js';\nimport { Point } from '../Point.js';\nimport { CoordsType } from '../..//utils/CoordsType.js';\nimport { colorHex2RGB } from '../../utils/Utils.js';\nimport MouseHelper from '../../utils/MouseHelper.js';\nimport { CatalogueShaderProgram } from '../../shader/CatalogueShaderProgram.js';\nimport { MetadataManager } from '../MetadataManager.js';\nimport { MetadataColumn } from '../MetadataColumn.js';\nimport { VisibleTilesManager } from '../hips/VisibleTilesManager.js';\n\nexport type ClickedSourceState = {\n source: Source;\n selected: boolean;\n};\n\nexport type CatalogueClickResult = {\n sources: Source[];\n selectionState: ClickedSourceState[];\n};\n\nexport type CataloguePickResult = {\n sources: Source[];\n pickedIndexes: number[];\n};\n\nexport class CatalogueGL {\n\n _kind: string = \"CatalogueGL\"\n static ELEM_SIZE: number = 6\n static BYTES_X_ELEM: number = new Float32Array().BYTES_PER_ELEMENT;\n static STANDARD_SHAPE_SIZE: number = 10.0\n static STANDARD_SHAPE_HUE: number = 3.0\n\n _ready: boolean;\n _name: string;\n _description: string;\n\n // Data\n _sources: Source[];\n\n // gl: GL;\n\n // Buffers & arrays\n vertexCataloguePositionBuffer: WebGLBuffer | null = null\n vertexhoveredCataloguePositionBuffer: WebGLBuffer | null = null\n vertexCataloguePosition: Float32Array;\n private _bufferInitialised = false\n private _webgl: WebGL2RenderingContext\n\n // Index/selection bookkeeping\n hoveredIndexes: number[];\n selectedIndexes: number[];\n extHoveredIndexes: number[];\n // extSelectedIndexes: number[];\n\n _oldMouseCoords: [number, number, number] | null;\n\n private _metadataManager: MetadataManager\n _isVisible: boolean = true\n\n _shapeColor = '#8F00FF';\n _healpixDensityMap: Map<number, number[]>;\n _providerUrl: string;\n _catalogueShaderProgram: CatalogueShaderProgram\n private _visibleTilesManager: VisibleTilesManager;\n\n constructor(\n catalogueName: string,\n catalogueDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n webgl: WebGL2RenderingContext,\n visibleTilesManager: VisibleTilesManager\n ) {\n this._webgl = webgl\n this._ready = false;\n this._visibleTilesManager = visibleTilesManager;\n\n (this as any).TYPE = 'SOURCE_CATALOGUE';\n\n this._name = catalogueName;\n this._description = catalogueDescription;\n this._providerUrl = providerUrl;\n this._metadataManager = metadataManager\n\n this._sources = [];\n\n // GL init\n // this.gl = global.gl as GL;\n // this.vertexCataloguePositionBuffer = this.gl.createBuffer();\n // this.vertexhoveredCataloguePositionBuffer = this.gl.createBuffer();\n\n this.vertexCataloguePosition = new Float32Array(0);\n this.hoveredIndexes = [];\n this.selectedIndexes = [];\n this.extHoveredIndexes = [];\n // this.extSelectedIndexes = [];\n\n this._oldMouseCoords = null;\n\n this._healpixDensityMap = new Map<number, number[]>();\n\n // this.catalogueProps = new CatalogueProps(metadataManager, defaultColor);\n\n // call catalogueShaderProgram to init shaders if they are not yet initialised \n this._catalogueShaderProgram = new CatalogueShaderProgram(this._webgl)\n this._catalogueShaderProgram.shaderProgram\n // catalogueShaderProgram.shaderProgram\n\n this._isVisible = true\n\n }\n\n setIsVisible(visibility: boolean) {\n this._isVisible = visibility\n }\n\n get shapeColor() {\n return this._shapeColor\n }\n\n get providerUrl() {\n return this._providerUrl\n }\n\n get name() {\n return this._name\n }\n\n get isVisible() {\n return this._isVisible\n }\n\n private minMax(columnindex: number): { min: number, max: number } {\n if (!this._sources.length) return { min: 0, max: 0 };\n let min = this._sources[0].details[columnindex]\n\n if (isNaN(Number(min))) {\n // console.warn(`${this.catalogueProps.tapMetadataList.metadataList[columnindex].name} doesn't contain only number values`)\n console.warn(`${this._metadataManager.columns[columnindex].name} doesn't contain only number values`)\n return { min: 0, max: 0 };\n }\n let max = min;\n\n for (const source of this._sources) {\n const v = source.details[columnindex]\n if (isNaN(Number(v))) {\n // console.warn(`${this.catalogueProps.tapMetadataList.metadataList[columnindex].name} doesn't contain number only values`)\n console.warn(`${this._metadataManager.columns[columnindex].name} doesn't contain number only values`)\n return { min: 0, max: 0 };\n }\n if (v < min) min = v;\n if (v > max) max = v;\n }\n return {\n min: Number(min),\n max: Number(max)\n };\n }\n\n get metadataManager() {\n return this._metadataManager\n }\n\n changeMetaRA(raColumnName: string) {\n this._metadataManager.selectedRaColumn = raColumnName\n }\n\n changeMetaDec(decColumnName: string) {\n this._metadataManager.selectedDecColumn = decColumnName\n }\n\n changeColor(color: string): void {\n this._shapeColor = color;\n }\n\n changeMetaShapeSize(metacolumnName: string) {\n if (!this._webgl) return\n if (metacolumnName == MetadataManager.STANDARD_SIZE) {\n\n this._metadataManager.resetShapeColumn()\n for (const source of this._sources) {\n const size = CatalogueGL.STANDARD_SHAPE_SIZE;\n source.shapeSize = size;\n }\n this._bufferInitialised = false\n // this.initBuffer(this._webgl);\n return\n }\n // const oldShapeSizeName = this.catalogueProps.shapeSizeColumn?.name\n // this.catalogueProps.changeCatalogueMetaShapeSize(metacolumnName);\n // const idx = this.catalogueProps.shapeSizeColumn?.index ?? this.catalogueProps.shapeSizeColumn?.index;\n const oldShapeSizeName = this._metadataManager.selectedShapeColumn?.name\n this._metadataManager.selectedShapeColumn = metacolumnName;\n const idx = this._metadataManager.selectedShapeColumn?.index ?? -1\n if (idx < 0) {\n // if (oldShapeSizeName) this.catalogueProps.changeCatalogueMetaShapeSize(oldShapeSizeName);\n if (oldShapeSizeName) this._metadataManager.selectedShapeColumn = oldShapeSizeName\n return;\n }\n const minmax = this.minMax(idx);\n if (minmax.min == minmax.max) {\n console.warn(`${minmax} min and max are equals. No resizing will be applied.`)\n return\n }\n\n for (const source of this._sources) {\n const raw = Number(source.getDetailByindex(idx));\n const min = Number(minmax.min);\n const max = Number(minmax.max);\n const norm = (raw - min) / Math.max(1e-12, (max - min));\n const size = norm * (20 - 8) + 8;\n source.shapeSize = size;\n }\n this._bufferInitialised = false\n // this.initBuffer(this._webgl);\n }\n\n changeMetaShapeHue(metacolumnName: string) {\n if (!this._webgl) return\n if (metacolumnName == MetadataManager.STANDARD_HUE) {\n this._metadataManager.resetHueColumn()\n for (const source of this._sources) {\n const hue = CatalogueGL.STANDARD_SHAPE_HUE;\n source.brightnessFactor = hue;\n }\n this._bufferInitialised = false\n // this.initBuffer(this._webgl);\n return\n }\n\n const oldHueSizeName = this._metadataManager.selectedShapeColumn?.name\n this._metadataManager.selectedHueColumn = metacolumnName;\n const idx = this._metadataManager.selectedHueColumn?.index ?? -1\n if (idx < 0) {\n if (oldHueSizeName) this._metadataManager.selectedHueColumn = oldHueSizeName\n return;\n }\n const minmax = this.minMax(idx);\n if (minmax.min == minmax.max) {\n console.warn(`${minmax} min and max are equals. No resizing will be applied.`)\n return\n }\n\n for (const source of this._sources) {\n const raw = Number(source.getDetailByindex(idx));\n const min = Number(minmax.min);\n const max = Number(minmax.max);\n const norm = (raw - min) / Math.max(1e-12, (max - min));\n // map [0,1] -> [1,-1]\n source.brightnessFactor = -(norm * 2 - 1);\n }\n this._bufferInitialised = false\n // this.initBuffer(this._webgl);\n }\n\n get sources(): Source[] {\n return this._sources\n }\n\n addSource(source: Source) {\n this._sources.push(source);\n }\n\n /**\n * @param in_data Rows of TAP results\n * @param columnsmeta TapMetadataList (unused here because `CatalogueProps` already holds indices)\n */\n addSources(in_data: any[][], columnsmeta: MetadataColumn[]) {\n this._ready = false;\n this._sources = []\n\n this._metadataManager = new MetadataManager(columnsmeta)\n // const raDataIndex = (this.catalogueProps.raColumn as any).index ?? (this.catalogueProps.raColumn as any)._index;\n // const decDataIndex = (this.catalogueProps.decColumn as any).index ?? (this.catalogueProps.decColumn as any)._index;\n const raDataIndex = this._metadataManager.selectedRaColumn?.index ?? -1\n const decDataIndex = this._metadataManager.selectedDecColumn?.index ?? -1\n\n if (raDataIndex < 0 || decDataIndex < 0) throw new Error(`(ra, dec) idx not defined (${raDataIndex}, ${decDataIndex}) `)\n\n for (let j = 0; j < in_data.length; j++) {\n const point = new Point(\n {\n raDeg: in_data[j][raDataIndex],\n decDeg: in_data[j][decDataIndex]\n },\n CoordsType.ASTRO\n );\n\n const source = new Source(point, in_data[j]);\n\n // Ensure optional fields exist\n source.shapeSize = source.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n source.brightnessFactor = 3;\n\n this.addSource(source);\n // if (this.catalogueProps.shapeHueColumn?.name) {\n if (this._metadataManager.selectedHueColumn?.name) {\n // this.changeCatalogueMetaShapeHue(this.catalogueProps.shapeHueColumn.name)\n this.changeMetaShapeHue(this._metadataManager.selectedHueColumn.name)\n }\n // if (this.catalogueProps.shapeSizeColumn?.name) {\n if (this._metadataManager.selectedShapeColumn?.name) {\n // this.changeCatalogueMetaShapeSize(this.shapeSizeColumn.name)\n this.changeMetaShapeSize(this._metadataManager.selectedShapeColumn.name)\n }\n\n }\n\n // this.initBuffer();\n this._ready = true;\n this._bufferInitialised = false\n }\n\n clearSources() {\n this._sources = [];\n this.hoveredIndexes = [];\n this._healpixDensityMap.clear();\n this.vertexCataloguePosition = new Float32Array(0);\n }\n\n private sourceMatches(left: Source, right: Source): boolean {\n if (left === right) return true;\n\n const leftPoint = left.point;\n const rightPoint = right.point;\n if (\n leftPoint.raDeg !== rightPoint.raDeg ||\n leftPoint.decDeg !== rightPoint.decDeg\n ) {\n return false;\n }\n\n if (left.details.length !== right.details.length) {\n return false;\n }\n\n for (let i = 0; i < left.details.length; i++) {\n if (!Object.is(left.details[i], right.details[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n private findSourceIndex(source: Source): number {\n const sourceIndex = this._sources.indexOf(source);\n if (sourceIndex >= 0) {\n return sourceIndex;\n }\n\n return this._sources.findIndex((candidate) => this.sourceMatches(candidate, source));\n }\n\n extHighlightSource(source: Source, highlighted: boolean) {\n const sIdx = this.findSourceIndex(source);\n if (sIdx < 0) return;\n const base = sIdx * CatalogueGL.ELEM_SIZE;\n if (highlighted) {\n if (!this.hoveredIndexes.includes(sIdx)) {\n this.hoveredIndexes.push(sIdx);\n }\n } else {\n \n if (base + 4 >= this.vertexCataloguePosition.length) return;\n const i = this.hoveredIndexes.indexOf(sIdx);\n if (i >= 0) {\n this.hoveredIndexes.splice(i, 1);\n this.vertexCataloguePosition[base + 3] = 0.0; // not hovered\n this.vertexCataloguePosition[base + 4] = this._sources[sIdx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n }\n }\n \n }\n\n extAddSources2Selected(source: Source) {\n\n if (!this._bufferInitialised) {\n this.initBuffer();\n }\n const sIdx = this.findSourceIndex(source);\n if (sIdx < 0) return;\n const base = sIdx * CatalogueGL.ELEM_SIZE;\n \n if (!this.selectedIndexes.includes(sIdx)) {\n this.selectedIndexes.push(sIdx);\n // this.vertexCataloguePosition[base + 3] = 2.0; // selected\n // this.vertexCataloguePosition[base + 4] = this._sources[sIdx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n } else {\n if (base + 4 >= this.vertexCataloguePosition.length) return;\n const i = this.selectedIndexes.indexOf(sIdx);\n if (i >= 0) {\n this.selectedIndexes.splice(i, 1);\n this.vertexCataloguePosition[base + 3] = 0.0; // not selected\n this.vertexCataloguePosition[base + 4] = this._sources[sIdx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n }\n }\n }\n \n private initBuffer() {\n\n // this._webgl = webgl\n this.vertexCataloguePositionBuffer = this._webgl.createBuffer();\n this.vertexhoveredCataloguePositionBuffer = this._webgl.createBuffer();\n\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.vertexCataloguePositionBuffer);\n\n const nSources = this._sources.length;\n this.vertexCataloguePosition = new Float32Array(nSources * CatalogueGL.ELEM_SIZE);\n let positionIndex = 0;\n\n for (let j = 0; j < nSources; j++) {\n const currSource = this._sources[j];\n const currPix = currSource.healpixPixel;\n\n // density map\n const bucket = this._healpixDensityMap.get(currPix);\n if (bucket) {\n if (!bucket.includes(j)) bucket.push(j);\n } else {\n this._healpixDensityMap.set(currPix, [j]);\n }\n\n // position\n this.vertexCataloguePosition[positionIndex + 0] = currSource.point.x;\n this.vertexCataloguePosition[positionIndex + 1] = currSource.point.y;\n this.vertexCataloguePosition[positionIndex + 2] = currSource.point.z;\n\n // hovered flag\n this.vertexCataloguePosition[positionIndex + 3] = 0.0;\n\n // size\n this.vertexCataloguePosition[positionIndex + 4] = currSource.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n\n // brightness\n this.vertexCataloguePosition[positionIndex + 5] = currSource.brightnessFactor ?? 0.0;\n\n positionIndex += CatalogueGL.ELEM_SIZE;\n }\n this._webgl.bufferData(this._webgl.ARRAY_BUFFER, this.vertexCataloguePosition, this._webgl.STATIC_DRAW);\n this._bufferInitialised = true\n }\n\n private getSelectionRadius(): number {\n const order = this._visibleTilesManager.getVisibleOrder();\n switch (order) {\n case 0:\n case 1:\n case 2:\n // return 0.005;\n return 0.01;\n case 3:\n // return 0.001;\n case 4:\n // return 0.0009;\n case 5:\n // return 0.0005;\n return 0.005;\n case 6:\n // return 0.0001;\n case 7:\n // return 0.00009;\n case 8:\n // return 0.00005;\n return 0.001;\n case 9:\n return 0.0005;\n default:\n return 0.0001;\n }\n }\n\n private checkClicking(in_mouseHelper: MouseHelper): number[] {\n\n if (in_mouseHelper.x == null || in_mouseHelper.y == null || in_mouseHelper.z == null) {\n console.log('CatalogueGL.checkClicking: missing mouse coords');\n return [];\n }\n\n const clickedIndexes: number[] = [];\n const mousePix = in_mouseHelper.computeNpix();\n\n if (mousePix != null && this._healpixDensityMap.has(mousePix)) {\n const candidates = this._healpixDensityMap.get(mousePix)!;\n const selR = this.getSelectionRadius();\n\n for (let i = 0; i < candidates.length; i++) {\n const sourceIdx = candidates[i];\n const source = this._sources[sourceIdx];\n if (!source) continue;\n\n const dx = source.point.x - in_mouseHelper.x;\n const dy = source.point.y - in_mouseHelper.y;\n const dz = source.point.z - in_mouseHelper.z;\n const dist = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n if (dist <= selR) {\n clickedIndexes.push(sourceIdx);\n }\n }\n }\n return clickedIndexes;\n }\n\n // private setSelectedIndexes(nextSelected: number[]) {\n // const deduped = Array.from(new Set(nextSelected))\n // .filter((idx) => idx >= 0 && idx < this._sources.length);\n\n // if (this.vertexCataloguePosition.length) {\n // for (const prevIdx of this.selectedIndexes) {\n // if (deduped.includes(prevIdx)) continue;\n // const base = prevIdx * CatalogueGL.ELEM_SIZE;\n // if (base + 4 >= this.vertexCataloguePosition.length) continue;\n // if (!this.hoveredIndexes.includes(prevIdx) && !this.extHoveredIndexes.includes(prevIdx)) {\n // this.vertexCataloguePosition[base + 3] = 0.0;\n // }\n // this.vertexCataloguePosition[base + 4] = this._sources[prevIdx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n // }\n // }\n\n // this.selectedIndexes = deduped;\n // }\n\n private setSelectedIndexes(selectedIndex: number[]) {\n selectedIndex.forEach(idx => {\n if (idx < 0 || idx >= this._sources.length) return;\n\n const base = idx * CatalogueGL.ELEM_SIZE;\n if (base + 4 >= this.vertexCataloguePosition.length) return;\n\n if (this.selectedIndexes.includes(idx)) {\n this.selectedIndexes.splice(this.selectedIndexes.indexOf(idx), 1);\n this.vertexCataloguePosition[base + 3] = 0.0; // not selected\n this.vertexCataloguePosition[base + 4] = this._sources[idx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n } else {\n this.selectedIndexes.push(idx);\n this.vertexCataloguePosition[base + 3] = 2.0; // selected\n this.vertexCataloguePosition[base + 4] = this._sources[idx]?.shapeSize ?? CatalogueGL.STANDARD_SHAPE_SIZE;\n }\n })\n }\n\n /**\n * Run click-picking and update selection with the nearest candidate in current pixel.\n * Returns the selected source or null if no source was hit.\n */\n getSourcesFromPointer(in_mouseHelper: MouseHelper): CataloguePickResult | null {\n const pickedIndexes = this.checkClicking(in_mouseHelper);\n if (!pickedIndexes.length) {\n return {\n sources: [],\n pickedIndexes: [],\n };\n }\n\n const sources: Source[] = [];\n pickedIndexes.forEach(idx => {\n const source = this._sources[idx];\n if (source) sources.push(source);\n });\n\n return sources.length ? { sources, pickedIndexes } : null;\n }\n\n /**\n * Run click-picking and update selection with the nearest candidate in current pixel.\n * Returns the selected source or null if no source was hit.\n */\n selectPrimarySourceFromClick(in_mouseHelper: MouseHelper): CatalogueClickResult | null {\n const picked = this.getSourcesFromPointer(in_mouseHelper);\n const clickedIndexes = picked?.pickedIndexes ?? [];\n // if (!clickedIndexes.length) {\n // this.setSelectedIndexes([]);\n // return null;\n // }\n // const selectedIdx = clickedIndexes[0];\n // this.setSelectedIndexes([selectedIdx]);\n // return this._sources[selectedIdx] ?? null;\n this.setSelectedIndexes(clickedIndexes);\n if (!clickedIndexes.length) {\n return {\n sources: [],\n selectionState: [],\n };\n }\n\n const selectionState: ClickedSourceState[] = [];\n const selectedSources: Source[] = [];\n\n clickedIndexes.forEach(idx => {\n const source = this._sources[idx];\n if (!source) return;\n\n const selected = this.selectedIndexes.includes(idx);\n selectionState.push({ source, selected });\n selectedSources.push(source);\n })\n\n return selectedSources.length\n ? { sources: selectedSources, selectionState }\n : null;\n }\n\n getPrimaryHoveredSource(): Source | null {\n if (!this.hoveredIndexes.length) return null;\n const idx = this.hoveredIndexes[0];\n return this._sources[idx] ?? null;\n }\n \n private checkHovering(in_mouseHelper: MouseHelper): number[] {\n\n if (in_mouseHelper.x == null || in_mouseHelper.y == null || in_mouseHelper.z == null) {\n console.log('CatalogueGL.checkHovering: missing mouse coords');\n return [];\n }\n\n const hoveredIndexes: number[] = [];\n const mousePix = in_mouseHelper.computeNpix();\n\n if (mousePix != null && this._healpixDensityMap.has(mousePix)) {\n const candidates = this._healpixDensityMap.get(mousePix)!;\n const selR = this.getSelectionRadius();\n\n for (let i = 0; i < candidates.length; i++) {\n const sourceIdx = candidates[i];\n const source = this._sources[sourceIdx];\n if (!source) continue;\n\n const dx = source.point.x - in_mouseHelper.x;\n const dy = source.point.y - in_mouseHelper.y;\n const dz = source.point.z - in_mouseHelper.z;\n const dist = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n if (dist <= selR) {\n hoveredIndexes.push(sourceIdx);\n }\n }\n }\n return hoveredIndexes;\n }\n\n\n /**\n * @param in_mMatrix Model matrix the current catalogue is associated to (e.g. HiPS matrix)\n */\n draw(in_mMatrix: Float32Array, in_mouseHelper: MouseHelper, \n vMatrix: Float32Array, pMatrix: Float32Array) {\n if (!this.isVisible) return\n if (!this._ready) return\n if (!vMatrix) return\n if (!this._bufferInitialised) this.initBuffer()\n if (!this._webgl) return\n\n this._catalogueShaderProgram.enableShaders(\n pMatrix,\n in_mMatrix,\n vMatrix\n )\n\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.vertexCataloguePositionBuffer);\n\n // positions\n this._webgl.vertexAttribPointer(\n this._catalogueShaderProgram.locations.position,\n 3,\n this._webgl.FLOAT,\n false,\n CatalogueGL.BYTES_X_ELEM * CatalogueGL.ELEM_SIZE,\n 0\n );\n this._webgl.enableVertexAttribArray(this._catalogueShaderProgram.locations.position);\n\n // hovered flag\n this._webgl.vertexAttribPointer(\n this._catalogueShaderProgram.locations.hovered,\n 1,\n this._webgl.FLOAT,\n false,\n CatalogueGL.BYTES_X_ELEM * CatalogueGL.ELEM_SIZE,\n CatalogueGL.BYTES_X_ELEM * 3\n );\n this._webgl.enableVertexAttribArray(this._catalogueShaderProgram.locations.hovered);\n\n // point size\n this._webgl.vertexAttribPointer(\n this._catalogueShaderProgram.locations.pointSize,\n 1,\n this._webgl.FLOAT,\n false,\n CatalogueGL.BYTES_X_ELEM * CatalogueGL.ELEM_SIZE,\n CatalogueGL.BYTES_X_ELEM * 4\n );\n this._webgl.enableVertexAttribArray(this._catalogueShaderProgram.locations.pointSize);\n\n // brightness\n this._webgl.vertexAttribPointer(\n this._catalogueShaderProgram.locations.brightness,\n 1,\n this._webgl.FLOAT,\n false,\n CatalogueGL.BYTES_X_ELEM * CatalogueGL.ELEM_SIZE,\n CatalogueGL.BYTES_X_ELEM * 5\n );\n this._webgl.enableVertexAttribArray(this._catalogueShaderProgram.locations.brightness);\n\n // color\n const rgb = colorHex2RGB(this._shapeColor);\n if (this._catalogueShaderProgram.locations.color) {\n this._webgl.uniform4f(this._catalogueShaderProgram.locations.color, rgb[0], rgb[1], rgb[2], 1.0);\n }\n\n // selected flags\n for (let s = 0; s < this.selectedIndexes.length; s++) {\n const idx = this.selectedIndexes[s];\n const base = idx * CatalogueGL.ELEM_SIZE;\n this.vertexCataloguePosition[base + 3] = 2.0; // selected\n this.vertexCataloguePosition[base + 4] = this._sources[idx].shapeSize; // size\n }\n\n \n // clear old hovered\n for (let k = 0; k < this.hoveredIndexes.length; k++) {\n const base = this.hoveredIndexes[k] * CatalogueGL.ELEM_SIZE;\n // if (this.vertexCataloguePosition[base + 3] == 2.0) continue; // selected, skip hover\n\n this.vertexCataloguePosition[base + 3] = 0.0; // not hovered\n this.vertexCataloguePosition[base + 4] = this._sources[this.hoveredIndexes[k]].shapeSize; // size\n }\n \n // Hover logic on mouse move\n if (in_mouseHelper != null && in_mouseHelper.xyz !== this._oldMouseCoords) {\n // // clear old hovered\n // for (let k = 0; k < this.hoveredIndexes.length; k++) {\n // const base = this.hoveredIndexes[k] * CatalogueGL.ELEM_SIZE;\n // if (this.vertexCataloguePosition[base + 3] == 2.0) continue; // selected, skip hover\n\n // this.vertexCataloguePosition[base + 3] = 0.0; // not hovered\n // this.vertexCataloguePosition[base + 4] = this._sources[this.hoveredIndexes[k]].shapeSize; // size\n // }\n\n this.hoveredIndexes = this.checkHovering(in_mouseHelper);\n\n // // new hovered\n // for (let i = 0; i < this.hoveredIndexes.length; i++) {\n // const idx = this.hoveredIndexes[i];\n // const base = idx * CatalogueGL.ELEM_SIZE;\n\n // if (this.vertexCataloguePosition[base + 3] == 2.0) continue; // selected, skip hover\n // this.vertexCataloguePosition[base + 3] = 1.0; // hovered\n // this.vertexCataloguePosition[base + 4] = this._sources[idx].shapeSize; // size\n // }\n }\n // new hovered\n for (let i = 0; i < this.hoveredIndexes.length; i++) {\n const idx = this.hoveredIndexes[i];\n const base = idx * CatalogueGL.ELEM_SIZE;\n\n // if (this.vertexCataloguePosition[base + 3] == 2.0) continue; // selected, skip hover\n this.vertexCataloguePosition[base + 3] = 1.0; // hovered\n this.vertexCataloguePosition[base + 4] = this._sources[idx].shapeSize; // size\n }\n\n \n // upload buffer\n this._webgl.bufferData(this._webgl.ARRAY_BUFFER, this.vertexCataloguePosition, this._webgl.STATIC_DRAW);\n\n // draw\n const numItems = this.vertexCataloguePosition.length / CatalogueGL.ELEM_SIZE;\n this._webgl.drawArrays(this._webgl.POINTS, 0, numItems);\n\n this._oldMouseCoords = in_mouseHelper.xyz;\n }\n\n}\n\n// export default CatalogueGL;\n","/**\n * @author Fabrizio Giordano (Fab77)\n */\nimport {Point} from \"../model/Point.js\";\nimport {CoordsType} from \"./CoordsType.js\";\nimport global from \"../Global.js\";\n\nexport interface STCSParseResult {\n totpoints: number;\n polygons: Point[][];\n}\n\nclass STCSParser {\n static parseSTCS(stcs: string): STCSParseResult {\n const stcsParsed = STCSParser.cleanStcs(stcs);\n let totPoints = 0;\n const polygons: Point[][] = [];\n\n if (stcsParsed.includes(\"POLYGON\")) {\n return STCSParser.parsePolygon(stcsParsed);\n } else if (stcsParsed.includes(\"CIRCLE\")) {\n return STCSParser.parseCircle(stcsParsed);\n } else {\n console.warn(\"STCS not recognised\");\n }\n\n return { totpoints: totPoints, polygons };\n }\n\n static cleanStcs(stcs: string): string {\n // Uppercase once\n let s = stcs.toUpperCase();\n\n // Remove tokens\n s = s\n .replace(/'ICRS'/g, '')\n .replace(/\\bICRS\\b/g, '')\n .replace(/\\bJ2000\\b/g, '')\n .replace(/\\bUNION\\b/g, '')\n .replace(/\\bTOPOCENTER\\b/g, '');\n\n // Remove parentheses\n s = s.replace(/[()]/g, '');\n\n // Collapse extra spaces and trim\n s = s.replace(/ {2,}/g, ' ').trim();\n\n return s;\n }\n\n static parsePolygon(stcs: string): STCSParseResult {\n let totPoints = 0;\n const polygons: Point[][] = [];\n\n const MAX_DECIMALS: number = global.MAX_DECIMALS ?? 12;\n\n const polys = stcs.split(\"POLYGON \");\n\n for (let i = 1; i < polys.length; i++) {\n const currPoly: Point[] = [];\n const points = polys[i].trim().split(\" \");\n\n // If first point is repeated as last, remove the duplicate\n const p0 = Number(parseFloat(points[0]).toFixed(MAX_DECIMALS));\n const p1 = Number(parseFloat(points[1]).toFixed(MAX_DECIMALS));\n const plast0 = Number(parseFloat(points[points.length - 2]).toFixed(MAX_DECIMALS));\n const plast1 = Number(parseFloat(points[points.length - 1]).toFixed(MAX_DECIMALS));\n\n if (p0 === plast0 && p1 === plast1) {\n points.splice(points.length - 2, 2);\n }\n\n if (points.length > 2) {\n for (let p = 0; p < points.length - 1; p += 2) {\n const raDeg = Number(parseFloat(points[p]).toFixed(MAX_DECIMALS));\n const decDeg = Number(parseFloat(points[p + 1]).toFixed(MAX_DECIMALS));\n\n const point = new Point({ raDeg, decDeg }, CoordsType.ASTRO);\n currPoly.push(point);\n totPoints += 1;\n }\n polygons.push(currPoly);\n }\n }\n\n return { totpoints: totPoints, polygons };\n }\n\n // Example format: \"CIRCLE ICRS 8.739685 4.38147 0.027833\"\n static parseCircle(stcs: string): STCSParseResult {\n let totPoints = 0;\n const polygons: Point[][] = [];\n\n const polys = stcs.split(\"CIRCLE \");\n\n for (let i = 1; i < polys.length; i++) {\n const currPoly: Point[] = [];\n const tokens = polys[i].trim().split(\" \");\n\n const ra = Number(tokens[0]);\n const dec = Number(tokens[1]);\n const radius = Number(tokens[2]);\n\n const POINTS_PER_QUADRANT = 6;\n const npoints = POINTS_PER_QUADRANT * 4;\n\n const alpha = (2 * Math.PI) / npoints;\n\n // Generate points around the circle\n for (let p = npoints; p > 0; p--) {\n const curra = radius * Math.cos(p * alpha) + ra;\n const curdec = radius * Math.sin(p * alpha) + dec;\n\n const point = new Point({ raDeg: curra, decDeg: curdec }, CoordsType.ASTRO);\n currPoly.push(point);\n totPoints += 1;\n }\n\n polygons.push(currPoly);\n }\n\n return { totpoints: totPoints, polygons };\n }\n}\n\nexport default STCSParser;","'use strict';\n/**\n * @author Fabrizio Giordano (Fab)\n */\n\n// import { Pointing, Healpix } from 'healpixjs';\n// import { degToRad } from '../../utils/Utils.js';\nimport GeomUtils, { SelectionObj } from '../../utils/GeomUtils.js';\n// import global from '../../Global.js';\nimport STCSParser, { STCSParseResult } from '../../utils/STCSParser.js';\nimport {Point} from '../Point.js';\n\nexport interface FootprintDetail {\n key: string;\n value: string | number;\n valueType?: string;\n unit?: string;\n}\n\n// export interface ParsedSTCS {\n// polygons: Point[][]; // array of polygons (each polygon is array of Point objects)\n// totpoints: number;\n// }\n\nexport class Footprint {\n private _polygons: Point[][] = []; // array of polygons (-> array of points)\n private _convexPolygons: any[][] = []; // convex polygons\n private _stcs?: string; // STC-S string\n private _valid = false;\n private _details: FootprintDetail[];\n private _totPoints = 0;\n private _totConvexPoints = 0;\n private _npix256?: number[];\n private _footprintsPointsOrder?: 1 | -1;\n private _selectionObj: SelectionObj | undefined;\n\n private _identifier?: string;\n private _center?: unknown; // could be typed if you have a Point type\n\n /**\n * @param in_stcs STC-S representation of the footprint\n * @param in_details optional metadata\n * @param footprintsPointsOrder 1-> clockwise, -1 counter clockwise\n */\n constructor(\n in_stcs?: string,\n in_details: FootprintDetail[] = [],\n footprintsPointsOrder?: 1 | -1\n ) {\n if (in_stcs) {\n this._stcs = in_stcs.toUpperCase();\n this._details = in_details;\n this._totPoints = 0;\n this._totConvexPoints = 0;\n this._footprintsPointsOrder = footprintsPointsOrder;\n\n this.computePoints();\n this._selectionObj = this.computeSelectionObject();\n\n this._valid = true;\n } else {\n this._details = [];\n }\n }\n\n private computeSelectionObject(): SelectionObj {\n return GeomUtils.computeSelectionObject(this._polygons);\n }\n\n \n // /**\n // * Return array of HEALPix pixels covering the footprint\n // * NOTE: despite the name, nside is not fixed at 256. It comes from Global.js\n // */\n // private computeNpix256(): number[] {\n // const healpix256 = new Healpix(global.nsideForSelection);\n\n // const points: Pointing[] = [];\n // for (const poly of this._convexPolygons) {\n // for (const currPoint of poly) {\n // const phiTheta = currPoint.computeHealpixPhiTheta();\n // const phiRad = degToRad(phiTheta.phi);\n // const thetaRad = degToRad(phiTheta.theta);\n // points.push(new Pointing(null, false, thetaRad, phiRad));\n // }\n // }\n\n // const rangeSet = healpix256.queryPolygonInclusive(points, 32);\n // return Array.from(rangeSet.r);\n // }\n\n private computePoints(): void {\n const res: STCSParseResult = STCSParser.parseSTCS(this._stcs!);\n this._polygons = res.polygons;\n this._totPoints = res.totpoints;\n }\n\n get valid(): boolean {\n return this._valid;\n }\n\n get totPoints(): number {\n return this._totPoints;\n }\n\n get totConvexPoints(): number {\n return this._totConvexPoints;\n }\n\n get polygons(): Point[][] {\n return this._polygons;\n }\n\n get convexPolygons(): Point[][] {\n return this._convexPolygons;\n }\n\n get identifier(): string | undefined {\n return this._identifier;\n }\n\n get center(): unknown {\n return this._center;\n }\n\n get pixels(): number[] | undefined {\n return this._npix256;\n }\n\n get details(): FootprintDetail[] {\n return this._details;\n }\n\n get selectionObj(): SelectionObj | undefined{\n return this._selectionObj\n }\n}\n","// HiPSShaderProgram.ts\nimport { mat4 } from 'gl-matrix';\nimport ShaderManager from './ShaderManager.js'\n\ntype GL = WebGL2RenderingContext;\n\ntype UniformNames = {\n vertex_color: string,\n m_perspective: string,\n m_model_view: string,\n point_size: string\n}\n\ntype AttributeNames = {\n vertex_pos: string\n\n}\n\ntype Locations = {\n pMatrix: WebGLUniformLocation | null\n mvMatrix: WebGLUniformLocation | null\n color: WebGLUniformLocation | null\n position: number\n pointSize: WebGLUniformLocation | null\n}\n\nexport class FootprintShaderProgram {\n// export default class FootprintShaderProgram {\n private _shaderProgram: WebGLProgram | undefined\n private _vertexShader!: WebGLShader\n private _fragmentShader!: WebGLShader\n\n readonly gl_uniforms: UniformNames\n readonly gl_attributes: AttributeNames\n readonly locations: Locations\n private _webgl: WebGL2RenderingContext;\n\n constructor(webgl: WebGL2RenderingContext) {\n this._webgl = webgl\n this.gl_uniforms = {\n vertex_color: 'u_fragcolor',\n m_perspective: 'uPMatrix',\n m_model_view: 'uMVMatrix',\n point_size: 'u_pointsize'\n }\n\n this.gl_attributes = {\n vertex_pos: 'aCatPosition'\n }\n\n this.locations = {\n pMatrix: null,\n mvMatrix: null,\n color: null,\n position: -1,\n pointSize: -1\n }\n }\n\n get shaderProgram(): WebGLProgram {\n if (!this._shaderProgram) {\n const gl = this._webgl as GL\n // const gl = global.gl as GL\n this._shaderProgram = gl.createProgram() as WebGLProgram\n this.initShaders()\n }\n return this._shaderProgram\n }\n\n private initShaders(): void {\n const gl = this._webgl as GL\n // const gl = global.gl as GL\n\n const fragmentShaderStr = ShaderManager.footprintFS()\n this._fragmentShader = gl.createShader(gl.FRAGMENT_SHADER) as WebGLShader\n gl.shaderSource(this._fragmentShader, fragmentShaderStr)\n gl.compileShader(this._fragmentShader)\n console.log('FS log:', gl.getShaderInfoLog(this._fragmentShader) || 'ok');\n if (!gl.getShaderParameter(this._fragmentShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._fragmentShader) || 'Fragment shader compile error')\n return\n }\n\n const vertexShaderStr = ShaderManager.footprintVS()\n this._vertexShader = gl.createShader(gl.VERTEX_SHADER) as WebGLShader\n gl.shaderSource(this._vertexShader, vertexShaderStr)\n gl.compileShader(this._vertexShader)\n console.log('VS log:', gl.getShaderInfoLog(this._vertexShader) || 'ok');\n if (!gl.getShaderParameter(this._vertexShader, gl.COMPILE_STATUS)) {\n alert(gl.getShaderInfoLog(this._vertexShader) || 'Vertex shader compile error')\n return\n }\n\n gl.attachShader(this.shaderProgram as WebGLProgram, this._vertexShader)\n gl.attachShader(this.shaderProgram as WebGLProgram, this._fragmentShader)\n gl.linkProgram(this.shaderProgram as WebGLProgram)\n\n if (!gl.getProgramParameter(this.shaderProgram as WebGLProgram, gl.LINK_STATUS)) {\n alert('Could not initialise shaders')\n }\n\n gl.useProgram(this.shaderProgram);\n\n this.locations.position = gl.getAttribLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_attributes.vertex_pos\n )\n\n this.locations.pointSize = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.point_size\n )\n\n this.locations.color = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.vertex_color\n )\n }\n\n enableShaders(\n pMatrix: Float32Array,\n modelMatrix: Float32Array,\n viewMatrix: Float32Array\n ): void {\n const gl = this._webgl as GL\n // const gl = global.gl as GL\n\n gl.useProgram(this.shaderProgram);\n\n this.locations.pMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_perspective\n )\n\n this.locations.mvMatrix = gl.getUniformLocation(\n this.shaderProgram as WebGLProgram,\n this.gl_uniforms.m_model_view\n )\n\n let mvMatrix = mat4.create()\n mvMatrix = mat4.multiply(mvMatrix, viewMatrix, modelMatrix)\n gl.uniformMatrix4fv(this.locations.pMatrix, false, pMatrix)\n gl.uniformMatrix4fv(this.locations.mvMatrix, false, mvMatrix as Float32Array)\n }\n}\n\n// export const footprintShaderProgram = new FootprintShaderProgram()","import { Footprint } from \"./Footprint.js\";\nimport { colorHex2RGB } from \"../../utils/Utils.js\";\n\nimport { FootprintShaderProgram } from \"../../shader/FootprintShaderProgram.js\";\n\nimport MouseHelper from \"../../utils/MouseHelper.js\";\nimport { Point } from \"../Point.js\";\nimport GeomUtils from \"../../utils/GeomUtils.js\";\nimport { CoordsType } from \"../../utils/CoordsType.js\";\nimport { MetadataManager } from \"../MetadataManager.js\";\nimport { MetadataColumn } from \"../MetadataColumn.js\";\nimport { VisibleTilesManager } from \"../hips/VisibleTilesManager.js\";\n\nexport interface HoveredFootprintDetail {\n // metadata: TapMetadataList\n metadata: MetadataManager;\n footprints: Footprint[];\n tableName: string;\n description: string;\n provider: string;\n}\n\nexport type ClickedFootprintState = {\n footprint: Footprint;\n selected: boolean;\n};\n\nexport type FootprintPickResult = {\n footprints: Footprint[];\n pickedIndexes: number[];\n};\n\nexport type FootprintClickResult = {\n footprints: Footprint[];\n selectionState: ClickedFootprintState[];\n};\n\nexport class FootprintSetGL {\n static ELEM_SIZE = 3;\n static BYTES_X_ELEM = new Float32Array().BYTES_PER_ELEMENT;\n static CONVEXPOLY_ELEM_SIZE = 3;\n\n _kind: string = \"FootprintSetGL\";\n _ready: boolean;\n // footprintsetProps: FootprintProps\n _name: string;\n _description: string;\n // tapRepo: TapRepo\n\n extHoveredIndexes!: Uint32Array;\n\n oldMouseCoords: any;\n healpixDensityMap: any;\n\n totConvexPoints!: number;\n\n // footprintsInPix256: Map<number, Footprint[]>\n\n // gl: GL;\n\n // shaderProgram: WebGLProgram\n vertexCataloguePositionBuffer!: WebGLBuffer;\n indexBuffer!: WebGLBuffer;\n\n hoveredVertexPositionBuffer!: WebGLBuffer;\n hoveredIndexBuffer!: WebGLBuffer;\n\n selectedVertexPositionBuffer!: WebGLBuffer;\n selectedIndexBuffer!: WebGLBuffer;\n\n indexes!: Uint32Array;\n footprintPolygons: Footprint[] = [];\n vertexCataloguePosition!: Float32Array;\n totPoints!: number;\n nPrimitiveFlags: number = 0;\n\n hoveredIndexes!: number[];\n hoveredElementIndexes!: Uint32Array;\n private _hoveredFootprints: Footprint[] = [];\n hoveredVertexPosition!: Float32Array;\n totHoveredPoints!: number;\n nHoveredPrimitiveFlags: number = 0;\n\n selectedIndexes!: number[];\n selectedElementIndexes!: Uint32Array;\n private _selectedFootprints: Footprint[] = [];\n selectedVertexPosition!: Float32Array;\n totSelectedPoints!: number;\n nSlectedPrimitiveFlags: number = 0;\n _shapeColor = \"#00fff2ff\";\n\n private _bufferInitialised = false;\n private _webgl: WebGL2RenderingContext;\n\n _isVisible: boolean = true;\n private _metadataManager: MetadataManager;\n\n _providerUrl: string;\n private _footprintShaderProgram: FootprintShaderProgram;\n private _visibleTilesManager: VisibleTilesManager;\n\n constructor(\n fsetName: string,\n fsetDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n webgl: WebGL2RenderingContext,\n visibleTilesManager: VisibleTilesManager,\n ) {\n this._webgl = webgl;\n this._ready = false;\n this._visibleTilesManager = visibleTilesManager;\n\n (this as any).TYPE = \"FOOTPRINT_SET\";\n\n this._name = fsetName;\n this._description = fsetDescription;\n this._providerUrl = providerUrl;\n\n this._metadataManager = metadataManager;\n\n this.initFootprintArrays();\n\n this.oldMouseCoords = null;\n\n this._footprintShaderProgram = new FootprintShaderProgram(this._webgl);\n this._footprintShaderProgram.shaderProgram;\n }\n\n private initFootprintArrays(): void {\n this.footprintPolygons = [];\n this.indexes = new Uint32Array();\n this.vertexCataloguePosition = new Float32Array();\n this.totPoints = 0;\n this.totConvexPoints = 0;\n this.extHoveredIndexes = new Uint32Array();\n\n this._hoveredFootprints = [];\n this.hoveredVertexPosition = new Float32Array();\n this.totHoveredPoints = 0;\n this.hoveredIndexes = [];\n this.hoveredElementIndexes = new Uint32Array();\n\n this._selectedFootprints = [];\n this.selectedVertexPosition = new Float32Array();\n this.totSelectedPoints = 0;\n this.selectedIndexes = [];\n this.selectedElementIndexes = new Uint32Array();\n }\n\n private initGLBuffers(): void {\n if (!this._webgl) return;\n this.vertexCataloguePositionBuffer = this._webgl.createBuffer();\n this.indexBuffer = this._webgl.createBuffer();\n\n this.hoveredVertexPositionBuffer = this._webgl.createBuffer();\n this.hoveredIndexBuffer = this._webgl.createBuffer();\n\n this.selectedVertexPositionBuffer = this._webgl.createBuffer();\n this.selectedIndexBuffer = this._webgl.createBuffer();\n }\n\n public setIsVisible(visibility: boolean) {\n this._isVisible = visibility;\n }\n\n get isVisible() {\n return this._isVisible;\n }\n\n get shapeColor() {\n return this._shapeColor;\n }\n\n get providerUrl() {\n return this._providerUrl;\n }\n\n get name() {\n return this._name;\n }\n\n get metadataManager() {\n return this._metadataManager;\n }\n\n addFootprint(in_footprint: Footprint): void {\n this.footprintPolygons.push(in_footprint);\n }\n\n // addFootprints(in_data: any[], columnsmeta: TapMetadata[]): void {\n addFootprints(in_data: any[], columnsmeta: MetadataColumn[]): void {\n this._ready = false;\n\n this._metadataManager = new MetadataManager(columnsmeta);\n\n // const geomDataIndex = this.footprintsetProps.geomColumn?.index\n const geomDataIndex =\n this._metadataManager.selectedOutlineColumn?.index ?? -1;\n\n if (geomDataIndex < 0) {\n throw new Error(\n \"geomColumn or its index is undefined in footprintsetProps\",\n );\n }\n\n for (let j = 0; j < in_data.length; j++) {\n if (in_data[j][0] !== null) {\n const footprint = new Footprint(in_data[j][geomDataIndex], in_data[j]);\n if ((footprint as any)._valid) {\n this.addFootprint(footprint);\n this.totPoints += footprint.totPoints;\n this.totConvexPoints += footprint.totConvexPoints;\n }\n }\n }\n\n // this.initBuffer()\n this._ready = true;\n this._bufferInitialised = false;\n }\n\n clearFootprints(): void {\n this.initFootprintArrays();\n }\n\n private initBuffer(): void {\n // this._webgl = webgl\n if (!this._webgl) return;\n this.initGLBuffers();\n\n const nFootprints = this.footprintPolygons.length;\n let npolygons = nFootprints - 1;\n\n for (let j = 0; j < nFootprints; j++) {\n npolygons += this.footprintPolygons[j].polygons.length - 1;\n }\n\n this.indexes = new Uint32Array(this.totPoints + npolygons + 1);\n const MAX_UNSIGNED_INT = 0xffffffff;\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.vertexCataloguePositionBuffer,\n );\n this.vertexCataloguePosition = new Float32Array(3 * this.totPoints);\n\n let positionIndex = 0;\n let vIdx = 0;\n const R = 1.0;\n this.nPrimitiveFlags = 0;\n\n for (let j = 0; j < nFootprints; j++) {\n const footprint = this.footprintPolygons[j];\n const footprintPoly = footprint.polygons;\n\n if (j > 0) {\n this.indexes[vIdx++] = MAX_UNSIGNED_INT;\n this.nPrimitiveFlags++;\n }\n\n for (const poly of footprintPoly) {\n if (poly !== footprintPoly[0]) {\n this.indexes[vIdx++] = MAX_UNSIGNED_INT;\n this.nPrimitiveFlags++;\n }\n\n for (const point of poly) {\n this.vertexCataloguePosition[positionIndex++] = R * point.x;\n this.vertexCataloguePosition[positionIndex++] = R * point.y;\n this.vertexCataloguePosition[positionIndex++] = R * point.z;\n this.indexes[vIdx++] = Math.floor((positionIndex - 1) / 3);\n }\n }\n }\n\n this.indexes[this.indexes.length - 1] = MAX_UNSIGNED_INT;\n console.log(\"Buffer initialized\");\n }\n\n checkSelection(mouseHelper: MouseHelper) {\n if (!mouseHelper.x || !mouseHelper.y || !mouseHelper.z) return;\n\n let mousePix = mouseHelper.computeNpix();\n if (!mousePix) return;\n\n this._hoveredFootprints = [];\n this.totHoveredPoints = 0;\n\n const mousePoint = new Point(\n { x: mouseHelper.x, y: mouseHelper.y, z: mouseHelper.z },\n CoordsType.CARTESIAN,\n );\n\n for (let i = 0; i < this.footprintPolygons.length; i++) {\n const footprint: Footprint = this.footprintPolygons[i];\n if (!footprint.selectionObj) continue;\n\n if (\n GeomUtils.checkPointInsidePolygon5(footprint.selectionObj, mousePoint)\n ) {\n const details = [...footprint.details];\n // const geomDataIndex = this.footprintsetProps.geomColumn?.index\n const geomDataIndex =\n this._metadataManager.selectedOutlineColumn?.index ?? -1;\n\n if (geomDataIndex < 0) continue;\n\n details.splice(geomDataIndex, 1);\n this._hoveredFootprints.push(footprint);\n this.totHoveredPoints += footprint.totPoints;\n }\n }\n this.initHoveringBuffer();\n }\n\n get hoveredFootprints(): HoveredFootprintDetail {\n return {\n // metadata: this.footprintsetProps.tapMetadataList,\n metadata: this._metadataManager,\n footprints: this._hoveredFootprints,\n tableName: this._name,\n description: this._description,\n // provider: this.tapRepo.tapBaseUrl\n provider: this._providerUrl,\n };\n }\n\n get selectedFootprints(): Footprint[] {\n return this._selectedFootprints;\n }\n\n private checkClicking(in_mouseHelper: MouseHelper): number[] {\n if (\n in_mouseHelper.x == null ||\n in_mouseHelper.y == null ||\n in_mouseHelper.z == null\n ) {\n return [];\n }\n\n const clickedIndexes: number[] = [];\n const mousePoint = new Point(\n { x: in_mouseHelper.x, y: in_mouseHelper.y, z: in_mouseHelper.z },\n CoordsType.CARTESIAN,\n );\n\n for (let i = 0; i < this.footprintPolygons.length; i++) {\n const footprint = this.footprintPolygons[i];\n if (!footprint.selectionObj) continue;\n\n if (\n GeomUtils.checkPointInsidePolygon5(footprint.selectionObj, mousePoint)\n ) {\n clickedIndexes.push(i);\n }\n }\n\n return clickedIndexes;\n }\n\n private setSelectedIndexes(selectedIndex: number[]) {\n selectedIndex.forEach((idx) => {\n if (idx < 0 || idx >= this.footprintPolygons.length) return;\n\n if (this.selectedIndexes.includes(idx)) {\n this.selectedIndexes.splice(this.selectedIndexes.indexOf(idx), 1);\n } else {\n this.selectedIndexes.push(idx);\n }\n });\n\n this.refreshSelectedFootprints();\n }\n\n private refreshSelectedFootprints() {\n this._selectedFootprints = this.selectedIndexes\n .map((idx) => this.footprintPolygons[idx])\n .filter((footprint): footprint is Footprint => Boolean(footprint));\n this.totSelectedPoints = this._selectedFootprints.reduce(\n (total, footprint) => total + footprint.totPoints,\n 0,\n );\n\n if (this._selectedFootprints.length === 0) {\n this.selectedVertexPosition = new Float32Array();\n this.selectedElementIndexes = new Uint32Array();\n this.nSlectedPrimitiveFlags = 0;\n return;\n }\n\n this.initSelectionBuffer();\n }\n\n getFootprintsFromPointer(\n in_mouseHelper: MouseHelper,\n ): FootprintPickResult | null {\n const pickedIndexes = this.checkClicking(in_mouseHelper);\n if (!pickedIndexes.length) {\n return {\n footprints: [],\n pickedIndexes: [],\n };\n }\n\n const footprints: Footprint[] = [];\n pickedIndexes.forEach((idx) => {\n const footprint = this.footprintPolygons[idx];\n if (footprint) footprints.push(footprint);\n });\n\n return footprints.length ? { footprints, pickedIndexes } : null;\n }\n\n selectPrimaryFootprintFromClick(\n in_mouseHelper: MouseHelper,\n ): FootprintClickResult | null {\n const picked = this.getFootprintsFromPointer(in_mouseHelper);\n const clickedIndexes = picked?.pickedIndexes ?? [];\n\n this.setSelectedIndexes(clickedIndexes);\n if (!clickedIndexes.length) {\n return {\n footprints: [],\n selectionState: [],\n };\n }\n\n const selectionState: ClickedFootprintState[] = [];\n const selectedFootprints: Footprint[] = [];\n\n clickedIndexes.forEach((idx) => {\n const footprint = this.footprintPolygons[idx];\n if (!footprint) return;\n\n const selected = this.selectedIndexes.includes(idx);\n selectionState.push({ footprint, selected });\n selectedFootprints.push(footprint);\n });\n\n return selectedFootprints.length\n ? { footprints: selectedFootprints, selectionState }\n : null;\n }\n\n // highlightFootprint(footprint: Footprint, highlighted: boolean) {\n // if (highlighted) {\n // this._hoveredFootprints.push(footprint)\n // this.totHoveredPoints += footprint.totPoints\n // } else {\n // const indexOfFootprint = this._hoveredFootprints.indexOf(footprint)\n // this._hoveredFootprints.splice(indexOfFootprint, 1)\n // this.totHoveredPoints -= footprint.totPoints\n // }\n // this.initHoveringBuffer()\n // }\n\n /**\n *\n * @param {Footprint[]} footprints\n */\n\n // addFootprint2Selected(footprints: Footprint[]) {\n // let refreshBuffer = false\n // for (let f of footprints) {\n // if (!this._selectedFootprints.includes(f)) {\n // this._selectedFootprints.push(f)\n // this.totSelectedPoints += f.totPoints\n // refreshBuffer = true\n // }\n // }\n // if (refreshBuffer) {\n // this.initSelectionBuffer()\n // }\n // }\n\n /**\n *\n * @param {Footprint} footprint\n */\n // removeFootprintFromSelection(footprint: Footprint) {\n // const indexOfObject = this._selectedFootprints.indexOf(footprint)\n // if (indexOfObject >= 0) {\n // this._selectedFootprints.splice(indexOfObject, 1)\n // this.totSelectedPoints -= footprint.totPoints\n // if (this._selectedFootprints.length > 0) {\n // this.initSelectionBuffer()\n // }\n // }\n\n // }\n\n private FootprintPolygonMatches(left: Footprint, right: Footprint): boolean {\n if (left === right) return true;\n \n const leftConvexPoly = left.convexPolygons;\n const rightConvexPoly = right.convexPolygons;\n if (\n leftConvexPoly !== rightConvexPoly ||\n leftConvexPoly !== rightConvexPoly\n ) {\n return false;\n }\n \n if (left.details.length !== right.details.length) {\n return false;\n }\n \n for (let i = 0; i < left.details.length; i++) {\n if (!Object.is(left.details[i], right.details[i])) {\n return false;\n }\n }\n \n return true;\n }\n \n\n private findFootprintPolygonIndex(footprint: Footprint): number {\n const footprintIndex = this.footprintPolygons.indexOf(footprint);\n if (footprintIndex >= 0) {\n return footprintIndex;\n }\n\n return this.footprintPolygons.findIndex((candidate) =>\n this.FootprintPolygonMatches(candidate, footprint),\n );\n }\n\n extHighlightFootprint(footprint: Footprint, highlighted: boolean) {\n const sIdx = this.findFootprintPolygonIndex(footprint);\n if (sIdx < 0) return;\n const base = sIdx * FootprintSetGL.ELEM_SIZE;\n if (highlighted) {\n if (!this.hoveredIndexes.includes(sIdx)) {\n this.hoveredIndexes.push(sIdx);\n }\n } else {\n \n if (base + 4 >= this.vertexCataloguePosition.length) return;\n const i = this.hoveredIndexes.indexOf(sIdx);\n if (i >= 0) {\n this.hoveredIndexes.splice(i, 1);\n }\n }\n }\n\n extAddPolygons2Selected(footprint: Footprint) {\n if (!this._bufferInitialised) {\n this.initBuffer();\n }\n const sIdx = this.findFootprintPolygonIndex(footprint);\n if (sIdx < 0) return;\n const base = sIdx * FootprintSetGL.ELEM_SIZE;\n \n if (!this.selectedIndexes.includes(sIdx)) {\n this.selectedIndexes.push(sIdx);\n } else {\n if (base + 4 >= this.vertexCataloguePosition.length) return;\n const i = this.selectedIndexes.indexOf(sIdx);\n if (i >= 0) {\n this.selectedIndexes.splice(i, 1);\n }\n }\n this.refreshSelectedFootprints();\n }\n\n initHoveringBuffer() {\n /*\n TODO better approach. when creating the indexbuffer of footprints, \n add 1 extra position for the selection (set to 0 == not selected), \n and save the position \"positionIndex\" in an array (selectionIndexes).\n When checking the selection, I get the index of the footprint, which\n matches with the index in the selectionIndexes to retrieve the position \n of the flag to be set to 1 in the vertexposition\n This will ease checking the selection in the vertex/fragment shader and\n set the pointsize and shape color.\n */\n\n if (!this._webgl) return;\n if (this._hoveredFootprints.length == 0) {\n return;\n }\n let nFootprints = this._hoveredFootprints.length;\n\n let npolygons = nFootprints - 1;\n for (let j = 0; j < nFootprints; j++) {\n npolygons += this._hoveredFootprints[j].polygons.length - 1;\n }\n // this._selectedIndex = new Uint16Array(this._totSelectedPoints + npolygons);\n // let MAX_UNSIGNED_SHORT = 65535; // this is used to enable and disable GL_PRIMITIVE_RESTART_FIXED_INDEX\n\n this.hoveredElementIndexes = new Uint32Array(\n this.totHoveredPoints + npolygons,\n );\n const MAX_UNSIGNED_INT = 0xffffffff; // this is used to enable and disable GL_PRIMITIVE_RESTART_FIXED_INDEX\n // let MAX_UNSIGNED_SHORT = Number.MAX_SAFE_INTEGER;\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.hoveredVertexPositionBuffer,\n );\n\n this.hoveredVertexPosition = new Float32Array(3 * this.totHoveredPoints);\n let positionIndex = 0;\n let vIdx = 0;\n\n let R = 1.0;\n this.nHoveredPrimitiveFlags = 0;\n\n for (let j = 0; j < nFootprints; j++) {\n let hoveredFootprintPoly = this._hoveredFootprints[j].polygons;\n\n if (j > 0) {\n this.hoveredElementIndexes[vIdx] = MAX_UNSIGNED_INT;\n this.nHoveredPrimitiveFlags += 1;\n vIdx += 1;\n }\n\n for (let polyIdx = 0; polyIdx < hoveredFootprintPoly.length; polyIdx++) {\n if (polyIdx > 0) {\n this.hoveredElementIndexes[vIdx] = MAX_UNSIGNED_INT;\n this.nHoveredPrimitiveFlags += 1;\n vIdx += 1;\n }\n const poly = hoveredFootprintPoly[polyIdx];\n for (let pointIdx = 0; pointIdx < poly.length; pointIdx++) {\n const p = poly[pointIdx];\n this.hoveredVertexPosition[positionIndex] = R * p.x;\n this.hoveredVertexPosition[positionIndex + 1] = R * p.y;\n this.hoveredVertexPosition[positionIndex + 2] = R * p.z;\n\n this.hoveredElementIndexes[vIdx] = Math.floor(positionIndex / 3);\n\n vIdx += 1;\n positionIndex += 3;\n }\n }\n }\n }\n\n initSelectionBuffer() {\n if (!this._webgl) return;\n if (this._selectedFootprints.length == 0) {\n return;\n }\n\n const nFootprints = this._selectedFootprints.length;\n let npolygons = nFootprints - 1;\n for (let j = 0; j < nFootprints; j++) {\n npolygons += this._selectedFootprints[j].polygons.length - 1;\n }\n\n this.selectedElementIndexes = new Uint32Array(\n this.totSelectedPoints + npolygons,\n );\n const MAX_UNSIGNED_INT = 0xffffffff;\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.selectedVertexPositionBuffer,\n );\n\n this.selectedVertexPosition = new Float32Array(3 * this.totSelectedPoints);\n let positionIndex = 0;\n let vIdx = 0;\n\n const R = 1.0;\n this.nSlectedPrimitiveFlags = 0;\n\n for (let j = 0; j < nFootprints; j++) {\n const footprintPoly = this._selectedFootprints[j].polygons;\n\n if (j > 0) {\n this.selectedElementIndexes[vIdx] = MAX_UNSIGNED_INT;\n this.nSlectedPrimitiveFlags += 1;\n vIdx += 1;\n }\n\n for (let polyIdx = 0; polyIdx < footprintPoly.length; polyIdx++) {\n if (polyIdx > 0) {\n this.selectedElementIndexes[vIdx] = MAX_UNSIGNED_INT;\n this.nSlectedPrimitiveFlags += 1;\n vIdx += 1;\n }\n const poly = footprintPoly[polyIdx];\n for (let pointIdx = 0; pointIdx < poly.length; pointIdx++) {\n const p = poly[pointIdx];\n this.selectedVertexPosition[positionIndex] = R * p.x;\n this.selectedVertexPosition[positionIndex + 1] = R * p.y;\n this.selectedVertexPosition[positionIndex + 2] = R * p.z;\n\n this.selectedElementIndexes[vIdx] = Math.floor(positionIndex / 3);\n\n vIdx += 1;\n positionIndex += 3;\n }\n }\n }\n }\n\n changeColor(color: string): void {\n this._shapeColor = color;\n }\n\n draw(\n in_mMatrix: Float32Array,\n in_mouseHelper: MouseHelper,\n vMatrix: Float32Array,\n pMatrix: Float32Array,\n ): void {\n if (!this.isVisible) return;\n if (!this._ready) return;\n if (!vMatrix) return;\n // if (!global.camera) return\n if (!this._bufferInitialised) this.initBuffer();\n if (!this._webgl) return;\n\n this._footprintShaderProgram.enableShaders(pMatrix, in_mMatrix, vMatrix);\n // this._footprintShaderProgram.enableShaders(\n // computePerspectiveMatrixSingleton.pMatrix as Float32Array,\n // in_mMatrix,\n // vMatrix\n // )\n\n if (in_mouseHelper != null && in_mouseHelper.xyz != this.oldMouseCoords) {\n this.checkSelection(in_mouseHelper);\n }\n\n if (this._hoveredFootprints.length > 0) {\n // TODO POINT_SIZE doesn't have any effect on line thickness!! it only applies to points\n const rgb = colorHex2RGB(\"#00FF00\");\n const alpha = 1.0;\n this._webgl.uniform4f(\n this._footprintShaderProgram.locations.color,\n rgb[0],\n rgb[1],\n rgb[2],\n alpha,\n );\n this._webgl.uniform1f(\n this._footprintShaderProgram.locations.pointSize,\n 14.0,\n ); // <--- POINT_SIZE in LINE_LOOP is not applicable\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.hoveredVertexPositionBuffer,\n );\n this._webgl.bufferData(\n this._webgl.ARRAY_BUFFER,\n this.hoveredVertexPosition,\n this._webgl.STATIC_DRAW,\n );\n\n // setting footprint position\n this._webgl.vertexAttribPointer(\n this._footprintShaderProgram.locations.position,\n FootprintSetGL.ELEM_SIZE,\n this._webgl.FLOAT,\n false,\n FootprintSetGL.BYTES_X_ELEM * FootprintSetGL.ELEM_SIZE,\n 0,\n );\n this._webgl.enableVertexAttribArray(\n this._footprintShaderProgram.locations.position,\n );\n\n this._webgl.bindBuffer(\n this._webgl.ELEMENT_ARRAY_BUFFER,\n this.hoveredIndexBuffer,\n );\n this._webgl.bufferData(\n this._webgl.ELEMENT_ARRAY_BUFFER,\n this.hoveredElementIndexes,\n this._webgl.STATIC_DRAW,\n );\n\n // this._gl.drawElements (this._gl.LINE_LOOP, this._selectedVertexPosition.length / 3 + this._nSlectedPrimitiveFlags,this._gl.UNSIGNED_SHORT, 0);\n this._webgl.drawElements(\n this._webgl.LINE_LOOP,\n this.hoveredVertexPosition.length / 3 + this.nHoveredPrimitiveFlags,\n this._webgl.UNSIGNED_INT,\n 0,\n );\n }\n\n if (this._selectedFootprints.length > 0) {\n const rgb = colorHex2RGB(\"#ECB462\");\n const alpha = 1.0;\n this._webgl.uniform4f(\n this._footprintShaderProgram.locations.color,\n rgb[0],\n rgb[1],\n rgb[2],\n alpha,\n );\n this._webgl.uniform1f(\n this._footprintShaderProgram.locations.pointSize,\n 14.0,\n ); // <--- POINT_SIZE in LINE_LOOP is not applicable\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.selectedVertexPositionBuffer,\n );\n this._webgl.bufferData(\n this._webgl.ARRAY_BUFFER,\n this.selectedVertexPosition,\n this._webgl.STATIC_DRAW,\n );\n\n // setting footprint position\n this._webgl.vertexAttribPointer(\n this._footprintShaderProgram.locations.position,\n FootprintSetGL.ELEM_SIZE,\n this._webgl.FLOAT,\n false,\n FootprintSetGL.BYTES_X_ELEM * FootprintSetGL.ELEM_SIZE,\n 0,\n );\n this._webgl.enableVertexAttribArray(\n this._footprintShaderProgram.locations.position,\n );\n\n this._webgl.bindBuffer(\n this._webgl.ELEMENT_ARRAY_BUFFER,\n this.selectedIndexBuffer,\n );\n this._webgl.bufferData(\n this._webgl.ELEMENT_ARRAY_BUFFER,\n this.selectedElementIndexes,\n this._webgl.STATIC_DRAW,\n );\n\n // this._gl.drawElements (this._gl.LINE_LOOP, this._selectedVertexPosition.length / 3 + this._nSlectedPrimitiveFlags,this._gl.UNSIGNED_SHORT, 0);\n this._webgl.drawElements(\n this._webgl.LINE_LOOP,\n this.selectedVertexPosition.length / 3 + this.nSlectedPrimitiveFlags,\n this._webgl.UNSIGNED_INT,\n 0,\n );\n }\n\n this._webgl.bindBuffer(\n this._webgl.ARRAY_BUFFER,\n this.vertexCataloguePositionBuffer,\n );\n this._webgl.bufferData(\n this._webgl.ARRAY_BUFFER,\n this.vertexCataloguePosition,\n this._webgl.STATIC_DRAW,\n );\n\n this._webgl.vertexAttribPointer(\n this._footprintShaderProgram.locations.position as number,\n FootprintSetGL.ELEM_SIZE,\n this._webgl.FLOAT,\n false,\n FootprintSetGL.BYTES_X_ELEM * FootprintSetGL.ELEM_SIZE,\n 0,\n );\n this._webgl.enableVertexAttribArray(\n this._footprintShaderProgram.locations.position as number,\n );\n\n this._webgl.bindBuffer(this._webgl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);\n this._webgl.bufferData(\n this._webgl.ELEMENT_ARRAY_BUFFER,\n this.indexes,\n this._webgl.STATIC_DRAW,\n );\n\n // const shapeColor = [...colorHex2RGB(this.footprintsetProps.shapeColor), 1.0] as [number, number, number, number]\n const shapeColor = [...colorHex2RGB(this._shapeColor), 1.0] as [\n number,\n number,\n number,\n number,\n ];\n this._webgl.uniform4f(\n this._footprintShaderProgram.locations.color as WebGLUniformLocation,\n ...shapeColor,\n );\n\n this._webgl.drawElements(\n this._webgl.LINE_LOOP,\n this.indexes.length,\n this._webgl.UNSIGNED_INT,\n 0,\n );\n\n this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, null);\n this._webgl.bindBuffer(this._webgl.ELEMENT_ARRAY_BUFFER, null);\n this.oldMouseCoords = in_mouseHelper.xyz;\n }\n}\n\n// export default FootprintSetGL\n","// import global from './Global.js'\nimport AstroSphere from './AstroSphere.js'\nimport { HiPSDescriptor } from './model/hips/HiPSDescriptor.js'\nimport { FoV } from './model/FoV.js'\nimport { Point } from './model/Point.js'\nimport { CatalogueGL } from './model/catalogues/CatalogueGL.js'\nimport type { CameraChangedDetail, PointCoordinates } from './AstroSphere.js'\nimport { FootprintSetGL, HoveredFootprintDetail } from './model/footprints/FootprintSetGL.js'\nimport { bootSetup } from './Config.js'\nimport { MetadataManager } from './model/MetadataManager.js'\nimport Camera from './Camera.js'\nimport { ReadonlyMat4 } from 'gl-matrix'\nimport ColorMaps, { ColorMap, ColorMapName } from './model/ColorMaps.js'\nimport {HiPS} from './model/hips/HiPS.js'\n// import healpixGridSingleton from './model/grid/HealpixGridSingleton.js'\n// import equatorialGridSingleton from './model/grid/EquatorialGrid.js'\ntype GL2WithViewport = WebGL2RenderingContext \n// & {\n// viewportWidth: number\n// viewportHeight: number\n// }\n\nexport class AstroViewer {\n private astroSphere!: AstroSphere\n private canvas!: HTMLCanvasElement\n private webgl!: GL2WithViewport\n private rafId: number | null = null\n private webglContextList: Map<string, GL2WithViewport> = new Map<string, GL2WithViewport>()\n private viewfinderEl: HTMLDivElement | null = null\n private viewfinderVisible = bootSetup.showViewfinder\n private viewfinderColor = 'rgba(75,148,226,0.68)'\n\n\n\n // API\n run(): number {\n return this.tick()\n }\n\n // CATALOGUES\n createCatalogue(catalogueName: string,\n catalogueDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n ): CatalogueGL {\n return new CatalogueGL(catalogueName, catalogueDescription,\n providerUrl, metadataManager, this.webgl, this.astroSphere.healpixGrid.visibleTilesManager)\n }\n\n showCatalogue(catalogue: CatalogueGL) {\n this.astroSphere.showCatalogue(catalogue)\n }\n\n hideCatalogue(catalogue: CatalogueGL, isVisible: boolean) {\n catalogue.setIsVisible(isVisible)\n }\n\n deleteCatalogue(catalogue: CatalogueGL) {\n this.astroSphere.deleteCatalogue(catalogue)\n }\n\n changeCatalogueRA(catalogue: CatalogueGL, raColumnName: string): CatalogueGL {\n catalogue.changeMetaRA(raColumnName)\n // catalogue.catalogueProps.changeCatalogueMetaRA(raColumnName)\n return catalogue\n }\n\n changeCatalogueDec(catalogue: CatalogueGL, decColumnName: string): CatalogueGL {\n catalogue.changeMetaDec(decColumnName)\n // catalogue.catalogueProps.changeCatalogueMetaDec(decColumnName)\n return catalogue\n }\n\n changeCatalogueColor(catalogue: CatalogueGL, hexColor: string): CatalogueGL {\n catalogue.changeColor(hexColor)\n // catalogue.catalogueProps.changeColor(hexColor)\n return catalogue\n }\n\n setCatalogueShapeHue(catalogue: CatalogueGL, metadataColumnName: string): CatalogueGL {\n catalogue.changeMetaShapeHue(metadataColumnName)\n return catalogue\n }\n\n setCatalogueShapeSize(catalogue: CatalogueGL, metadataColumnName: string): CatalogueGL {\n catalogue.changeMetaShapeSize(metadataColumnName)\n return catalogue\n }\n\n //FOOTPRINT\ncreateFootprintSet(footprintSetName: string,\n footprintSetDescription: string,\n providerUrl: string,\n metadataManager: MetadataManager,\n ): FootprintSetGL {\n return new FootprintSetGL(footprintSetName, footprintSetDescription,\n providerUrl, metadataManager, this.webgl, this.astroSphere.healpixGrid.visibleTilesManager)\n }\n\n showFootprintSet(footprintSet: FootprintSetGL) {\n this.astroSphere.showFootprintSet(footprintSet)\n }\n\n hideFootprintSet(footprintSet: FootprintSetGL, isVisible: boolean) {\n footprintSet.setIsVisible(isVisible)\n }\n\n deleteFootprintSet(footprintSet: FootprintSetGL) {\n this.astroSphere.deleteFootprintSet(footprintSet)\n }\n\n changeFootprintSetColor(footprintSet: FootprintSetGL, hexColor: string) {\n // footprintSet.footprintsetProps.changeColor(hexColor)\n footprintSet.changeColor(hexColor)\n }\n\n getHoveredFootprints(): HoveredFootprintDetail[] {\n return this.astroSphere.getHoveredFootprints()\n }\n\n // HIPS\n getDefaultHiPSURL(): string {\n return bootSetup.defaultHipsUrl\n }\n\n activateHiPS(hipsDescriptor: HiPSDescriptor): void {\n this.astroSphere.activateHiPS(hipsDescriptor)\n }\n\n async loadHiPS(baseUrl: string): Promise<string> {\n const hipsUrl = baseUrl.endsWith('/') ? baseUrl : baseUrl + '/';\n const resp = await fetch(hipsUrl + 'properties');\n if (!resp.ok) throw new Error(`HTTP ${resp.status} fetching properties`);\n const propsText = await resp.text();\n const desc = new HiPSDescriptor(propsText, hipsUrl);\n this.astroSphere.activateHiPS(desc)\n return desc.surveyName\n // this.activateHiPS(desc);\n }\n\n // changeColorMap(hips: HiPS, colorMapName: ColorMapName) {\n changeColorMap(colorMapName: ColorMapName) {\n const colorMap = ColorMaps[colorMapName]\n // hips.changeColorMap(colorMap)\n this.astroSphere.changeColorMap(colorMap)\n }\n\n changeCustomColorMap(colorMap: ColorMap) {\n this.astroSphere.changeColorMap(colorMap)\n }\n\n getActiveHiPS(): HiPS | null {\n return this.astroSphere.activeHiPS\n }\n\n // Camera: GOTOs and COORDS\n setCamera(camera: Camera) {\n this.astroSphere.setCamera(camera)\n }\n\n setCameraPosition(pos: [number, number, number]){\n this.astroSphere.setCameraPosition(pos)\n }\n\n setCameraMatrix(viewMatrix: Float32Array){\n this.astroSphere.setCameraMatrix(viewMatrix)\n }\n\n restoreAstroViewerState(detail: CameraChangedDetail, applyColorMap: boolean) {\n this.astroSphere.applyFullCameraState(detail, applyColorMap)\n }\n\n getCurrentAstroViewerStatus(): CameraChangedDetail | null{\n return this.astroSphere.getCurrentStatus()\n }\n\n goTo(raDeg: number, decDeg: number): void {\n // console.log(`AstroViewer.goTo goto(${raDeg}, ${decDeg})`)\n this.astroSphere.goTo(raDeg, decDeg)\n }\n getCenterCoordinates(): PointCoordinates | undefined {\n return this.astroSphere.getCentralPointCoordinates()\n }\n\n getCoordinatesFromMouse(): PointCoordinates | undefined {\n return this.astroSphere.getLastMousePointCoordinates()\n }\n\n // GRIDs\n setModelMatrix(modelMatrix: ReadonlyMat4){\n this.astroSphere.healpixGrid.setModelMatrix(modelMatrix)\n }\n toggleHealpixGrid() {\n // healpixGridSingleton.toggleShowGrid()\n this.astroSphere.healpixGrid.toggleShowGrid()\n }\n\n isHealpixGridVisible(): boolean {\n // return healpixGridSingleton.isVisible()\n return this.astroSphere.healpixGrid.isVisible()\n }\n\n toggleEquatorialGrid() {\n // equatorialGridSingleton.toggleShowGrid()\n return this.astroSphere.equatorialGrid.toggleShowGrid()\n }\n\n isEquatorialGridVisible(): boolean {\n // return equatorialGridSingleton.isVisible()\n return this.astroSphere.equatorialGrid.isVisible()\n }\n\n // FOV\n getFoV(): FoV {\n return this.astroSphere.getFoV()\n }\n\n getFoVPolygon(): Point[] {\n return this.astroSphere.getFoVPolygon()\n }\n\n changeFoV(deg: number) {\n this, this.astroSphere.changeFoV(deg)\n }\n\n changeFoV2(deg: number) {\n this, this.astroSphere.changeFoV2(deg)\n }\n changeFoV3(deg: number) {\n this, this.astroSphere.changeFoV3(deg)\n }\n\n getInsideSphere(): boolean {\n return this.astroSphere.getInsideSphere()\n }\n\n toggleInsideSphere() {\n this.astroSphere.toggleInsideSphere()\n }\n\n toggleViewfinder(): boolean {\n this.viewfinderVisible = !this.viewfinderVisible\n this.syncViewfinderVisibility()\n return this.viewfinderVisible\n }\n\n setViewfinderVisible(visible: boolean): void {\n this.viewfinderVisible = visible\n this.syncViewfinderVisibility()\n }\n\n isViewfinderVisible(): boolean {\n return this.viewfinderVisible\n }\n\n setViewfinderColor(color: string): void {\n this.viewfinderColor = color\n this.syncViewfinderColor()\n }\n\n getViewfinderColor(): string {\n return this.viewfinderColor\n }\n\n setRotationSensitivity(value: number): void {\n this.astroSphere.setCameraRotationSensitivity(value)\n }\n\n getRotationSensitivity(): number {\n return this.astroSphere.getCameraRotationSensitivity()\n }\n\n setZoomSensitivity(value: number): void {\n this.astroSphere.setZoomSensitivity(value)\n }\n\n getZoomSensitivity(): number {\n return this.astroSphere.getZoomSensitivity()\n }\n\n // Internal\n constructor(canvasEl: HTMLCanvasElement) {\n this.init(canvasEl)\n this.webglContextList = new Map<string, GL2WithViewport>()\n }\n\n private init(canvasEl: HTMLCanvasElement): void {\n console.log('init webgl')\n this.canvas = canvasEl\n this.initViewfinder()\n\n const gl = this.canvas.getContext('webgl2', { alpha: false })\n if (!gl) {\n alert('Could not initialise WebGL, sorry :-(')\n throw new Error('WebGL2 not available')\n }\n\n // Extend with custom fields used elsewhere\n this.webgl = gl as GL2WithViewport\n // this.webgl.viewportWidth = this.canvas.width\n // this.webgl.viewportHeight = this.canvas.height\n\n try {\n // 1/255 = 0.00392156862\n this.webgl.clearColor(0 * 0.00392156862, 16 * 0.00392156862, 50 * 0.00392156862, 0.7)\n } catch (e) {\n console.log('Error instantiating WebGL context')\n }\n\n this.initListeners()\n // ; (global as any).gl = this.webgl\n this.astroSphere = new AstroSphere(this.canvas, this.webgl)\n }\n\n private initViewfinder(): void {\n const parent = this.canvas.parentElement\n if (!parent) return\n\n if (window.getComputedStyle(parent).position === 'static') {\n parent.style.position = 'relative'\n }\n\n const viewfinder = document.createElement('div')\n viewfinder.setAttribute('data-astro-viewfinder', 'true')\n viewfinder.setAttribute('aria-hidden', 'true')\n viewfinder.style.position = 'absolute'\n viewfinder.style.left = '50%'\n viewfinder.style.top = '50%'\n viewfinder.style.width = '44px'\n viewfinder.style.height = '44px'\n viewfinder.style.transform = 'translate(-50%, -50%)'\n viewfinder.style.pointerEvents = 'none'\n viewfinder.style.zIndex = '1'\n viewfinder.style.boxSizing = 'border-box'\n\n const segments: Array<{\n left?: string;\n right?: string;\n top?: string;\n bottom?: string;\n width: string;\n height: string;\n transform: string;\n }> = [\n { left: '50%', top: '7px', width: '1px', height: '11px', transform: 'translateX(-50%)' },\n { left: '50%', bottom: '7px', width: '1px', height: '11px', transform: 'translateX(-50%)' },\n { left: '7px', top: '50%', width: '11px', height: '1px', transform: 'translateY(-50%)' },\n { right: '7px', top: '50%', width: '11px', height: '1px', transform: 'translateY(-50%)' },\n ]\n\n for (const segmentDef of segments) {\n const segment = document.createElement('div')\n segment.style.position = 'absolute'\n segment.style.left = segmentDef.left ?? 'auto'\n segment.style.right = segmentDef.right ?? 'auto'\n segment.style.top = segmentDef.top ?? 'auto'\n segment.style.bottom = segmentDef.bottom ?? 'auto'\n segment.style.width = segmentDef.width\n segment.style.height = segmentDef.height\n segment.style.transform = segmentDef.transform\n segment.style.background = 'currentColor'\n segment.style.borderRadius = '999px'\n segment.style.boxShadow = '0 0 0 1px rgba(0, 0, 0, 0.14)'\n viewfinder.appendChild(segment)\n }\n parent.appendChild(viewfinder)\n\n this.viewfinderEl = viewfinder\n this.syncViewfinderVisibility()\n this.syncViewfinderColor()\n }\n\n private syncViewfinderVisibility(): void {\n if (!this.viewfinderEl) return\n this.viewfinderEl.style.display = this.viewfinderVisible ? 'block' : 'none'\n }\n\n private syncViewfinderColor(): void {\n if (!this.viewfinderEl) return\n this.viewfinderEl.style.color = this.viewfinderColor\n }\n\n private initListeners(): void {\n console.log('inside initListeners')\n\n const resizeCanvas = () => {\n console.log('[resizeCanvas]')\n\n const rect = this.canvas.getBoundingClientRect();\n const dpr = window.devicePixelRatio || 1;\n const newWidth = Math.max(1, Math.floor(rect.width * dpr));\n const newHeight = Math.max(1, Math.floor(rect.height * dpr));\n\n if (this.canvas.width !== newWidth || this.canvas.height !== newHeight) {\n\n this.canvas.width = newWidth;\n this.canvas.height = newHeight;\n\n // this.webgl.viewportWidth = this.canvas.width\n // this.webgl.viewportHeight = this.canvas.height\n this.webgl.viewport(0, 0, this.canvas.width, this.canvas.height)\n }\n }\n\n const handleContextLost = (event: Event) => {\n console.log('[handleContextLost]')\n event.preventDefault()\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n }\n\n const handleContextRestored = (_event: Event) => {\n console.log('[handleContextRestored]')\n // this.webgl.viewportWidth = this.canvas.width\n // this.webgl.viewportHeight = this.canvas.height\n this.webgl.clearColor(0 * 0.00392156862, 16 * 0.00392156862, 50 * 0.00392156862, 0.7)\n this.webgl.enable(this.webgl.DEPTH_TEST)\n this.rafId = requestAnimationFrame(() => this.tick())\n }\n\n // 🔥 ResizeObserver per pannelli / split / layout dinamici\n if ('ResizeObserver' in window) {\n const ro = new ResizeObserver(() => {\n resizeCanvas();\n });\n\n // Osserva il canvas o il suo parent (a tua scelta)\n ro.observe(this.canvas);\n \n }\n\n window.addEventListener('resize', resizeCanvas)\n this.canvas.addEventListener('webglcontextlost', handleContextLost as EventListener, false)\n this.canvas.addEventListener('webglcontextrestored', handleContextRestored as EventListener, false)\n resizeCanvas()\n }\n\n\n private tick(): number {\n this.drawScene()\n this.rafId = requestAnimationFrame(() => this.tick())\n return this.rafId\n }\n\n private drawScene(): void {\n this.astroSphere.draw(this.canvas)\n }\n\n\n}\n","export { AstroViewer } from './AstroViewer.js';\nexport { HiPSDescriptor } from './model/hips/HiPSDescriptor.js';\nexport { FoV } from './model/FoV.js'\n\nexport type { PointCoordinates, CameraChangedDetail } from './AstroSphere.js';\nexport { HoveredFootprintDetail, FootprintSetGL } from './model/footprints/FootprintSetGL.js'\nexport { CatalogueGL } from './model/catalogues/CatalogueGL.js'\n\nexport { MetadataManager } from './model/MetadataManager.js'\nexport { MetadataColumn, MetadataInit, ColumnType } from './model/MetadataColumn.js'\nexport { Point, SphericalOpts, AstroOpts, PointInitOpts, CartesianOpts } from './model/Point.js'\nexport { FoVUtils } from './utils/FoVUtils.js'\nexport { CoordsType } from './utils/CoordsType.js'\nexport { ColorMaps, COLOR_MAP_SAMPLE_COUNT, createColorMapFromSamples } from './model/ColorMaps.js';\nexport type { ColorMap, ColorMapName } from './model/ColorMaps.js';\nexport { HiPS } from './model/hips/HiPS.js'\n\nexport {Source} from './model/Source.js'\nexport {Footprint} from './model/footprints/Footprint.js'\n\n\nconsole.log('astroviewer UMD loaded')\n"],"names":[],"sourceRoot":""}
|