Full Code of Kitware/itk-vtk-viewer for AI

master 1c373bfcbb50 cached
400 files
2.1 MB
578.6k tokens
1365 symbols
1 requests
Download .txt
Showing preview only (2,311K chars total). Download the full file or copy to clipboard to get everything.
Repository: Kitware/itk-vtk-viewer
Branch: master
Commit: 1c373bfcbb50
Files: 400
Total size: 2.1 MB

Directory structure:
gitextract_6jojsqhp/

├── .babelrc
├── .editorconfig
├── .eslintrc.js
├── .github/
│   └── workflows/
│       ├── build-test.yml
│       └── publish.yml
├── .gitignore
├── .gitmodules
├── .npmignore
├── .prettierrc
├── CONTRIBUTING.md
├── Copyright.txt
├── LICENSE
├── README.md
├── bin/
│   ├── itk-vtk-viewer-cli.js
│   ├── network.js
│   └── server.js
├── buildUI.js
├── doc/
│   ├── .gitignore
│   ├── config.js
│   ├── content/
│   │   ├── api/
│   │   │   └── index.md
│   │   ├── config/
│   │   │   └── index.md
│   │   ├── docs/
│   │   │   ├── cli.md
│   │   │   ├── customizeUI.md
│   │   │   ├── embeddedViewer.md
│   │   │   ├── imjoy.md
│   │   │   ├── index.md
│   │   │   ├── shortcuts.md
│   │   │   └── viewer.md
│   │   ├── index.html
│   │   └── index.jade
│   ├── data/
│   │   └── menu.yml
│   └── tpl/
│       ├── __en__
│       └── __sidebar__
├── examples/
│   ├── compare-image.html
│   ├── cyan-magenta-compare-image.html
│   ├── test-conglomerate.html
│   ├── test-pointsets.html
│   └── test.html
├── karma.conf.js
├── package.json
├── postcss.config.js
├── src/
│   ├── Compression/
│   │   ├── blosc-zarr/
│   │   │   ├── BloscZarr.cxx
│   │   │   ├── CMakeLists.txt
│   │   │   └── web-build/
│   │   │       ├── BloscZarr.js
│   │   │       ├── BloscZarr.umd.js
│   │   │       └── BloscZarr.wasm
│   │   └── bloscZarrDecompress.js
│   ├── Context/
│   │   ├── ImageActorContext.js
│   │   ├── ImagesMachineContext.js
│   │   ├── LayerActorContext.js
│   │   ├── LayersMachineContext.js
│   │   ├── MainMachineContext.js
│   │   ├── ViewerMachineContext.js
│   │   └── WidgetsMachineContext.js
│   ├── IO/
│   │   ├── Analyze/
│   │   │   ├── ComputeRanges.worker.js
│   │   │   ├── UpdateHistogram.worker.js
│   │   │   ├── computeHistograms.js
│   │   │   ├── computeRanges.js
│   │   │   ├── createRangeHelper.js
│   │   │   └── webWorkerPromiseWorkerPool.js
│   │   ├── Compare/
│   │   │   ├── .gitignore
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Compare.cxx
│   │   │   ├── createCompareImage.js
│   │   │   ├── emscripten-build/
│   │   │   │   ├── Compare.js
│   │   │   │   ├── Compare.umd.js
│   │   │   │   ├── Compare.umd.wasm
│   │   │   │   └── Compare.wasm
│   │   │   ├── index.mjs
│   │   │   └── package.json
│   │   ├── ConglomerateMultiscaleSpatialImage.js
│   │   ├── Downsample/
│   │   │   ├── .gitignore
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Downsample.cxx
│   │   │   ├── DownsampleLabelImage.cxx
│   │   │   ├── cypress/
│   │   │   │   ├── integration/
│   │   │   │   │   └── load_data_spec.js
│   │   │   │   └── plugins/
│   │   │   │       └── index.cjs
│   │   │   ├── cypress.json
│   │   │   ├── downsample.js
│   │   │   ├── emscripten-build/
│   │   │   │   ├── Downsample.js
│   │   │   │   ├── Downsample.umd.js
│   │   │   │   ├── Downsample.umd.wasm
│   │   │   │   ├── Downsample.wasm
│   │   │   │   ├── DownsampleLabelImage.js
│   │   │   │   ├── DownsampleLabelImage.umd.js
│   │   │   │   ├── DownsampleLabelImage.umd.wasm
│   │   │   │   └── DownsampleLabelImage.wasm
│   │   │   ├── index.html
│   │   │   ├── package.json
│   │   │   └── styles.css
│   │   ├── HttpStore.js
│   │   ├── ImageDataFromChunks.worker.js
│   │   ├── InMemoryMultiscaleSpatialImage.js
│   │   ├── MultiscaleSpatialImage.js
│   │   ├── ResampleLabelImage/
│   │   │   ├── .gitignore
│   │   │   ├── CMakeLists.txt
│   │   │   ├── ResampleLabelImage.cxx
│   │   │   ├── emscripten-build/
│   │   │   │   ├── ResampleLabelImage.js
│   │   │   │   ├── ResampleLabelImage.umd.js
│   │   │   │   ├── ResampleLabelImage.umd.wasm
│   │   │   │   └── ResampleLabelImage.wasm
│   │   │   ├── index.mjs
│   │   │   ├── package.json
│   │   │   └── resampleLabelImage.js
│   │   ├── ZarrMultiscaleSpatialImage.js
│   │   ├── ZarrStoreParser.js
│   │   ├── componentTypeToTypedArray.js
│   │   ├── composeComponents.js
│   │   ├── dimensionUtils.js
│   │   ├── dtypeUtils.js
│   │   ├── fetchBinaryContent.js
│   │   ├── fetchJsonContent.js
│   │   ├── itkWasmUtils.js
│   │   ├── ndarrayToItkImage.js
│   │   ├── ndarrayToPointSet.js
│   │   ├── processFiles.js
│   │   ├── toMultiscaleSpatialImage.js
│   │   └── uploadFileHandler.js
│   ├── ImJoyPluginAPI.js
│   ├── Rendering/
│   │   ├── Images/
│   │   │   ├── createImageRenderingActor.js
│   │   │   ├── createImagesRenderingMachine.js
│   │   │   └── makeTransitions.js
│   │   ├── Layers/
│   │   │   └── createLayersRenderingMachine.js
│   │   ├── Main/
│   │   │   ├── backgroundIsDark.js
│   │   │   ├── backgroundIsLight.js
│   │   │   └── createMainRenderingMachine.js
│   │   ├── VTKJS/
│   │   │   ├── Images/
│   │   │   │   ├── ComposeImage.worker.js
│   │   │   │   ├── applyBlendMode.js
│   │   │   │   ├── applyCinematicChanged.js
│   │   │   │   ├── applyColorMap.js
│   │   │   │   ├── applyColorRange.js
│   │   │   │   ├── applyColorRangeBounds.js
│   │   │   │   ├── applyComponentVisibility.js
│   │   │   │   ├── applyComponentWeights.js
│   │   │   │   ├── applyGradientOpacity.js
│   │   │   │   ├── applyIndependentComponents.js
│   │   │   │   ├── applyLabelImageBlend.js
│   │   │   │   ├── applyLabelImageWeights.js
│   │   │   │   ├── applyLabelNames.js
│   │   │   │   ├── applyLookupTable.js
│   │   │   │   ├── applyPiecewiseFunction.js
│   │   │   │   ├── applyRenderedImage.js
│   │   │   │   ├── applySelectedLabel.js
│   │   │   │   ├── applyShadow.js
│   │   │   │   ├── applyVolumeSampleDistance.js
│   │   │   │   ├── assignRenderedImage.js
│   │   │   │   ├── assignVisualizedComponents.js
│   │   │   │   ├── createImageRenderer.js
│   │   │   │   ├── fuseImages.js
│   │   │   │   ├── imagesRenderingMachineOptions.js
│   │   │   │   ├── mapToColorFunctionRange.js
│   │   │   │   ├── mapToPiecewiseFunctionNodes.js
│   │   │   │   ├── selectImageLayer.js
│   │   │   │   ├── toggleInterpolation.js
│   │   │   │   ├── toggleLayerBBox.js
│   │   │   │   ├── toggleLayerVisibility.js
│   │   │   │   ├── transformLabelImageWeight.js
│   │   │   │   ├── updateHistogram.js
│   │   │   │   ├── updateLabelImagePiecewiseFunction.js
│   │   │   │   └── updateRenderedImage.js
│   │   │   ├── Layers/
│   │   │   │   └── layersRenderingMachineOptions.js
│   │   │   ├── Main/
│   │   │   │   ├── applyCroppingPlanes.js
│   │   │   │   ├── applySlicingPlanes.js
│   │   │   │   ├── applyXSlice.js
│   │   │   │   ├── applyYSlice.js
│   │   │   │   ├── applyZSlice.js
│   │   │   │   ├── computeRenderedBounds.js
│   │   │   │   ├── createMainRenderer.js
│   │   │   │   ├── croppingPlanes.js
│   │   │   │   ├── mainRenderingMachineOptions.js
│   │   │   │   ├── resetCamera.js
│   │   │   │   ├── resetCroppingPlanes.js
│   │   │   │   ├── setBackgroundColor.js
│   │   │   │   ├── setUnits.js
│   │   │   │   ├── takeScreenshot.js
│   │   │   │   ├── toggleAnnotations.js
│   │   │   │   ├── toggleAxes.js
│   │   │   │   ├── toggleCroppingPlanes.js
│   │   │   │   ├── toggleRotate.js
│   │   │   │   ├── updateFps.js
│   │   │   │   ├── updateSlicingPlanes.js
│   │   │   │   ├── viewModeVolume.js
│   │   │   │   ├── viewModeXPlane.js
│   │   │   │   ├── viewModeYPlane.js
│   │   │   │   └── viewModeZPlane.js
│   │   │   ├── Widgets/
│   │   │   │   ├── DistanceWidget/
│   │   │   │   │   ├── DistanceWidget.js
│   │   │   │   │   └── state.js
│   │   │   │   ├── HandlesInPixelsImageCroppingWidget.js
│   │   │   │   ├── createWidgets.js
│   │   │   │   ├── toggleDistanceWidget.js
│   │   │   │   └── widgetsRenderingMachineOptions.js
│   │   │   ├── cancelAnimation.js
│   │   │   ├── createRenderer.js
│   │   │   ├── numericalSort.js
│   │   │   ├── proxyManagerConfiguration.js
│   │   │   ├── render.js
│   │   │   ├── requestAnimation.js
│   │   │   ├── vtk/
│   │   │   │   ├── AxesLabelsWidget/
│   │   │   │   │   ├── behavior.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── state.js
│   │   │   │   ├── ItkVtkViewProxy.js
│   │   │   │   ├── OpenGLImageMapperFractional.js
│   │   │   │   ├── PointSetRepresentationProxy/
│   │   │   │   │   └── index.js
│   │   │   │   ├── SVGMarkerTextRepresentation/
│   │   │   │   │   └── index.js
│   │   │   │   ├── SVGRepresentation/
│   │   │   │   │   └── index.js
│   │   │   │   ├── SliceOutlineFilter/
│   │   │   │   │   └── index.js
│   │   │   │   └── WidgetManagerPickWhileAnimating.js
│   │   │   └── vtkJSRenderingMachineOptions.js
│   │   ├── Widgets/
│   │   │   └── createWidgetsRenderingMachine.js
│   │   ├── createRenderingMachine.js
│   │   └── updateLabelMapComponentWeight.js
│   ├── UI/
│   │   ├── Images/
│   │   │   ├── createImagesUIMachine.js
│   │   │   └── transferFunctionManipulators.js
│   │   ├── Layers/
│   │   │   ├── createLayerUIActor.js
│   │   │   └── createLayersUIMachine.js
│   │   ├── Main/
│   │   │   └── createMainUIMachine.js
│   │   ├── Widgets/
│   │   │   └── createWidgetsUIMachine.js
│   │   ├── addKeyboardShortcuts.js
│   │   ├── createRenderingViewContainers.js
│   │   ├── createUIMachine.js
│   │   ├── reference-ui/
│   │   │   ├── .babelrc
│   │   │   ├── package.json
│   │   │   ├── rollup.config.js
│   │   │   ├── src/
│   │   │   │   ├── Images/
│   │   │   │   │   ├── applyBlendMode.js
│   │   │   │   │   ├── applyColorMap.js
│   │   │   │   │   ├── applyColorRange.js
│   │   │   │   │   ├── applyColorRangeBounds.js
│   │   │   │   │   ├── applyComponentVisibility.js
│   │   │   │   │   ├── applyGradientOpacity.js
│   │   │   │   │   ├── applyGradientOpacityScale.js
│   │   │   │   │   ├── applyHistogram.js
│   │   │   │   │   ├── applyImagesContrastSensitiveStyle.js
│   │   │   │   │   ├── applyLabelImageBlend.js
│   │   │   │   │   ├── applyLabelImageWeights.js
│   │   │   │   │   ├── applyLabelNames.js
│   │   │   │   │   ├── applyLookupTable.js
│   │   │   │   │   ├── applyPiecewiseFunctionGaussians.js
│   │   │   │   │   ├── applySelectedLabel.js
│   │   │   │   │   ├── applyVolumeSampleDistance.js
│   │   │   │   │   ├── applyWindowingReset.js
│   │   │   │   │   ├── cinematic.js
│   │   │   │   │   ├── createBlendModeSelector.js
│   │   │   │   │   ├── createColorRangeInput.js
│   │   │   │   │   ├── createComponentSelector.js
│   │   │   │   │   ├── createGradientOpacitySlider.js
│   │   │   │   │   ├── createImagesInterface.js
│   │   │   │   │   ├── createInterpolationButton.js
│   │   │   │   │   ├── createLabelImageColorWidget.js
│   │   │   │   │   ├── createLabelImageWeightWidget.js
│   │   │   │   │   ├── createSampleDistanceSlider.js
│   │   │   │   │   ├── createShadowToggle.js
│   │   │   │   │   ├── createTransferFunctionEditor.js
│   │   │   │   │   ├── createTransferFunctionWidget.js
│   │   │   │   │   ├── createVolumeRenderingInputs.js
│   │   │   │   │   ├── createWindowLevelReset.js
│   │   │   │   │   ├── createWindowLevelToggle.js
│   │   │   │   │   ├── imagesUIMachineOptions.js
│   │   │   │   │   ├── scaleSelector.js
│   │   │   │   │   ├── selectImageComponent.js
│   │   │   │   │   ├── throttle.js
│   │   │   │   │   ├── toggleInterpolation.js
│   │   │   │   │   ├── toggleShadow.js
│   │   │   │   │   ├── toggleUseShadow.js
│   │   │   │   │   ├── toggleWindowLevel.js
│   │   │   │   │   ├── updateAvailableComponents.js
│   │   │   │   │   ├── updateImageInterface.js
│   │   │   │   │   ├── updateLabelImageInterface.js
│   │   │   │   │   └── updateRenderedImageInterface.js
│   │   │   │   ├── ItkVtkViewer.module.css
│   │   │   │   ├── Layers/
│   │   │   │   │   ├── addLayerUIRow.js
│   │   │   │   │   ├── applyLayersContrastSensitiveStyle.js
│   │   │   │   │   ├── compareUI.js
│   │   │   │   │   ├── createLayerInterface.js
│   │   │   │   │   ├── createLayersInterface.js
│   │   │   │   │   ├── dataUpdateIndicator.js
│   │   │   │   │   ├── extensionToImageIo.js
│   │   │   │   │   ├── layerIcon.ts
│   │   │   │   │   ├── layerSettings.ts
│   │   │   │   │   ├── layersUIMachineOptions.js
│   │   │   │   │   ├── selectLayer.js
│   │   │   │   │   └── toggleLayerVisibility.js
│   │   │   │   ├── Main/
│   │   │   │   │   ├── applyMainContrastSensitiveStyle.js
│   │   │   │   │   ├── applySlicingPlanes.js
│   │   │   │   │   ├── applyXSlice.js
│   │   │   │   │   ├── applyYSlice.js
│   │   │   │   │   ├── applyZSlice.js
│   │   │   │   │   ├── createAnnotationsButton.js
│   │   │   │   │   ├── createAxesButton.js
│   │   │   │   │   ├── createBackgroundColorButton.js
│   │   │   │   │   ├── createCroppingButtons.js
│   │   │   │   │   ├── createFullscreenButton.js
│   │   │   │   │   ├── createMainInterface.js
│   │   │   │   │   ├── createPlaneSliders.js
│   │   │   │   │   ├── createResetCameraButton.js
│   │   │   │   │   ├── createRotateButton.js
│   │   │   │   │   ├── createScreenshotButton.js
│   │   │   │   │   ├── createViewModeButtons.js
│   │   │   │   │   ├── createViewPlanesToggle.js
│   │   │   │   │   ├── fullscreenMethods.js
│   │   │   │   │   ├── mainUIMachineOptions.js
│   │   │   │   │   ├── resetCrop.js
│   │   │   │   │   ├── toggleAnnotations.js
│   │   │   │   │   ├── toggleAxes.js
│   │   │   │   │   ├── toggleBackgroundColor.js
│   │   │   │   │   ├── toggleCrop.js
│   │   │   │   │   ├── toggleCroppingPlanes.js
│   │   │   │   │   ├── toggleFullscreen.js
│   │   │   │   │   ├── toggleRotate.js
│   │   │   │   │   ├── viewModeVolume.js
│   │   │   │   │   ├── viewModeXPlane.js
│   │   │   │   │   ├── viewModeYPlane.js
│   │   │   │   │   └── viewModeZPlane.js
│   │   │   │   ├── Widgets/
│   │   │   │   │   ├── applyDistanceWidgetValue.js
│   │   │   │   │   ├── applyWidgetsContrastSensitiveStyle.js
│   │   │   │   │   ├── createDistanceWidget.js
│   │   │   │   │   ├── createWidgetsInterface.js
│   │   │   │   │   ├── toggleDistanceWidget.js
│   │   │   │   │   ├── viewModeVolume.js
│   │   │   │   │   ├── viewModeXPlane.js
│   │   │   │   │   ├── viewModeYPlane.js
│   │   │   │   │   ├── viewModeZPlane.js
│   │   │   │   │   └── widgetsUIMachineOptions.js
│   │   │   │   ├── applyCategoricalColorToColorTransferFunction.js
│   │   │   │   ├── applyContrastSensitiveStyleToElement.js
│   │   │   │   ├── applyGroupVisibility.js
│   │   │   │   ├── collapse-ui.ts
│   │   │   │   ├── context.ts
│   │   │   │   ├── createCategoricalColorIconSelector.js
│   │   │   │   ├── createColorMapIconSelector.js
│   │   │   │   ├── createInterface.js
│   │   │   │   ├── referenceUIMachineOptions.js
│   │   │   │   ├── serviceContext.ts
│   │   │   │   ├── shims.d.ts
│   │   │   │   ├── toggleDarkMode.js
│   │   │   │   ├── toggleUICollapsed.js
│   │   │   │   └── utils.js
│   │   │   └── tsconfig.json
│   │   └── styleRenderingViewContainers.js
│   ├── UserInterface/
│   │   ├── CategoricalPresetNames.js
│   │   ├── Geometries/
│   │   │   ├── createGeometryColorBySelector.js
│   │   │   ├── createGeometryColorChooser.js
│   │   │   ├── createGeometryColorRangeInput.js
│   │   │   ├── createGeometryColorWidget.js
│   │   │   ├── createGeometryOpacitySlider.js
│   │   │   └── createGeometryRepresentationSelector.js
│   │   ├── ItkVtkViewer.module.css
│   │   ├── PointSets/
│   │   │   ├── createPointSetColorBySelector.js
│   │   │   ├── createPointSetColorChooser.js
│   │   │   ├── createPointSetColorRangeInput.js
│   │   │   ├── createPointSetColorWidget.js
│   │   │   ├── createPointSetOpacitySlider.js
│   │   │   ├── createPointSetRepresentationSelector.js
│   │   │   └── createPointSetSizeSlider.js
│   │   ├── addLogo.js
│   │   ├── applyContrastSensitiveStyle.js
│   │   ├── checkForWebGL.js
│   │   ├── createCategoricalColorIconSelector.js
│   │   ├── createColorMapIconSelector.js
│   │   ├── createFileDragAndDrop.js
│   │   ├── createGeometriesUI.js
│   │   ├── createLoadingProgress.js
│   │   ├── createPointSetsUI.js
│   │   ├── customColorMapIcon.js
│   │   ├── emptyContainer.js
│   │   ├── getContrastSensitiveStyle.js
│   │   ├── getRootContainer.js
│   │   ├── hex2rgb.js
│   │   ├── index.js
│   │   ├── preventDefaults.js
│   │   └── rgb2hex.js
│   ├── ViewerStore.js
│   ├── createViewer.js
│   ├── createViewerMachine.js
│   ├── imJoyCodecs.js
│   ├── index.d.ts
│   ├── index.js
│   ├── internalUtils.js
│   ├── itkConfig.js
│   ├── itkConfigCDN.js
│   ├── transformBounds.js
│   ├── utils.js
│   └── viewerMachineOptions.js
├── test/
│   ├── conglomerateTest.js
│   ├── convertItkImageToVtkImageTest.js
│   ├── createViewerTest.js
│   ├── customElementsDefineOverride.js
│   ├── downloadData.mjs
│   ├── imjoyTest.js
│   ├── itkConfigBrowserTest.js
│   ├── multiscaleSpatialImageTest.js
│   ├── pipelineTest.js
│   ├── processFilesTest.js
│   ├── run.sh
│   ├── test-ui-rollup.config.js
│   ├── testUINoPlaneSliders.js
│   ├── tests.js
│   ├── zarrImageBaselines.js
│   └── zarrTest.js
├── tsconfig.json
└── webpack.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .babelrc
================================================
{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "browsers": ["last 2 versions"]
        },
        "useBuiltIns": false
      }
    ],
    "mobx"
  ],
  "plugins": [
    "@babel/plugin-transform-runtime",
    ["@babel/plugin-proposal-decorators", { "legacy": true }],
    ["@babel/plugin-proposal-class-properties", { "loose": false }]
  ]
}


================================================
FILE: .editorconfig
================================================
# editorconfig.org
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false


================================================
FILE: .eslintrc.js
================================================
module.exports = {
  env: {
    browser: true,
    es2021: true,
  },
  extends: ['eslint:recommended', 'prettier'],
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
  },
  rules: {},
}


================================================
FILE: .github/workflows/build-test.yml
================================================
name: Build and Test
on: [push, pull_request]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04, macos-13, windows-2022]
        node: [20, 22]
    name: ${{ matrix.os }} and node ${{ matrix.node }}
    steps:
      - uses: actions/checkout@v4

      - name: Setup node
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}

      - name: Install dependencies
        run: npm ci

      - name: Download testing data
        shell: bash
        run: |
          curl -OL https://github.com/Kitware/itk-vtk-viewer/releases/download/v14.35.1/itk-vtk-viewer-testing-data.tar.gz
          tar xvzf ./itk-vtk-viewer-testing-data.tar.gz -C test/

      - name: Build
        run: npm run build

      - name: Test
        if: ${{ runner.os == 'Linux' }}
        run: |
          npm run test:downloadData
          # Allow writing test/output.html
          sudo chmod -R 777 test
          # To debug, run `./test/run.sh -d`
          npm run test:headless


================================================
FILE: .github/workflows/publish.yml
================================================
name: Release
on:
  push:
    branches:
      - master

jobs:
  publish:
    name: Publish
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Setup node
        uses: actions/setup-node@v4
        with:
          node-version: 22

      - name: Install dependencies
        run: |
          npm ci
          sudo apt-get install xvfb

      - name: Download testing data
        shell: bash
        run: |
          curl -OL https://github.com/Kitware/itk-vtk-viewer/releases/download/v14.35.1/itk-vtk-viewer-testing-data.tar.gz
          tar xvzf ./itk-vtk-viewer-testing-data.tar.gz -C test/
          rm ./itk-vtk-viewer-testing-data.tar.gz

      - name: Build
        run: npm run build

      - name: Chrome and Firefox tests
        run: |
          # Failing based on vtk.js piecewisegaussian?
          # xvfb-run --auto-servernum npm run test -- --browsers Chrome,Firefox

          # Allow writing test/output.html
          sudo chmod -R 777 test
          # To debug, run `./test/run.sh -d`
          npm run test:headless
      - name: Release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
        run: |
          git config --global user.name "Github Actions"
          git config --global user.email "sebastien.jourdain@kitware.com"
          npm run semantic-release
      - name: Publish docs
        if: github.ref == 'refs/heads/master'
        env:
          GIT_PUBLISH_URL: https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/Kitware/itk-vtk-viewer.git
        run: npm run doc:publish


================================================
FILE: .gitignore
================================================
.DS_Store
*.swp
.npm-packages
.npmrc
yarn.lock
npm-debug.log
node_modules
Data
dist/
coverage/
test/output.html
test/TESTS-*.xml
test/testUINoPlaneSlidersBundle.js

src/Compression/blosc-zarr/web-build/*
!src/Compression/blosc-zarr/web-build/BloscZarr.js
!src/Compression/blosc-zarr/web-build/BloscZarr.umd.js
!src/Compression/blosc-zarr/web-build/BloscZarr.wasm
test/data/


================================================
FILE: .gitmodules
================================================
[submodule "src/blosc/c-blosc"]
	path = src/Compression/blosc-zarr/c-blosc
	url = https://github.com/Blosc/c-blosc


================================================
FILE: .npmignore
================================================
.DS_Store
.gitmodules
.npmrc
.sass-cache
.travis.yml
doc
npm-debug.log
src/UI/reference-ui/node_modules
src/Compression/blosc-zarr
test
src/Compression/blosc-zarr/web-build
src/IO/Downsample/web-build
.github
dist/itk/image-io/node_modules
dist/itk/mesh-io/node_modules
dist/*.map


================================================
FILE: .prettierrc
================================================
{
  "endOfLine": "lf",
  "semi": false,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "es5"
}


================================================
FILE: CONTRIBUTING.md
================================================
Contributing to ITK/VTK ImageViewer
====================================

This page documents at a very high level how to contribute to itk-vtk-viewer.

1. The itk-vtk-viewer source is maintained on Github at [github.com/kitware/itk-vtk-viewer](https://github.com/kitware/itk-vtk-viewer)

2. [Fork the repository] into your user's namespace on Github.

3. Create a local clone of the main repository:

    ```sh
    $ git clone https://github.com/kitware/itk-vtk-viewer.git
    $ cd itk-vtk-viewer
    ```

    The main repository will be configured as your `origin` remote.

4. Run the setup script to prepare itk-vtk-viewer:
    ```sh
    $ npm install
    $ npm install -g commitizen
    ```

5. Edit files and create commits (repeat as needed):
    ```sh
    $ edit file1 file2 file3
    $ git add file1 file2 file3
    $ npm run commit
    ```

6. Push commits in your topic branch to your fork in Github:
    ```sh
    $ git push
    ```

7. Visit your fork in Github, browse to the "**Pull Requests**" link on the
   left, and use the "**New Pull Request**" button in the upper right to
   create a Pull Request.

   For more information see: [Create a Pull Request]

This project uses GitHub for code review and Travis-CI to test proposed
patches before they are merged.

Our [DevSite] is used to document features, flesh out designs and host other
documentation as well as the API.


[Fork the repository]: https://help.github.com/articles/fork-a-repo/
[Create a Pull Request]: https://help.github.com/articles/creating-a-pull-request/
[DevSite]: http://kitware.github.io/itk-vtk-viewer


================================================
FILE: Copyright.txt
================================================
/*=========================================================================

  Program:   ITK/VTK ImageViewer
  Module:    Copyright.txt

Copyright (c) 2016 Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

 * Redistributions of source code must retain the above copyright notice,
   this list of conditions and the following disclaimer.

 * Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

 * Neither name of Ken Martin, Will Schroeder, or Bill Lorensen nor the names
   of any contributors may be used to endorse or promote products derived
   from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

=========================================================================*/


================================================
FILE: LICENSE
================================================
Copyright (c) 2016, Kitware Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of the <organization> nor the
      names of its contributors may be used to endorse or promote products
      derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: README.md
================================================
## [ITK/VTK Viewer - Web based Image, Mesh, and Point Set Viewer](http://kitware.github.io/itk-vtk-viewer/)

![Build and Test](https://github.com/Kitware/itk-vtk-viewer/workflows/Build%20and%20Test/badge.svg)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
![npm-download](https://img.shields.io/npm/dm/itk-vtk-viewer.svg)
[![](https://data.jsdelivr.com/v1/package/npm/itk-vtk-viewer/badge?style=rounded)](https://www.jsdelivr.com/package/npm/itk-vtk-viewer)
![npm-version-requirement](https://img.shields.io/badge/npm->=8.0.0-brightgreen.svg)
![node-version-requirement](https://img.shields.io/badge/node->=12.0.0-brightgreen.svg)
[![launch ImJoy](https://imjoy.io/static/badge/launch-imjoy-badge.svg)](http://imjoy.io/#/app?plugin=https://kitware.github.io/itk-vtk-viewer/app/)
[![DOI](https://zenodo.org/badge/92198432.svg)](https://zenodo.org/badge/latestdoi/92198432)

# Introduction

ITK/VTK Viewer is an open-source software system for medical and
scientific image, mesh, and point set visualization.

# Reporting Issues

If you would like to discuss a bug or possible improvement:

1. If you have a patch, please read the [CONTRIBUTING.md][] document.

2. Open an entry in the [Issue Tracker][].

[contributing.md]: CONTRIBUTING.md
[issue tracker]: https://github.com/Kitware/itk-vtk-viewer/issues

# Requirements

In general ITK/VTK Viewer tries to be as portable as possible; the specific configurations below are tested and known to work.

ITK/VTK Viewer supports the following development environments:

- Node 16+
- NPM 8+

and the following browsers:

- Firefox
- Chrome
- Safari

# Documentation

See the [documentation](https://kitware.github.io/itk-vtk-viewer) for a
getting started guide, advanced documentation, and API descriptions.

# Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for instructions to contribute.

# License

ITK/VTK Viewer is distributed under the OSI-approved BSD 3-clause License.
See [Copyright.txt][] for details.

[copyright.txt]: Copyright.txt

# Build Blosc with Debug

Checkout `c-blosc` git submodule, then

`itk-wasm --build-dir web-build build -- -DCMAKE_BUILD_TYPE=Debug`


================================================
FILE: bin/itk-vtk-viewer-cli.js
================================================
#!/usr/bin/env node

let program = require('commander');
let ipList = require('./network');
let server = require('./server');
let pkg = require('../package.json');
let openFn = require('open');
let path = require('path');

let app = null;
let version = /semantically-release/.test(pkg.version) ? 'development version' : pkg.version;
let dataPath = process.cwd();

function handlePort(value) {
  if (!isNaN(parseInt(value, 10))) {
    return parseInt(value, 10);
  }
  throw Error('port option requires a number');
}

program
  .version(version)
  .option('-p, --port [3000]', 'Start web server with given port', handlePort, 3000)
  .option('-s, --server-only', 'Do not open the web browser\n')
  .arguments('[inputFile]')
  .parse(process.argv);

const inputFilePath = program.args[0];
let urlOptions = '';
if (inputFilePath) {
  const fullPath = path.normalize(inputFilePath);
  dataPath = path.dirname(fullPath);
  const inputFileName = path.basename(fullPath);
  urlOptions = `?fileToLoad=/data/${inputFileName.replace(/ /g, '%20')}`
}

// Start server and listening
app = server(dataPath);
app.listen(program.port);

// Print server information
if (ipList.length === 1) {
  console.log(['\nitk-vtk-viewer\n  => Serving ', dataPath, '\n\n     http://', ipList[0].ip, ':', program.port, `/${urlOptions}\n`].join(''));
} else {
  function printIP(l) {
    console.log('    ', l.name, ['=> http://', l.ip, ':', program.port, `/${urlOptions}`].join(''));
  }
  console.log(['\nitk-vtk-viewer\n  => Serving ', dataPath, ' on port ', program.port, '\n'].join(''));
  ipList.forEach(printIP);
  console.log();
}

// Open browser if asked
if (!program.serverOnly) {
  openFn(['http://localhost:', program.port, `/${urlOptions}`].join(''));
}


================================================
FILE: bin/network.js
================================================
var os = require('os');

var ifaces = os.networkInterfaces();
var networkInterfaces = [];
var alias = 0;
var currentName = '';

function netInterface(iface) {
  if (iface.family !== 'IPv4' || iface.internal !== false) {
    // skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses
    return;
  }

  if (alias >= 1) {
    // this single interface has multiple ipv4 addresses
    networkInterfaces.push({
      name: [currentName, alias].join(':'),
      ip: iface.address,
    });
  } else {
    // this interface has only one ipv4 adress
    networkInterfaces.push({
      name: currentName,
      ip: iface.address,
    });
  }
  ++alias;
}

function device(ifname) {
  alias = 0;
  currentName = ifname;
  ifaces[ifname].forEach(netInterface);
}

Object.keys(ifaces).forEach(device);

module.exports = networkInterfaces;


================================================
FILE: bin/server.js
================================================
var path = require('path');
var express = require('express');

function webServer(dataPath) {
  var app = express();
  var fullDataPath = dataPath;

  // Handle relative path
  if (fullDataPath[0] === '.') {
    fullDataPath = path.normalize(path.join(process.cwd(), dataPath));
  }

  app.use(express.static(path.join(__dirname, '/../dist')));
  app.use('/data', express.static(fullDataPath));

  return app;
}

module.exports = webServer;


================================================
FILE: buildUI.js
================================================
#!/usr/bin/env node

const path = require('path')
const spawnSync = require('child_process').spawnSync

const cwd = path.join(__dirname, 'src', 'UI', 'reference-ui')
spawnSync('npm', ['ci'], { cwd, env: process.env, stdio: 'inherit' })
spawnSync('npm', ['run', 'build'], { cwd, env: process.env, stdio: 'inherit' })


================================================
FILE: doc/.gitignore
================================================
build-tmp


================================================
FILE: doc/config.js
================================================
module.exports = {
  baseUrl: '/itk-vtk-viewer',
  work: './build-tmp',
  examples: [],
  config: {
    title: 'itk-vtk-viewer',
    description: '"ITK/VTK Image Viewer for the Web"',
    subtitle: '"Enable medical imaging to the Web."',
    author: 'Kitware Inc.',
    timezone: 'UTC',
    url: 'https://kitware.github.io/itk-vtk-viewer',
    root: '/itk-vtk-viewer/',
    github: 'kitware/itk-vtk-viewer',
    google_analytics: 'UA-90338862-7',
  },
  copy: [
    { src: '../dist/*', dest: './build-tmp/public/app' },
  ],
};


================================================
FILE: doc/content/api/index.md
================================================
# API

This documentation provides more detailed information about the viewer application programming interface (API).

## Viewer API

### getConfig()

Get the viewer configuration. This can be used to restore a viewer's
configuration when created.

### setRenderingViewContainerStyle(containerStyle)

### getRenderingViewContainerStyle()

Set/get the CSS style for the rendering view `div`'s.

### setBackgroundColor(bgColor)

### getBackgroundColor()

Set/get the rendering background color. An array of RGB values from 0.0 to 1.0,
e.g. [1.0, 0.5, 0.5].

### setUnits(units)

### getUnits()

Set/get the string identifying the spatial length units in the scale bar.

### setUICollapsed(collapsed)

### getUICollapsed()

Set/get whether the user interface is collapsed.

## Viewer Main API

### setRotateEnabled(enabled)

### getRotateEnabled()

Set/get whether the 3D scene is continuously rotated.

### setAnnotationsEnabled(enabled)

### getAnnotationsEnabled()

Set/get whether annotations such as the current pixel value, scale bar, or orientation widget are displayed.

### setAxesEnabled(enabled)

### getAxesEnabled()

Set/get whether spatial axes are visualized in the scene.

### setXSlice(position)

### getXSlice()

Set/get the position in world space of the X slicing plane.

### setYSlice(position)

### getYSlice()

Set/get the position in world space of the Y slicing plane.

### setZSlice(position)

### getZSlice()

Set/get the position in world space of the Z slicing plane.

### setViewMode(mode)

### getViewMode()

Set/get the viewer mode for the current primary view. Valid values: 'XPlane', 'YPlane', 'ZPlane', or 'Volume'.

### getLayerNames()

Get the names of all data layers.

### setLayerVisibility(visible, name)

### getLayerVisibility(name)

Set/get whether the named layer is visible.

### selectLayer(name)

Select the layer identified by `name` in the user interface.

### setCroppingPlanes(croppingPlanes)

The croppingPlanes parameter is an array of plane defining objects. Example: `[ { normal: [1, 0, 0], origin: [1, 2, 3] }, ...]`. Maximum number of planes is 6.

### getCroppingPlanes(): [ { normal: [number, number, number], origin: [number, number, number] }, ...]

Returns array of plane objects.

### resetCroppingPlanes()

Sets cropping box to encompass all images and geometries

### setCroppingPlanesEnabled(enabled)

Control visibility of croppingPlanes

### getCroppingPlanesEnabled(): Boolean

## Viewer Image API

### setImage(image)

Set the image to be visualized. Can be an [itk.js Image](https://insightsoftwareconsortium.github.io/itk-js/api/Image.html) or a [scijs ndarray](http://scijs.net/packages/#scijs/ndarray) for JavaScript; for Python, it can be a [numpy](https://numpy.org) array.

### setPointSets(pointSets)

Set a set of points to be visualized. It can be an array of or a single imjoy-rpc encoded ndarray. The ndarray should be an array with the shape [x, 2] or [x, 3].

### captureImage()

Take a screenshot for the current view and return a base64 encoded image string.

### setImageInterpolationEnabled(enabled)

### getImageInterpolationEnabled()

Set/get whether bilinear interpolation is used in the image slicing planes.

### setImageComponentVisibility(visibility, component, name)

### getImageComponentVisibility(component, name)

Set/get the given image intensity component index's visibility.

### setImageColorRange(range, component, name)

### getImageColorRange(component, name)

Set/get the [min, max] range of intensity values mapped to colors for the given
image component identified by name.

### setImageColorRangeBounds(bounds, component, name)

### getImageColorRangeBounds(component, name)

Set/get the [min, max] range of intensity values for color maps that provide a bounds
for user inputs.

### setImageColorMap(colorMap, component, name)

### getImageColorMap(component, name)

Set/get the color map for the given component/channel.

<!---
### setImagePiecewiseFunctionGaussians(gaussians, component, name)

### getImagePiecewiseFunctionGaussians(component, name)

Set/get the gaussian parameters that define the piecewise function used to define
the volume rendering opacity transfer function and multi-component slice blending.
-->

### setImagePiecewiseFunctionPoints(points, component, name = current)

### getImagePiecewiseFunctionPoints(component, name)

Set/get the points defining the piecewise volume opacity transfer and multi-component
slice blending function. Parameter points is of type `[intensity: number, opacity:number][]` with
intensity and opacity values going from 0 to 1. The 0 to 1 intensity values are scaled between
the component's range of intensity values.
Example: If the intensity values for component 0 go from 100 to 200,
`viewer.setImagePiecewiseFunctionPoints([[0, 0], [.5, 1]], 0)` puts a point at intensity 100 and another at intensity 150.
For volume rendering, intensities above or below the range of points have 0 opacity.
For 2D or slice rendering, intensities above or below the range of points take the last color of the color map.
With 2 or more components in 2D or slice rendering, the `y` value of points controls the contribution of matching intensities.
Intensities before the start point take the `y`/mix-factor of the start point, intensities after the end point take the end point `y` value.

### setImageShadowEnabled(enabled, name)

### getImageShadowEnabled(name)

Set/get whether to used gradient-based shadows in the volume rendering.

### setImageGradientOpacity(opacity, name)

### getImageGradientOpacity(name)

Set/get the gradient opacity in the volume rendering. Values range from 0.0 to 1.0.

### setImageGradientOpacityScale(scale, name)

### getImageGradientOpacityScale(name)

Set/get the gradient scale for gradient-based opacity in the volume rendering. Values range from 0.0 to 1.0.

### setImageVolumeSampleDistance(distance, name)

### getImageVolumeSampleDistance(name)

Set/get the depth sampling distance in the volume rendering. Values range from 0.0 to 1.0.

### setImageBlendMode(mode, name)

### getImageBlendMode(name)

Set/get the volume rendering blend mode. Supported modes: 'Composite',
'Maximum', 'Minimum', 'Average'.

### setLabelImage(labelImageToLoad, layerImageName)

Loads a label image and fuses with selected image or layerImageName.
setLabelImage disables 2D image interpolation.

### setLabelImageLookupTable(lookupTable, name)

### getLabelImageLookupTable(name)

Set/get the label image lookup table.

### setLabelImageBlend(blend, name)

### getLabelImageBlend(name)

Set/get the blend ratio between the label image and the intensity image.

### setLabelImageLabelNames(labeNames, name)

### getLabelImageLabelNames(name)

Set/get the string names for the integer label values. A Map of label integer to
string values.

### setLabelImageWeights(weights, name)

### getLabelImageWeights(name)

Set/get the rendering weights assigned to labels. A Map of label integer to
float, 0.0 to 1.0, weight.
string values.

### setImageScale(resolutionScale)

resolutionScale is a integer with 0 being the most detailed scale.

### setCompareImages(fixedImageName, movingImageName, options)

Post processing to detect difference in images. The moving and fixed images are separately
compressed to one component with a vector magnitude or luminance filter. Then, the moving image is
re-sampled to the fixed image space. The final rendered image has the fixed image on the first component,
the moving image is on the second component.

The moving image must have been added last.

`options` is an Object with:

```
{
    method: 'checkerboard' | 'cyan-magenta' | 'blend' | 'disabled',
    imageMix?: number,
    checkerboard?: boolean,
    pattern?: number[],
    swapImageOrder?: boolean
}
```

`method` can be `blend`, `green-magenta`, `cyan-red`, `cyan-magenta`, `checkerboard`, or `disabled`.
`blend` simply initiates the comparison composition of images.
`cyan-magenta` changes the color map for fixed image to cyan, moving image to magenta. If images match perfectly, the color will be purple.
`green-magenta` and `cyan-red` changes the color map for the fixed and moving image. If images match, the color will be gray/white.
`checkerboard` is equivalent to `blend` with `imageMix` set to `0`.

`imageMix` changes the percent contribution the fixed vs moving image makes to the
render by modifying the opacity transfer function. Value of 1 means max opacity for
moving image, 0 for fixed image.

`checkerboard` picks pixels from the fixed and moving image to create a
checkerboard pattern. The 2 components in the output image differ by the
image order for each checkerboard box.

`pattern` is an array with the number of checkerboard boxes for each dimension.
If pattern === undefined, it defaults to 4 boxes across each dimension

`swapImageOrder` toggles the checkerboard pattern by switching the imageMix parameter between 0 and 1.


================================================
FILE: doc/content/config/index.md
================================================
title: Config
---

This documentation provides more detailed information about the viewer configuration.

The viewer configuration is a JSON-serializable JavaScript object in the browser and Python dictionary in a Python environment.

To obtain a viewer's configuration, call the [viewer API `getConfig()` method](../api/).

Pass a viewer's configuration during creation with the `config` option.

The followings sections describe the configuration fields.

## Viewer Config

### viewerConfigVersion

This is a "major.minor" version of the configuration. The major version
changes with incompatible configuration -- a viewer will only use a
configuration that has the same major version. The minor version indicates
supported configuration entries.

### uiMachineOptions

How to render the user interface. Either `'reference'` or `{ href: 'https://url.to/uiMachineOptionsESM.js, export: 'default' }`, or a JavaScript object with the UI machine options. If a JavaScript object, it will not be serializable.

### xyLowerLeft

When viewing the Z slice, the X-Y plane, whether the origin is in the lower left
or upper left.

### renderingViewContainerStyle

CSS style of the container (`div`) for the rendering views.

### uiCollapsed

Whether the user interface is collapsed.

## Main Config

### backgroundColor

Background color of the renderer.

### units

Spatial length units displayed in the scale bar.


================================================
FILE: doc/content/docs/cli.md
================================================
title: Command Line Interface
---

ITK/VTK Viewer can be used as a command line tool for opening and visualizing your local data file.

## Installation

First, [install Node.js](https://nodejs.org/en/download/), if not already installed. After Node.js is installed, the `node` and `npm` executables should be in your `PATH`.

```sh
$ npm install itk-vtk-viewer -g
```

This command will install the application globally, which will provide a new command line executable, `itk-vtk-viewer`:

```sh
$ itk-vtk-viewer

  Usage: itk-vtk-viewer [options] ] [inputFile]

    Options:

    -V, --version      output the version number
    -p, --port [3000]  Start web server with given port (default: 3000)
    -s, --server-only  Do not open the web browser

    -h, --help         output usage information
```

### Quick start

To visualize an image, pass the path to the file to visualize. By default, a new tab will open in your browser with your visualization.

```sh
$ itk-vtk-viewer ./MRHead.nrrd

itk-vtk-viewer
  => Serving .

       http://10.10.10.10:3000/?fileToLoad=/data/MRHead.nrrd
```

### Drag and drop viewer

Instead of specifying files via the command line,

1. drag and drop,
2. click on the viewer page, or
3. press the *Enter* key

after starting the executable without positional arguments:

```sh
$ itk-vtk-viewer
```

![ItkVtkViewer](./viewer.jpg)


================================================
FILE: doc/content/docs/customizeUI.md
================================================
title: User Interface (UI) Customization
---

The viewer's user interface (UI) is completely customizable. An existing viewer user interface can be tweaked, or a new user interface can be built from scratch. Use vanilla HTML/CSS/JavaScript or your favorite UI framework, such as React.js or Vue.js.

The user interface is specified on viewer creation with a JavaScript object or an object that specifies an [ES Module](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules). The UI object should contain functions that implement **actions** called as UI [state machines](https://xstate.js.org/docs/) respond to events. Nested objects provide actions for child state machines. A few example actions are `toggleDarkMode` or `toggleUICollapsed`.

Each [action function](https://xstate.js.org/docs/about/glossary.html#action) is expected to accept two arguments: `context` and `event`.

The `context` is the current state machine context. A `context` object is comprised of the context generated by the [viewer configuration](../config/) and additional objects generated by the UI or renderer. For example, the `createInterface` action may add a `div` property to the `context` for the UI that other UI actions may reference later.

The `event` argument is the current event object that triggered the action. An `event` object contains the event name, an upper case string by convention. Optionally, the `event` may contain a payload in the `data` property. In addition to responding to events, a UI implementation will trigger events from user input and pass those events to the state machine by calling `context.service.send(<triggeredEvent>)`. For example,

```
collapseUIButton.addEventListener('click', () => { context.service.send('TOGGLE_UI_COLLAPSED'))
```

## UI options architecture

**Warning**: the viewer machine's architecture is experimental and it is subject to change without modification to the major version of the package. We mean it!

Available actions can be observed in the [Reference UI Machine Options](https://github.com/Kitware/itk-vtk-viewer/blob/master/src/UI/reference-ui/src/referenceUIMachineOptions.js). If an action is not implemented, it is a no-op. Nested options objects correspond to the nested state machines. They are:

* [`main`](https://github.com/Kitware/itk-vtk-viewer/blob/master/src/UI/Reference/Main/mainUIMachineOptions.js): UI components impacting the entire viewer's state. For example, the UI to toggle fullscreen mode or change the viewer's background color.
* [`layers`](https://github.com/Kitware/itk-vtk-viewer/blob/master/src/UI/Reference/Layers/layersUIMachineOptions.js): UI components related to dataset layers. For example, the UI to select a layer or toggle its visibility.
* [`widgets`](https://github.com/Kitware/itk-vtk-viewer/blob/master/src/UI/Reference/Widgets/widgetsUIMachineOptions.js): UI components for interactive widget parameters. For example, display the current distance measured by a distance widget.
* [`images`](https://github.com/Kitware/itk-vtk-viewer/blob/master/src/UI/Reference/Images/imagesUIMachineOptions.js): UI components related to the currently selected image layer. For example, the current color map used.
* `geometries` (todo): UI components related to the currently selected geometry layer. For example, the current geometry opacity.
* `pointSets` (todo): UI components related to the currently selected point set layer. For example, the current point set opacity.

## Example: Main UI with only a screenshot button

This example demonstrates how to customize the `reference` UI so the `main` interface only presents a screenshot button.

### Create repository

Let's create a repository for our interface.

Either use the *Use this template* button on the [itk-viewer-reference-ui-template GitHub repository](https://github.com/InsightSoftwareConsortium/itk-viewer-reference-ui-template):

![itk-viewer-reference-ui-template button](./referenceUITemplateGitHub.png)

or use the template repository on the command line:

```
npx degit InsightSoftwareConsortium/itk-viewer-reference-ui-template my-viewer-ui
```

### Edit interface

To create our interface, first install the Node.js packages:

```
cd my-viewer-ui
npm ci
```

Then start the development server:

```
npm run dev
```

And visit *http://localhost:3000* in your web browser. The template has customized the viewer's [Reference UI](https://www.npmjs.com/package/itk-viewer-reference-ui) to only present a screenshot button in the viewer's main interface. The main interface is customized with the `createMainInterface` action.

```
import referenceUIMachineOptions from 'itk-viewer-reference-ui/src/referenceUIMachineOptions.js'
import style from 'itk-viewer-reference-ui/src/ItkVtkViewer.module.css'
import createScreenshotButton from 'itk-viewer-reference-ui/src/Main/createScreenshotButton.js'

function modifiedCreateMainInterface(context) {
  const mainUIGroup = document.createElement('div')
  mainUIGroup.setAttribute('class', style.uiGroup)
  context.uiGroups.set('main', mainUIGroup)

  const mainUIRow1 = document.createElement('div')
  mainUIRow1.setAttribute('class', style.mainUIRow)
  mainUIGroup.appendChild(mainUIRow1)

  createScreenshotButton(context, mainUIRow1)

  context.uiContainer.appendChild(mainUIGroup)
}
```

![screenshot button](./screenshotButton.png)

We re-use the rest of the user interface machine actions:

```
const uiMachineOptions = { ...referenceUIMachineOptions }

const uiMainActions = { ...uiMachineOptions.main.actions }
uiMainActions.createMainInterface = modifiedCreateMainInterface

const uiMain = { ...uiMachineOptions.main }
uiMain.actions = uiMainActions
uiMachineOptions.main = uiMain
```

And use the `uiMachineOptions` as the default module export:

```
export default uiMachineOptions
```

Let's make the background of the main user interface green by editing *main.js*:

```
  [...]
  createScreenshotButton(context, mainUIRow1)

  // Add this line
  mainUIGroup.style.backgroundColor = "green"

  context.uiContainer.appendChild(mainUIGroup)
  [...]
```

After saving *main.js*, the page will reload with our change applied:

![screenshot button green](./screenshotButtonGreen.png)

### Publish the UI module

Exit the development server with *Ctrl+C* if still open, then build a production version of the user interface module:

```
npm run build
```

This builds the module `dist/referenceUIMachineOptions.js.es.js`.

We can publish our interface to [npmjs.com](https://www.npmjs.com/). First change the package `name` in the *package.json* file to something unique:

```
{
  "version": "0.1.0",
  "name": "my-viewer-ui",
  "scripts": {
```

Then publish the package:

```
npm login
npm publish
```

After published and propagated on the network, your package is available for download. The package files are also served by services like [jsdelivr](https://jsdelivr.com) (better for production use) or [unpkg](https://unpkg.com) (better for testing). Use your user interface by specifying it in the [viewer config](../config.html):

```
const uiMachineOptions = { href: "https://cdn.jsdelivr.net/npm/itk-viewer-reference-ui-template@0.1.2/dist/referenceUIMachineOptions.js.es.js" }
// or
// const uiMachineOptions = { href: "https://unpkg.com/itk-viewer-reference-ui-template@0.1.2/dist/referenceUIMachineOptions.js.es.js" }
itkVtkViewer.createViewer(container,
  {
  image: ipfsImage,
  rotate: false,
  config: { uiMachineOptions },
  })
```


================================================
FILE: doc/content/docs/embeddedViewer.md
================================================
title: Embedded Viewer
---

ITK/VTK Viewer can be used within an existing web site as a library to embed interactive 3D visualizations for remote or local datasets. To do so, create a container element for the viewer as follows.

```html
<div class="itk-vtk-viewer" />
```

Moreover, the JavaScript library should also be added to the web page. Only one of the following is required

```html
<script type="text/javascript" src="https://kitware.github.io/itk-vtk-viewer/app/itkVtkViewerCDN.js"></script>
```

or

```html
<script type="text/javascript" src="https://unpkg.io/itk-vtk-viewer/dist/itkVtkViewerCDN.js"></script>
```

or, fixed to a specific version:

```html
<script type="text/javascript" src="https://unpkg.io/itk-vtk-viewer@9.14.1/dist/itkVtkViewerCDN.js"></script>
```

### Viewer configuration

The container `<div/>` can be extended with the following set of [data attributes](https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes):

- (Mandatory) __data-url__="/data/005_36months_T2_RegT1_Reg2Atlas_ManualBrainMask_Stripped.nrrd"
- (Optional) __data-viewport__="300x200" | default is 500x500
- (Optional) __data-background-color__="00aa00" | default is black
- (Optional) __data-use2D="false"


![ItkVtkViewer-embedded](./embeddedViewer.png)

```html
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>
  <body>

    [...]

    <div
      style="float: right; display: inline-block; border: 2px solid gray; margin: 20px; margin-right: 50px;"
      class="itk-vtk-viewer"
      data-url="https://data.kitware.com/api/v1/file/564a65d58d777f7522dbfb61/download/data.nrrd"
      data-viewport="450x300"
    ></div>

    [...]

    <div
      style="float: left; display: inline-block; border: 2px solid gray;
      class="itk-vtk-viewer"
      data-url="https://data.kitware.com/api/v1/file/5b8446868d777f43cc8d5ec1/download/data.nrrd"
      data-viewport="450x400"
      data-background-color="ffffff"
    ></div>

    [...]

    <script type="text/javascript" src="https://unpkg.io/itk-vtk-viewer/dist/itkVtkViewerCDN.js"></script>
  </body>
</html>
```


================================================
FILE: doc/content/docs/imjoy.md
================================================
title: ImJoy Plugin
---

[![launch ImJoy](https://imjoy.io/static/badge/launch-imjoy-badge.svg)](http://imjoy.io/#/app?plugin=https://kitware.github.io/itk-vtk-viewer/app/)

An *itk-vtk-viewer* plugin is available for [ImJoy](https://imjoy.io), a plugin powered hybrid computing platform for deploying deep learning applications such as advanced image analysis tools.

![ImJoy itk-vtk-viewer plugin](./imjoy.png)

## Installation

Install the plugin into the workspace with the following [ImJoy Web App](http://imjoy.io/#/app?plugin=https://kitware.github.io/itk-vtk-viewer/app/) or [ImJoy Lite App](http://imjoy.io/lite?plugin=https://kitware.github.io/itk-vtk-viewer/app/) links with the plugin URI:

```
https://kitware.github.io/itk-vtk-viewer/app/
```

Note that the link can also be used directly.

To install a specific version associated with a specific commit, click the *Details* link associated with the *fleek/build* check found in checkmark link popup in the [GitHub commit interface](https://github.com/Kitware/itk-vtk-viewer/commits/master).

![CID link](./fleek-build-link.png)

This results in a URL that contains a root [Content Identifier (CID)](https://proto.school/anatomy-of-a-cid/01). For example,

```
https://bafybeihh34vpeoczdl3bu5wff3cvx35g2u3h3cbs6cmc3werg7drobr3ty.on.fleek.co/
```

## Inputs

Supported context `data` inputs:

**image**: Image to be visualized. Can be:

- An [itk-wasm Image](https://wasm.itk.org/api/Image.html)
- A [scijs ndarray](http://scijs.net/packages/#scijs/ndarray) for JavaScript; for Python, it can be a [numpy](https://numpy.org) array.
- A [URL](https://developer.mozilla.org/en-US/docs/Web/API/URL/URL) pointing to an [image file supported by itk-wasm](https://wasm.itk.org/docs/image_formats.html).

For [scijs ndarray](http://scijs.net/packages/#scijs/ndarray), you can use the following function to encoded it into an imjoy-rpc encoded ndarray.
```
function encodeScijsArray(array){
  return {
    _rtype: 'ndarray',
    _rdtype: array.dtype,
    _rshape: array.shape,
    _rvalue: array.data.buffer,
  }
}
```

The `image` key is optional; one can also call `setImage()` later.

**pointSets**: An array of pointSet or a single pointSet to be visualized. Can be **an array** of imjoy-rpc encoded ndarray (as described in **image**):

The `pointSets` key is optional; one can also call `setPointSets()` later.


Context `config`:

An optional [viewer configuration](../config/) can be passed with the context `config`. To
retrieve the configuration from an existing viewer, call `viewer.getConfig()`.

Usage in javascript:
```javascript
const imageArray = ... // itk-wasm Image or imjoy-rpc encoded ndarray
const viewer = await api.createWindow({
  src: "https://kitware.github.io/itk-vtk-viewer/app/",
  data: { image: imageArray },
  config: config,
  })
```

Usage in Python
```python
from imjoy import api
import numpy as np

# a 2D or 3D numpy array
image_array = np.random.randint(0, 255, [500, 500], dtype='uint8')

async def setup():
    viewer = await api.createWindow(src="https://kitware.github.io/itk-vtk-viewer/app/", data={"image": imageArray}, config=config)

api.export({"setup": setup})
```

Displaying a point cloud in Python:
```python
import numpy as np
from imjoy import api

# make a point set array
gaussian_1_mean = [0.0, 0.0, 0.0]
gaussian_1_cov = [[1.0, 0.0, 0.0], [0.0, 2.0, 0.0], [0.0, 0.0, 0.5]]
number_of_points = 1000000
point_set_array = np.random.multivariate_normal(gaussian_1_mean,
                                                gaussian_1_cov,
                                                number_of_points)
point_set_array = point_set_array.astype('float32')

async def setup():
    viewer = await api.createWindow(
        src="https://kitware.github.io/itk-vtk-viewer/app/"
    )
    await viewer.setPointSets([point_set_array])

api.export({"setup": setup})
```
## API functions

In addition to the standard `setup` and `run` methods, the *itk-vtk-viewer* plugin exposes the full [viewer API](../api/).


================================================
FILE: doc/content/docs/index.md
================================================
title: Overview
---

![Build and Test](https://github.com/Kitware/itk-vtk-viewer/workflows/Build%20and%20Test/badge.svg) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) ![npm-download](https://img.shields.io/npm/dm/itk-vtk-viewer.svg) [![DOI](https://zenodo.org/badge/92198432.svg)](https://zenodo.org/badge/latestdoi/92198432) [![launch ImJoy](https://imjoy.io/static/badge/launch-imjoy-badge.svg)](http://imjoy.io/#/app?plugin=https://kitware.github.io/itk-vtk-viewer/app/)

ITK/VTK Viewer is an open-source web application for medical and scientific image, mesh, and point set visualization.

![How it works](./howToUse.jpg)



================================================
FILE: doc/content/docs/shortcuts.md
================================================
title: Keyboard Shortcuts and Controls
---

The viewer supports mouse-based controls, touchscreen interaction, and
keyboard shortcuts. To use the keyboard shortcuts when the viewer is embedded,
the mouse must be over the viewer.

**Key** | **Action**
--- | --- |
**1** | X-plane mode
**2** | Y-plane mode
**3** | Z-plane mode
**4** | Volume rendering mode
**q** | Toggle user interface
**w** | Toggle region of interest (ROI) selection widget
**e** | Reset ROI
**r** | Reset camera
**p** | Toggle spinning
**s** | Toggle slicing planes in volume rendering mode
**f** | Toggle fullscreen

**Mouse** | **Action**
--- | --- |
**Left click + drag** | Rotate
**Right click + drag** or **shift + left click + drag** | Pan
**Mouse wheel** or **control + left click + drag** or **pinch** | Zoom
**Alt + left click + drag left-right** | Change color transfer function level
**Alt + left click + drag top-bottom** | Change color transfer function window
**Alt + right click + drag top-bottom** | Change primary volume opacity transfer function magnitude


================================================
FILE: doc/content/docs/viewer.md
================================================
title: Progressive Web App
---

The [default ITK/VTK Viewer page](https://kitware.github.io/itk-vtk-viewer/app/) lets you drag and drop or select a data file from your local filesystem to visualize. Once you have loaded data with this [progressive web app](https://en.wikipedia.org/wiki/Progressive_Web_Apps), the app will also work offline.

Additionally, visualization links for data files available on the web can be created by providing extra arguments to the app URL. The resulting link can be quickly shared to distribute interative visualizations for your data.

For example,

<div>
<label for="dataVisualizationLink"><a href="https://kitware.github.io/itk-vtk-viewer/app/?fileToLoad=https://data.kitware.com/api/v1/file/564a65d58d777f7522dbfb61/download/data.nrrd" target="_blank" id="linkForNewTab">Visualization link:</a></label>
<textarea name="dataVisualizationLink" id="dataVisualizationLink" rows="1" cols="100" wrap="off" readonly></textarea>
<button onclick="copyLinkToClipboard()">Copy to clipboard</button>
</div>

<script>
var textarea = document.getElementById("dataVisualizationLink");
// Avoid Markdown from messing with it
textarea.value = 'https://kitware.github.io/itk-vtk-viewer/app/?fileToLoad=https://data.kitware.com/api/v1/file/564a65d58d777f7522dbfb61/download/data.nrrd';

function generateDataVisualizationLink() {
  var url = "https://kitware.github.io/itk-vtk-viewer/app/?fileToLoad=" + document.getElementById("dataURL").value.trim();
  var previewer = document.getElementById("linkPreview");
  var linkForNewTab = document.getElementById("linkForNewTab");
  previewer.src = url;
  textarea.value = url;
  linkForNewTab.href = url;
}

function copyLinkToClipboard() {
  textarea.select();
  document.execCommand("copy");
}
</script>

<div>
<label for="dataURL">Enter an image, mesh, or point set file URL:</label>
<input type="url" name="dataURL" id="dataURL" placeholder="https://data.kitware.com/api/v1/file/564a65d58d777f7522dbfb61/download/data.nrrd" size="100" required oninput="generateDataVisualizationLink()" />
</div>

<br>

The extra argument, `?fileToLoad=[...]`, uses a full `http://` url to the data file.

![ItkVtkViewer](./dataViewer.jpg)

An additional parameter can be added to force the slice viewing mode. Just add `?use2D` or `?fileToLoad=[..]&use2D` inside the URL.

![ItkVtkViewer2D](./2dViewer.jpg)

### Compare Images URL Parameters

To compare 2 images use these parameters:

`image`: full `http://` url to a data file

`fixedImage`: full `http://` url to a data file

`compare`: sets the compare "method". Could be `blend`, `green-magenta`, `cyan-red`, `cyan-magenta` or `checkerboard`

`imageMix`: 0 to 1 percent contribution the fixed vs moving image

`checkerboard`: `true` or `false` to force checkerboard for other methods like `blend` or `cyan-magenta`

`pattern`: Checkerboard pattern as array with length matching the number of dimension in the images. Example: `pattern=[1,3,4]`

`swapImageOrder`: `true` or `false` which toggles the checkerboard pattern.

Example:
`http://localhost:8082/?rotate=false&image=http://localhost:8082/test-data/HeadMRVolume.nrrd&fixedImage=http://localhost:8082/test-data/HeadMRVolume2Components.nrrd&compare=checkerboard&pattern=[1,3,4]&swapImageOrder=true`

More information under setCompareImages on the API docs.


================================================
FILE: doc/content/index.html
================================================
<html>
<head>
  <meta http-equiv="refresh" content="0; URL=./docs/" />
</head>
<body>
  <p>Redirecting to the documentation. For the application, go to <a href="./app/">./app/</a>.</p>
</body>
</html>


================================================
FILE: doc/content/index.jade
================================================
layout: index
description: ITK/VTK Viewer
subtitle: An open-source software system for medical and scientific image, mesh, and point set visualization.
cmd: itk-vtk-viewer --help
comments: false
---

ul#intro-feature-list
  li.intro-feature-wrap
    .intro-feature
      .intro-feature-icon
        i.fa.fa-cloud-download
      h3.intro-feature-title
        a(href="https://www.npmjs.com/package/itk-vtk-viewer").link Releases
        img(style="padding-left: 25px",src="https://badge.fury.io/js/itk-vtk-viewer.svg")
      p.intro-feature-desc ITK/VTK Viewer is a web-based viewer for loading 2D/3D images and more...

  li.intro-feature-wrap
    .intro-feature
      .intro-feature-icon
          i.fa.fa-life-ring
      h3.intro-feature-title
        a(href="http://www.vtk.org/services/").link Support and Services
      p.intro-feature-desc Kitware offers advanced software R&D solutions and services. Find out how we can help with your next project.

ul#intro-cmd-wrap(style='margin-top: 25px;border-radius: 10px;')
  li.intro-cmd-item npm install itk-vtk-viewer -g
  li.intro-cmd-item itk-vtk-viewer

p(style='text-align: center; margin: 20px auto; max-width: 700px;')
  img(src='./docs/howToUse.jpg', width='100%')


================================================
FILE: doc/data/menu.yml
================================================
docs: /docs/
api: /api/
config: /config/
app: /app/


================================================
FILE: doc/tpl/__en__
================================================
menu:
  docs: Documentation
  api: API
  config: Config
  examples: Examples
  news: News
  search: Search
  app: Application

index:
  get_started: Get started

page:
  contents: Contents
  back_to_top: Back to Top
  improve: Improve this doc
  prev: Prev
  next: Next
  last_updated: "Last updated: %s"

sidebar:
  docs:
    getting_started: Getting Started
    overview: Overview
    develop: Development
    requirement: Requirements
    troubleshooting: Troubleshooting
    debugging: Debugging
    contributing: Contributing
    testing: Testing
    tests: Tests
    coverage: Coverage
    cli: Command Line App
    viewer: Progressive Web App
    embeddedViewer: Inline Viewer
    imjoy: ImJoy Plugin
    shortcuts: Keyboard Shortcuts
    customizeUI: UI Customization



================================================
FILE: doc/tpl/__sidebar__
================================================
docs:
  getting_started:
    overview: index.html
    viewer: viewer.html
    cli: cli.html
    embeddedViewer: embeddedViewer.html
    imjoy: imjoy.html
    shortcuts: shortcuts.html
    customizeUI: customizeUI.html


================================================
FILE: examples/compare-image.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
  </head>
  <body>
    <div
      style="position: relative; border: 1px solid red; width: 100%; height: 99vh;"
      id="viewport"
    ></div>

    <script type="text/javascript" src="itkVtkViewer.js"></script>
    <script>
      async function main() {
        const image = new URL(
          'test-data/HeadMRVolume.nrrd',
          // 'test-data/HeadMRVolume2Components.nrrd',
          // 'http://localhost:8082/test-data/idr/6001240.zarr',
          // 'test-data/HeadMRVolume2DTop.nrrd',
          window.location.origin
        )

        const fixedImage = new URL(
          // 'test-data/HeadMRVolume.nrrd',
          // 'test-data/HeadMRVolumeLabels.nrrd',
          // 'test-data/HeadMRVolumeLabelsSmaller.nrrd',
          'test-data/HeadMRVolume2Components.nrrd',
          // 'test-data/HeadMRVolume2DTop.nrrd',
          window.location.origin
        )

        const labelImage = new URL(
          'test-data/HeadMRVolumeLabels.nrrd',
          window.location.origin
        )

        const container = document.querySelector('#viewport')

        // Provide fixedImage and compare as createViewer options example:
        const viewer = await itkVtkViewer.createViewer(container, {
          rotate: false,
          image,
          fixedImage,
          // labelImage,
          compare: { method: 'blend', imageMix: 0.25 },
        })

        // Call setImage to add images, then setCompareImages example:
        // const viewer = await itkVtkViewer.createViewer(container, {
        //   rotate: false,
        // })
        // viewer.setImage(fixedImage, 'Fixed') // fixed image must be first one added
        // viewer.setImage(image, 'Image')
        // viewer.setLabelImage(labelImage)

        // viewer.setCompareImages('Fixed', 'Image', {
        //   method: 'checkerboard',
        //   swapImageOrder: false,
        // })

        // setTimeout(
        //   () =>
        //     viewer.setCompareImages('Fixed', 'Image', {
        //       method: 'disabled',
        //     }),
        //   2000
        // )

        setTimeout(
          () =>
            viewer.setCompareImages('Fixed', 'Image', {
              method: 'checkerboard',
              pattern: [1, 2, 3],
            }),
          4000
        )

        setTimeout(
          () =>
            viewer.setCompareImages('Fixed', 'Image', {
              method: 'cyan-magenta',
              checkerboard: false,
            }),
          6000
        )

        window.viewer = viewer
      }

      main()
    </script>
  </body>
</html>


================================================
FILE: examples/cyan-magenta-compare-image.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
  </head>
  <body>
    <div
      style="position: relative; border: 1px solid red; width: 100%; height: 99vh;"
      id="viewport"
    ></div>

    <script type="text/javascript" src="itkVtkViewer.js"></script>
    <script>
      async function main() {
        const image = new URL(
          // 'test-data/HeadMRVolume.nrrd',
          'test-data/HeadMRVolume2Components.nrrd',
          // 'test-data/HeadMRVolumeLabels.nrrd',
          // 'http://localhost:8082/test-data/idr/6001240.zarr',
          // 'test-data/HeadMRVolume2DTop.nrrd',
          window.location.origin
        )

        const fixedImage = new URL(
          'test-data/HeadMRVolume.nrrd',
          // 'test-data/HeadMRVolumeLabels.nrrd',
          // 'test-data/HeadMRVolumeLabelsSmaller.nrrd',
          // 'test-data/HeadMRVolume2Components.nrrd',
          // 'test-data/HeadMRVolume2DTop.nrrd',
          window.location.origin
        )

        const labelImage = new URL(
          'test-data/HeadMRVolumeLabels.nrrd',
          window.location.origin
        )

        const container = document.querySelector('#viewport')

        // Provide fixedImage and compare as createViewer options example:
        const viewer = await itkVtkViewer.createViewer(container, {
          rotate: false,
          image,
          fixedImage,
          // labelImage,
          compare: { method: 'cyan-red' },
        })

        // Call setImage to add images, then setCompareImages example:
        // const viewer = await itkVtkViewer.createViewer(container, {
        //   rotate: false,
        // })
        // viewer.setImage(fixedImage, 'Fixed') // fixed image must be first one added
        // viewer.setImage(image, 'Image')
        // viewer.setLabelImage(labelImage, 'Image')

        // viewer.setCompareImages('Fixed', 'Image', {
        //   method: 'cyan-magenta',
        // })

        // setTimeout(
        //   () =>
        //     viewer.setCompareImages('Fixed', 'Image', {
        //       method: 'disabled',
        //     }),
        //   2000
        // )

        // setTimeout(
        //   () =>
        //     viewer.setCompareImages('Fixed', 'Image', {
        //       method: 'cyan-magenta',
        //     }),
        //   4000
        // )

        window.viewer = viewer
      }

      main()
    </script>
  </body>
</html>


================================================
FILE: examples/test-conglomerate.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
  </head>
  <body>
    <div
      style="position: relative; border: 1px solid red; width: 1000px; height: 1000px;"
      id="viewport"
    ></div>

    <script type="text/javascript" src="itkVtkViewer.js"></script>
    <script>
      async function main() {
        const imageUrl = new URL(
          'test-data/HeadMRVolume.nrrd',
          window.location.origin
        )
        const images = await Promise.all(
          [imageUrl, imageUrl].map(itkVtkViewer.utils.toMultiscaleSpatialImage)
        )
        const image = new itkVtkViewer.utils.ConglomerateMultiscaleSpatialImage(
          images
        )
        const container = document.querySelector('#viewport')
        const viewer = await itkVtkViewer.createViewer(container, {
          // image,
          rotate: false,
        })

        viewer.setImage(image)
        // need the await for the setImagePiecewiseFunctionPoints to take
        await viewer.setLabelImage(
          new URL('test-data/HeadMRVolumeLabels.nrrd', window.location.origin)
        )

        const newPoints = [
          [0, 0],
          [0.75, 0.9],
          [0.9, 1],
        ]
        viewer.setImagePiecewiseFunctionPoints(newPoints, 0)
        viewer.setImageColorMap('glasbey', 0)
        viewer.setImageColorRangeMin(30)
        viewer.setImageColorRangeMax(200)
        window.viewer = viewer
      }

      main()
    </script>
  </body>
</html>


================================================
FILE: examples/test-pointsets.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
  </head>
  <body>
    <div
      style="position: relative; border: 1px solid red; width: 1000px; height: 1000px;"
      id="viewport"
    ></div>

    <script type="text/javascript" src="itkVtkViewer.js"></script>
    <script
      type="text/javascript"
      src="https://unpkg.com/vtk.js@25.8.2/vtk.js"
    ></script>
    <script>
      const points = vtk({
        vtkClass: 'vtkPolyData',
        points: {
          vtkClass: 'vtkPoints',
          name: '_points',
          numberOfComponents: 3,
          dataType: 'Float32Array',
          values: new Float32Array([
            -0.44442534,
            -1.1349318,
            0.8388769,
            2.0538256,
            -1.9028517,
            0.71276945,
          ]),
        },
        verts: {
          vtkClass: 'vtkCellArray',
          name: '_verts',
          numberOfComponents: 1,
          dataType: 'Uint32Array',
          size: 4,
          values: new Uint16Array([1, 0, 1, 1]),
        },
      })

      const container = document.querySelector('#viewport')
      itkVtkViewer.createViewer(container, {
        pointSets: [points],
        rotate: false,
      })
    </script>
  </body>
</html>


================================================
FILE: examples/test.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
  </head>
  <body>
    <div
      style="display: inline-block; border: 1px solid red;"
      class="itk-vtk-viewer"
      data-url="test-data/first_instar_brain_zyxc.zarr"
      data-viewport="600x600"
      data-background-color="008800"
      data-rotate="false"
    ></div>

    <div
      style="display: inline-block; border: 1px solid red;"
      class="itk-vtk-viewer"
      data-url="test-data/astronaut.zarr"
      data-background-color="008800"
      data-rotate="false"
    ></div>

    <!-- 
      test-data/astronaut.zarr
      test-data/first_instar_brain_zyxc.zarr
      test-data/ome-ngff-prototypes/single_image/v0.4/zyx.ome.zarr
      test-data/ome-ngff-prototypes/single_image/v0.4/tczyx.ome.zarr
      test-data/idr/1884807.zarr
      test-data/idr/6001240.zarr
      test-data/idr/6001256.zarr
      test-data/idr/9836841.zarr
      test-data/HeadMRVolume.nrrd
      test-data/HeadMRVolumeLabels.nrrd
      https://dandiarchive.s3.amazonaws.com/zarr/3d313fc2-0204-496d-bfa1-5c90951ee640
      https://data.kitware.com/api/v1/file/564a65d58d777f7522dbfb61/download/data.nrrd
      https://data.kitware.com/api/v1/file/625d10dc4acac99f426404e0/download/chameleon.nrrd
      https://data.kitware.com/api/v1/file/5b843d468d777f43cc8d4f6b/download/engine.nrrd
      https://data.kitware.com/api/v1/file/5a826c198d777f0685782976/download/test_vmtkbranchmetrics_branch_metrics_surf.vtp
    -->

    <script type="text/javascript" src="itkVtkViewer.js"></script>
  </body>
</html>


================================================
FILE: karma.conf.js
================================================
/* eslint-disable global-require */
const path = require('path')

const vtkRules = require('vtk.js/Utilities/config/dependency.js').webpack.core
  .rules
const cssRules = require('vtk.js/Utilities/config/dependency.js').webpack.css
  .rules

var webpack = require('webpack')

var sourcePath = path.join(__dirname, './src')

if (!process.env.NODE_ENV) process.env.NODE_ENV = 'test'

process.env.CHROME_BIN = require('puppeteer').executablePath()

const fallback = {
  path: false,
  url: false,
  module: false,
  fs: false,
  stream: require.resolve('stream-browserify'),
  crypto: false,
}

const itkConfigTest = path.resolve(__dirname, 'test', 'itkConfigBrowserTest.js')

// should be same as in webpack.config.js
const moduleConfigRules = [
  { test: /\.js$/, loader: 'babel-loader', dependency: { not: ['url'] } },
  {
    test: /\.worker.js$/,
    use: [{ loader: 'worker-loader', options: { inline: 'no-fallback' } }],
  },
  {
    test: /\.(png|jpg)$/,
    type: 'asset',
    parser: { dataUrlCondition: { maxSize: 128 * 1024 } },
  }, // 128kb
  { test: /\.svg$/, type: 'asset/source' },
].concat(vtkRules, cssRules)

const entry = path.join(__dirname, './src/index.js')

module.exports = function init(config) {
  config.set({
    plugins: [
      require('karma-webpack'),
      require('karma-tap'),
      require('karma-chrome-launcher'),
      require('karma-firefox-launcher'),
      require('karma-tap-pretty-reporter'),
      require('karma-junit-reporter'),
    ],

    basePath: '',
    frameworks: ['tap', 'webpack'],
    files: [
      './test/tests.js',
      {
        pattern: './dist/itk/image-io/**',
        watched: true,
        served: true,
        included: false,
      },
      {
        pattern: './dist/itk/mesh-io/**',
        watched: true,
        served: true,
        included: false,
      },
      {
        pattern: './dist/itk/web-workers/**',
        watched: true,
        served: true,
        included: false,
      },
      {
        pattern: './dist/itk/pipeline/**',
        watched: true,
        served: true,
        included: false,
      },
      {
        pattern: './test/data/**',
        watched: false,
        served: true,
        included: false,
      },
      {
        pattern: './test/data/**/.*',
        watched: false,
        served: true,
        included: false,
      },
      {
        pattern: './dist/index.html',
        watched: true,
        served: true,
        included: false,
      },
      {
        pattern: './dist/itkVtkViewer.js',
        watched: true,
        served: true,
        included: false,
      },
      {
        pattern: './src/UI/reference-ui/dist/referenceUIMachineOptions.js',
        watched: true,
        served: true,
        included: false,
      },
      {
        pattern: './src/UI/reference-ui/**/**',
        watched: true,
        served: true,
        included: false,
      },
      {
        pattern: './test/testUINoPlaneSlidersBundle.js',
        watched: true,
        served: true,
        included: false,
      },
    ],

    preprocessors: {
      './test/tests.js': ['webpack'],
    },

    webpack: {
      mode: 'development',
      devtool: 'eval-source-map',
      module: {
        rules: moduleConfigRules.concat([
          {
            test: entry,
            loader: 'expose-loader',
            options: { exposes: 'itkVtkViewer' },
          },
        ]),
      },
      resolve: {
        modules: [path.resolve(__dirname, 'node_modules'), sourcePath],
        alias: {
          '../itkConfig.js': itkConfigTest,
          '../../itkConfig.js': itkConfigTest,
          stream: 'stream-browserify',
          buffer: 'buffer',
        },
        fallback,
      },
      plugins: [
        new webpack.DefinePlugin({
          __BASE_PATH__: "'/base'",
        }),
        new webpack.ProvidePlugin({ process: ['process/browser'] }),
      ],
    },

    webpackMiddleware: {
      noInfo: true,
    },

    reporters: ['tap-pretty', 'junit'],

    tapReporter: {
      outputFile: 'test/output.html',
      separator:
        '\n=========================================================\n=========================================================\n',
    },

    junitReporter: {
      outputDir: 'test',
    },

    client: {
      useIframe: true,
      args: config.dockered ? ['--dockered'] : [],
    },

    browserDisconnectTimeout: 60000,
    browserNoActivityTimeout: 60000,

    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome_without_sandbox'],
    singleRun: true,
    customLaunchers: {
      Chrome_without_sandbox: {
        base: 'Chrome',
        flags: ['--no-sandbox'],
      },
    },
  })
}


================================================
FILE: package.json
================================================
{
  "name": "itk-vtk-viewer",
  "version": "0.0.0-semantically-release",
  "description": "Web-based image, mesh, and point set viewer",
  "keywords": [
    "3d",
    "visualization",
    "webgl",
    "medical",
    "scientific",
    "itk",
    "vtk",
    "image",
    "geometry",
    "point cloud",
    "mesh",
    "gl-vis",
    "volume",
    "graphics"
  ],
  "repository": {
    "type": "git",
    "url": "https://github.com/kitware/itk-vtk-viewer.git"
  },
  "license": "BSD-3-Clause",
  "bugs": {
    "url": "https://github.com/kitware/itk-vtk-viewer/issues"
  },
  "homepage": "https://kitware.github.io/itk-vtk-viewer/",
  "main": "./dist/itkVtkViewer.js",
  "types": "./src/index.d.ts",
  "dependencies": {
    "@kitware/vtk.js": "^29.4.6",
    "@material/web": "^1.0.1",
    "@thewtex/iconselect.js": "^2.1.2",
    "@xstate/inspect": "^0.4.1",
    "axios": "^1.6.0",
    "commander": "^2.20.3",
    "core-js": "^3.36.0",
    "css-element-queries": "^1.2.3",
    "curry": "^1.2.0",
    "eventemitter3": "^4.0.7",
    "express": "^4.17.1",
    "gl-matrix": "^3.4.3",
    "itk-image-io": "^1.0.0-b.84",
    "itk-mesh-io": "^1.0.0-b.84",
    "itk-viewer-color-maps": "^1.2.0",
    "itk-viewer-transfer-function-editor": "^1.6.0",
    "itk-wasm": "^1.0.0-b.83",
    "mobx": "^5.15.7",
    "mousetrap": "^1.6.5",
    "open": "^6.4.0",
    "p-queue": "^7.3.0",
    "promise-file-reader": "^1.0.3",
    "promise.any": "^2.0.2",
    "regenerator-runtime": "^0.13.7",
    "vtk.js": "^29.4.6",
    "webworker-promise": "^0.4.2",
    "xstate": "^4.37.0"
  },
  "devDependencies": {
    "@babel/plugin-proposal-class-properties": "^7.18.6",
    "@babel/plugin-transform-runtime": "^7.13.6",
    "@babel/preset-env": "^7.13.5",
    "@babel/runtime": "^7.13.6",
    "@rollup/plugin-babel": "^5.3.0",
    "@rollup/plugin-commonjs": "^21.0.2",
    "@rollup/plugin-node-resolve": "^13.0.0",
    "@rollup/plugin-typescript": "^9.0.2",
    "@web3-storage/w3": "^2.6.0",
    "autoprefixer": "^10.2.6",
    "babel-loader": "^8.2.2",
    "babel-plugin-istanbul": "^6.0.0",
    "babel-preset-mobx": "^2.0.0",
    "buffer": "^6.0.3",
    "copy-webpack-plugin": "^9.0.1",
    "css-loader": "^5.0.2",
    "es-abstract": "1.18.0-next.1",
    "eslint": "^8.13.0",
    "eslint-config-prettier": "^8.5.0",
    "expose-loader": "^1.0.3",
    "husky": "^4.3.7",
    "imjoy-core": "^0.14.5",
    "is-buffer": "^2.0.5",
    "karma": "^6.3.16",
    "karma-chrome-launcher": "^3.1.0",
    "karma-firefox-launcher": "^2.1.0",
    "karma-junit-reporter": "^2.0.1",
    "karma-tap": "^4.2.0",
    "karma-tap-pretty-reporter": "^4.2.0",
    "karma-webpack": "5.0.0",
    "kw-doc": "^3.0.6",
    "lint-staged": "^10.5.4",
    "ndarray": "^1.0.19",
    "npm-run-all": "^4.1.5",
    "pixelmatch": "^5.2.1",
    "postcss": "^8.3.5",
    "postcss-loader": "^4.1.0",
    "prettier": "^1.19.1",
    "process": "^0.11.10",
    "puppeteer": "^5.0.0",
    "raw-loader": "^4.0.2",
    "readable-stream": "^3.6.0",
    "request": "^2.88.2",
    "resemblejs": "^4.1.0",
    "rollup": "^2.52.7",
    "rollup-plugin-ignore": "^1.0.10",
    "rollup-plugin-postcss": "^4.0.0",
    "rollup-plugin-svgo": "^2.0.0",
    "semantic-release": "^19.0.3",
    "sockjs-client": "^1.5.0",
    "stream-browserify": "^3.0.0",
    "style-loader": "^2.0.0",
    "tap-spec": "^5.0.0",
    "tape": "^5.2.0",
    "tape-catch": "^1.0.6",
    "typescript": "^5.3.3",
    "webpack": "^5.65.0",
    "webpack-cli": "^4.8.0",
    "webpack-dev-server": "^4.7.4",
    "webpackbar": "^5.0.0-3",
    "workbox-build": "^6.5.1",
    "workbox-webpack-plugin": "^6.5.1",
    "worker-loader": "^3.0.8"
  },
  "scripts": {
    "doc": "kw-doc -c ./doc/config.js",
    "doc:www": "kw-doc -c ./doc/config.js -s",
    "doc:publish": "kw-doc -c ./doc/config.js -mp",
    "build": "npm-run-all build:release build:ui",
    "build:debug": "webpack --progress --color --mode development",
    "build:release": "webpack --progress --color --mode production",
    "build:ui": "node ./buildUI.js",
    "build:test-ui": "rollup -c ./test/test-ui-rollup.config.js",
    "prepack": "npm run build",
    "bundle": "StandaloneHTML ./dist/index.html ./dist/ItkVtkViewer.html",
    "commit": "git cz",
    "format": "prettier --write src/UserInterface/**/*.js src/*.js",
    "lint:types": "tsc --noEmit",
    "start": "webpack serve --mode development --static ./dist/ --open --port 8082",
    "dev": "webpack serve --mode development --static ./dist/ --port 8082",
    "semantic-release": "semantic-release",
    "test": "npm run test:downloadData && npm run lint:types && npm run build:test-ui && karma start ./karma.conf.js --browsers Chrome_without_sandbox,Firefox",
    "test:downloadData": "node test/downloadData.mjs",
    "test:headless": "./test/run.sh",
    "test:headless-debug": "./test/run.sh -d",
    "test:debug": "npm run build:test-ui && karma start ./karma.conf.js --no-single-run"
  },
  "config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
  },
  "bin": {
    "itk-vtk-viewer": "./bin/itk-vtk-viewer-cli.js"
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.js": "prettier --write"
  }
}


================================================
FILE: postcss.config.js
================================================
const autoprefix = require('autoprefixer');

module.exports = {
  plugins: [autoprefix],
};


================================================
FILE: src/Compression/blosc-zarr/BloscZarr.cxx
================================================
#include <stdio.h>
#include <blosc.h>

#include "itkPipeline.h"
#include "itkInputBinaryStream.h"
#include "itkOutputBinaryStream.h"
#include <fstream>

int main(int argc, char * argv[]){

  itk::wasm::Pipeline pipeline ("Compress or decompress binaries with Blosc", argc, argv);

  itk::wasm::InputBinaryStream input_binary_stream;
  pipeline.add_option("input-binary-stream", input_binary_stream, "The input binary stream")->required();

  itk::wasm::OutputBinaryStream output_binary_stream;
  pipeline.add_option("output-binary-stream", output_binary_stream, "The output binary stream")->required();

  std::string compressor;
  pipeline.add_option("compressor", compressor, "Blosc compressor")->required();

  size_t input_size;
  pipeline.add_option("input-size", input_size, "Input binary size in bytes")->required();

  bool decompress = false;
  const auto decompress_option = pipeline.add_flag("-d,--decompress", decompress, "Decompress instead of compress");

  size_t output_size = 0;
  pipeline.add_option("--output-size", output_size, "Output binary size in bytes")->needs(decompress_option);

  int compression_level = 3;
  pipeline.add_option("-c,--compression-level", compression_level, "Compression level in compression, 0 to 9")->excludes(decompress_option);

  size_t typesize = 1;
  pipeline.add_option("--typesize", typesize, "Assumed type size in compression")->excludes(decompress_option);

  bool no_shuffle = false;
  pipeline.add_flag("--no-shuffle", no_shuffle, "Do not add bitshuffle support in compression")->excludes(decompress_option);

  bool verbose = false;
  pipeline.add_flag("-v,--verbose", verbose, "Output status information");

  ITK_WASM_PARSE(pipeline);

  /* Register the filter with the library */
  if (verbose)
    {
    printf("Blosc version info: %s (%s)\n", BLOSC_VERSION_STRING, BLOSC_VERSION_DATE);
    }

  /* Initialize the Blosc compressor */
  blosc_init();

  const int nthreads = 1;
  const int pnthreads = blosc_set_nthreads(nthreads);
  if (verbose)
    {
    printf("Using %d threads (previously using %d)\n", nthreads, pnthreads);
    }

  int rcode = blosc_set_compressor(compressor.c_str());
  if (rcode < 0)
    {
    printf("Error setting %s compressor. Does it really exist?\n", compressor.c_str());
    blosc_destroy();
    return rcode;
    }
  if (verbose)
    {
    printf("Using %s compressor\n", compressor.c_str());
    }

  void * input_array = malloc(input_size);
  if(input_array == NULL)
    {
    printf("Input memory allocation failed\n");
    blosc_destroy();
    return 1;
    }
  input_binary_stream.Get().read(static_cast<char *>(input_array), input_size);
  const auto read_size = input_binary_stream.Get().gcount();
  if(read_size != input_size)
    {
    printf("Could only read %zu bytes from input file.\n", read_size);
    blosc_destroy();
    free(input_array);
    return 1;
    }
  if (!decompress)
    {
    output_size = input_size;
    }
  else if(output_size == 0)
    {
    blosc_destroy();
    free(input_array);
    CLI::Error err("Runtime error", "--output-size must be specified for decompression", 1);
    pipeline.exit(err);
    return 1;
    }
  void * output_array = malloc(output_size + BLOSC_MAX_OVERHEAD);
  if(output_array == NULL)
    {
    printf("Output memory allocation failed\n");
    blosc_destroy();
    free(input_array);
    return 1;
    }

  if (!decompress)
    {
    if (verbose)
      {
      printf("Compression level %d\n", compression_level);
      }
    /* Compress */
    const size_t compressed_size = blosc_compress(compression_level, !no_shuffle, typesize, input_size, input_array, output_array, output_size + BLOSC_MAX_OVERHEAD);
    free(input_array);
    /* After using it, destroy the Blosc environment */
    blosc_destroy();
    if (compressed_size < 0)
      {
      printf("Compression error. Error code: %lu\n", compressed_size);
      free(output_array);
      return compressed_size;
      }

    if (verbose)
      {
      printf("Compression: %zu -> %lu (%.1fx)\n", input_size, compressed_size, (1.*input_size) / compressed_size);
      }

    output_binary_stream.Get().write(static_cast<char *>(output_array), compressed_size);
    free(output_array);
    }
  else
    {
    /* Decompress */
    const int decompressed_size = blosc_decompress(input_array, output_array, output_size);
    free(input_array);
    /* After using it, destroy the Blosc environment */
    blosc_destroy();
    if (decompressed_size < 0)
      {
      printf("Decompression error. Error code: %d\n", decompressed_size);
      free(output_array);
      return decompressed_size;
      }
    output_binary_stream.Get().write(static_cast<char *>(output_array), output_size);
    free(output_array);
    }

  return 0;
}


================================================
FILE: src/Compression/blosc-zarr/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.16.0)
project(blosc-zarr)

set(BUILD_STATIC ON CACHE BOOL "Build a static version of the blosc library.")
set(BUILD_SHARED OFF CACHE BOOL "Build a shared library version of the blosc library.")
set(BUILD_TESTS OFF CACHE BOOL "Build test programs form the blosc compression library")
set(BUILD_BENCHMARKS OFF CACHE BOOL "Build benchmark programs form the blosc compression library")
if(EMSCRIPTEN OR WASI)
  set(HAVE_THREADS OFF CACHE BOOL "Whether we use threading")
endif()
if(EMSCRIPTEN)
  set(CMAKE_C_FLAGS "-s STRICT=1")
  set(CMAKE_EXE_LINKER_FLAGS "-s STRICT=1")
endif()
add_subdirectory(c-blosc)

find_package(ITK REQUIRED
  COMPONENTS WebAssemblyInterface
  )
include(${ITK_USE_FILE})

add_executable(BloscZarr BloscZarr.cxx)
target_link_libraries(BloscZarr PUBLIC blosc_static ${ITK_LIBRARIES})


================================================
FILE: src/Compression/blosc-zarr/web-build/BloscZarr.js
================================================

var BloscZarr = (() => {
  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
  if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;
  return (
function(BloscZarr) {
  BloscZarr = BloscZarr || {};

null;var Module=typeof BloscZarr!="undefined"?BloscZarr:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var mStdout=null;var mStderr=null;Module["resetModuleStdout"]=function(){mStdout=""};Module["resetModuleStderr"]=function(){mStderr=""};Module["print"]=function(text){console.log(text);mStdout+=text+"\n"};Module["printErr"]=function(text){console.error(text);mStderr+=text+"\n"};Module["getModuleStdout"]=function(){return mStdout};Module["getModuleStderr"]=function(){return mStderr};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=(()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}});read_=function shell_read(filename,binary){requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=(filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret});readAsync=((filename,onload,onerror)=>{requireNodeFS();filename=nodePath["normalize"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})});if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=((status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)});Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText});if(ENVIRONMENT_IS_WORKER){readBinary=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)})}readAsync=((url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=(()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()});xhr.onerror=onerror;xhr.send(null)})}setWindowTitle=(title=>document.title=title)}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}function getCFunc(ident){var func=Module["_"+ident];return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret}function cwrap(ident,returnType,argTypes,opts){argTypes=argTypes||[];var numericArgs=argTypes.every(function(type){return type==="number"});var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function AsciiToString(ptr){var str="";while(1){var ch=HEAPU8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="BloscZarr.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["u"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["y"];addOnInit(Module["asm"]["v"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function ___cxa_allocate_exception(size){return _malloc(size+16)+16}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-16;this.set_type=function(type){HEAP32[this.ptr+4>>2]=type};this.get_type=function(){return HEAP32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;try{bytesRead=fs.readSync(process.stdin.fd,buf,0,BUFSIZE,-1)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};function asyncLoad(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var ERRNO_CODES={};var NODEFS={isWindows:false,staticInit:()=>{NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],256:flags["O_NOCTTY"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"],131072:flags["O_NOFOLLOW"]}},convertNodeCode:e=>{var code=e.code;return ERRNO_CODES[code]},mount:mount=>{return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:(parent,name,mode,dev)=>{if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(28)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:path=>{var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}return stat.mode},realPath:node=>{var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:flags=>{flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;flags&=~65536;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(28)}},node_ops:{getattr:node=>{var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:(node,attr)=>{var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},lookup:(parent,name)=>{var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:(parent,name,mode,dev)=>{var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}return node},rename:(oldNode,newDir,newName)=>{var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}oldNode.name=newName},unlink:(parent,name)=>{var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},rmdir:(parent,name)=>{var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},readdir:node=>{var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},symlink:(parent,newName,oldPath)=>{var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},readlink:node=>{var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=nodePath.relative(nodePath.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;if(e.code==="UNKNOWN")throw new FS.ErrnoError(28);throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}}},stream_ops:{open:stream=>{var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},close:stream=>{try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},read:(stream,buffer,offset,length,position)=>{if(length===0)return 0;try{return fs.readSync(stream.nfd,Buffer.from(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},write:(stream,buffer,offset,length,position)=>{try{return fs.writeSync(stream.nfd,Buffer.from(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},llseek:(stream,offset,whence)=>{var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}}}if(position<0){throw new FS.ErrnoError(28)}return position},mmap:(stream,address,length,position,prot,flags)=>{if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr=mmapAlloc(length);NODEFS.stream_ops.read(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=NODEFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(FS.cwd(),path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(p=>!!p),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:(path,mode,dev)=>{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode,fd_start,fd_end)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,address,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,address,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"NODEFS":NODEFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:(parent,name,input,output)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:(stream,buffer,offset,length,pos)=>{for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:obj=>{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=((stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size});node.stream_ops=stream_ops;return node},createPreloadedFile:(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=(()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)});openRequest.onsuccess=(()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=(()=>{ok++;if(ok+fail==total)finish()});putRequest.onerror=(()=>{fail++;if(ok+fail==total)finish()})});transaction.onerror=onerror});openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=(()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=(()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()});getRequest.onerror=(()=>{fail++;if(ok+fail==total)finish()})});transaction.onerror=onerror});openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd);if(size<cwdLengthInBytes+1)return-68;stringToUTF8(cwd,buf,size);return buf}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_readlink(path,buf,bufsize){try{path=SYSCALLS.getStr(path);return SYSCALLS.doReadlink(path,buf,bufsize)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_max(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=_emscripten_get_heap_max();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4;HEAP8[pbuf>>0]=type;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _getpwnam(){err("missing function: getpwnam");abort(-1)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length<digits){str=character[0]+str}return str}function leadingNulls(value,digits){return leadingSomething(value,digits,"0")}function compareByDay(date1,date2){function sgn(value){return value<0?-1:value>0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()<date.tm_year+1900){daysDifference=date.tm_yday+32-firstWeekStartThisYear.getDate()}else{daysDifference=date.tm_yday+1-firstWeekStartThisYear.getDate()}return leadingNulls(Math.ceil(daysDifference/7),2)},"%w":function(date){return date.tm_wday},"%W":function(date){var janFirst=new Date(date.tm_year,0,1);var firstMonday=janFirst.getDay()===1?janFirst:__addDays(janFirst,janFirst.getDay()===0?1:7-janFirst.getDay()+1);var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstMonday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstMondayUntilEndJanuary=31-firstMonday.getDate();var days=firstMondayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstMonday,janFirst)===0?"01":"00"},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){requireNodeFS();NODEFS.staticInit()}ERRNO_CODES={"EPERM":63,"ENOENT":44,"ESRCH":71,"EINTR":27,"EIO":29,"ENXIO":60,"E2BIG":1,"ENOEXEC":45,"EBADF":8,"ECHILD":12,"EAGAIN":6,"EWOULDBLOCK":6,"ENOMEM":48,"EACCES":2,"EFAULT":21,"ENOTBLK":105,"EBUSY":10,"EEXIST":20,"EXDEV":75,"ENODEV":43,"ENOTDIR":54,"EISDIR":31,"EINVAL":28,"ENFILE":41,"EMFILE":33,"ENOTTY":59,"ETXTBSY":74,"EFBIG":22,"ENOSPC":51,"ESPIPE":70,"EROFS":69,"EMLINK":34,"EPIPE":64,"EDOM":18,"ERANGE":68,"ENOMSG":49,"EIDRM":24,"ECHRNG":106,"EL2NSYNC":156,"EL3HLT":107,"EL3RST":108,"ELNRNG":109,"EUNATCH":110,"ENOCSI":111,"EL2HLT":112,"EDEADLK":16,"ENOLCK":46,"EBADE":113,"EBADR":114,"EXFULL":115,"ENOANO":104,"EBADRQC":103,"EBADSLT":102,"EDEADLOCK":16,"EBFONT":101,"ENOSTR":100,"ENODATA":116,"ETIME":117,"ENOSR":118,"ENONET":119,"ENOPKG":120,"EREMOTE":121,"ENOLINK":47,"EADV":122,"ESRMNT":123,"ECOMM":124,"EPROTO":65,"EMULTIHOP":36,"EDOTDOT":125,"EBADMSG":9,"ENOTUNIQ":126,"EBADFD":127,"EREMCHG":128,"ELIBACC":129,"ELIBBAD":130,"ELIBSCN":131,"ELIBMAX":132,"ELIBEXEC":133,"ENOSYS":52,"ENOTEMPTY":55,"ENAMETOOLONG":37,"ELOOP":32,"EOPNOTSUPP":138,"EPFNOSUPPORT":139,"ECONNRESET":15,"ENOBUFS":42,"EAFNOSUPPORT":5,"EPROTOTYPE":67,"ENOTSOCK":57,"ENOPROTOOPT":50,"ESHUTDOWN":140,"ECONNREFUSED":14,"EADDRINUSE":3,"ECONNABORTED":13,"ENETUNREACH":40,"ENETDOWN":38,"ETIMEDOUT":73,"EHOSTDOWN":142,"EHOSTUNREACH":23,"EINPROGRESS":26,"EALREADY":7,"EDESTADDRREQ":17,"EMSGSIZE":35,"EPROTONOSUPPORT":66,"ESOCKTNOSUPPORT":137,"EADDRNOTAVAIL":4,"ENETRESET":39,"EISCONN":30,"ENOTCONN":53,"ETOOMANYREFS":141,"EUSERS":136,"EDQUOT":19,"ESTALE":72,"ENOTSUP":138,"ENOMEDIUM":148,"EILSEQ":25,"EOVERFLOW":61,"ECANCELED":11,"ENOTRECOVERABLE":56,"EOWNERDEAD":62,"ESTRPIPE":135};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"a":___cxa_allocate_exception,"b":___cxa_throw,"e":___syscall_fcntl64,"t":___syscall_getcwd,"j":___syscall_ioctl,"k":___syscall_open,"o":___syscall_readlink,"p":___syscall_stat64,"c":_abort,"l":_emscripten_memcpy_big,"d":_emscripten_resize_heap,"r":_environ_get,"s":_environ_sizes_get,"f":_fd_close,"q":_fd_fdstat_get,"i":_fd_read,"m":_fd_seek,"h":_fd_write,"g":_getpwnam,"n":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["v"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["w"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["x"]).apply(null,arguments)};var _itk_wasm_input_array_alloc=Module["_itk_wasm_input_array_alloc"]=function(){return(_itk_wasm_input_array_alloc=Module["_itk_wasm_input_array_alloc"]=Module["asm"]["z"]).apply(null,arguments)};var _itk_wasm_input_json_alloc=Module["_itk_wasm_input_json_alloc"]=function(){return(_itk_wasm_input_json_alloc=Module["_itk_wasm_input_json_alloc"]=Module["asm"]["A"]).apply(null,arguments)};var _itk_wasm_output_json_address=Module["_itk_wasm_output_json_address"]=function(){return(_itk_wasm_output_json_address=Module["_itk_wasm_output_json_address"]=Module["asm"]["B"]).apply(null,arguments)};var _itk_wasm_output_json_size=Module["_itk_wasm_output_json_size"]=function(){return(_itk_wasm_output_json_size=Module["_itk_wasm_output_json_size"]=Module["asm"]["C"]).apply(null,arguments)};var _itk_wasm_output_array_address=Module["_itk_wasm_output_array_address"]=function(){return(_itk_wasm_output_array_address=Module["_itk_wasm_output_array_address"]=Module["asm"]["D"]).apply(null,arguments)};var _itk_wasm_output_array_size=Module["_itk_wasm_output_array_size"]=function(){return(_itk_wasm_output_array_size=Module["_itk_wasm_output_array_size"]=Module["asm"]["E"]).apply(null,arguments)};var _itk_wasm_free_all=Module["_itk_wasm_free_all"]=function(){return(_itk_wasm_free_all=Module["_itk_wasm_free_all"]=Module["asm"]["F"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["G"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["H"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["I"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["J"]).apply(null,arguments)};Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["writeArrayToMemory"]=writeArrayToMemory;Module["writeAsciiToMemory"]=writeAsciiToMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;Module["callMain"]=callMain;Module["AsciiToString"]=AsciiToString;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];args=args||[];var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(thisProgram);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=entryFunction(argc,argv);exit(ret,true);return ret}catch(e){return handleException(e)}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(keepRuntimeAlive()){}else{exitRuntime()}procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=false;if(Module["noInitialRun"])shouldRunNow=false;run();Module.mountContainingDir=function(filePath){if(!ENVIRONMENT_IS_NODE){return}var path=require("path");var containingDir=path.dirname(filePath);if(FS.isDir(containingDir)||containingDir==="/"){return}var currentDir="/";var splitContainingDir=containingDir.split(path.sep);for(var ii=1;ii<splitContainingDir.length;ii++){currentDir+=splitContainingDir[ii];if(!FS.analyzePath(currentDir).exists){FS.mkdir(currentDir)}currentDir+="/"}FS.mount(NODEFS,{root:containingDir},currentDir);return currentDir+path.basename(filePath)};Module.unmountContainingDir=function(filePath){if(!ENVIRONMENT_IS_NODE){return}var path=require("path");var containingDir=path.dirname(filePath);FS.unmount(containingDir)};Module.fs_mkdirs=function(dirs){var currentDir="/";var splitDirs=dirs.split("/");for(var ii=1;ii<splitDirs.length;++ii){currentDir+=splitDirs[ii];if(!FS.analyzePath(currentDir).exists){FS.mkdir(currentDir)}currentDir+="/"}};Module.fs_readFile=function(path,opts){return FS.readFile(path,opts)};Module.fs_writeFile=function(path,data,opts){return FS.writeFile(path,data,opts)};Module.fs_unlink=function(path){return FS.unlink(path)};Module.fs_open=function(path,flags,mode){return FS.open(path,flags,mode)};Module.fs_stat=function(path){return FS.stat(path)};Module.fs_read=function(stream,buffer,offset,length,position){return FS.read(stream,buffer,offset,length,position)};Module.fs_close=function(stream){return FS.close(stream)};


  return BloscZarr.ready
}
);
})();
export default BloscZarr;

================================================
FILE: src/Compression/blosc-zarr/web-build/BloscZarr.umd.js
================================================

var BloscZarr = (() => {
  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
  if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;
  return (
function(BloscZarr) {
  BloscZarr = BloscZarr || {};

null;var Module=typeof BloscZarr!="undefined"?BloscZarr:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var mStdout=null;var mStderr=null;Module["resetModuleStdout"]=function(){mStdout=""};Module["resetModuleStderr"]=function(){mStderr=""};Module["print"]=function(text){console.log(text);mStdout+=text+"\n"};Module["printErr"]=function(text){console.error(text);mStderr+=text+"\n"};Module["getModuleStdout"]=function(){return mStdout};Module["getModuleStderr"]=function(){return mStderr};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=(()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}});read_=function shell_read(filename,binary){requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=(filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret});readAsync=((filename,onload,onerror)=>{requireNodeFS();filename=nodePath["normalize"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})});if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=((status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)});Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText});if(ENVIRONMENT_IS_WORKER){readBinary=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)})}readAsync=((url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=(()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()});xhr.onerror=onerror;xhr.send(null)})}setWindowTitle=(title=>document.title=title)}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}function getCFunc(ident){var func=Module["_"+ident];return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret}function cwrap(ident,returnType,argTypes,opts){argTypes=argTypes||[];var numericArgs=argTypes.every(function(type){return type==="number"});var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function AsciiToString(ptr){var str="";while(1){var ch=HEAPU8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="BloscZarr.umd.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["u"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["y"];addOnInit(Module["asm"]["v"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function ___cxa_allocate_exception(size){return _malloc(size+16)+16}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-16;this.set_type=function(type){HEAP32[this.ptr+4>>2]=type};this.get_type=function(){return HEAP32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;try{bytesRead=fs.readSync(process.stdin.fd,buf,0,BUFSIZE,-1)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};function asyncLoad(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var ERRNO_CODES={};var NODEFS={isWindows:false,staticInit:()=>{NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],256:flags["O_NOCTTY"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"]
Download .txt
gitextract_6jojsqhp/

├── .babelrc
├── .editorconfig
├── .eslintrc.js
├── .github/
│   └── workflows/
│       ├── build-test.yml
│       └── publish.yml
├── .gitignore
├── .gitmodules
├── .npmignore
├── .prettierrc
├── CONTRIBUTING.md
├── Copyright.txt
├── LICENSE
├── README.md
├── bin/
│   ├── itk-vtk-viewer-cli.js
│   ├── network.js
│   └── server.js
├── buildUI.js
├── doc/
│   ├── .gitignore
│   ├── config.js
│   ├── content/
│   │   ├── api/
│   │   │   └── index.md
│   │   ├── config/
│   │   │   └── index.md
│   │   ├── docs/
│   │   │   ├── cli.md
│   │   │   ├── customizeUI.md
│   │   │   ├── embeddedViewer.md
│   │   │   ├── imjoy.md
│   │   │   ├── index.md
│   │   │   ├── shortcuts.md
│   │   │   └── viewer.md
│   │   ├── index.html
│   │   └── index.jade
│   ├── data/
│   │   └── menu.yml
│   └── tpl/
│       ├── __en__
│       └── __sidebar__
├── examples/
│   ├── compare-image.html
│   ├── cyan-magenta-compare-image.html
│   ├── test-conglomerate.html
│   ├── test-pointsets.html
│   └── test.html
├── karma.conf.js
├── package.json
├── postcss.config.js
├── src/
│   ├── Compression/
│   │   ├── blosc-zarr/
│   │   │   ├── BloscZarr.cxx
│   │   │   ├── CMakeLists.txt
│   │   │   └── web-build/
│   │   │       ├── BloscZarr.js
│   │   │       ├── BloscZarr.umd.js
│   │   │       └── BloscZarr.wasm
│   │   └── bloscZarrDecompress.js
│   ├── Context/
│   │   ├── ImageActorContext.js
│   │   ├── ImagesMachineContext.js
│   │   ├── LayerActorContext.js
│   │   ├── LayersMachineContext.js
│   │   ├── MainMachineContext.js
│   │   ├── ViewerMachineContext.js
│   │   └── WidgetsMachineContext.js
│   ├── IO/
│   │   ├── Analyze/
│   │   │   ├── ComputeRanges.worker.js
│   │   │   ├── UpdateHistogram.worker.js
│   │   │   ├── computeHistograms.js
│   │   │   ├── computeRanges.js
│   │   │   ├── createRangeHelper.js
│   │   │   └── webWorkerPromiseWorkerPool.js
│   │   ├── Compare/
│   │   │   ├── .gitignore
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Compare.cxx
│   │   │   ├── createCompareImage.js
│   │   │   ├── emscripten-build/
│   │   │   │   ├── Compare.js
│   │   │   │   ├── Compare.umd.js
│   │   │   │   ├── Compare.umd.wasm
│   │   │   │   └── Compare.wasm
│   │   │   ├── index.mjs
│   │   │   └── package.json
│   │   ├── ConglomerateMultiscaleSpatialImage.js
│   │   ├── Downsample/
│   │   │   ├── .gitignore
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Downsample.cxx
│   │   │   ├── DownsampleLabelImage.cxx
│   │   │   ├── cypress/
│   │   │   │   ├── integration/
│   │   │   │   │   └── load_data_spec.js
│   │   │   │   └── plugins/
│   │   │   │       └── index.cjs
│   │   │   ├── cypress.json
│   │   │   ├── downsample.js
│   │   │   ├── emscripten-build/
│   │   │   │   ├── Downsample.js
│   │   │   │   ├── Downsample.umd.js
│   │   │   │   ├── Downsample.umd.wasm
│   │   │   │   ├── Downsample.wasm
│   │   │   │   ├── DownsampleLabelImage.js
│   │   │   │   ├── DownsampleLabelImage.umd.js
│   │   │   │   ├── DownsampleLabelImage.umd.wasm
│   │   │   │   └── DownsampleLabelImage.wasm
│   │   │   ├── index.html
│   │   │   ├── package.json
│   │   │   └── styles.css
│   │   ├── HttpStore.js
│   │   ├── ImageDataFromChunks.worker.js
│   │   ├── InMemoryMultiscaleSpatialImage.js
│   │   ├── MultiscaleSpatialImage.js
│   │   ├── ResampleLabelImage/
│   │   │   ├── .gitignore
│   │   │   ├── CMakeLists.txt
│   │   │   ├── ResampleLabelImage.cxx
│   │   │   ├── emscripten-build/
│   │   │   │   ├── ResampleLabelImage.js
│   │   │   │   ├── ResampleLabelImage.umd.js
│   │   │   │   ├── ResampleLabelImage.umd.wasm
│   │   │   │   └── ResampleLabelImage.wasm
│   │   │   ├── index.mjs
│   │   │   ├── package.json
│   │   │   └── resampleLabelImage.js
│   │   ├── ZarrMultiscaleSpatialImage.js
│   │   ├── ZarrStoreParser.js
│   │   ├── componentTypeToTypedArray.js
│   │   ├── composeComponents.js
│   │   ├── dimensionUtils.js
│   │   ├── dtypeUtils.js
│   │   ├── fetchBinaryContent.js
│   │   ├── fetchJsonContent.js
│   │   ├── itkWasmUtils.js
│   │   ├── ndarrayToItkImage.js
│   │   ├── ndarrayToPointSet.js
│   │   ├── processFiles.js
│   │   ├── toMultiscaleSpatialImage.js
│   │   └── uploadFileHandler.js
│   ├── ImJoyPluginAPI.js
│   ├── Rendering/
│   │   ├── Images/
│   │   │   ├── createImageRenderingActor.js
│   │   │   ├── createImagesRenderingMachine.js
│   │   │   └── makeTransitions.js
│   │   ├── Layers/
│   │   │   └── createLayersRenderingMachine.js
│   │   ├── Main/
│   │   │   ├── backgroundIsDark.js
│   │   │   ├── backgroundIsLight.js
│   │   │   └── createMainRenderingMachine.js
│   │   ├── VTKJS/
│   │   │   ├── Images/
│   │   │   │   ├── ComposeImage.worker.js
│   │   │   │   ├── applyBlendMode.js
│   │   │   │   ├── applyCinematicChanged.js
│   │   │   │   ├── applyColorMap.js
│   │   │   │   ├── applyColorRange.js
│   │   │   │   ├── applyColorRangeBounds.js
│   │   │   │   ├── applyComponentVisibility.js
│   │   │   │   ├── applyComponentWeights.js
│   │   │   │   ├── applyGradientOpacity.js
│   │   │   │   ├── applyIndependentComponents.js
│   │   │   │   ├── applyLabelImageBlend.js
│   │   │   │   ├── applyLabelImageWeights.js
│   │   │   │   ├── applyLabelNames.js
│   │   │   │   ├── applyLookupTable.js
│   │   │   │   ├── applyPiecewiseFunction.js
│   │   │   │   ├── applyRenderedImage.js
│   │   │   │   ├── applySelectedLabel.js
│   │   │   │   ├── applyShadow.js
│   │   │   │   ├── applyVolumeSampleDistance.js
│   │   │   │   ├── assignRenderedImage.js
│   │   │   │   ├── assignVisualizedComponents.js
│   │   │   │   ├── createImageRenderer.js
│   │   │   │   ├── fuseImages.js
│   │   │   │   ├── imagesRenderingMachineOptions.js
│   │   │   │   ├── mapToColorFunctionRange.js
│   │   │   │   ├── mapToPiecewiseFunctionNodes.js
│   │   │   │   ├── selectImageLayer.js
│   │   │   │   ├── toggleInterpolation.js
│   │   │   │   ├── toggleLayerBBox.js
│   │   │   │   ├── toggleLayerVisibility.js
│   │   │   │   ├── transformLabelImageWeight.js
│   │   │   │   ├── updateHistogram.js
│   │   │   │   ├── updateLabelImagePiecewiseFunction.js
│   │   │   │   └── updateRenderedImage.js
│   │   │   ├── Layers/
│   │   │   │   └── layersRenderingMachineOptions.js
│   │   │   ├── Main/
│   │   │   │   ├── applyCroppingPlanes.js
│   │   │   │   ├── applySlicingPlanes.js
│   │   │   │   ├── applyXSlice.js
│   │   │   │   ├── applyYSlice.js
│   │   │   │   ├── applyZSlice.js
│   │   │   │   ├── computeRenderedBounds.js
│   │   │   │   ├── createMainRenderer.js
│   │   │   │   ├── croppingPlanes.js
│   │   │   │   ├── mainRenderingMachineOptions.js
│   │   │   │   ├── resetCamera.js
│   │   │   │   ├── resetCroppingPlanes.js
│   │   │   │   ├── setBackgroundColor.js
│   │   │   │   ├── setUnits.js
│   │   │   │   ├── takeScreenshot.js
│   │   │   │   ├── toggleAnnotations.js
│   │   │   │   ├── toggleAxes.js
│   │   │   │   ├── toggleCroppingPlanes.js
│   │   │   │   ├── toggleRotate.js
│   │   │   │   ├── updateFps.js
│   │   │   │   ├── updateSlicingPlanes.js
│   │   │   │   ├── viewModeVolume.js
│   │   │   │   ├── viewModeXPlane.js
│   │   │   │   ├── viewModeYPlane.js
│   │   │   │   └── viewModeZPlane.js
│   │   │   ├── Widgets/
│   │   │   │   ├── DistanceWidget/
│   │   │   │   │   ├── DistanceWidget.js
│   │   │   │   │   └── state.js
│   │   │   │   ├── HandlesInPixelsImageCroppingWidget.js
│   │   │   │   ├── createWidgets.js
│   │   │   │   ├── toggleDistanceWidget.js
│   │   │   │   └── widgetsRenderingMachineOptions.js
│   │   │   ├── cancelAnimation.js
│   │   │   ├── createRenderer.js
│   │   │   ├── numericalSort.js
│   │   │   ├── proxyManagerConfiguration.js
│   │   │   ├── render.js
│   │   │   ├── requestAnimation.js
│   │   │   ├── vtk/
│   │   │   │   ├── AxesLabelsWidget/
│   │   │   │   │   ├── behavior.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── state.js
│   │   │   │   ├── ItkVtkViewProxy.js
│   │   │   │   ├── OpenGLImageMapperFractional.js
│   │   │   │   ├── PointSetRepresentationProxy/
│   │   │   │   │   └── index.js
│   │   │   │   ├── SVGMarkerTextRepresentation/
│   │   │   │   │   └── index.js
│   │   │   │   ├── SVGRepresentation/
│   │   │   │   │   └── index.js
│   │   │   │   ├── SliceOutlineFilter/
│   │   │   │   │   └── index.js
│   │   │   │   └── WidgetManagerPickWhileAnimating.js
│   │   │   └── vtkJSRenderingMachineOptions.js
│   │   ├── Widgets/
│   │   │   └── createWidgetsRenderingMachine.js
│   │   ├── createRenderingMachine.js
│   │   └── updateLabelMapComponentWeight.js
│   ├── UI/
│   │   ├── Images/
│   │   │   ├── createImagesUIMachine.js
│   │   │   └── transferFunctionManipulators.js
│   │   ├── Layers/
│   │   │   ├── createLayerUIActor.js
│   │   │   └── createLayersUIMachine.js
│   │   ├── Main/
│   │   │   └── createMainUIMachine.js
│   │   ├── Widgets/
│   │   │   └── createWidgetsUIMachine.js
│   │   ├── addKeyboardShortcuts.js
│   │   ├── createRenderingViewContainers.js
│   │   ├── createUIMachine.js
│   │   ├── reference-ui/
│   │   │   ├── .babelrc
│   │   │   ├── package.json
│   │   │   ├── rollup.config.js
│   │   │   ├── src/
│   │   │   │   ├── Images/
│   │   │   │   │   ├── applyBlendMode.js
│   │   │   │   │   ├── applyColorMap.js
│   │   │   │   │   ├── applyColorRange.js
│   │   │   │   │   ├── applyColorRangeBounds.js
│   │   │   │   │   ├── applyComponentVisibility.js
│   │   │   │   │   ├── applyGradientOpacity.js
│   │   │   │   │   ├── applyGradientOpacityScale.js
│   │   │   │   │   ├── applyHistogram.js
│   │   │   │   │   ├── applyImagesContrastSensitiveStyle.js
│   │   │   │   │   ├── applyLabelImageBlend.js
│   │   │   │   │   ├── applyLabelImageWeights.js
│   │   │   │   │   ├── applyLabelNames.js
│   │   │   │   │   ├── applyLookupTable.js
│   │   │   │   │   ├── applyPiecewiseFunctionGaussians.js
│   │   │   │   │   ├── applySelectedLabel.js
│   │   │   │   │   ├── applyVolumeSampleDistance.js
│   │   │   │   │   ├── applyWindowingReset.js
│   │   │   │   │   ├── cinematic.js
│   │   │   │   │   ├── createBlendModeSelector.js
│   │   │   │   │   ├── createColorRangeInput.js
│   │   │   │   │   ├── createComponentSelector.js
│   │   │   │   │   ├── createGradientOpacitySlider.js
│   │   │   │   │   ├── createImagesInterface.js
│   │   │   │   │   ├── createInterpolationButton.js
│   │   │   │   │   ├── createLabelImageColorWidget.js
│   │   │   │   │   ├── createLabelImageWeightWidget.js
│   │   │   │   │   ├── createSampleDistanceSlider.js
│   │   │   │   │   ├── createShadowToggle.js
│   │   │   │   │   ├── createTransferFunctionEditor.js
│   │   │   │   │   ├── createTransferFunctionWidget.js
│   │   │   │   │   ├── createVolumeRenderingInputs.js
│   │   │   │   │   ├── createWindowLevelReset.js
│   │   │   │   │   ├── createWindowLevelToggle.js
│   │   │   │   │   ├── imagesUIMachineOptions.js
│   │   │   │   │   ├── scaleSelector.js
│   │   │   │   │   ├── selectImageComponent.js
│   │   │   │   │   ├── throttle.js
│   │   │   │   │   ├── toggleInterpolation.js
│   │   │   │   │   ├── toggleShadow.js
│   │   │   │   │   ├── toggleUseShadow.js
│   │   │   │   │   ├── toggleWindowLevel.js
│   │   │   │   │   ├── updateAvailableComponents.js
│   │   │   │   │   ├── updateImageInterface.js
│   │   │   │   │   ├── updateLabelImageInterface.js
│   │   │   │   │   └── updateRenderedImageInterface.js
│   │   │   │   ├── ItkVtkViewer.module.css
│   │   │   │   ├── Layers/
│   │   │   │   │   ├── addLayerUIRow.js
│   │   │   │   │   ├── applyLayersContrastSensitiveStyle.js
│   │   │   │   │   ├── compareUI.js
│   │   │   │   │   ├── createLayerInterface.js
│   │   │   │   │   ├── createLayersInterface.js
│   │   │   │   │   ├── dataUpdateIndicator.js
│   │   │   │   │   ├── extensionToImageIo.js
│   │   │   │   │   ├── layerIcon.ts
│   │   │   │   │   ├── layerSettings.ts
│   │   │   │   │   ├── layersUIMachineOptions.js
│   │   │   │   │   ├── selectLayer.js
│   │   │   │   │   └── toggleLayerVisibility.js
│   │   │   │   ├── Main/
│   │   │   │   │   ├── applyMainContrastSensitiveStyle.js
│   │   │   │   │   ├── applySlicingPlanes.js
│   │   │   │   │   ├── applyXSlice.js
│   │   │   │   │   ├── applyYSlice.js
│   │   │   │   │   ├── applyZSlice.js
│   │   │   │   │   ├── createAnnotationsButton.js
│   │   │   │   │   ├── createAxesButton.js
│   │   │   │   │   ├── createBackgroundColorButton.js
│   │   │   │   │   ├── createCroppingButtons.js
│   │   │   │   │   ├── createFullscreenButton.js
│   │   │   │   │   ├── createMainInterface.js
│   │   │   │   │   ├── createPlaneSliders.js
│   │   │   │   │   ├── createResetCameraButton.js
│   │   │   │   │   ├── createRotateButton.js
│   │   │   │   │   ├── createScreenshotButton.js
│   │   │   │   │   ├── createViewModeButtons.js
│   │   │   │   │   ├── createViewPlanesToggle.js
│   │   │   │   │   ├── fullscreenMethods.js
│   │   │   │   │   ├── mainUIMachineOptions.js
│   │   │   │   │   ├── resetCrop.js
│   │   │   │   │   ├── toggleAnnotations.js
│   │   │   │   │   ├── toggleAxes.js
│   │   │   │   │   ├── toggleBackgroundColor.js
│   │   │   │   │   ├── toggleCrop.js
│   │   │   │   │   ├── toggleCroppingPlanes.js
│   │   │   │   │   ├── toggleFullscreen.js
│   │   │   │   │   ├── toggleRotate.js
│   │   │   │   │   ├── viewModeVolume.js
│   │   │   │   │   ├── viewModeXPlane.js
│   │   │   │   │   ├── viewModeYPlane.js
│   │   │   │   │   └── viewModeZPlane.js
│   │   │   │   ├── Widgets/
│   │   │   │   │   ├── applyDistanceWidgetValue.js
│   │   │   │   │   ├── applyWidgetsContrastSensitiveStyle.js
│   │   │   │   │   ├── createDistanceWidget.js
│   │   │   │   │   ├── createWidgetsInterface.js
│   │   │   │   │   ├── toggleDistanceWidget.js
│   │   │   │   │   ├── viewModeVolume.js
│   │   │   │   │   ├── viewModeXPlane.js
│   │   │   │   │   ├── viewModeYPlane.js
│   │   │   │   │   ├── viewModeZPlane.js
│   │   │   │   │   └── widgetsUIMachineOptions.js
│   │   │   │   ├── applyCategoricalColorToColorTransferFunction.js
│   │   │   │   ├── applyContrastSensitiveStyleToElement.js
│   │   │   │   ├── applyGroupVisibility.js
│   │   │   │   ├── collapse-ui.ts
│   │   │   │   ├── context.ts
│   │   │   │   ├── createCategoricalColorIconSelector.js
│   │   │   │   ├── createColorMapIconSelector.js
│   │   │   │   ├── createInterface.js
│   │   │   │   ├── referenceUIMachineOptions.js
│   │   │   │   ├── serviceContext.ts
│   │   │   │   ├── shims.d.ts
│   │   │   │   ├── toggleDarkMode.js
│   │   │   │   ├── toggleUICollapsed.js
│   │   │   │   └── utils.js
│   │   │   └── tsconfig.json
│   │   └── styleRenderingViewContainers.js
│   ├── UserInterface/
│   │   ├── CategoricalPresetNames.js
│   │   ├── Geometries/
│   │   │   ├── createGeometryColorBySelector.js
│   │   │   ├── createGeometryColorChooser.js
│   │   │   ├── createGeometryColorRangeInput.js
│   │   │   ├── createGeometryColorWidget.js
│   │   │   ├── createGeometryOpacitySlider.js
│   │   │   └── createGeometryRepresentationSelector.js
│   │   ├── ItkVtkViewer.module.css
│   │   ├── PointSets/
│   │   │   ├── createPointSetColorBySelector.js
│   │   │   ├── createPointSetColorChooser.js
│   │   │   ├── createPointSetColorRangeInput.js
│   │   │   ├── createPointSetColorWidget.js
│   │   │   ├── createPointSetOpacitySlider.js
│   │   │   ├── createPointSetRepresentationSelector.js
│   │   │   └── createPointSetSizeSlider.js
│   │   ├── addLogo.js
│   │   ├── applyContrastSensitiveStyle.js
│   │   ├── checkForWebGL.js
│   │   ├── createCategoricalColorIconSelector.js
│   │   ├── createColorMapIconSelector.js
│   │   ├── createFileDragAndDrop.js
│   │   ├── createGeometriesUI.js
│   │   ├── createLoadingProgress.js
│   │   ├── createPointSetsUI.js
│   │   ├── customColorMapIcon.js
│   │   ├── emptyContainer.js
│   │   ├── getContrastSensitiveStyle.js
│   │   ├── getRootContainer.js
│   │   ├── hex2rgb.js
│   │   ├── index.js
│   │   ├── preventDefaults.js
│   │   └── rgb2hex.js
│   ├── ViewerStore.js
│   ├── createViewer.js
│   ├── createViewerMachine.js
│   ├── imJoyCodecs.js
│   ├── index.d.ts
│   ├── index.js
│   ├── internalUtils.js
│   ├── itkConfig.js
│   ├── itkConfigCDN.js
│   ├── transformBounds.js
│   ├── utils.js
│   └── viewerMachineOptions.js
├── test/
│   ├── conglomerateTest.js
│   ├── convertItkImageToVtkImageTest.js
│   ├── createViewerTest.js
│   ├── customElementsDefineOverride.js
│   ├── downloadData.mjs
│   ├── imjoyTest.js
│   ├── itkConfigBrowserTest.js
│   ├── multiscaleSpatialImageTest.js
│   ├── pipelineTest.js
│   ├── processFilesTest.js
│   ├── run.sh
│   ├── test-ui-rollup.config.js
│   ├── testUINoPlaneSliders.js
│   ├── tests.js
│   ├── zarrImageBaselines.js
│   └── zarrTest.js
├── tsconfig.json
└── webpack.config.js
Download .txt
SYMBOL INDEX (1365 symbols across 279 files)

FILE: bin/itk-vtk-viewer-cli.js
  function handlePort (line 14) | function handlePort(value) {
  function printIP (line 45) | function printIP(l) {

FILE: bin/network.js
  function netInterface (line 8) | function netInterface(iface) {
  function device (line 30) | function device(ifname) {

FILE: bin/server.js
  function webServer (line 4) | function webServer(dataPath) {

FILE: src/Compression/blosc-zarr/BloscZarr.cxx
  function main (line 9) | int main(int argc, char * argv[]){

FILE: src/Compression/blosc-zarr/web-build/BloscZarr.js
  function locateFile (line 9) | function locateFile(path){if(Module["locateFile"]){return Module["locate...
  function logExceptionOnExit (line 9) | function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toL...
  function assert (line 9) | function assert(condition,text){if(!condition){abort(text)}}
  function getCFunc (line 9) | function getCFunc(ident){var func=Module["_"+ident];return func}
  function ccall (line 9) | function ccall(ident,returnType,argTypes,args,opts){var toC={"string":fu...
  function cwrap (line 9) | function cwrap(ident,returnType,argTypes,opts){argTypes=argTypes||[];var...
  function UTF8ArrayToString (line 9) | function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBy...
  function UTF8ToString (line 9) | function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(H...
  function stringToUTF8Array (line 9) | function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxByte...
  function stringToUTF8 (line 9) | function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Arr...
  function lengthBytesUTF8 (line 9) | function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){va...
  function AsciiToString (line 9) | function AsciiToString(ptr){var str="";while(1){var ch=HEAPU8[ptr++>>0];...
  function allocateUTF8OnStack (line 9) | function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var re...
  function writeArrayToMemory (line 9) | function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}
  function writeAsciiToMemory (line 9) | function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.le...
  function alignUp (line 9) | function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}ret...
  function updateGlobalBufferAndViews (line 9) | function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP...
  function keepRuntimeAlive (line 9) | function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounte...
  function preRun (line 9) | function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="func...
  function initRuntime (line 9) | function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!...
  function preMain (line 9) | function preMain(){callRuntimeCallbacks(__ATMAIN__)}
  function exitRuntime (line 9) | function exitRuntime(){runtimeExited=true}
  function postRun (line 9) | function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="f...
  function addOnPreRun (line 9) | function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}
  function addOnInit (line 9) | function addOnInit(cb){__ATINIT__.unshift(cb)}
  function addOnPostRun (line 9) | function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}
  function getUniqueRunDependency (line 9) | function getUniqueRunDependency(id){return id}
  function addRunDependency (line 9) | function addRunDependency(id){runDependencies++;if(Module["monitorRunDep...
  function removeRunDependency (line 9) | function removeRunDependency(id){runDependencies--;if(Module["monitorRun...
  function abort (line 9) | function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}wha...
  function isDataURI (line 9) | function isDataURI(filename){return filename.startsWith(dataURIPrefix)}
  function isFileURI (line 9) | function isFileURI(filename){return filename.startsWith("file://")}
  function getBinary (line 9) | function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return...
  function getBinaryPromise (line 9) | function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRON...
  function createWasm (line 9) | function createWasm(){var info={"a":asmLibraryArg};function receiveInsta...
  function callRuntimeCallbacks (line 9) | function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var c...
  function getWasmTableEntry (line 9) | function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if...
  function handleException (line 9) | function handleException(e){if(e instanceof ExitStatus||e=="unwind"){ret...
  function ___cxa_allocate_exception (line 9) | function ___cxa_allocate_exception(size){return _malloc(size+16)+16}
  function ExceptionInfo (line 9) | function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-16;thi...
  function ___cxa_throw (line 9) | function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(pt...
  function setErrNo (line 9) | function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}
  function getRandomDevice (line 9) | function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["ge...
  function trim (line 9) | function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[sta...
  function mmapAlloc (line 9) | function mmapAlloc(size){abort()}
  function asyncLoad (line 9) | function asyncLoad(url,onload,onerror,noRunDep){var dep=!noRunDep?getUni...
  function doCallback (line 9) | function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}
  function done (line 9) | function done(errCode){if(errCode){if(!done.errored){done.errored=true;r...
  function LazyUint8Array (line 9) | function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}
  function processData (line 9) | function processData(byteArray){function finish(byteArray){if(preFinish)...
  function finish (line 9) | function finish(){if(fail==0)onload();else onerror()}
  function finish (line 9) | function finish(){if(fail==0)onload();else onerror()}
  function ___syscall_fcntl64 (line 9) | function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try...
  function ___syscall_getcwd (line 9) | function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=F...
  function ___syscall_ioctl (line 9) | function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{va...
  function ___syscall_open (line 9) | function ___syscall_open(path,flags,varargs){SYSCALLS.varargs=varargs;tr...
  function ___syscall_readlink (line 9) | function ___syscall_readlink(path,buf,bufsize){try{path=SYSCALLS.getStr(...
  function ___syscall_stat64 (line 9) | function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);retu...
  function _abort (line 9) | function _abort(){abort("")}
  function _emscripten_memcpy_big (line 9) | function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src...
  function _emscripten_get_heap_max (line 9) | function _emscripten_get_heap_max(){return 2147483648}
  function emscripten_realloc_buffer (line 9) | function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer...
  function _emscripten_resize_heap (line 9) | function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.lengt...
  function getExecutableName (line 9) | function getExecutableName(){return thisProgram||"./this.program"}
  function getEnvStrings (line 9) | function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof nav...
  function _environ_get (line 9) | function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings...
  function _environ_sizes_get (line 9) | function _environ_sizes_get(penviron_count,penviron_buf_size){var string...
  function _fd_close (line 9) | function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.cl...
  function _fd_fdstat_get (line 9) | function _fd_fdstat_get(fd,pbuf){try{var stream=SYSCALLS.getStreamFromFD...
  function _fd_read (line 9) | function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamF...
  function _fd_seek (line 9) | function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var st...
  function _fd_write (line 9) | function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStream...
  function _getpwnam (line 9) | function _getpwnam(){err("missing function: getpwnam");abort(-1)}
  function __isLeapYear (line 9) | function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400==...
  function __arraySum (line 9) | function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=arr...
  function __addDays (line 9) | function __addDays(date,days){var newDate=new Date(date.getTime());while...
  function _strftime (line 9) | function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var...
  function _strftime_l (line 9) | function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,for...
  function intArrayFromString (line 9) | function intArrayFromString(stringy,dontAddNull,length){var len=length>0...
  function ExitStatus (line 9) | function ExitStatus(status){this.name="ExitStatus";this.message="Program...
  function callMain (line 9) | function callMain(args){var entryFunction=Module["_main"];args=args||[];...
  function run (line 9) | function run(args){args=args||arguments_;if(runDependencies>0){return}pr...
  function exit (line 9) | function exit(status,implicit){EXITSTATUS=status;if(keepRuntimeAlive()){...
  function procExit (line 9) | function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Modul...

FILE: src/Compression/blosc-zarr/web-build/BloscZarr.umd.js
  function locateFile (line 9) | function locateFile(path){if(Module["locateFile"]){return Module["locate...
  function logExceptionOnExit (line 9) | function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toL...
  function assert (line 9) | function assert(condition,text){if(!condition){abort(text)}}
  function getCFunc (line 9) | function getCFunc(ident){var func=Module["_"+ident];return func}
  function ccall (line 9) | function ccall(ident,returnType,argTypes,args,opts){var toC={"string":fu...
  function cwrap (line 9) | function cwrap(ident,returnType,argTypes,opts){argTypes=argTypes||[];var...
  function UTF8ArrayToString (line 9) | function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBy...
  function UTF8ToString (line 9) | function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(H...
  function stringToUTF8Array (line 9) | function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxByte...
  function stringToUTF8 (line 9) | function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Arr...
  function lengthBytesUTF8 (line 9) | function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){va...
  function AsciiToString (line 9) | function AsciiToString(ptr){var str="";while(1){var ch=HEAPU8[ptr++>>0];...
  function allocateUTF8OnStack (line 9) | function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var re...
  function writeArrayToMemory (line 9) | function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}
  function writeAsciiToMemory (line 9) | function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.le...
  function alignUp (line 9) | function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}ret...
  function updateGlobalBufferAndViews (line 9) | function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP...
  function keepRuntimeAlive (line 9) | function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounte...
  function preRun (line 9) | function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="func...
  function initRuntime (line 9) | function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!...
  function preMain (line 9) | function preMain(){callRuntimeCallbacks(__ATMAIN__)}
  function exitRuntime (line 9) | function exitRuntime(){runtimeExited=true}
  function postRun (line 9) | function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="f...
  function addOnPreRun (line 9) | function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}
  function addOnInit (line 9) | function addOnInit(cb){__ATINIT__.unshift(cb)}
  function addOnPostRun (line 9) | function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}
  function getUniqueRunDependency (line 9) | function getUniqueRunDependency(id){return id}
  function addRunDependency (line 9) | function addRunDependency(id){runDependencies++;if(Module["monitorRunDep...
  function removeRunDependency (line 9) | function removeRunDependency(id){runDependencies--;if(Module["monitorRun...
  function abort (line 9) | function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}wha...
  function isDataURI (line 9) | function isDataURI(filename){return filename.startsWith(dataURIPrefix)}
  function isFileURI (line 9) | function isFileURI(filename){return filename.startsWith("file://")}
  function getBinary (line 9) | function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return...
  function getBinaryPromise (line 9) | function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRON...
  function createWasm (line 9) | function createWasm(){var info={"a":asmLibraryArg};function receiveInsta...
  function callRuntimeCallbacks (line 9) | function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var c...
  function getWasmTableEntry (line 9) | function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if...
  function handleException (line 9) | function handleException(e){if(e instanceof ExitStatus||e=="unwind"){ret...
  function ___cxa_allocate_exception (line 9) | function ___cxa_allocate_exception(size){return _malloc(size+16)+16}
  function ExceptionInfo (line 9) | function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-16;thi...
  function ___cxa_throw (line 9) | function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(pt...
  function setErrNo (line 9) | function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}
  function getRandomDevice (line 9) | function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["ge...
  function trim (line 9) | function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[sta...
  function mmapAlloc (line 9) | function mmapAlloc(size){abort()}
  function asyncLoad (line 9) | function asyncLoad(url,onload,onerror,noRunDep){var dep=!noRunDep?getUni...
  function doCallback (line 9) | function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}
  function done (line 9) | function done(errCode){if(errCode){if(!done.errored){done.errored=true;r...
  function LazyUint8Array (line 9) | function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}
  function processData (line 9) | function processData(byteArray){function finish(byteArray){if(preFinish)...
  function finish (line 9) | function finish(){if(fail==0)onload();else onerror()}
  function finish (line 9) | function finish(){if(fail==0)onload();else onerror()}
  function ___syscall_fcntl64 (line 9) | function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try...
  function ___syscall_getcwd (line 9) | function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=F...
  function ___syscall_ioctl (line 9) | function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{va...
  function ___syscall_open (line 9) | function ___syscall_open(path,flags,varargs){SYSCALLS.varargs=varargs;tr...
  function ___syscall_readlink (line 9) | function ___syscall_readlink(path,buf,bufsize){try{path=SYSCALLS.getStr(...
  function ___syscall_stat64 (line 9) | function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);retu...
  function _abort (line 9) | function _abort(){abort("")}
  function _emscripten_memcpy_big (line 9) | function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src...
  function _emscripten_get_heap_max (line 9) | function _emscripten_get_heap_max(){return 2147483648}
  function emscripten_realloc_buffer (line 9) | function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer...
  function _emscripten_resize_heap (line 9) | function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.lengt...
  function getExecutableName (line 9) | function getExecutableName(){return thisProgram||"./this.program"}
  function getEnvStrings (line 9) | function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof nav...
  function _environ_get (line 9) | function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings...
  function _environ_sizes_get (line 9) | function _environ_sizes_get(penviron_count,penviron_buf_size){var string...
  function _fd_close (line 9) | function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.cl...
  function _fd_fdstat_get (line 9) | function _fd_fdstat_get(fd,pbuf){try{var stream=SYSCALLS.getStreamFromFD...
  function _fd_read (line 9) | function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamF...
  function _fd_seek (line 9) | function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var st...
  function _fd_write (line 9) | function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStream...
  function _getpwnam (line 9) | function _getpwnam(){err("missing function: getpwnam");abort(-1)}
  function __isLeapYear (line 9) | function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400==...
  function __arraySum (line 9) | function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=arr...
  function __addDays (line 9) | function __addDays(date,days){var newDate=new Date(date.getTime());while...
  function _strftime (line 9) | function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var...
  function _strftime_l (line 9) | function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,for...
  function intArrayFromString (line 9) | function intArrayFromString(stringy,dontAddNull,length){var len=length>0...
  function ExitStatus (line 9) | function ExitStatus(status){this.name="ExitStatus";this.message="Program...
  function callMain (line 9) | function callMain(args){var entryFunction=Module["_main"];args=args||[];...
  function run (line 9) | function run(args){args=args||arguments_;if(runDependencies>0){return}pr...
  function exit (line 9) | function exit(status,implicit){EXITSTATUS=status;if(keepRuntimeAlive()){...
  function procExit (line 9) | function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Modul...

FILE: src/Compression/bloscZarrDecompress.js
  function bloscZarrDecompress (line 25) | async function bloscZarrDecompress(chunkData) {

FILE: src/Context/ImageActorContext.js
  class ImageActorContext (line 9) | class ImageActorContext {

FILE: src/Context/ImagesMachineContext.js
  class ImagesMachineContext (line 1) | class ImagesMachineContext {

FILE: src/Context/LayerActorContext.js
  class LayerActorContext (line 1) | class LayerActorContext {

FILE: src/Context/LayersMachineContext.js
  class LayersMachineContext (line 1) | class LayersMachineContext {

FILE: src/Context/MainMachineContext.js
  class MainMachineContext (line 1) | class MainMachineContext {
    method constructor (line 2) | constructor(config) {
    method getConfig (line 15) | getConfig() {

FILE: src/Context/ViewerMachineContext.js
  constant MAX_CONCURRENCY (line 6) | const MAX_CONCURRENCY = 128
  class ViewerMachineContext (line 23) | class ViewerMachineContext {
    method constructor (line 24) | constructor(config) {
    method getConfig (line 61) | getConfig() {

FILE: src/Context/WidgetsMachineContext.js
  class WidgetsMachineContext (line 1) | class WidgetsMachineContext {

FILE: src/IO/Analyze/computeHistograms.js
  constant BIN_COUNT_DEFAULT (line 15) | const BIN_COUNT_DEFAULT = 256

FILE: src/IO/Analyze/computeRanges.js
  function computeRanges (line 17) | async function computeRanges(values, numberOfComponents = 1) {

FILE: src/IO/Analyze/createRangeHelper.js
  function createRangeHelper (line 1) | function createRangeHelper() {

FILE: src/IO/Analyze/webWorkerPromiseWorkerPool.js
  function webWorkerPromiseWorkerPool (line 5) | function webWorkerPromiseWorkerPool(

FILE: src/IO/Compare/Compare.cxx
  function Compare (line 46) | int Compare(itk::wasm::Pipeline &pipeline, const TMovingImage *movingIma...
  function EnsureOneComponent (line 212) | typename std::enable_if<!IsRGB<TImage>::value && !IsOneComponent<TImage>...
  function EnsureOneComponent (line 225) | typename std::enable_if<IsRGB<TImage>::value && !IsOneComponent<TImage>:...
  function EnsureOneComponent (line 238) | typename std::enable_if<IsOneComponent<TImage>::value, typename TImage::...
  class InputImagePipelineFunctor (line 245) | class InputImagePipelineFunctor
    class FixedImagePipelineFunctor (line 301) | class FixedImagePipelineFunctor
  function main (line 325) | int main(int argc, char *argv[])

FILE: src/IO/Compare/createCompareImage.js
  function createCompareImage (line 3) | async function createCompareImage(

FILE: src/IO/Compare/emscripten-build/Compare.js
  function locateFile (line 48) | function locateFile(path) {
  function logExceptionOnExit (line 55) | function logExceptionOnExit(e) {
  function assert (line 184) | function assert(condition, text) {
  function UTF8ArrayToString (line 191) | function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
  function UTF8ToString (line 229) | function UTF8ToString(ptr, maxBytesToRead) {
  function stringToUTF8Array (line 232) | function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
  function stringToUTF8 (line 265) | function stringToUTF8(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF8 (line 268) | function lengthBytesUTF8(str) {
  function updateGlobalBufferAndViews (line 294) | function updateGlobalBufferAndViews(buf) {
  function keepRuntimeAlive (line 312) | function keepRuntimeAlive() {
  function preRun (line 315) | function preRun() {
  function initRuntime (line 325) | function initRuntime() {
  function preMain (line 332) | function preMain() {
  function postRun (line 335) | function postRun() {
  function addOnPreRun (line 345) | function addOnPreRun(cb) {
  function addOnInit (line 348) | function addOnInit(cb) {
  function addOnPostRun (line 351) | function addOnPostRun(cb) {
  function getUniqueRunDependency (line 357) | function getUniqueRunDependency(id) {
  function addRunDependency (line 360) | function addRunDependency(id) {
  function removeRunDependency (line 366) | function removeRunDependency(id) {
  function abort (line 383) | function abort(what) {
  function isDataURI (line 397) | function isDataURI(filename) {
  function isFileURI (line 400) | function isFileURI(filename) {
  function getBinary (line 412) | function getBinary(file) {
  function getBinaryPromise (line 425) | function getBinaryPromise() {
  function createWasm (line 458) | function createWasm() {
  function ExitStatus (line 523) | function ExitStatus(status) {
  function callRuntimeCallbacks (line 528) | function callRuntimeCallbacks(callbacks) {
  function ExceptionInfo (line 533) | function ExceptionInfo(excPtr) {
  function ___cxa_throw (line 600) | function ___cxa_throw(ptr, type, destructor) {
  function setErrNo (line 607) | function setErrNo(value) {
  function getRandomDevice (line 681) | function getRandomDevice() {
  function trim (line 722) | function trim(arr) {
  function intArrayFromString (line 752) | function intArrayFromString(stringy, dontAddNull, length) {
  function mmapAlloc (line 900) | function mmapAlloc(size) {
  function asyncLoad (line 1226) | function asyncLoad(url, onload, onerror, noRunDep) {
  function doCallback (line 1877) | function doCallback(errCode) {
  function done (line 1881) | function done(errCode) {
  function LazyUint8Array (line 2813) | function LazyUint8Array() {
  function writeChunks (line 2952) | function writeChunks(stream, buffer, offset, length, position) {
  function processData (line 2997) | function processData(byteArray) {
  function finish (line 3064) | function finish() {
  function finish (line 3108) | function finish() {
  function ___syscall_fcntl64 (line 3291) | function ___syscall_fcntl64(fd, cmd, varargs) {
  function ___syscall_getcwd (line 3339) | function ___syscall_getcwd(buf, size) {
  function ___syscall_ioctl (line 3352) | function ___syscall_ioctl(fd, op, varargs) {
  function ___syscall_openat (line 3401) | function ___syscall_openat(dirfd, path, flags, varargs) {
  function ___syscall_readlinkat (line 3413) | function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
  function ___syscall_stat64 (line 3429) | function ___syscall_stat64(path, buf) {
  function _abort (line 3438) | function _abort() {
  function _emscripten_memcpy_big (line 3441) | function _emscripten_memcpy_big(dest, src, num) {
  function getHeapMax (line 3444) | function getHeapMax() {
  function emscripten_realloc_buffer (line 3447) | function emscripten_realloc_buffer(size) {
  function _emscripten_resize_heap (line 3454) | function _emscripten_resize_heap(requestedSize) {
  function getExecutableName (line 3481) | function getExecutableName() {
  function getEnvStrings (line 3484) | function getEnvStrings() {
  function writeAsciiToMemory (line 3514) | function writeAsciiToMemory(str, buffer, dontAddNull) {
  function _environ_get (line 3520) | function _environ_get(__environ, environ_buf) {
  function _environ_sizes_get (line 3530) | function _environ_sizes_get(penviron_count, penviron_buf_size) {
  function _proc_exit (line 3540) | function _proc_exit(code) {
  function exitJS (line 3548) | function exitJS(status, implicit) {
  function _fd_close (line 3553) | function _fd_close(fd) {
  function doReadv (line 3563) | function doReadv(stream, iov, iovcnt, offset) {
  function _fd_read (line 3576) | function _fd_read(fd, iov, iovcnt, pnum) {
  function convertI32PairToI53Checked (line 3587) | function convertI32PairToI53Checked(lo, hi) {
  function _fd_seek (line 3592) | function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
  function doWritev (line 3621) | function doWritev(stream, iov, iovcnt, offset) {
  function _fd_write (line 3633) | function _fd_write(fd, iov, iovcnt, pnum) {
  function __isLeapYear (line 3644) | function __isLeapYear(year) {
  function __arraySum (line 3647) | function __arraySum(array, index) {
  function __addDays (line 3654) | function __addDays(date, days) {
  function writeArrayToMemory (line 3678) | function writeArrayToMemory(array, buffer) {
  function _strftime (line 3681) | function _strftime(s, maxsize, format, tm) {
  function _strftime_l (line 3959) | function _strftime_l(s, maxsize, format, tm, loc) {
  function handleException (line 3962) | function handleException(e) {
  function allocateUTF8OnStack (line 3968) | function allocateUTF8OnStack(str) {
  function getCFunc (line 3974) | function getCFunc(ident) {
  function ccall (line 3978) | function ccall(ident, returnType, argTypes, args, opts) {
  function cwrap (line 4024) | function cwrap(ident, returnType, argTypes, opts) {
  function AsciiToString (line 4037) | function AsciiToString(ptr) {
  function callMain (line 4347) | function callMain(args) {
  function run (line 4366) | function run(args) {

FILE: src/IO/Compare/emscripten-build/Compare.umd.js
  function locateFile (line 51) | function locateFile(path) {
  function logExceptionOnExit (line 58) | function logExceptionOnExit(e) {
  function assert (line 183) | function assert(condition, text) {
  function UTF8ArrayToString (line 190) | function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
  function UTF8ToString (line 228) | function UTF8ToString(ptr, maxBytesToRead) {
  function stringToUTF8Array (line 231) | function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
  function stringToUTF8 (line 264) | function stringToUTF8(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF8 (line 267) | function lengthBytesUTF8(str) {
  function updateGlobalBufferAndViews (line 293) | function updateGlobalBufferAndViews(buf) {
  function keepRuntimeAlive (line 311) | function keepRuntimeAlive() {
  function preRun (line 314) | function preRun() {
  function initRuntime (line 324) | function initRuntime() {
  function preMain (line 331) | function preMain() {
  function postRun (line 334) | function postRun() {
  function addOnPreRun (line 344) | function addOnPreRun(cb) {
  function addOnInit (line 347) | function addOnInit(cb) {
  function addOnPostRun (line 350) | function addOnPostRun(cb) {
  function getUniqueRunDependency (line 356) | function getUniqueRunDependency(id) {
  function addRunDependency (line 359) | function addRunDependency(id) {
  function removeRunDependency (line 365) | function removeRunDependency(id) {
  function abort (line 382) | function abort(what) {
  function isDataURI (line 396) | function isDataURI(filename) {
  function isFileURI (line 399) | function isFileURI(filename) {
  function getBinary (line 407) | function getBinary(file) {
  function getBinaryPromise (line 420) | function getBinaryPromise() {
  function createWasm (line 453) | function createWasm() {
  function ExitStatus (line 518) | function ExitStatus(status) {
  function callRuntimeCallbacks (line 523) | function callRuntimeCallbacks(callbacks) {
  function ExceptionInfo (line 528) | function ExceptionInfo(excPtr) {
  function ___cxa_throw (line 595) | function ___cxa_throw(ptr, type, destructor) {
  function setErrNo (line 602) | function setErrNo(value) {
  function getRandomDevice (line 676) | function getRandomDevice() {
  function trim (line 717) | function trim(arr) {
  function intArrayFromString (line 747) | function intArrayFromString(stringy, dontAddNull, length) {
  function mmapAlloc (line 895) | function mmapAlloc(size) {
  function asyncLoad (line 1221) | function asyncLoad(url, onload, onerror, noRunDep) {
  function doCallback (line 1872) | function doCallback(errCode) {
  function done (line 1876) | function done(errCode) {
  function LazyUint8Array (line 2808) | function LazyUint8Array() {
  function writeChunks (line 2947) | function writeChunks(stream, buffer, offset, length, position) {
  function processData (line 2992) | function processData(byteArray) {
  function finish (line 3059) | function finish() {
  function finish (line 3103) | function finish() {
  function ___syscall_fcntl64 (line 3286) | function ___syscall_fcntl64(fd, cmd, varargs) {
  function ___syscall_getcwd (line 3334) | function ___syscall_getcwd(buf, size) {
  function ___syscall_ioctl (line 3347) | function ___syscall_ioctl(fd, op, varargs) {
  function ___syscall_openat (line 3396) | function ___syscall_openat(dirfd, path, flags, varargs) {
  function ___syscall_readlinkat (line 3408) | function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
  function ___syscall_stat64 (line 3424) | function ___syscall_stat64(path, buf) {
  function _abort (line 3433) | function _abort() {
  function _emscripten_memcpy_big (line 3436) | function _emscripten_memcpy_big(dest, src, num) {
  function getHeapMax (line 3439) | function getHeapMax() {
  function emscripten_realloc_buffer (line 3442) | function emscripten_realloc_buffer(size) {
  function _emscripten_resize_heap (line 3449) | function _emscripten_resize_heap(requestedSize) {
  function getExecutableName (line 3476) | function getExecutableName() {
  function getEnvStrings (line 3479) | function getEnvStrings() {
  function writeAsciiToMemory (line 3509) | function writeAsciiToMemory(str, buffer, dontAddNull) {
  function _environ_get (line 3515) | function _environ_get(__environ, environ_buf) {
  function _environ_sizes_get (line 3525) | function _environ_sizes_get(penviron_count, penviron_buf_size) {
  function _proc_exit (line 3535) | function _proc_exit(code) {
  function exitJS (line 3543) | function exitJS(status, implicit) {
  function _fd_close (line 3548) | function _fd_close(fd) {
  function doReadv (line 3558) | function doReadv(stream, iov, iovcnt, offset) {
  function _fd_read (line 3571) | function _fd_read(fd, iov, iovcnt, pnum) {
  function convertI32PairToI53Checked (line 3582) | function convertI32PairToI53Checked(lo, hi) {
  function _fd_seek (line 3587) | function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
  function doWritev (line 3616) | function doWritev(stream, iov, iovcnt, offset) {
  function _fd_write (line 3628) | function _fd_write(fd, iov, iovcnt, pnum) {
  function __isLeapYear (line 3639) | function __isLeapYear(year) {
  function __arraySum (line 3642) | function __arraySum(array, index) {
  function __addDays (line 3649) | function __addDays(date, days) {
  function writeArrayToMemory (line 3673) | function writeArrayToMemory(array, buffer) {
  function _strftime (line 3676) | function _strftime(s, maxsize, format, tm) {
  function _strftime_l (line 3954) | function _strftime_l(s, maxsize, format, tm, loc) {
  function handleException (line 3957) | function handleException(e) {
  function allocateUTF8OnStack (line 3963) | function allocateUTF8OnStack(str) {
  function getCFunc (line 3969) | function getCFunc(ident) {
  function ccall (line 3973) | function ccall(ident, returnType, argTypes, args, opts) {
  function cwrap (line 4019) | function cwrap(ident, returnType, argTypes, opts) {
  function AsciiToString (line 4032) | function AsciiToString(ptr) {
  function callMain (line 4342) | function callMain(args) {
  function run (line 4361) | function run(args) {

FILE: src/IO/ConglomerateMultiscaleSpatialImage.js
  class ConglomerateMultiscaleSpatialImage (line 3) | class ConglomerateMultiscaleSpatialImage extends MultiscaleSpatialImage {
    method constructor (line 4) | constructor(images) {
    method getImage (line 24) | async getImage(scale, worldBounds = []) {
    method buildImage (line 29) | async buildImage(scale /*bounds*/) {

FILE: src/IO/Downsample/Downsample.cxx
  function Downsample (line 47) | int Downsample(itk::wasm::Pipeline &pipeline, itk::wasm::InputImage<TIma...
  class PipelineFunctor (line 120) | class PipelineFunctor
  function main (line 137) | int main(int argc, char *argv[])

FILE: src/IO/Downsample/DownsampleLabelImage.cxx
  function DownsampleLabelImage (line 48) | int DownsampleLabelImage(itk::wasm::Pipeline &pipeline, itk::wasm::Input...
  class PipelineFunctor (line 139) | class PipelineFunctor
  function main (line 156) | int main(int argc, char *argv[])

FILE: src/IO/Downsample/emscripten-build/Downsample.js
  function locateFile (line 48) | function locateFile(path) {
  function logExceptionOnExit (line 55) | function logExceptionOnExit(e) {
  function assert (line 184) | function assert(condition, text) {
  function UTF8ArrayToString (line 191) | function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
  function UTF8ToString (line 229) | function UTF8ToString(ptr, maxBytesToRead) {
  function stringToUTF8Array (line 232) | function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
  function stringToUTF8 (line 265) | function stringToUTF8(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF8 (line 268) | function lengthBytesUTF8(str) {
  function updateGlobalBufferAndViews (line 294) | function updateGlobalBufferAndViews(buf) {
  function keepRuntimeAlive (line 312) | function keepRuntimeAlive() {
  function preRun (line 315) | function preRun() {
  function initRuntime (line 325) | function initRuntime() {
  function preMain (line 332) | function preMain() {
  function postRun (line 335) | function postRun() {
  function addOnPreRun (line 345) | function addOnPreRun(cb) {
  function addOnInit (line 348) | function addOnInit(cb) {
  function addOnPostRun (line 351) | function addOnPostRun(cb) {
  function getUniqueRunDependency (line 357) | function getUniqueRunDependency(id) {
  function addRunDependency (line 360) | function addRunDependency(id) {
  function removeRunDependency (line 366) | function removeRunDependency(id) {
  function abort (line 383) | function abort(what) {
  function isDataURI (line 397) | function isDataURI(filename) {
  function isFileURI (line 400) | function isFileURI(filename) {
  function getBinary (line 412) | function getBinary(file) {
  function getBinaryPromise (line 425) | function getBinaryPromise() {
  function createWasm (line 458) | function createWasm() {
  function ExitStatus (line 523) | function ExitStatus(status) {
  function callRuntimeCallbacks (line 528) | function callRuntimeCallbacks(callbacks) {
  function ExceptionInfo (line 533) | function ExceptionInfo(excPtr) {
  function ___cxa_throw (line 600) | function ___cxa_throw(ptr, type, destructor) {
  function setErrNo (line 607) | function setErrNo(value) {
  function getRandomDevice (line 681) | function getRandomDevice() {
  function trim (line 722) | function trim(arr) {
  function intArrayFromString (line 752) | function intArrayFromString(stringy, dontAddNull, length) {
  function mmapAlloc (line 900) | function mmapAlloc(size) {
  function asyncLoad (line 1226) | function asyncLoad(url, onload, onerror, noRunDep) {
  function doCallback (line 1877) | function doCallback(errCode) {
  function done (line 1881) | function done(errCode) {
  function LazyUint8Array (line 2813) | function LazyUint8Array() {
  function writeChunks (line 2952) | function writeChunks(stream, buffer, offset, length, position) {
  function processData (line 2997) | function processData(byteArray) {
  function finish (line 3064) | function finish() {
  function finish (line 3108) | function finish() {
  function ___syscall_fcntl64 (line 3291) | function ___syscall_fcntl64(fd, cmd, varargs) {
  function ___syscall_getcwd (line 3339) | function ___syscall_getcwd(buf, size) {
  function ___syscall_ioctl (line 3352) | function ___syscall_ioctl(fd, op, varargs) {
  function ___syscall_openat (line 3401) | function ___syscall_openat(dirfd, path, flags, varargs) {
  function ___syscall_readlinkat (line 3413) | function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
  function ___syscall_stat64 (line 3429) | function ___syscall_stat64(path, buf) {
  function _abort (line 3438) | function _abort() {
  function _emscripten_memcpy_big (line 3441) | function _emscripten_memcpy_big(dest, src, num) {
  function getHeapMax (line 3444) | function getHeapMax() {
  function emscripten_realloc_buffer (line 3447) | function emscripten_realloc_buffer(size) {
  function _emscripten_resize_heap (line 3454) | function _emscripten_resize_heap(requestedSize) {
  function getExecutableName (line 3481) | function getExecutableName() {
  function getEnvStrings (line 3484) | function getEnvStrings() {
  function writeAsciiToMemory (line 3514) | function writeAsciiToMemory(str, buffer, dontAddNull) {
  function _environ_get (line 3520) | function _environ_get(__environ, environ_buf) {
  function _environ_sizes_get (line 3530) | function _environ_sizes_get(penviron_count, penviron_buf_size) {
  function _proc_exit (line 3540) | function _proc_exit(code) {
  function exitJS (line 3548) | function exitJS(status, implicit) {
  function _fd_close (line 3553) | function _fd_close(fd) {
  function doReadv (line 3563) | function doReadv(stream, iov, iovcnt, offset) {
  function _fd_read (line 3576) | function _fd_read(fd, iov, iovcnt, pnum) {
  function convertI32PairToI53Checked (line 3587) | function convertI32PairToI53Checked(lo, hi) {
  function _fd_seek (line 3592) | function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
  function doWritev (line 3621) | function doWritev(stream, iov, iovcnt, offset) {
  function _fd_write (line 3633) | function _fd_write(fd, iov, iovcnt, pnum) {
  function __isLeapYear (line 3644) | function __isLeapYear(year) {
  function __arraySum (line 3647) | function __arraySum(array, index) {
  function __addDays (line 3654) | function __addDays(date, days) {
  function writeArrayToMemory (line 3678) | function writeArrayToMemory(array, buffer) {
  function _strftime (line 3681) | function _strftime(s, maxsize, format, tm) {
  function _strftime_l (line 3959) | function _strftime_l(s, maxsize, format, tm, loc) {
  function handleException (line 3962) | function handleException(e) {
  function allocateUTF8OnStack (line 3968) | function allocateUTF8OnStack(str) {
  function getCFunc (line 3974) | function getCFunc(ident) {
  function ccall (line 3978) | function ccall(ident, returnType, argTypes, args, opts) {
  function cwrap (line 4024) | function cwrap(ident, returnType, argTypes, opts) {
  function AsciiToString (line 4037) | function AsciiToString(ptr) {
  function callMain (line 4347) | function callMain(args) {
  function run (line 4366) | function run(args) {

FILE: src/IO/Downsample/emscripten-build/Downsample.umd.js
  function locateFile (line 51) | function locateFile(path) {
  function logExceptionOnExit (line 58) | function logExceptionOnExit(e) {
  function assert (line 183) | function assert(condition, text) {
  function UTF8ArrayToString (line 190) | function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
  function UTF8ToString (line 228) | function UTF8ToString(ptr, maxBytesToRead) {
  function stringToUTF8Array (line 231) | function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
  function stringToUTF8 (line 264) | function stringToUTF8(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF8 (line 267) | function lengthBytesUTF8(str) {
  function updateGlobalBufferAndViews (line 293) | function updateGlobalBufferAndViews(buf) {
  function keepRuntimeAlive (line 311) | function keepRuntimeAlive() {
  function preRun (line 314) | function preRun() {
  function initRuntime (line 324) | function initRuntime() {
  function preMain (line 331) | function preMain() {
  function postRun (line 334) | function postRun() {
  function addOnPreRun (line 344) | function addOnPreRun(cb) {
  function addOnInit (line 347) | function addOnInit(cb) {
  function addOnPostRun (line 350) | function addOnPostRun(cb) {
  function getUniqueRunDependency (line 356) | function getUniqueRunDependency(id) {
  function addRunDependency (line 359) | function addRunDependency(id) {
  function removeRunDependency (line 365) | function removeRunDependency(id) {
  function abort (line 382) | function abort(what) {
  function isDataURI (line 396) | function isDataURI(filename) {
  function isFileURI (line 399) | function isFileURI(filename) {
  function getBinary (line 407) | function getBinary(file) {
  function getBinaryPromise (line 420) | function getBinaryPromise() {
  function createWasm (line 453) | function createWasm() {
  function ExitStatus (line 518) | function ExitStatus(status) {
  function callRuntimeCallbacks (line 523) | function callRuntimeCallbacks(callbacks) {
  function ExceptionInfo (line 528) | function ExceptionInfo(excPtr) {
  function ___cxa_throw (line 595) | function ___cxa_throw(ptr, type, destructor) {
  function setErrNo (line 602) | function setErrNo(value) {
  function getRandomDevice (line 676) | function getRandomDevice() {
  function trim (line 717) | function trim(arr) {
  function intArrayFromString (line 747) | function intArrayFromString(stringy, dontAddNull, length) {
  function mmapAlloc (line 895) | function mmapAlloc(size) {
  function asyncLoad (line 1221) | function asyncLoad(url, onload, onerror, noRunDep) {
  function doCallback (line 1872) | function doCallback(errCode) {
  function done (line 1876) | function done(errCode) {
  function LazyUint8Array (line 2808) | function LazyUint8Array() {
  function writeChunks (line 2947) | function writeChunks(stream, buffer, offset, length, position) {
  function processData (line 2992) | function processData(byteArray) {
  function finish (line 3059) | function finish() {
  function finish (line 3103) | function finish() {
  function ___syscall_fcntl64 (line 3286) | function ___syscall_fcntl64(fd, cmd, varargs) {
  function ___syscall_getcwd (line 3334) | function ___syscall_getcwd(buf, size) {
  function ___syscall_ioctl (line 3347) | function ___syscall_ioctl(fd, op, varargs) {
  function ___syscall_openat (line 3396) | function ___syscall_openat(dirfd, path, flags, varargs) {
  function ___syscall_readlinkat (line 3408) | function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
  function ___syscall_stat64 (line 3424) | function ___syscall_stat64(path, buf) {
  function _abort (line 3433) | function _abort() {
  function _emscripten_memcpy_big (line 3436) | function _emscripten_memcpy_big(dest, src, num) {
  function getHeapMax (line 3439) | function getHeapMax() {
  function emscripten_realloc_buffer (line 3442) | function emscripten_realloc_buffer(size) {
  function _emscripten_resize_heap (line 3449) | function _emscripten_resize_heap(requestedSize) {
  function getExecutableName (line 3476) | function getExecutableName() {
  function getEnvStrings (line 3479) | function getEnvStrings() {
  function writeAsciiToMemory (line 3509) | function writeAsciiToMemory(str, buffer, dontAddNull) {
  function _environ_get (line 3515) | function _environ_get(__environ, environ_buf) {
  function _environ_sizes_get (line 3525) | function _environ_sizes_get(penviron_count, penviron_buf_size) {
  function _proc_exit (line 3535) | function _proc_exit(code) {
  function exitJS (line 3543) | function exitJS(status, implicit) {
  function _fd_close (line 3548) | function _fd_close(fd) {
  function doReadv (line 3558) | function doReadv(stream, iov, iovcnt, offset) {
  function _fd_read (line 3571) | function _fd_read(fd, iov, iovcnt, pnum) {
  function convertI32PairToI53Checked (line 3582) | function convertI32PairToI53Checked(lo, hi) {
  function _fd_seek (line 3587) | function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
  function doWritev (line 3616) | function doWritev(stream, iov, iovcnt, offset) {
  function _fd_write (line 3628) | function _fd_write(fd, iov, iovcnt, pnum) {
  function __isLeapYear (line 3639) | function __isLeapYear(year) {
  function __arraySum (line 3642) | function __arraySum(array, index) {
  function __addDays (line 3649) | function __addDays(date, days) {
  function writeArrayToMemory (line 3673) | function writeArrayToMemory(array, buffer) {
  function _strftime (line 3676) | function _strftime(s, maxsize, format, tm) {
  function _strftime_l (line 3954) | function _strftime_l(s, maxsize, format, tm, loc) {
  function handleException (line 3957) | function handleException(e) {
  function allocateUTF8OnStack (line 3963) | function allocateUTF8OnStack(str) {
  function getCFunc (line 3969) | function getCFunc(ident) {
  function ccall (line 3973) | function ccall(ident, returnType, argTypes, args, opts) {
  function cwrap (line 4019) | function cwrap(ident, returnType, argTypes, opts) {
  function AsciiToString (line 4032) | function AsciiToString(ptr) {
  function callMain (line 4342) | function callMain(args) {
  function run (line 4361) | function run(args) {

FILE: src/IO/Downsample/emscripten-build/DownsampleLabelImage.js
  function locateFile (line 49) | function locateFile(path) {
  function logExceptionOnExit (line 56) | function logExceptionOnExit(e) {
  function assert (line 185) | function assert(condition, text) {
  function UTF8ArrayToString (line 192) | function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
  function UTF8ToString (line 230) | function UTF8ToString(ptr, maxBytesToRead) {
  function stringToUTF8Array (line 233) | function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
  function stringToUTF8 (line 266) | function stringToUTF8(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF8 (line 269) | function lengthBytesUTF8(str) {
  function updateGlobalBufferAndViews (line 295) | function updateGlobalBufferAndViews(buf) {
  function keepRuntimeAlive (line 313) | function keepRuntimeAlive() {
  function preRun (line 316) | function preRun() {
  function initRuntime (line 326) | function initRuntime() {
  function preMain (line 333) | function preMain() {
  function postRun (line 336) | function postRun() {
  function addOnPreRun (line 346) | function addOnPreRun(cb) {
  function addOnInit (line 349) | function addOnInit(cb) {
  function addOnPostRun (line 352) | function addOnPostRun(cb) {
  function getUniqueRunDependency (line 358) | function getUniqueRunDependency(id) {
  function addRunDependency (line 361) | function addRunDependency(id) {
  function removeRunDependency (line 367) | function removeRunDependency(id) {
  function abort (line 384) | function abort(what) {
  function isDataURI (line 398) | function isDataURI(filename) {
  function isFileURI (line 401) | function isFileURI(filename) {
  function getBinary (line 414) | function getBinary(file) {
  function getBinaryPromise (line 427) | function getBinaryPromise() {
  function createWasm (line 460) | function createWasm() {
  function ExitStatus (line 525) | function ExitStatus(status) {
  function callRuntimeCallbacks (line 530) | function callRuntimeCallbacks(callbacks) {
  function ExceptionInfo (line 535) | function ExceptionInfo(excPtr) {
  function ___cxa_throw (line 602) | function ___cxa_throw(ptr, type, destructor) {
  function setErrNo (line 609) | function setErrNo(value) {
  function getRandomDevice (line 683) | function getRandomDevice() {
  function trim (line 724) | function trim(arr) {
  function intArrayFromString (line 754) | function intArrayFromString(stringy, dontAddNull, length) {
  function mmapAlloc (line 902) | function mmapAlloc(size) {
  function asyncLoad (line 1228) | function asyncLoad(url, onload, onerror, noRunDep) {
  function doCallback (line 1879) | function doCallback(errCode) {
  function done (line 1883) | function done(errCode) {
  function LazyUint8Array (line 2815) | function LazyUint8Array() {
  function writeChunks (line 2954) | function writeChunks(stream, buffer, offset, length, position) {
  function processData (line 2999) | function processData(byteArray) {
  function finish (line 3066) | function finish() {
  function finish (line 3110) | function finish() {
  function ___syscall_fcntl64 (line 3293) | function ___syscall_fcntl64(fd, cmd, varargs) {
  function ___syscall_getcwd (line 3341) | function ___syscall_getcwd(buf, size) {
  function ___syscall_ioctl (line 3354) | function ___syscall_ioctl(fd, op, varargs) {
  function ___syscall_openat (line 3403) | function ___syscall_openat(dirfd, path, flags, varargs) {
  function ___syscall_readlinkat (line 3415) | function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
  function ___syscall_stat64 (line 3431) | function ___syscall_stat64(path, buf) {
  function _abort (line 3440) | function _abort() {
  function _emscripten_memcpy_big (line 3443) | function _emscripten_memcpy_big(dest, src, num) {
  function getHeapMax (line 3446) | function getHeapMax() {
  function emscripten_realloc_buffer (line 3449) | function emscripten_realloc_buffer(size) {
  function _emscripten_resize_heap (line 3456) | function _emscripten_resize_heap(requestedSize) {
  function getExecutableName (line 3483) | function getExecutableName() {
  function getEnvStrings (line 3486) | function getEnvStrings() {
  function writeAsciiToMemory (line 3516) | function writeAsciiToMemory(str, buffer, dontAddNull) {
  function _environ_get (line 3522) | function _environ_get(__environ, environ_buf) {
  function _environ_sizes_get (line 3532) | function _environ_sizes_get(penviron_count, penviron_buf_size) {
  function _proc_exit (line 3542) | function _proc_exit(code) {
  function exitJS (line 3550) | function exitJS(status, implicit) {
  function _fd_close (line 3555) | function _fd_close(fd) {
  function doReadv (line 3565) | function doReadv(stream, iov, iovcnt, offset) {
  function _fd_read (line 3578) | function _fd_read(fd, iov, iovcnt, pnum) {
  function convertI32PairToI53Checked (line 3589) | function convertI32PairToI53Checked(lo, hi) {
  function _fd_seek (line 3594) | function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
  function doWritev (line 3623) | function doWritev(stream, iov, iovcnt, offset) {
  function _fd_write (line 3635) | function _fd_write(fd, iov, iovcnt, pnum) {
  function __isLeapYear (line 3646) | function __isLeapYear(year) {
  function __arraySum (line 3649) | function __arraySum(array, index) {
  function __addDays (line 3656) | function __addDays(date, days) {
  function writeArrayToMemory (line 3680) | function writeArrayToMemory(array, buffer) {
  function _strftime (line 3683) | function _strftime(s, maxsize, format, tm) {
  function _strftime_l (line 3961) | function _strftime_l(s, maxsize, format, tm, loc) {
  function handleException (line 3964) | function handleException(e) {
  function allocateUTF8OnStack (line 3970) | function allocateUTF8OnStack(str) {
  function getCFunc (line 3976) | function getCFunc(ident) {
  function ccall (line 3980) | function ccall(ident, returnType, argTypes, args, opts) {
  function cwrap (line 4026) | function cwrap(ident, returnType, argTypes, opts) {
  function AsciiToString (line 4039) | function AsciiToString(ptr) {
  function callMain (line 4349) | function callMain(args) {
  function run (line 4368) | function run(args) {

FILE: src/IO/Downsample/emscripten-build/DownsampleLabelImage.umd.js
  function locateFile (line 52) | function locateFile(path) {
  function logExceptionOnExit (line 59) | function logExceptionOnExit(e) {
  function assert (line 184) | function assert(condition, text) {
  function UTF8ArrayToString (line 191) | function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
  function UTF8ToString (line 229) | function UTF8ToString(ptr, maxBytesToRead) {
  function stringToUTF8Array (line 232) | function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
  function stringToUTF8 (line 265) | function stringToUTF8(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF8 (line 268) | function lengthBytesUTF8(str) {
  function updateGlobalBufferAndViews (line 294) | function updateGlobalBufferAndViews(buf) {
  function keepRuntimeAlive (line 312) | function keepRuntimeAlive() {
  function preRun (line 315) | function preRun() {
  function initRuntime (line 325) | function initRuntime() {
  function preMain (line 332) | function preMain() {
  function postRun (line 335) | function postRun() {
  function addOnPreRun (line 345) | function addOnPreRun(cb) {
  function addOnInit (line 348) | function addOnInit(cb) {
  function addOnPostRun (line 351) | function addOnPostRun(cb) {
  function getUniqueRunDependency (line 357) | function getUniqueRunDependency(id) {
  function addRunDependency (line 360) | function addRunDependency(id) {
  function removeRunDependency (line 366) | function removeRunDependency(id) {
  function abort (line 383) | function abort(what) {
  function isDataURI (line 397) | function isDataURI(filename) {
  function isFileURI (line 400) | function isFileURI(filename) {
  function getBinary (line 408) | function getBinary(file) {
  function getBinaryPromise (line 421) | function getBinaryPromise() {
  function createWasm (line 454) | function createWasm() {
  function ExitStatus (line 519) | function ExitStatus(status) {
  function callRuntimeCallbacks (line 524) | function callRuntimeCallbacks(callbacks) {
  function ExceptionInfo (line 529) | function ExceptionInfo(excPtr) {
  function ___cxa_throw (line 596) | function ___cxa_throw(ptr, type, destructor) {
  function setErrNo (line 603) | function setErrNo(value) {
  function getRandomDevice (line 677) | function getRandomDevice() {
  function trim (line 718) | function trim(arr) {
  function intArrayFromString (line 748) | function intArrayFromString(stringy, dontAddNull, length) {
  function mmapAlloc (line 896) | function mmapAlloc(size) {
  function asyncLoad (line 1222) | function asyncLoad(url, onload, onerror, noRunDep) {
  function doCallback (line 1873) | function doCallback(errCode) {
  function done (line 1877) | function done(errCode) {
  function LazyUint8Array (line 2809) | function LazyUint8Array() {
  function writeChunks (line 2948) | function writeChunks(stream, buffer, offset, length, position) {
  function processData (line 2993) | function processData(byteArray) {
  function finish (line 3060) | function finish() {
  function finish (line 3104) | function finish() {
  function ___syscall_fcntl64 (line 3287) | function ___syscall_fcntl64(fd, cmd, varargs) {
  function ___syscall_getcwd (line 3335) | function ___syscall_getcwd(buf, size) {
  function ___syscall_ioctl (line 3348) | function ___syscall_ioctl(fd, op, varargs) {
  function ___syscall_openat (line 3397) | function ___syscall_openat(dirfd, path, flags, varargs) {
  function ___syscall_readlinkat (line 3409) | function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
  function ___syscall_stat64 (line 3425) | function ___syscall_stat64(path, buf) {
  function _abort (line 3434) | function _abort() {
  function _emscripten_memcpy_big (line 3437) | function _emscripten_memcpy_big(dest, src, num) {
  function getHeapMax (line 3440) | function getHeapMax() {
  function emscripten_realloc_buffer (line 3443) | function emscripten_realloc_buffer(size) {
  function _emscripten_resize_heap (line 3450) | function _emscripten_resize_heap(requestedSize) {
  function getExecutableName (line 3477) | function getExecutableName() {
  function getEnvStrings (line 3480) | function getEnvStrings() {
  function writeAsciiToMemory (line 3510) | function writeAsciiToMemory(str, buffer, dontAddNull) {
  function _environ_get (line 3516) | function _environ_get(__environ, environ_buf) {
  function _environ_sizes_get (line 3526) | function _environ_sizes_get(penviron_count, penviron_buf_size) {
  function _proc_exit (line 3536) | function _proc_exit(code) {
  function exitJS (line 3544) | function exitJS(status, implicit) {
  function _fd_close (line 3549) | function _fd_close(fd) {
  function doReadv (line 3559) | function doReadv(stream, iov, iovcnt, offset) {
  function _fd_read (line 3572) | function _fd_read(fd, iov, iovcnt, pnum) {
  function convertI32PairToI53Checked (line 3583) | function convertI32PairToI53Checked(lo, hi) {
  function _fd_seek (line 3588) | function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
  function doWritev (line 3617) | function doWritev(stream, iov, iovcnt, offset) {
  function _fd_write (line 3629) | function _fd_write(fd, iov, iovcnt, pnum) {
  function __isLeapYear (line 3640) | function __isLeapYear(year) {
  function __arraySum (line 3643) | function __arraySum(array, index) {
  function __addDays (line 3650) | function __addDays(date, days) {
  function writeArrayToMemory (line 3674) | function writeArrayToMemory(array, buffer) {
  function _strftime (line 3677) | function _strftime(s, maxsize, format, tm) {
  function _strftime_l (line 3955) | function _strftime_l(s, maxsize, format, tm, loc) {
  function handleException (line 3958) | function handleException(e) {
  function allocateUTF8OnStack (line 3964) | function allocateUTF8OnStack(str) {
  function getCFunc (line 3970) | function getCFunc(ident) {
  function ccall (line 3974) | function ccall(ident, returnType, argTypes, args, opts) {
  function cwrap (line 4020) | function cwrap(ident, returnType, argTypes, opts) {
  function AsciiToString (line 4033) | function AsciiToString(ptr) {
  function callMain (line 4343) | function callMain(args) {
  function run (line 4362) | function run(args) {

FILE: src/IO/HttpStore.js
  class HttpStore (line 3) | class HttpStore {
    method constructor (line 4) | constructor(url) {
    method getItem (line 8) | async getItem(item) {

FILE: src/IO/ImageDataFromChunks.worker.js
  constant IS_SYSTEM_LITTLE_ENDIAN (line 25) | const IS_SYSTEM_LITTLE_ENDIAN = (function() {

FILE: src/IO/InMemoryMultiscaleSpatialImage.js
  class Coords (line 22) | class Coords {
    method constructor (line 23) | constructor(image, dims) {
    method get (line 48) | async get(coord) {
    method has (line 52) | has(coord) {
  function chunkImage (line 57) | async function chunkImage(image, chunkSize) {
  class InMemoryMultiscaleSpatialImage (line 217) | class InMemoryMultiscaleSpatialImage extends MultiscaleSpatialImage {
    method buildPyramid (line 218) | static async buildPyramid(
    method constructor (line 296) | constructor(pyramid, scaleInfo, imageType, name = 'Image') {
    method getChunksImpl (line 311) | async getChunksImpl(scale, cxyztArray) {

FILE: src/IO/MultiscaleSpatialImage.js
  function inflate (line 36) | function inflate(bounds, delta) {
  function isContained (line 126) | function isContained(benchmarkBounds, testedBounds) {
  function findImageInBounds (line 135) | function findImageInBounds({ cache, scale, bounds }) {
  function storeImage (line 142) | function storeImage({ cache, scale, bounds, image }) {
  class MultiscaleSpatialImage (line 146) | class MultiscaleSpatialImage {
    method constructor (line 150) | constructor(scaleInfo, imageType, name = 'Image') {
    method coarsestScale (line 160) | get coarsestScale() {
    method scaleOrigin (line 164) | async scaleOrigin(scale) {
    method scaleSpacing (line 182) | async scaleSpacing(scale) {
    method direction (line 200) | get direction() {
    method getChunks (line 234) | async getChunks(scale, cxyztArray) {
    method getChunksImpl (line 238) | async getChunksImpl(/* scale, cxyztArray */) {
    method buildImage (line 242) | async buildImage(scale, indexBounds) {
    method scaleIndexToWorld (line 323) | async scaleIndexToWorld(requestedScale) {
    method getImage (line 343) | async getImage(requestedScale, worldBounds = []) {
    method getIndexBounds (line 368) | getIndexBounds(requestedScale) {
    method getWorldBounds (line 377) | getWorldBounds(requestedScale) {

FILE: src/IO/ResampleLabelImage/ResampleLabelImage.cxx
  function ResampleLabelImage (line 48) | int ResampleLabelImage(itk::wasm::Pipeline &pipeline, itk::wasm::InputIm...
  class PipelineFunctor (line 159) | class PipelineFunctor
  function main (line 176) | int main(int argc, char *argv[])

FILE: src/IO/ResampleLabelImage/emscripten-build/ResampleLabelImage.js
  function locateFile (line 49) | function locateFile(path) {
  function logExceptionOnExit (line 56) | function logExceptionOnExit(e) {
  function assert (line 185) | function assert(condition, text) {
  function UTF8ArrayToString (line 192) | function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
  function UTF8ToString (line 230) | function UTF8ToString(ptr, maxBytesToRead) {
  function stringToUTF8Array (line 233) | function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
  function stringToUTF8 (line 266) | function stringToUTF8(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF8 (line 269) | function lengthBytesUTF8(str) {
  function updateGlobalBufferAndViews (line 295) | function updateGlobalBufferAndViews(buf) {
  function keepRuntimeAlive (line 313) | function keepRuntimeAlive() {
  function preRun (line 316) | function preRun() {
  function initRuntime (line 326) | function initRuntime() {
  function preMain (line 333) | function preMain() {
  function postRun (line 336) | function postRun() {
  function addOnPreRun (line 346) | function addOnPreRun(cb) {
  function addOnInit (line 349) | function addOnInit(cb) {
  function addOnPostRun (line 352) | function addOnPostRun(cb) {
  function getUniqueRunDependency (line 358) | function getUniqueRunDependency(id) {
  function addRunDependency (line 361) | function addRunDependency(id) {
  function removeRunDependency (line 367) | function removeRunDependency(id) {
  function abort (line 384) | function abort(what) {
  function isDataURI (line 398) | function isDataURI(filename) {
  function isFileURI (line 401) | function isFileURI(filename) {
  function getBinary (line 413) | function getBinary(file) {
  function getBinaryPromise (line 426) | function getBinaryPromise() {
  function createWasm (line 459) | function createWasm() {
  function ExitStatus (line 524) | function ExitStatus(status) {
  function callRuntimeCallbacks (line 529) | function callRuntimeCallbacks(callbacks) {
  function ExceptionInfo (line 534) | function ExceptionInfo(excPtr) {
  function ___cxa_throw (line 601) | function ___cxa_throw(ptr, type, destructor) {
  function setErrNo (line 608) | function setErrNo(value) {
  function getRandomDevice (line 682) | function getRandomDevice() {
  function trim (line 723) | function trim(arr) {
  function intArrayFromString (line 753) | function intArrayFromString(stringy, dontAddNull, length) {
  function mmapAlloc (line 901) | function mmapAlloc(size) {
  function asyncLoad (line 1227) | function asyncLoad(url, onload, onerror, noRunDep) {
  function doCallback (line 1878) | function doCallback(errCode) {
  function done (line 1882) | function done(errCode) {
  function LazyUint8Array (line 2814) | function LazyUint8Array() {
  function writeChunks (line 2953) | function writeChunks(stream, buffer, offset, length, position) {
  function processData (line 2998) | function processData(byteArray) {
  function finish (line 3065) | function finish() {
  function finish (line 3109) | function finish() {
  function ___syscall_fcntl64 (line 3292) | function ___syscall_fcntl64(fd, cmd, varargs) {
  function ___syscall_getcwd (line 3340) | function ___syscall_getcwd(buf, size) {
  function ___syscall_ioctl (line 3353) | function ___syscall_ioctl(fd, op, varargs) {
  function ___syscall_openat (line 3402) | function ___syscall_openat(dirfd, path, flags, varargs) {
  function ___syscall_readlinkat (line 3414) | function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
  function ___syscall_stat64 (line 3430) | function ___syscall_stat64(path, buf) {
  function _abort (line 3439) | function _abort() {
  function _emscripten_memcpy_big (line 3442) | function _emscripten_memcpy_big(dest, src, num) {
  function getHeapMax (line 3445) | function getHeapMax() {
  function emscripten_realloc_buffer (line 3448) | function emscripten_realloc_buffer(size) {
  function _emscripten_resize_heap (line 3455) | function _emscripten_resize_heap(requestedSize) {
  function getExecutableName (line 3482) | function getExecutableName() {
  function getEnvStrings (line 3485) | function getEnvStrings() {
  function writeAsciiToMemory (line 3515) | function writeAsciiToMemory(str, buffer, dontAddNull) {
  function _environ_get (line 3521) | function _environ_get(__environ, environ_buf) {
  function _environ_sizes_get (line 3531) | function _environ_sizes_get(penviron_count, penviron_buf_size) {
  function _proc_exit (line 3541) | function _proc_exit(code) {
  function exitJS (line 3549) | function exitJS(status, implicit) {
  function _fd_close (line 3554) | function _fd_close(fd) {
  function doReadv (line 3564) | function doReadv(stream, iov, iovcnt, offset) {
  function _fd_read (line 3577) | function _fd_read(fd, iov, iovcnt, pnum) {
  function convertI32PairToI53Checked (line 3588) | function convertI32PairToI53Checked(lo, hi) {
  function _fd_seek (line 3593) | function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
  function doWritev (line 3622) | function doWritev(stream, iov, iovcnt, offset) {
  function _fd_write (line 3634) | function _fd_write(fd, iov, iovcnt, pnum) {
  function __isLeapYear (line 3645) | function __isLeapYear(year) {
  function __arraySum (line 3648) | function __arraySum(array, index) {
  function __addDays (line 3655) | function __addDays(date, days) {
  function writeArrayToMemory (line 3679) | function writeArrayToMemory(array, buffer) {
  function _strftime (line 3682) | function _strftime(s, maxsize, format, tm) {
  function _strftime_l (line 3960) | function _strftime_l(s, maxsize, format, tm, loc) {
  function handleException (line 3963) | function handleException(e) {
  function allocateUTF8OnStack (line 3969) | function allocateUTF8OnStack(str) {
  function getCFunc (line 3975) | function getCFunc(ident) {
  function ccall (line 3979) | function ccall(ident, returnType, argTypes, args, opts) {
  function cwrap (line 4025) | function cwrap(ident, returnType, argTypes, opts) {
  function AsciiToString (line 4038) | function AsciiToString(ptr) {
  function callMain (line 4348) | function callMain(args) {
  function run (line 4367) | function run(args) {

FILE: src/IO/ResampleLabelImage/emscripten-build/ResampleLabelImage.umd.js
  function locateFile (line 52) | function locateFile(path) {
  function logExceptionOnExit (line 59) | function logExceptionOnExit(e) {
  function assert (line 184) | function assert(condition, text) {
  function UTF8ArrayToString (line 191) | function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
  function UTF8ToString (line 229) | function UTF8ToString(ptr, maxBytesToRead) {
  function stringToUTF8Array (line 232) | function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
  function stringToUTF8 (line 265) | function stringToUTF8(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF8 (line 268) | function lengthBytesUTF8(str) {
  function updateGlobalBufferAndViews (line 294) | function updateGlobalBufferAndViews(buf) {
  function keepRuntimeAlive (line 312) | function keepRuntimeAlive() {
  function preRun (line 315) | function preRun() {
  function initRuntime (line 325) | function initRuntime() {
  function preMain (line 332) | function preMain() {
  function postRun (line 335) | function postRun() {
  function addOnPreRun (line 345) | function addOnPreRun(cb) {
  function addOnInit (line 348) | function addOnInit(cb) {
  function addOnPostRun (line 351) | function addOnPostRun(cb) {
  function getUniqueRunDependency (line 357) | function getUniqueRunDependency(id) {
  function addRunDependency (line 360) | function addRunDependency(id) {
  function removeRunDependency (line 366) | function removeRunDependency(id) {
  function abort (line 383) | function abort(what) {
  function isDataURI (line 397) | function isDataURI(filename) {
  function isFileURI (line 400) | function isFileURI(filename) {
  function getBinary (line 408) | function getBinary(file) {
  function getBinaryPromise (line 421) | function getBinaryPromise() {
  function createWasm (line 454) | function createWasm() {
  function ExitStatus (line 519) | function ExitStatus(status) {
  function callRuntimeCallbacks (line 524) | function callRuntimeCallbacks(callbacks) {
  function ExceptionInfo (line 529) | function ExceptionInfo(excPtr) {
  function ___cxa_throw (line 596) | function ___cxa_throw(ptr, type, destructor) {
  function setErrNo (line 603) | function setErrNo(value) {
  function getRandomDevice (line 677) | function getRandomDevice() {
  function trim (line 718) | function trim(arr) {
  function intArrayFromString (line 748) | function intArrayFromString(stringy, dontAddNull, length) {
  function mmapAlloc (line 896) | function mmapAlloc(size) {
  function asyncLoad (line 1222) | function asyncLoad(url, onload, onerror, noRunDep) {
  function doCallback (line 1873) | function doCallback(errCode) {
  function done (line 1877) | function done(errCode) {
  function LazyUint8Array (line 2809) | function LazyUint8Array() {
  function writeChunks (line 2948) | function writeChunks(stream, buffer, offset, length, position) {
  function processData (line 2993) | function processData(byteArray) {
  function finish (line 3060) | function finish() {
  function finish (line 3104) | function finish() {
  function ___syscall_fcntl64 (line 3287) | function ___syscall_fcntl64(fd, cmd, varargs) {
  function ___syscall_getcwd (line 3335) | function ___syscall_getcwd(buf, size) {
  function ___syscall_ioctl (line 3348) | function ___syscall_ioctl(fd, op, varargs) {
  function ___syscall_openat (line 3397) | function ___syscall_openat(dirfd, path, flags, varargs) {
  function ___syscall_readlinkat (line 3409) | function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
  function ___syscall_stat64 (line 3425) | function ___syscall_stat64(path, buf) {
  function _abort (line 3434) | function _abort() {
  function _emscripten_memcpy_big (line 3437) | function _emscripten_memcpy_big(dest, src, num) {
  function getHeapMax (line 3440) | function getHeapMax() {
  function emscripten_realloc_buffer (line 3443) | function emscripten_realloc_buffer(size) {
  function _emscripten_resize_heap (line 3450) | function _emscripten_resize_heap(requestedSize) {
  function getExecutableName (line 3477) | function getExecutableName() {
  function getEnvStrings (line 3480) | function getEnvStrings() {
  function writeAsciiToMemory (line 3510) | function writeAsciiToMemory(str, buffer, dontAddNull) {
  function _environ_get (line 3516) | function _environ_get(__environ, environ_buf) {
  function _environ_sizes_get (line 3526) | function _environ_sizes_get(penviron_count, penviron_buf_size) {
  function _proc_exit (line 3536) | function _proc_exit(code) {
  function exitJS (line 3544) | function exitJS(status, implicit) {
  function _fd_close (line 3549) | function _fd_close(fd) {
  function doReadv (line 3559) | function doReadv(stream, iov, iovcnt, offset) {
  function _fd_read (line 3572) | function _fd_read(fd, iov, iovcnt, pnum) {
  function convertI32PairToI53Checked (line 3583) | function convertI32PairToI53Checked(lo, hi) {
  function _fd_seek (line 3588) | function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
  function doWritev (line 3617) | function doWritev(stream, iov, iovcnt, offset) {
  function _fd_write (line 3629) | function _fd_write(fd, iov, iovcnt, pnum) {
  function __isLeapYear (line 3640) | function __isLeapYear(year) {
  function __arraySum (line 3643) | function __arraySum(array, index) {
  function __addDays (line 3650) | function __addDays(date, days) {
  function writeArrayToMemory (line 3674) | function writeArrayToMemory(array, buffer) {
  function _strftime (line 3677) | function _strftime(s, maxsize, format, tm) {
  function _strftime_l (line 3955) | function _strftime_l(s, maxsize, format, tm, loc) {
  function handleException (line 3958) | function handleException(e) {
  function allocateUTF8OnStack (line 3964) | function allocateUTF8OnStack(str) {
  function getCFunc (line 3970) | function getCFunc(ident) {
  function ccall (line 3974) | function ccall(ident, returnType, argTypes, args, opts) {
  function cwrap (line 4020) | function cwrap(ident, returnType, argTypes, opts) {
  function AsciiToString (line 4033) | function AsciiToString(ptr) {
  function callMain (line 4343) | function callMain(args) {
  function run (line 4362) | function run(args) {

FILE: src/IO/ResampleLabelImage/resampleLabelImage.js
  function resampleLabelImage (line 4) | async function resampleLabelImage(image, labelImage) {
  function compareImageSpaces (line 20) | function compareImageSpaces(imageA, imageB) {

FILE: src/IO/ZarrMultiscaleSpatialImage.js
  constant TCZYX (line 15) | const TCZYX = Object.freeze(['t', 'c', 'z', 'y', 'x'])
  method get (line 91) | get(dim) {
  method has (line 105) | has(dim) {
  class ZarrMultiscaleSpatialImage (line 216) | class ZarrMultiscaleSpatialImage extends MultiscaleSpatialImage {
    method fromStore (line 218) | static async fromStore(store, maxConcurrency) {
    method fromUrl (line 229) | static async fromUrl(url, maxConcurrency) {
    method constructor (line 237) | constructor(zarrStoreParser, scaleInfo, imageType, maxConcurrency) {
    method getChunksImpl (line 248) | async getChunksImpl(scale, cxyztArray) {

FILE: src/IO/ZarrStoreParser.js
  class ZarrStore (line 6) | class ZarrStore {
    method constructor (line 7) | constructor(store) {
    method toJson (line 12) | toJson(data) {
    method getItem (line 16) | async getItem(item) {

FILE: src/IO/dimensionUtils.js
  constant CXYZT (line 1) | const CXYZT = Object.freeze(['c', 'x', 'y', 'z', 't']) // viewer indexing

FILE: src/IO/fetchBinaryContent.js
  function fetchBinaryContent (line 4) | async function fetchBinaryContent(urlObj, progressCallback) {

FILE: src/IO/itkWasmUtils.js
  function runWasm (line 9) | async function runWasm({

FILE: src/IO/ndarrayToItkImage.js
  function ndarrayToItkImage (line 50) | function ndarrayToItkImage(array) {

FILE: src/IO/ndarrayToPointSet.js
  function ndarrayToPointSet (line 14) | function ndarrayToPointSet(array) {

FILE: src/IO/processFiles.js
  constant MAX_LABELS_IN_LABEL_IMAGE (line 20) | const MAX_LABELS_IN_LABEL_IMAGE = 64

FILE: src/IO/toMultiscaleSpatialImage.js
  function itkImageToInMemoryMultiscaleSpatialImage (line 11) | async function itkImageToInMemoryMultiscaleSpatialImage(image, isLabelIm...
  function toMultiscaleSpatialImage (line 39) | async function toMultiscaleSpatialImage(

FILE: src/ImJoyPluginAPI.js
  class ImJoyPluginAPI (line 1) | class ImJoyPluginAPI {
    method setup (line 2) | async setup() {
    method run (line 9) | async run(ctx) {
    method setPointSets (line 41) | async setPointSets(pointSets) {
    method addPointSet (line 58) | addPointSet(pointSet) {
    method captureImage (line 63) | async captureImage() {
    method setImage (line 67) | async setImage(image, name) {
    method getImage (line 79) | getImage(name) {
    method setLabelImage (line 83) | async setLabelImage(labelImage) {
    method getLabelImage (line 94) | getLabelImage() {
    method registerEventListener (line 98) | registerEventListener(event, callback) {
    method getConfig (line 102) | getConfig() {
    method setRenderingViewContainerStyle (line 106) | setRenderingViewContainerStyle(containerStyle) {
    method getRenderingViewStyle (line 109) | getRenderingViewStyle() {
    method setBackgroundColor (line 113) | setBackgroundColor(bgColor) {
    method getBackgroundColor (line 116) | getBackgroundColor() {
    method setUnits (line 120) | setUnits(units) {
    method getUnits (line 123) | getUnits() {
    method setUICollapsed (line 127) | setUICollapsed(collapsed) {
    method getUICollapsed (line 130) | getUICollapsed() {
    method setRotateEnabled (line 134) | setRotateEnabled(enabled) {
    method getRotateEnabled (line 137) | getRotateEnabled() {
    method setAnnotationsEnabled (line 141) | setAnnotationsEnabled(enabled) {
    method getAnnotationsEnabled (line 144) | getAnnotationsEnabled() {
    method setAxesEnabled (line 148) | setAxesEnabled(enabled) {
    method getAxesEnabled (line 151) | getAxesEnabled() {
    method setXSlice (line 155) | setXSlice(position) {
    method getXSlice (line 159) | getXSlice() {
    method setYSlice (line 163) | setYSlice(position) {
    method getYSlice (line 167) | getYSlice() {
    method setZSlice (line 171) | setZSlice(position) {
    method getZSlice (line 174) | getZSlice() {
    method setViewMode (line 178) | setViewMode(mode) {
    method getViewMode (line 181) | getViewMode() {
    method getLayerNames (line 185) | getLayerNames() {
    method setLayerVisibility (line 189) | setLayerVisibility(visible, name) {
    method getLayerVisibility (line 193) | getLayerVisibility(name) {
    method selectLayer (line 197) | selectLayer(name) {
    method setImageComponentVisibility (line 201) | setImageComponentVisibility(visibility, component, name) {
    method getImageComponentVisibility (line 205) | getImageComponentVisibility(component, name) {
    method setImageInterpolationEnabled (line 209) | setImageInterpolationEnabled(enabled) {
    method getImageInterpolationEnabled (line 212) | getImageInterpolationEnabled() {
    method setImageColorRange (line 216) | setImageColorRange(range, component, name) {
    method getImageColorRange (line 220) | getImageColorRange(component, name) {
    method setImageColorRangeMin (line 224) | setImageColorRangeMin(min, component, name) {
    method setImageColorRangeMax (line 228) | setImageColorRangeMax(max, component, name) {
    method setImageColorRangeBounds (line 232) | setImageColorRangeBounds(bounds, component, name) {
    method getImageColorRangeBounds (line 236) | getImageColorRangeBounds(component, name) {
    method setImageColorMap (line 240) | setImageColorMap(colorMap, component, name) {
    method getImageColorMap (line 244) | getImageColorMap(component, name) {
    method setImagePiecewiseFunctionPoints (line 248) | setImagePiecewiseFunctionPoints(points, component, name) {
    method getImagePiecewiseFunctionPoints (line 252) | getImagePiecewiseFunctionPoints(component, name) {
    method setImageShadowEnabled (line 256) | setImageShadowEnabled(shadow, name) {
    method getImageShadowEnabled (line 260) | getImageShadowEnabled(name) {
    method setImageGradientOpacity (line 264) | setImageGradientOpacity(opacity, name) {
    method getImageGradientOpacity (line 268) | getImageGradientOpacity(name) {
    method setImageGradientOpacityScale (line 272) | setImageGradientOpacityScale(scale, name) {
    method getImageGradientOpacityScale (line 276) | getImageGradientOpacityScale(name) {
    method setImageVolumeSampleDistance (line 280) | setImageVolumeSampleDistance(distance, name) {
    method getImageVolumeSampleDistance (line 284) | getImageVolumeSampleDistance(name) {
    method setImageBlendMode (line 288) | setImageBlendMode(mode, name) {
    method getImageBlendMode (line 292) | getImageBlendMode(name) {
    method setLabelImageLookupTable (line 296) | setLabelImageLookupTable(lookupTable, name) {
    method getLabelImageLookupTable (line 300) | getLabelImageLookupTable(name) {
    method setLabelImageBlend (line 304) | setLabelImageBlend(blend, name) {
    method getLabelImageBlend (line 308) | getLabelImageBlend(name) {
    method setLabelImageLabelNames (line 312) | setLabelImageLabelNames(labelNames, name) {
    method getLabelImageLabelNames (line 316) | getLabelImageLabelNames(name) {
    method setLabelImageWeights (line 320) | setLabelImageWeights(weights, name) {
    method getLabelImageWeights (line 324) | getLabelImageWeights(name) {
    method setCroppingPlanesEnabled (line 328) | setCroppingPlanesEnabled(enabled) {
    method getCroppingPlanesEnabled (line 332) | getCroppingPlanesEnabled() {
    method setCroppingPlanes (line 336) | setCroppingPlanes(croppingPlanes) {
    method getCroppingPlanes (line 340) | getCroppingPlanes() {
    method setImageVolumeScatteringBlend (line 344) | setImageVolumeScatteringBlend(scatteringBlend, name) {
    method getImageVolumeScatteringBlend (line 348) | getImageVolumeScatteringBlend(name) {
    method setRpcMaxConcurrency (line 352) | setRpcMaxConcurrency(value) {
    method getRpcMaxConcurrency (line 356) | getRpcMaxConcurrency() {
    method compareImages (line 360) | compareImages(fixedImageName, movingImageName, options) {
    method getCompareImages (line 368) | getCompareImages(name) {
    method getLoadedScale (line 372) | getLoadedScale(scale) {
    method getCroppedImageWorldBounds (line 376) | getCroppedImageWorldBounds() {
    method getCroppedIndexBounds (line 380) | async getCroppedIndexBounds(scale) {

FILE: src/Rendering/Images/createImageRenderingActor.js
  constant LOW_FPS (line 144) | const LOW_FPS = 10.0
  constant HIGH_FPS (line 145) | const HIGH_FPS = 30.0
  function finestScaleOrScaleJustRight (line 148) | function finestScaleOrScaleJustRight(context) {
  function isFpsLow (line 159) | function isFpsLow(context) {
  function isLoadedScaleMostCoarse (line 163) | function isLoadedScaleMostCoarse(context) {
  constant KNOWN_ERRORS (line 449) | const KNOWN_ERRORS = [
  constant CHANGE_BOUNDS_EVENTS (line 621) | const CHANGE_BOUNDS_EVENTS = [

FILE: src/Rendering/Images/createImagesRenderingMachine.js
  function spawnImageRenderingActor (line 6) | function spawnImageRenderingActor(options) {
  function createImagesRenderingMachine (line 41) | function createImagesRenderingMachine(options, context) {

FILE: src/Rendering/Layers/createLayersRenderingMachine.js
  function createLayersRenderingMachine (line 3) | function createLayersRenderingMachine(options, context) {

FILE: src/Rendering/Main/backgroundIsDark.js
  function backgroundIsDark (line 1) | function backgroundIsDark(context) {

FILE: src/Rendering/Main/backgroundIsLight.js
  function backgroundIsLight (line 1) | function backgroundIsLight(context, event) {

FILE: src/Rendering/Main/createMainRenderingMachine.js
  function createMainRenderingMachine (line 27) | function createMainRenderingMachine(options, context) {

FILE: src/Rendering/VTKJS/Images/applyBlendMode.js
  function applyBlendMode (line 1) | function applyBlendMode(context, event) {

FILE: src/Rendering/VTKJS/Images/applyCinematicChanged.js
  function applyCinematicChanged (line 7) | function applyCinematicChanged(context, { actorContext }) {

FILE: src/Rendering/VTKJS/Images/applyColorMap.js
  constant COLOR_OFFSET (line 4) | const COLOR_OFFSET = 146
  function applyColorMap (line 6) | function applyColorMap(context, { data: { name, colorMap, component } }) {

FILE: src/Rendering/VTKJS/Images/applyColorRange.js
  function applyColorRange (line 1) | function applyColorRange(context, e) {

FILE: src/Rendering/VTKJS/Images/applyComponentVisibility.js
  function applyComponentVisibility (line 3) | function applyComponentVisibility(context, event) {

FILE: src/Rendering/VTKJS/Images/applyComponentWeights.js
  function applyComponentWeights (line 1) | function applyComponentWeights(context, name) {

FILE: src/Rendering/VTKJS/Images/applyGradientOpacity.js
  function applyGradientOpacity (line 1) | function applyGradientOpacity(context, event) {

FILE: src/Rendering/VTKJS/Images/applyIndependentComponents.js
  function applyIndependentComponents (line 1) | function applyIndependentComponents(context) {

FILE: src/Rendering/VTKJS/Images/applyLabelImageBlend.js
  function applyLabelImageBlend (line 3) | function applyLabelImageBlend(context, event) {

FILE: src/Rendering/VTKJS/Images/applyLabelImageWeights.js
  function applyLabelImageWeights (line 5) | function applyLabelImageWeights(context, event) {

FILE: src/Rendering/VTKJS/Images/applyLabelNames.js
  function applyLabelNames (line 1) | function applyLabelNames(context, event) {

FILE: src/Rendering/VTKJS/Images/applyLookupTable.js
  function applyLookupTable (line 6) | function applyLookupTable(context, event) {

FILE: src/Rendering/VTKJS/Images/applyPiecewiseFunction.js
  function applyPiecewiseFunction (line 1) | function applyPiecewiseFunction(context, event) {

FILE: src/Rendering/VTKJS/Images/applyRenderedImage.js
  constant ANNOTATION_DEFAULT (line 15) | const ANNOTATION_DEFAULT =
  constant ANNOTATION_CUSTOM_PREFIX (line 17) | const ANNOTATION_CUSTOM_PREFIX =
  constant ANNOTATION_CUSTOM_POSTFIX (line 19) | const ANNOTATION_CUSTOM_POSTFIX =
  function applyRenderedImage (line 63) | function applyRenderedImage(context, { data: { name } }) {

FILE: src/Rendering/VTKJS/Images/applySelectedLabel.js
  function applySelectedLabel (line 1) | function applySelectedLabel(context, event) {}

FILE: src/Rendering/VTKJS/Images/applyShadow.js
  function applyShadow (line 1) | function applyShadow(context, event) {

FILE: src/Rendering/VTKJS/Images/applyVolumeSampleDistance.js
  function applyVolumeSampleDistance (line 1) | function applyVolumeSampleDistance(context, event) {

FILE: src/Rendering/VTKJS/Images/createImageRenderer.js
  function createImageRenderer (line 9) | async function createImageRenderer(context) {

FILE: src/Rendering/VTKJS/Images/imagesRenderingMachineOptions.js
  constant EPSILON (line 33) | const EPSILON = 0.000001
  function downloadArray (line 70) | function downloadArray(content, filename = 'download') {

FILE: src/Rendering/VTKJS/Images/mapToColorFunctionRange.js
  function mapToColorFunctionRange (line 1) | function mapToColorFunctionRange(

FILE: src/Rendering/VTKJS/Images/mapToPiecewiseFunctionNodes.js
  function mapToPiecewiseFunctionNodes (line 7) | function mapToPiecewiseFunctionNodes(

FILE: src/Rendering/VTKJS/Images/selectImageLayer.js
  function selectImageLayer (line 1) | function selectImageLayer(context, event) {

FILE: src/Rendering/VTKJS/Images/toggleInterpolation.js
  function toggleInterpolation (line 1) | function toggleInterpolation(context, event) {

FILE: src/Rendering/VTKJS/Images/toggleLayerBBox.js
  function toggleLayerBBox (line 1) | function toggleLayerBBox(context, event) {

FILE: src/Rendering/VTKJS/Images/toggleLayerVisibility.js
  function toggleLayerVisibility (line 3) | function toggleLayerVisibility(context, event) {

FILE: src/Rendering/VTKJS/Images/transformLabelImageWeight.js
  function transformLabelImageWeight (line 1) | function transformLabelImageWeight(weight, minWeight, maxWeight) {

FILE: src/Rendering/VTKJS/Images/updateHistogram.js
  function makeHistogram (line 3) | function makeHistogram(actorContext, component) {
  function updateHistogram (line 23) | async function updateHistogram(context) {

FILE: src/Rendering/VTKJS/Images/updateLabelImagePiecewiseFunction.js
  function transformUserWeight (line 1) | function transformUserWeight(userWeight, minWeight, maxWeight) {
  function updateLabelImagePiecewiseFunction (line 5) | function updateLabelImagePiecewiseFunction(

FILE: src/Rendering/VTKJS/Images/updateRenderedImage.js
  constant RENDERED_VOXEL_MAX (line 9) | const RENDERED_VOXEL_MAX = 512 * 512 * 512 * 2
  constant RENDERED_IMAGE_BYTES_MAX (line 10) | const RENDERED_IMAGE_BYTES_MAX = RENDERED_VOXEL_MAX * 2 // 2 byte pixel ...
  function updateRenderedImage (line 56) | async function updateRenderedImage(context) {

FILE: src/Rendering/VTKJS/Main/applyCroppingPlanes.js
  function applyCroppingPlanes (line 4) | function applyCroppingPlanes(context, event) {

FILE: src/Rendering/VTKJS/Main/applySlicingPlanes.js
  function applySlicingPlanes (line 1) | function applySlicingPlanes(context, event) {

FILE: src/Rendering/VTKJS/Main/applyXSlice.js
  function applyXSlice (line 1) | function applyXSlice(context, event) {

FILE: src/Rendering/VTKJS/Main/applyYSlice.js
  function applyYSlice (line 1) | function applyYSlice(context, event) {

FILE: src/Rendering/VTKJS/Main/applyZSlice.js
  function applyZSlice (line 1) | function applyZSlice(context, event) {

FILE: src/Rendering/VTKJS/Main/computeRenderedBounds.js
  constant NDC_RANGE (line 3) | const NDC_RANGE = [0, 1]

FILE: src/Rendering/VTKJS/Main/createMainRenderer.js
  function createMainRenderer (line 8) | function createMainRenderer(context) {

FILE: src/Rendering/VTKJS/Main/croppingPlanes.js
  function getCropWidgetBounds (line 13) | function getCropWidgetBounds(context, bounds = []) {
  function getBoundsOfFullImage (line 25) | function getBoundsOfFullImage({ images, actorName }) {
  function createCropping (line 41) | function createCropping(context) {
  function updateCroppingParameters (line 157) | function updateCroppingParameters(context) {
  function updateCroppingParametersFromImage (line 221) | function updateCroppingParametersFromImage(context, image) {
  function addCroppingPlanes (line 229) | function addCroppingPlanes(context, actor) {
  function makeCroppable (line 237) | function makeCroppable(context, representationProxy) {

FILE: src/Rendering/VTKJS/Main/resetCamera.js
  function resetCamera (line 3) | function resetCamera(context) {

FILE: src/Rendering/VTKJS/Main/resetCroppingPlanes.js
  function resetCroppingPlanes (line 4) | function resetCroppingPlanes(context) {

FILE: src/Rendering/VTKJS/Main/setBackgroundColor.js
  function setBackgroundColor (line 1) | function setBackgroundColor(context, event) {

FILE: src/Rendering/VTKJS/Main/setUnits.js
  function setUnits (line 1) | function setUnits(context, event) {

FILE: src/Rendering/VTKJS/Main/takeScreenshot.js
  function takeScreenshot (line 1) | async function takeScreenshot(context) {

FILE: src/Rendering/VTKJS/Main/toggleAnnotations.js
  function toggleAnnotations (line 1) | function toggleAnnotations(context) {

FILE: src/Rendering/VTKJS/Main/toggleAxes.js
  function toggleAxes (line 1) | function toggleAxes(context) {

FILE: src/Rendering/VTKJS/Main/toggleCroppingPlanes.js
  function toggleCroppingPlanes (line 1) | function toggleCroppingPlanes(context) {

FILE: src/Rendering/VTKJS/Main/toggleRotate.js
  function toggleRotate (line 1) | function toggleRotate(context, event, actionMeta) {

FILE: src/Rendering/VTKJS/Main/updateFps.js
  function updateFps (line 3) | function updateFps(context, event) {

FILE: src/Rendering/VTKJS/Main/viewModeVolume.js
  function viewModeVolume (line 1) | function viewModeVolume(context) {

FILE: src/Rendering/VTKJS/Main/viewModeXPlane.js
  function viewModeXPlane (line 1) | function viewModeXPlane(context) {

FILE: src/Rendering/VTKJS/Main/viewModeYPlane.js
  function viewModeYPlane (line 1) | function viewModeYPlane(context) {

FILE: src/Rendering/VTKJS/Main/viewModeZPlane.js
  function viewModeZPlane (line 1) | function viewModeZPlane(context) {

FILE: src/Rendering/VTKJS/Widgets/DistanceWidget/DistanceWidget.js
  function DistanceWidget (line 10) | function DistanceWidget(publicAPI, model) {
  constant DEFAULT_VALUES (line 29) | const DEFAULT_VALUES = {}
  function extend (line 33) | function extend(publicAPI, model, initialValues = {}) {

FILE: src/Rendering/VTKJS/Widgets/DistanceWidget/state.js
  function generateState (line 3) | function generateState() {

FILE: src/Rendering/VTKJS/Widgets/HandlesInPixelsImageCroppingWidget.js
  function HandlesInPixelsImageCroppingWidget (line 12) | function HandlesInPixelsImageCroppingWidget(publicAPI, model) {
  constant DEFAULT_VALUES (line 45) | const DEFAULT_VALUES = {}
  function extend (line 49) | function extend(publicAPI, model, initialValues = {}) {

FILE: src/Rendering/VTKJS/Widgets/createWidgets.js
  function createWidgets (line 1) | function createWidgets(/*context, events*/) {}

FILE: src/Rendering/VTKJS/Widgets/toggleDistanceWidget.js
  function toggleDistanceWidget (line 5) | function toggleDistanceWidget(context) {

FILE: src/Rendering/VTKJS/cancelAnimation.js
  function cancelAnimation (line 1) | function cancelAnimation(context, event) {

FILE: src/Rendering/VTKJS/createRenderer.js
  function createRenderer (line 9) | function createRenderer(context) {

FILE: src/Rendering/VTKJS/numericalSort.js
  function numericalSort (line 1) | function numericalSort(eltA, eltB) {

FILE: src/Rendering/VTKJS/render.js
  function render (line 1) | function render(context) {

FILE: src/Rendering/VTKJS/requestAnimation.js
  function requestAnimation (line 1) | function requestAnimation(context, event) {

FILE: src/Rendering/VTKJS/vtk/AxesLabelsWidget/behavior.js
  function widgetBehavior (line 1) | function widgetBehavior(publicAPI, model) {

FILE: src/Rendering/VTKJS/vtk/AxesLabelsWidget/index.js
  function vtkAxesLabelsWidget (line 15) | function vtkAxesLabelsWidget(publicAPI, model) {
  constant DEFAULT_VALUES (line 56) | const DEFAULT_VALUES = {
  function extend (line 62) | function extend(publicAPI, model, initialValues = {}) {

FILE: src/Rendering/VTKJS/vtk/AxesLabelsWidget/state.js
  function generateState (line 3) | function generateState() {

FILE: src/Rendering/VTKJS/vtk/ItkVtkViewProxy.js
  constant VOLUME_DIFFUSE_DEFAULT (line 18) | const VOLUME_DIFFUSE_DEFAULT = 1.0
  constant VOLUME_AMBIENT_DEFAULT (line 19) | const VOLUME_AMBIENT_DEFAULT = 0.4
  function numberToText (line 26) | function numberToText(number, precision) {
  function ItkVtkViewProxy (line 38) | function ItkVtkViewProxy(publicAPI, model) {
  constant DEFAULT_VALUES (line 1118) | const DEFAULT_VALUES = {
  function extend (line 1147) | function extend(publicAPI, model, initialValues = {}) {

FILE: src/Rendering/VTKJS/vtk/OpenGLImageMapperFractional.js
  function OpenGLImageMapperFractional (line 13) | function OpenGLImageMapperFractional(publicAPI, model) {
  constant DEFAULT_VALUES (line 233) | const DEFAULT_VALUES = {}
  function extend (line 237) | function extend(publicAPI, model, initialValues = {}) {

FILE: src/Rendering/VTKJS/vtk/PointSetRepresentationProxy/index.js
  constant PROPERTIES_STATE (line 9) | const PROPERTIES_STATE = {}
  constant PROPERTIES_DEFAULT (line 11) | const PROPERTIES_DEFAULT = {}
  function vtkPointSetRepresentationProxy (line 17) | function vtkPointSetRepresentationProxy(publicAPI, model) {
  constant DEFAULT_VALUES (line 177) | const DEFAULT_VALUES = {
  function extend (line 191) | function extend(publicAPI, model, initialValues = {}) {

FILE: src/Rendering/VTKJS/vtk/SVGMarkerTextRepresentation/index.js
  function vtkSVGMarkerTextRepresentation (line 10) | function vtkSVGMarkerTextRepresentation(publicAPI, model) {
  constant DEFAULT_VALUES (line 67) | const DEFAULT_VALUES = {
  function extend (line 82) | function extend(publicAPI, model, initialValues = {}) {

FILE: src/Rendering/VTKJS/vtk/SVGRepresentation/index.js
  constant SVG_XMLNS (line 10) | const SVG_XMLNS = 'http://www.w3.org/2000/svg'
  function createSvgElement (line 14) | function createSvgElement(tag) {
  function createSvgDomElement (line 39) | function createSvgDomElement(tag) {
  function defer (line 45) | function defer() {
  function vtkSVGRepresentation (line 63) | function vtkSVGRepresentation(publicAPI, model) {
  constant DEFAULT_VALUES (line 156) | const DEFAULT_VALUES = {
  function extend (line 162) | function extend(publicAPI, model, initialValues = {}) {

FILE: src/Rendering/VTKJS/vtk/SliceOutlineFilter/index.js
  constant BOUNDS_MAP (line 9) | const BOUNDS_MAP = [
  constant LINE_ARRAY (line 21) | const LINE_ARRAY = [
  function vtkSliceOutlineFilter (line 40) | function vtkSliceOutlineFilter(publicAPI, model) {
  constant DEFAULT_VALUES (line 100) | const DEFAULT_VALUES = {}
  function extend (line 104) | function extend(publicAPI, model, initialValues = {}) {

FILE: src/Rendering/VTKJS/vtk/WidgetManagerPickWhileAnimating.js
  function WidgetManagerPickWhileAnimating (line 5) | function WidgetManagerPickWhileAnimating(publicAPI, model) {
  constant DEFAULT_VALUES (line 30) | const DEFAULT_VALUES = {}
  function extend (line 32) | function extend(publicAPI, model, initialValues = {}) {

FILE: src/Rendering/Widgets/createWidgetsRenderingMachine.js
  function createWidgetsRenderingMachine (line 3) | function createWidgetsRenderingMachine(options, context) {

FILE: src/Rendering/updateLabelMapComponentWeight.js
  function updateLabelMapComponentWeight (line 1) | function updateLabelMapComponentWeight(store) {

FILE: src/UI/Images/createImagesUIMachine.js
  function createImagesUIMachine (line 250) | function createImagesUIMachine(options, context) {

FILE: src/UI/Images/transferFunctionManipulators.js
  constant MIN_WINDOW (line 3) | const MIN_WINDOW = 1e-8

FILE: src/UI/Layers/createLayersUIMachine.js
  function resize (line 10) | function resize(arr, newSize, defaultValue) {
  function spawnLayerRenderingActor (line 17) | function spawnLayerRenderingActor(options) {
  function createLayersUIMachine (line 283) | function createLayersUIMachine(options, context) {

FILE: src/UI/Main/createMainUIMachine.js
  function createMainUIMachine (line 91) | function createMainUIMachine(options, context) {

FILE: src/UI/Widgets/createWidgetsUIMachine.js
  function createWidgetsUIMachine (line 19) | function createWidgetsUIMachine(options, context) {

FILE: src/UI/addKeyboardShortcuts.js
  constant MOUSETRAP (line 4) | const MOUSETRAP = new Mousetrap()

FILE: src/UI/createRenderingViewContainers.js
  function createRenderingViewContainers (line 2) | function createRenderingViewContainers(context) {

FILE: src/UI/createUIMachine.js
  function createUIMachine (line 8) | function createUIMachine(options, context) {

FILE: src/UI/reference-ui/src/Images/applyBlendMode.js
  function applyBlendMode (line 1) | function applyBlendMode(context, event) {

FILE: src/UI/reference-ui/src/Images/applyColorMap.js
  function applyColorMap (line 1) | function applyColorMap(context, { data: { component, name } }) {

FILE: src/UI/reference-ui/src/Images/applyColorRange.js
  function applyColorRange (line 1) | function applyColorRange(context, event) {

FILE: src/UI/reference-ui/src/Images/applyColorRangeBounds.js
  function applyColorRangeBounds (line 3) | function applyColorRangeBounds(context, event) {

FILE: src/UI/reference-ui/src/Images/applyComponentVisibility.js
  function applyComponentVisibility (line 3) | function applyComponentVisibility(context, event) {

FILE: src/UI/reference-ui/src/Images/applyGradientOpacity.js
  function applyGradientOpacity (line 1) | function applyGradientOpacity(context, event) {

FILE: src/UI/reference-ui/src/Images/applyGradientOpacityScale.js
  function applyGradientOpacityScale (line 1) | function applyGradientOpacityScale(context, event) {

FILE: src/UI/reference-ui/src/Images/applyHistogram.js
  function applyHistogram (line 1) | function applyHistogram(context, event) {

FILE: src/UI/reference-ui/src/Images/applyImagesContrastSensitiveStyle.js
  function applyImagesContrastSensitiveStyle (line 3) | function applyImagesContrastSensitiveStyle(context) {

FILE: src/UI/reference-ui/src/Images/applyLabelImageBlend.js
  function applyLabelImageBlend (line 1) | function applyLabelImageBlend(context, event) {

FILE: src/UI/reference-ui/src/Images/applyLabelImageWeights.js
  function applyLabelImageWeights (line 1) | function applyLabelImageWeights(context, event) {}

FILE: src/UI/reference-ui/src/Images/applyLabelNames.js
  function applyLabelNames (line 1) | function applyLabelNames(context, event) {

FILE: src/UI/reference-ui/src/Images/applyLookupTable.js
  function applyLookupTable (line 1) | function applyLookupTable(context, event) {

FILE: src/UI/reference-ui/src/Images/applyPiecewiseFunctionGaussians.js
  function applyPiecewiseFunctionGaussians (line 1) | function applyPiecewiseFunctionGaussians(context, event) {

FILE: src/UI/reference-ui/src/Images/applySelectedLabel.js
  function applySelectedLabel (line 1) | function applySelectedLabel(context, event) {

FILE: src/UI/reference-ui/src/Images/applyVolumeSampleDistance.js
  function applyVolumeSampleDistance (line 1) | function applyVolumeSampleDistance(context, event) {

FILE: src/UI/reference-ui/src/Images/applyWindowingReset.js
  function applyWindowLevelReset (line 1) | function applyWindowLevelReset(context, { data }) {

FILE: src/UI/reference-ui/src/Images/cinematic.js
  function makeSlider (line 6) | function makeSlider(context, label, parameterName, { min, max, step, sta...
  function createCinematicParameters (line 33) | function createCinematicParameters(context, rowParent) {
  function applyCinematicChanged (line 56) | function applyCinematicChanged(context, { actorContext }) {

FILE: src/UI/reference-ui/src/Images/createBlendModeSelector.js
  function createBlendModeSelector (line 6) | function createBlendModeSelector(context, uiContainer) {

FILE: src/UI/reference-ui/src/Images/createColorRangeInput.js
  function createColorRangeInput (line 7) | function createColorRangeInput(context, imageUIGroup) {

FILE: src/UI/reference-ui/src/Images/createComponentSelector.js
  function createComponentSelector (line 3) | function createComponentSelector(context, imageUIGroup) {

FILE: src/UI/reference-ui/src/Images/createGradientOpacitySlider.js
  function createGradientOpacitySlider (line 8) | function createGradientOpacitySlider(context, uiContainer) {

FILE: src/UI/reference-ui/src/Images/createImagesInterface.js
  function createImagesInterface (line 12) | function createImagesInterface(context) {

FILE: src/UI/reference-ui/src/Images/createInterpolationButton.js
  function createInterpolationButton (line 7) | function createInterpolationButton(context, uiRow) {

FILE: src/UI/reference-ui/src/Images/createLabelImageColorWidget.js
  function createLabelImageColorWidget (line 9) | function createLabelImageColorWidget(context) {

FILE: src/UI/reference-ui/src/Images/createLabelImageWeightWidget.js
  function createLabelMapWeightWidget (line 3) | function createLabelMapWeightWidget(context) {

FILE: src/UI/reference-ui/src/Images/createSampleDistanceSlider.js
  function createSampleDistanceSlider (line 6) | function createSampleDistanceSlider(context, uiContainer) {

FILE: src/UI/reference-ui/src/Images/createShadowToggle.js
  function createShadowToggle (line 6) | function createShadowToggle(context, uiContainer) {

FILE: src/UI/reference-ui/src/Images/createTransferFunctionEditor.js
  constant PIECEWISE_UPDATE_DELAY (line 4) | const PIECEWISE_UPDATE_DELAY = 200
  method setPoints (line 58) | setPoints(points) {
  method getPoints (line 71) | getPoints() {
  method getGaussians (line 94) | getGaussians() {
  method setGaussians (line 99) | setGaussians() {

FILE: src/UI/reference-ui/src/Images/createVolumeRenderingInputs.js
  function createVolumeRenderingInputs (line 10) | function createVolumeRenderingInputs(context, imagesUIGroup) {

FILE: src/UI/reference-ui/src/Images/createWindowLevelReset.js
  function createWindowLevelReset (line 6) | function createWindowLevelReset(context, uiContainer) {

FILE: src/UI/reference-ui/src/Images/createWindowLevelToggle.js
  function createWindowLevelToggle (line 6) | function createWindowLevelToggle(context, uiContainer) {

FILE: src/UI/reference-ui/src/Images/scaleSelector.js
  function applyScaleCount (line 5) | function applyScaleCount(input, scaleCount) {
  function onImageAssigned (line 62) | function onImageAssigned(name) {

FILE: src/UI/reference-ui/src/Images/selectImageComponent.js
  function selectImageComponent (line 6) | function selectImageComponent(context, event) {

FILE: src/UI/reference-ui/src/Images/throttle.js
  function throttle (line 9) | function throttle(func, wait, options) {

FILE: src/UI/reference-ui/src/Images/toggleInterpolation.js
  function toggleInterpolation (line 1) | function toggleInterpolation(context, event) {

FILE: src/UI/reference-ui/src/Images/toggleShadow.js
  function toggleShadow (line 1) | function toggleShadow(context, event) {

FILE: src/UI/reference-ui/src/Images/toggleUseShadow.js
  function toggleUseShadow (line 1) | function toggleUseShadow(context, event) {

FILE: src/UI/reference-ui/src/Images/toggleWindowLevel.js
  constant MIN_WINDOW (line 1) | const MIN_WINDOW = 1e-8
  function toggleWindowLevel (line 3) | function toggleWindowLevel(context, event) {

FILE: src/UI/reference-ui/src/Images/updateAvailableComponents.js
  function updateAvailableComponents (line 3) | function updateAvailableComponents(context) {

FILE: src/UI/reference-ui/src/Images/updateImageInterface.js
  function updateImageInterface (line 12) | function updateImageInterface(context) {

FILE: src/UI/reference-ui/src/Images/updateLabelImageInterface.js
  function updateLabelImageInterface (line 3) | function updateLabelImageInterface(context) {

FILE: src/UI/reference-ui/src/Images/updateRenderedImageInterface.js
  function updateRenderedImageInterface (line 1) | function updateRenderedImageInterface(context, event) {

FILE: src/UI/reference-ui/src/Layers/addLayerUIRow.js
  function addLayerUIRow (line 3) | function addLayerUIRow(context) {

FILE: src/UI/reference-ui/src/Layers/applyLayersContrastSensitiveStyle.js
  function applyLayersContrastSensitiveStyle (line 3) | function applyLayersContrastSensitiveStyle(context) {

FILE: src/UI/reference-ui/src/Layers/createLayerInterface.js
  function createLayerEntry (line 19) | function createLayerEntry(context, name, layer) {
  function createLayerInterface (line 183) | function createLayerInterface(context) {

FILE: src/UI/reference-ui/src/Layers/createLayersInterface.js
  function createLayersInterface (line 4) | function createLayersInterface(context) {

FILE: src/UI/reference-ui/src/Layers/dataUpdateIndicator.js
  function startDataUpdate (line 1) | function startDataUpdate({ actorContext: { spinner } }) {
  function finishDataUpdate (line 5) | function finishDataUpdate({ actorContext: { spinner } }) {

FILE: src/UI/reference-ui/src/Layers/layerIcon.ts
  class LayerIcon (line 13) | @customElement('layer-icon')
    method getIcon (line 43) | getIcon() {
    method render (line 58) | render() {

FILE: src/UI/reference-ui/src/Layers/layerSettings.ts
  class LayerSettings (line 13) | @customElement('layer-settings')
    method connectedCallback (line 31) | connectedCallback() {
    method disconnectedCallback (line 36) | disconnectedCallback() {
    method showMenu (line 41) | showMenu() {
    method compareWith (line 54) | compareWith(name: string, method: string) {
    method stopComparing (line 65) | stopComparing() {
    method render (line 75) | render() {

FILE: src/UI/reference-ui/src/Layers/selectLayer.js
  function selectLayer (line 6) | function selectLayer(context, event) {

FILE: src/UI/reference-ui/src/Layers/toggleLayerVisibility.js
  function toggleLayerVisibility (line 3) | function toggleLayerVisibility(context, event) {

FILE: src/UI/reference-ui/src/Main/applyMainContrastSensitiveStyle.js
  function applyMainContrastSensitiveStyle (line 3) | function applyMainContrastSensitiveStyle(context) {

FILE: src/UI/reference-ui/src/Main/applySlicingPlanes.js
  function applySlicingPlanes (line 1) | function applySlicingPlanes(context, event) {

FILE: src/UI/reference-ui/src/Main/applyXSlice.js
  function applyXSlice (line 1) | function applyXSlice(context, event) {

FILE: src/UI/reference-ui/src/Main/applyYSlice.js
  function applyYSlice (line 1) | function applyYSlice(context, event) {

FILE: src/UI/reference-ui/src/Main/applyZSlice.js
  function applyZSlice (line 1) | function applyZSlice(context, event) {

FILE: src/UI/reference-ui/src/Main/createAnnotationsButton.js
  function createAnnotationsButton (line 7) | function createAnnotationsButton(context, mainUIRow) {

FILE: src/UI/reference-ui/src/Main/createAxesButton.js
  function createAxesButton (line 7) | function createAxesButton(context, mainUIRow) {

FILE: src/UI/reference-ui/src/Main/createBackgroundColorButton.js
  function createBackgroundColorButton (line 6) | function createBackgroundColorButton(context, mainUIRow) {

FILE: src/UI/reference-ui/src/Main/createCroppingButtons.js
  function createCroppingButtons (line 7) | function createCroppingButtons(context, mainUIRow) {

FILE: src/UI/reference-ui/src/Main/createFullscreenButton.js
  function createFullscreenButton (line 7) | function createFullscreenButton(context, mainUIRow) {

FILE: src/UI/reference-ui/src/Main/createMainInterface.js
  function createMainInterface (line 15) | function createMainInterface(context) {

FILE: src/UI/reference-ui/src/Main/createPlaneSliders.js
  function createPlaneSliders (line 11) | function createPlaneSliders(context) {

FILE: src/UI/reference-ui/src/Main/createResetCameraButton.js
  function createResetCameraButton (line 6) | function createResetCameraButton(context, mainUIRow) {

FILE: src/UI/reference-ui/src/Main/createRotateButton.js
  function createRotateButton (line 7) | function createRotateButton(context, mainUIRow) {

FILE: src/UI/reference-ui/src/Main/createScreenshotButton.js
  function createScreenshotButton (line 6) | function createScreenshotButton(context, mainUIRow) {

FILE: src/UI/reference-ui/src/Main/createViewModeButtons.js
  function createViewModeButtons (line 11) | function createViewModeButtons(context, mainRow) {

FILE: src/UI/reference-ui/src/Main/createViewPlanesToggle.js
  function createViewPlanesToggle (line 6) | function createViewPlanesToggle(context, volumeRow) {

FILE: src/UI/reference-ui/src/Main/toggleAnnotations.js
  function toggleAnnotations (line 1) | function toggleAnnotations(context) {

FILE: src/UI/reference-ui/src/Main/toggleAxes.js
  function toggleAxes (line 1) | function toggleAxes(context) {

FILE: src/UI/reference-ui/src/Main/toggleBackgroundColor.js
  function toggleBackgroundColor (line 1) | function toggleBackgroundColor(context) {

FILE: src/UI/reference-ui/src/Main/toggleCroppingPlanes.js
  function toggleCroppingPlanes (line 1) | function toggleCroppingPlanes(context) {

FILE: src/UI/reference-ui/src/Main/toggleFullscreen.js
  function toggleFullscreen (line 3) | function toggleFullscreen(context, event, actionMeta) {

FILE: src/UI/reference-ui/src/Main/toggleRotate.js
  function toggleRotate (line 1) | function toggleRotate(context) {

FILE: src/UI/reference-ui/src/Main/viewModeVolume.js
  function viewModeVolume (line 1) | function viewModeVolume(context) {

FILE: src/UI/reference-ui/src/Main/viewModeXPlane.js
  function viewModeXPlane (line 1) | function viewModeXPlane(context) {

FILE: src/UI/reference-ui/src/Main/viewModeYPlane.js
  function viewModeYPlane (line 1) | function viewModeYPlane(context) {

FILE: src/UI/reference-ui/src/Main/viewModeZPlane.js
  function viewModeZPlane (line 1) | function viewModeZPlane(context) {

FILE: src/UI/reference-ui/src/Widgets/applyDistanceWidgetValue.js
  function applyDistanceWidgetValue (line 1) | function applyDistanceWidgetValue(context, event) {

FILE: src/UI/reference-ui/src/Widgets/applyWidgetsContrastSensitiveStyle.js
  function applyMainContrastSensitiveStyle (line 3) | function applyMainContrastSensitiveStyle(context) {

FILE: src/UI/reference-ui/src/Widgets/createDistanceWidget.js
  function createDistanceWidget (line 6) | function createDistanceWidget(context, widgetsUIGroup) {

FILE: src/UI/reference-ui/src/Widgets/createWidgetsInterface.js
  function createWidgetsInterface (line 5) | function createWidgetsInterface(context) {

FILE: src/UI/reference-ui/src/Widgets/toggleDistanceWidget.js
  function toggleDistanceWidget (line 1) | function toggleDistanceWidget(context) {

FILE: src/UI/reference-ui/src/Widgets/viewModeVolume.js
  function viewModeVolume (line 1) | function viewModeVolume(context) {

FILE: src/UI/reference-ui/src/Widgets/viewModeXPlane.js
  function viewModeXPlane (line 1) | function viewModeXPlane(context) {

FILE: src/UI/reference-ui/src/Widgets/viewModeYPlane.js
  function viewModeYPlane (line 1) | function viewModeYPlane(context) {

FILE: src/UI/reference-ui/src/Widgets/viewModeZPlane.js
  function viewModeZPlane (line 1) | function viewModeZPlane(context) {

FILE: src/UI/reference-ui/src/applyCategoricalColorToColorTransferFunction.js
  function applyCategoricalColorToColorTransferFunction (line 3) | function applyCategoricalColorToColorTransferFunction(

FILE: src/UI/reference-ui/src/applyContrastSensitiveStyleToElement.js
  function applyContrastSensitiveStyleToElement (line 3) | function applyContrastSensitiveStyleToElement(context, cssClass, element) {

FILE: src/UI/reference-ui/src/applyGroupVisibility.js
  function applyGroupVisibility (line 1) | function applyGroupVisibility(context, groupNames, visible) {

FILE: src/UI/reference-ui/src/collapse-ui.ts
  class CollapseUi (line 10) | @customElement('collapse-ui')
    method render (line 24) | render() {
    method toggleUi (line 32) | toggleUi() {

FILE: src/UI/reference-ui/src/context.ts
  type ViewerContext (line 3) | type ViewerContext = { service: any }
  type AppContext (line 6) | type AppContext = any

FILE: src/UI/reference-ui/src/createCategoricalColorIconSelector.js
  function createCategoricalColorIconSelector (line 4) | function createCategoricalColorIconSelector(categoricalColorSelectorDiv) {

FILE: src/UI/reference-ui/src/createColorMapIconSelector.js
  function createColorMapIconSelector (line 4) | function createColorMapIconSelector(colorMapSelectorDiv) {

FILE: src/UI/reference-ui/src/createInterface.js
  function createInterface (line 9) | function createInterface(context) {

FILE: src/UI/reference-ui/src/serviceContext.ts
  class ServiceContext (line 7) | class ServiceContext extends LitElement {
    method render (line 12) | render() {
  type HTMLElementTagNameMap (line 20) | interface HTMLElementTagNameMap {

FILE: src/UI/reference-ui/src/toggleDarkMode.js
  function toggleDarkMode (line 6) | function toggleDarkMode(context) {

FILE: src/UI/reference-ui/src/toggleUICollapsed.js
  function updateDrawer (line 1) | function updateDrawer(context) {
  function toggleUICollapsed (line 11) | function toggleUICollapsed(context, event, actionMeta) {

FILE: src/UI/styleRenderingViewContainers.js
  function applyStyle (line 1) | function applyStyle(el, style) {
  function styleContainer (line 7) | function styleContainer(context, event) {

FILE: src/UserInterface/Geometries/createGeometryColorBySelector.js
  function createGeometryColorBySelector (line 10) | function createGeometryColorBySelector(store, colorByRow) {

FILE: src/UserInterface/Geometries/createGeometryColorChooser.js
  function createGeometryColorChooser (line 6) | function createGeometryColorChooser(store, geometryColorRow) {

FILE: src/UserInterface/Geometries/createGeometryColorRangeInput.js
  function createColorRangeInput (line 10) | function createColorRangeInput(store, uiContainer) {

FILE: src/UserInterface/Geometries/createGeometryColorWidget.js
  function createGeometryColorWidget (line 8) | function createGeometryColorWidget(store, geometriesUIGroup) {

FILE: src/UserInterface/Geometries/createGeometryOpacitySlider.js
  function createGeometryOpacitySlider (line 8) | function createGeometryOpacitySlider(store, geometryColorRow) {

FILE: src/UserInterface/Geometries/createGeometryRepresentationSelector.js
  function createGeometryRepresentationSelector (line 11) | function createGeometryRepresentationSelector(

FILE: src/UserInterface/PointSets/createPointSetColorBySelector.js
  function createPointSetColorBySelector (line 10) | function createPointSetColorBySelector(store, colorByRow) {

FILE: src/UserInterface/PointSets/createPointSetColorChooser.js
  function createPointSetColorChooser (line 6) | function createPointSetColorChooser(store, pointSetColorRow) {

FILE: src/UserInterface/PointSets/createPointSetColorRangeInput.js
  function createColorRangeInput (line 10) | function createColorRangeInput(store, uiContainer) {

FILE: src/UserInterface/PointSets/createPointSetColorWidget.js
  function createPointSetColorWidget (line 9) | function createPointSetColorWidget(store, pointSetsUIGroup) {

FILE: src/UserInterface/PointSets/createPointSetOpacitySlider.js
  function createPointSetOpacitySlider (line 8) | function createPointSetOpacitySlider(store, pointSetColorRow) {

FILE: src/UserInterface/PointSets/createPointSetRepresentationSelector.js
  function createPointSetRepresentationSelector (line 10) | function createPointSetRepresentationSelector(

FILE: src/UserInterface/PointSets/createPointSetSizeSlider.js
  function createPointSetSizeSlider (line 8) | function createPointSetSizeSlider(store, pointSetSizeRow) {

FILE: src/UserInterface/addLogo.js
  function addLogo (line 7) | function addLogo(store) {

FILE: src/UserInterface/applyContrastSensitiveStyle.js
  function applyContrastSensitiveStyle (line 4) | function applyContrastSensitiveStyle(store, cssClass, element) {

FILE: src/UserInterface/checkForWebGL.js
  function checkForWebGL (line 1) | function checkForWebGL(container) {

FILE: src/UserInterface/createCategoricalColorIconSelector.js
  function createCategoricalColorIconSelector (line 4) | function createCategoricalColorIconSelector(categoricalColorSelectorDiv) {

FILE: src/UserInterface/createColorMapIconSelector.js
  function createColorMapIconSelector (line 4) | function createColorMapIconSelector(colorMapSelectorDiv) {

FILE: src/UserInterface/createFileDragAndDrop.js
  constant MOUSETRAP (line 9) | const MOUSETRAP = new Mousetrap()
  function createFileDragAndDrop (line 11) | function createFileDragAndDrop(container, onDataChange) {

FILE: src/UserInterface/createGeometriesUI.js
  function createGeometriesUI (line 8) | function createGeometriesUI(store, uiContainer) {

FILE: src/UserInterface/createLoadingProgress.js
  function createLoadingProgress (line 5) | function createLoadingProgress(container) {

FILE: src/UserInterface/createPointSetsUI.js
  function createPointSetsUI (line 8) | function createPointSetsUI(store, uiContainer) {

FILE: src/UserInterface/customColorMapIcon.js
  function customColorMapIcon (line 7) | function customColorMapIcon(colorTransferFunction, range) {

FILE: src/UserInterface/emptyContainer.js
  function emptyContainer (line 1) | function emptyContainer(container) {

FILE: src/UserInterface/getContrastSensitiveStyle.js
  function getContrastSensitiveStyle (line 3) | function getContrastSensitiveStyle(cssClasses, isBackgroundDark) {

FILE: src/UserInterface/getRootContainer.js
  function getRootContainer (line 1) | function getRootContainer(container) {

FILE: src/UserInterface/hex2rgb.js
  function hex2rgb (line 1) | function hex2rgb(hexColor) {

FILE: src/UserInterface/preventDefaults.js
  function preventDefaults (line 1) | function preventDefaults(e) {

FILE: src/UserInterface/rgb2hex.js
  function rgb2hex (line 1) | function rgb2hex(rgb) {

FILE: src/ViewerStore.js
  constant STYLE_RENDERING_VIEW_CONTAINER (line 8) | const STYLE_RENDERING_VIEW_CONTAINER = {
  class MainUIStore (line 21) | class MainUIStore {
  class ImageUIStore (line 38) | class ImageUIStore {
    method constructor (line 39) | constructor(eventEmitter) {
    method numberOfComponents (line 53) | @computed get numberOfComponents() {
    method fusedImageLabelMap (line 106) | @computed get fusedImageLabelMap() {
    method haveOnlyLabelMap (line 237) | @computed get haveOnlyLabelMap() {
    method haveLabelMap (line 244) | @computed get haveLabelMap() {
  class GeometriesUIStore (line 272) | class GeometriesUIStore {
    method constructor (line 273) | constructor(eventEmitter) {
    method hasScalars (line 294) | @computed get hasScalars() {
    method hasOnlyDirectColors (line 302) | @computed get hasOnlyDirectColors() {
    method colorByOptions (line 318) | @computed get colorByOptions() {
    method colorByDefault (line 342) | @computed get colorByDefault() {
    method selectedColorRange (line 368) | @computed get selectedColorRange() {
    method selectedLookupTableProxy (line 376) | @computed get selectedLookupTableProxy() {
  class PointSetsUIStore (line 387) | class PointSetsUIStore {
    method constructor (line 388) | constructor(eventEmitter) {
    method hasScalars (line 413) | @computed get hasScalars() {
    method colorByOptions (line 420) | @computed get colorByOptions() {
    method colorByDefault (line 437) | @computed get colorByDefault() {
    method selectedColorRange (line 454) | @computed get selectedColorRange() {
    method selectedLookupTableProxy (line 462) | @computed get selectedLookupTableProxy() {
  class ViewerStore (line 473) | class ViewerStore {
    method constructor (line 474) | constructor(proxyManager) {
    method renderWindow (line 505) | get renderWindow() {
    method isBackgroundDark (line 509) | @computed get isBackgroundDark() {

FILE: src/createViewer.js
  function eventEmitterCallback (line 77) | function eventEmitterCallback(context /*, event*/) {

FILE: src/imJoyCodecs.js
  function decodeNumcodecEncoded (line 4) | async function decodeNumcodecEncoded(numcodecEncoded) {
  function decodeItkWasmImage (line 19) | async function decodeItkWasmImage(wasmImage) {

FILE: src/index.d.ts
  type Store (line 3) | interface Store {
  type ndarray (line 6) | type ndarray = {
  type LoadableImage (line 10) | type LoadableImage = URL | Image | Store | ndarray
  type ViewerOptions (line 12) | type ViewerOptions = {
  type Viewer (line 21) | type Viewer = {
  type version (line 52) | type version = string

FILE: src/index.js
  function createViewerFromLocalFiles (line 35) | function createViewerFromLocalFiles(container) {
  function createViewerFromFiles (line 40) | async function createViewerFromFiles(el, files, use2D = false) {
  function makeImage (line 44) | async function makeImage({ image, progressCallback, isLabelImage = false...
  function parseImageArg (line 63) | async function parseImageArg(image, progressCallback) {
  function createViewerFromUrl (line 75) | async function createViewerFromUrl(
  function initializeEmbeddedViewers (line 149) | function initializeEmbeddedViewers() {
  function createCompareOptions (line 189) | function createCompareOptions(userParams) {
  function processURLParameters (line 202) | function processURLParameters(container, addOnParameters = {}) {

FILE: src/internalUtils.js
  function arraysEqual (line 3) | function arraysEqual(a, b) {

FILE: src/transformBounds.js
  function computeCornerPoints (line 5) | function computeCornerPoints(bounds, point1, point2) {
  function computeBoundsFromPoints (line 17) | function computeBoundsFromPoints(point1, point2, bounds) {

FILE: test/conglomerateTest.js
  constant IMAGE_BASELINES (line 9) | const IMAGE_BASELINES = [

FILE: test/createViewerTest.js
  constant TEST_STYLE_RENDERING_VIEW_CONTAINER (line 23) | const TEST_STYLE_RENDERING_VIEW_CONTAINER = {
  constant TEST_VIEWER_STYLE (line 37) | const TEST_VIEWER_STYLE = {
  function makePointSet (line 46) | function makePointSet() {
  function testCreateInterface (line 104) | function testCreateInterface(context) {

FILE: test/customElementsDefineOverride.js
  function safeDecorator (line 4) | function safeDecorator(fn) {

FILE: test/downloadData.mjs
  constant IPFS_CID (line 10) | const IPFS_CID = 'bafybeihm5fr5s5s2g63pxsndmiswiayk6oz2h2kde5m32pqm7ejml...
  function downloadData (line 17) | async function downloadData(cid, token, outputDir) {

FILE: test/imjoyTest.js
  constant TEST_STYLE_RENDERING_VIEW_CONTAINER (line 12) | const TEST_STYLE_RENDERING_VIEW_CONTAINER = {
  function applyStyle (line 26) | function applyStyle(el, style) {
  function encodeArray (line 31) | function encodeArray(array) {
  method showMessage (line 64) | showMessage(plugin, info /*,duration*/) {

FILE: test/multiscaleSpatialImageTest.js
  constant IMAGE_BASELINES (line 5) | const IMAGE_BASELINES = [

FILE: test/testUINoPlaneSliders.js
  function modifiedCreateMainInterface (line 18) | function modifiedCreateMainInterface(context) {

FILE: test/zarrImageBaselines.js
  constant SAMPLE_SIZE (line 1) | const SAMPLE_SIZE = 33
  constant IMAGE_BASELINES (line 15) | const IMAGE_BASELINES = [
  constant RESOURCE_ERROR_CAUSING_DOCKER (line 70) | const RESOURCE_ERROR_CAUSING_DOCKER = [

FILE: test/zarrTest.js
  constant REAL_TRANSFORMATIONS (line 263) | const REAL_TRANSFORMATIONS = {
Condensed preview — 400 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,332K chars).
[
  {
    "path": ".babelrc",
    "chars": 383,
    "preview": "{\n  \"presets\": [\n    [\n      \"@babel/preset-env\",\n      {\n        \"targets\": {\n          \"browsers\": [\"last 2 versions\"]"
  },
  {
    "path": ".editorconfig",
    "chars": 207,
    "preview": "# editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_"
  },
  {
    "path": ".eslintrc.js",
    "chars": 209,
    "preview": "module.exports = {\n  env: {\n    browser: true,\n    es2021: true,\n  },\n  extends: ['eslint:recommended', 'prettier'],\n  p"
  },
  {
    "path": ".github/workflows/build-test.yml",
    "chars": 1041,
    "preview": "name: Build and Test\non: [push, pull_request]\n\njobs:\n  build:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n"
  },
  {
    "path": ".github/workflows/publish.yml",
    "chars": 1681,
    "preview": "name: Release\non:\n  push:\n    branches:\n      - master\n\njobs:\n  publish:\n    name: Publish\n    runs-on: ubuntu-22.04\n   "
  },
  {
    "path": ".gitignore",
    "chars": 374,
    "preview": ".DS_Store\n*.swp\n.npm-packages\n.npmrc\nyarn.lock\nnpm-debug.log\nnode_modules\nData\ndist/\ncoverage/\ntest/output.html\ntest/TES"
  },
  {
    "path": ".gitmodules",
    "chars": 115,
    "preview": "[submodule \"src/blosc/c-blosc\"]\n\tpath = src/Compression/blosc-zarr/c-blosc\n\turl = https://github.com/Blosc/c-blosc\n"
  },
  {
    "path": ".npmignore",
    "chars": 281,
    "preview": ".DS_Store\n.gitmodules\n.npmrc\n.sass-cache\n.travis.yml\ndoc\nnpm-debug.log\nsrc/UI/reference-ui/node_modules\nsrc/Compression/"
  },
  {
    "path": ".prettierrc",
    "chars": 107,
    "preview": "{\n  \"endOfLine\": \"lf\",\n  \"semi\": false,\n  \"singleQuote\": true,\n  \"tabWidth\": 2,\n  \"trailingComma\": \"es5\"\n}\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1596,
    "preview": "Contributing to ITK/VTK ImageViewer\n====================================\n\nThis page documents at a very high level how t"
  },
  {
    "path": "Copyright.txt",
    "chars": 1754,
    "preview": "/*=========================================================================\n\n  Program:   ITK/VTK ImageViewer\n  Module: "
  },
  {
    "path": "LICENSE",
    "chars": 1499,
    "preview": "Copyright (c) 2016, Kitware Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or withou"
  },
  {
    "path": "README.md",
    "chars": 2247,
    "preview": "## [ITK/VTK Viewer - Web based Image, Mesh, and Point Set Viewer](http://kitware.github.io/itk-vtk-viewer/)\n\n![Build and"
  },
  {
    "path": "bin/itk-vtk-viewer-cli.js",
    "chars": 1737,
    "preview": "#!/usr/bin/env node\n\nlet program = require('commander');\nlet ipList = require('./network');\nlet server = require('./serv"
  },
  {
    "path": "bin/network.js",
    "chars": 829,
    "preview": "var os = require('os');\n\nvar ifaces = os.networkInterfaces();\nvar networkInterfaces = [];\nvar alias = 0;\nvar currentName"
  },
  {
    "path": "bin/server.js",
    "chars": 441,
    "preview": "var path = require('path');\nvar express = require('express');\n\nfunction webServer(dataPath) {\n  var app = express();\n  v"
  },
  {
    "path": "buildUI.js",
    "chars": 316,
    "preview": "#!/usr/bin/env node\n\nconst path = require('path')\nconst spawnSync = require('child_process').spawnSync\n\nconst cwd = path"
  },
  {
    "path": "doc/.gitignore",
    "chars": 10,
    "preview": "build-tmp\n"
  },
  {
    "path": "doc/config.js",
    "chars": 528,
    "preview": "module.exports = {\n  baseUrl: '/itk-vtk-viewer',\n  work: './build-tmp',\n  examples: [],\n  config: {\n    title: 'itk-vtk-"
  },
  {
    "path": "doc/content/api/index.md",
    "chars": 8922,
    "preview": "# API\n\nThis documentation provides more detailed information about the viewer application programming interface (API).\n\n"
  },
  {
    "path": "doc/content/config/index.md",
    "chars": 1406,
    "preview": "title: Config\n---\n\nThis documentation provides more detailed information about the viewer configuration.\n\nThe viewer con"
  },
  {
    "path": "doc/content/docs/cli.md",
    "chars": 1364,
    "preview": "title: Command Line Interface\n---\n\nITK/VTK Viewer can be used as a command line tool for opening and visualizing your lo"
  },
  {
    "path": "doc/content/docs/customizeUI.md",
    "chars": 7471,
    "preview": "title: User Interface (UI) Customization\n---\n\nThe viewer's user interface (UI) is completely customizable. An existing v"
  },
  {
    "path": "doc/content/docs/embeddedViewer.md",
    "chars": 2230,
    "preview": "title: Embedded Viewer\n---\n\nITK/VTK Viewer can be used within an existing web site as a library to embed interactive 3D "
  },
  {
    "path": "doc/content/docs/imjoy.md",
    "chars": 4009,
    "preview": "title: ImJoy Plugin\n---\n\n[![launch ImJoy](https://imjoy.io/static/badge/launch-imjoy-badge.svg)](http://imjoy.io/#/app?p"
  },
  {
    "path": "doc/content/docs/index.md",
    "chars": 747,
    "preview": "title: Overview\n---\n\n![Build and Test](https://github.com/Kitware/itk-vtk-viewer/workflows/Build%20and%20Test/badge.svg)"
  },
  {
    "path": "doc/content/docs/shortcuts.md",
    "chars": 1044,
    "preview": "title: Keyboard Shortcuts and Controls\n---\n\nThe viewer supports mouse-based controls, touchscreen interaction, and\nkeybo"
  },
  {
    "path": "doc/content/docs/viewer.md",
    "chars": 3318,
    "preview": "title: Progressive Web App\n---\n\nThe [default ITK/VTK Viewer page](https://kitware.github.io/itk-vtk-viewer/app/) lets yo"
  },
  {
    "path": "doc/content/index.html",
    "chars": 201,
    "preview": "<html>\n<head>\n  <meta http-equiv=\"refresh\" content=\"0; URL=./docs/\" />\n</head>\n<body>\n  <p>Redirecting to the documentat"
  },
  {
    "path": "doc/content/index.jade",
    "chars": 1223,
    "preview": "layout: index\ndescription: ITK/VTK Viewer\nsubtitle: An open-source software system for medical and scientific image, mes"
  },
  {
    "path": "doc/data/menu.yml",
    "chars": 52,
    "preview": "docs: /docs/\napi: /api/\nconfig: /config/\napp: /app/\n"
  },
  {
    "path": "doc/tpl/__en__",
    "chars": 777,
    "preview": "menu:\n  docs: Documentation\n  api: API\n  config: Config\n  examples: Examples\n  news: News\n  search: Search\n  app: Applic"
  },
  {
    "path": "doc/tpl/__sidebar__",
    "chars": 218,
    "preview": "docs:\n  getting_started:\n    overview: index.html\n    viewer: viewer.html\n    cli: cli.html\n    embeddedViewer: embedded"
  },
  {
    "path": "examples/compare-image.html",
    "chars": 2732,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n    <meta name"
  },
  {
    "path": "examples/cyan-magenta-compare-image.html",
    "chars": 2522,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n    <meta name"
  },
  {
    "path": "examples/test-conglomerate.html",
    "chars": 1590,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n    <meta name"
  },
  {
    "path": "examples/test-pointsets.html",
    "chars": 1363,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n    <meta name"
  },
  {
    "path": "examples/test.html",
    "chars": 1676,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n    <meta name"
  },
  {
    "path": "karma.conf.js",
    "chars": 4715,
    "preview": "/* eslint-disable global-require */\nconst path = require('path')\n\nconst vtkRules = require('vtk.js/Utilities/config/depe"
  },
  {
    "path": "package.json",
    "chars": 5189,
    "preview": "{\n  \"name\": \"itk-vtk-viewer\",\n  \"version\": \"0.0.0-semantically-release\",\n  \"description\": \"Web-based image, mesh, and po"
  },
  {
    "path": "postcss.config.js",
    "chars": 92,
    "preview": "const autoprefix = require('autoprefixer');\n\nmodule.exports = {\n  plugins: [autoprefix],\n};\n"
  },
  {
    "path": "src/Compression/blosc-zarr/BloscZarr.cxx",
    "chars": 4741,
    "preview": "#include <stdio.h>\n#include <blosc.h>\n\n#include \"itkPipeline.h\"\n#include \"itkInputBinaryStream.h\"\n#include \"itkOutputBin"
  },
  {
    "path": "src/Compression/blosc-zarr/CMakeLists.txt",
    "chars": 837,
    "preview": "cmake_minimum_required(VERSION 3.16.0)\nproject(blosc-zarr)\n\nset(BUILD_STATIC ON CACHE BOOL \"Build a static version of th"
  },
  {
    "path": "src/Compression/blosc-zarr/web-build/BloscZarr.js",
    "chars": 91585,
    "preview": "\nvar BloscZarr = (() => {\n  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.curren"
  },
  {
    "path": "src/Compression/blosc-zarr/web-build/BloscZarr.umd.js",
    "chars": 91835,
    "preview": "\nvar BloscZarr = (() => {\n  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.curren"
  },
  {
    "path": "src/Compression/bloscZarrDecompress.js",
    "chars": 1947,
    "preview": "import { runPipeline, InterfaceTypes, WorkerPool } from 'itk-wasm'\nimport { getSize } from '../IO/dtypeUtils'\n\nconst cor"
  },
  {
    "path": "src/Context/ImageActorContext.js",
    "chars": 4896,
    "preview": "export const defaultCompare = {\n  method: 'green-magenta', // 'checkerboard', 'cyan-magenta' | 'blend' | 'disabled'\n  im"
  },
  {
    "path": "src/Context/ImagesMachineContext.js",
    "chars": 353,
    "preview": "class ImagesMachineContext {\n  // Actors for rendering images and label images\n  imageRenderingActors = new Map()\n\n  // "
  },
  {
    "path": "src/Context/LayerActorContext.js",
    "chars": 367,
    "preview": "class LayerActorContext {\n  //  One of \"image\", \"labelImage\", \"geometry\", \"pointSet\", or \"widget\"\n  type = 'image'\n\n  //"
  },
  {
    "path": "src/Context/LayersMachineContext.js",
    "chars": 305,
    "preview": "class LayersMachineContext {\n  // Actors for providing an interface to the layers\n  layerUIActors = new Map()\n\n  // Cont"
  },
  {
    "path": "src/Context/MainMachineContext.js",
    "chars": 2513,
    "preview": "class MainMachineContext {\n  constructor(config) {\n    if (config) {\n      if (typeof config.backgroundColor !== 'undefi"
  },
  {
    "path": "src/Context/ViewerMachineContext.js",
    "chars": 3823,
    "preview": "import MainMachineContext from './MainMachineContext'\nimport LayersMachineContext from './LayersMachineContext'\nimport I"
  },
  {
    "path": "src/Context/WidgetsMachineContext.js",
    "chars": 216,
    "preview": "class WidgetsMachineContext {\n  // Whether the distance widget is enabled\n  distanceEnabled = false\n\n  // Distance/lengt"
  },
  {
    "path": "src/IO/Analyze/ComputeRanges.worker.js",
    "chars": 700,
    "preview": "import registerWebworker from 'webworker-promise/lib/register'\nimport { createRangeHelper } from './createRangeHelper'\n\n"
  },
  {
    "path": "src/IO/Analyze/UpdateHistogram.worker.js",
    "chars": 728,
    "preview": "import registerWebworker from 'webworker-promise/lib/register'\n\nregisterWebworker().operation(\n  'updateHistogram',\n  ({"
  },
  {
    "path": "src/IO/Analyze/computeHistograms.js",
    "chars": 2458,
    "preview": "const haveSharedArrayBuffer = typeof window.SharedArrayBuffer === 'function'\nimport webWorkerPromiseWorkerPool from './w"
  },
  {
    "path": "src/IO/Analyze/computeRanges.js",
    "chars": 1978,
    "preview": "import webWorkerPromiseWorkerPool from './webWorkerPromiseWorkerPool'\nimport { createRangeHelper } from './createRangeHe"
  },
  {
    "path": "src/IO/Analyze/createRangeHelper.js",
    "chars": 310,
    "preview": "export function createRangeHelper() {\n  let min = Number.POSITIVE_INFINITY\n  let max = Number.NEGATIVE_INFINITY\n\n  retur"
  },
  {
    "path": "src/IO/Analyze/webWorkerPromiseWorkerPool.js",
    "chars": 735,
    "preview": "import { WorkerPool } from 'itk-wasm'\n\nimport WebworkerPromise from 'webworker-promise'\n\nfunction webWorkerPromiseWorker"
  },
  {
    "path": "src/IO/Compare/.gitignore",
    "chars": 57,
    "preview": "/emscripten-build/*\n!emscripten-build/Compare*\noutput.png"
  },
  {
    "path": "src/IO/Compare/CMakeLists.txt",
    "chars": 504,
    "preview": "cmake_minimum_required(VERSION 3.16)\nproject(Compare)\n\nset(CMAKE_CXX_STANDARD 17)\n\nset(io_components)\nif (NOT EMSCRIPTEN"
  },
  {
    "path": "src/IO/Compare/Compare.cxx",
    "chars": 15401,
    "preview": "/*=========================================================================\n *\n *  Copyright NumFOCUS\n *\n *  Licensed un"
  },
  {
    "path": "src/IO/Compare/createCompareImage.js",
    "chars": 614,
    "preview": "import { runWasm } from '../itkWasmUtils.js'\n\nexport async function createCompareImage(\n  movingImage,\n  fixedImage,\n  {"
  },
  {
    "path": "src/IO/Compare/emscripten-build/Compare.js",
    "chars": 139694,
    "preview": "var Compare = (() => {\n  var _scriptDir = import.meta.url\n\n  return async function(Compare) {\n    Compare = Compare || {"
  },
  {
    "path": "src/IO/Compare/emscripten-build/Compare.umd.js",
    "chars": 139795,
    "preview": "var Compare = (() => {\n  var _scriptDir =\n    typeof document !== 'undefined' && document.currentScript\n      ? document"
  },
  {
    "path": "src/IO/Compare/index.mjs",
    "chars": 1508,
    "preview": "#!/usr/bin/env node\n/* eslint-env node */\n\nimport { Command } from 'commander/esm.mjs'\nimport path from 'path'\n\nconst pr"
  },
  {
    "path": "src/IO/Compare/package.json",
    "chars": 536,
    "preview": "{\n  \"name\": \"checkerboard-itk-wasm\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"type\": \"module\""
  },
  {
    "path": "src/IO/ConglomerateMultiscaleSpatialImage.js",
    "chars": 1209,
    "preview": "import MultiscaleSpatialImage from './MultiscaleSpatialImage'\n\nexport class ConglomerateMultiscaleSpatialImage extends M"
  },
  {
    "path": "src/IO/Downsample/.gitignore",
    "chars": 62,
    "preview": "/emscripten-build/*\n!emscripten-build/Downsample*\nresample.png"
  },
  {
    "path": "src/IO/Downsample/CMakeLists.txt",
    "chars": 988,
    "preview": "cmake_minimum_required(VERSION 3.16)\nproject(Downsample)\n\nset(CMAKE_CXX_STANDARD 17)\n\nset(io_components)\nif (NOT EMSCRIP"
  },
  {
    "path": "src/IO/Downsample/Downsample.cxx",
    "chars": 7113,
    "preview": "/*=========================================================================\n *\n *  Copyright NumFOCUS\n *\n *  Licensed un"
  },
  {
    "path": "src/IO/Downsample/DownsampleLabelImage.cxx",
    "chars": 6086,
    "preview": "/*=========================================================================\n *\n *  Copyright NumFOCUS\n *\n *  Licensed un"
  },
  {
    "path": "src/IO/Downsample/cypress/integration/load_data_spec.js",
    "chars": 752,
    "preview": "describe('Downsample images', () => {\n  it('successfully downsamples an image', () => {\n    cy.visit('http://localhost:8"
  },
  {
    "path": "src/IO/Downsample/cypress/plugins/index.cjs",
    "chars": 761,
    "preview": "/// <reference types=\"cypress\" />\n// ***********************************************************\n// This example plugins"
  },
  {
    "path": "src/IO/Downsample/cypress.json",
    "chars": 3,
    "preview": "{}\n"
  },
  {
    "path": "src/IO/Downsample/downsample.js",
    "chars": 1604,
    "preview": "#!/usr/bin/env node\n\nimport { Command } from 'commander/esm.mjs'\nimport path from 'path'\n\nconst program = new Command()\n"
  },
  {
    "path": "src/IO/Downsample/emscripten-build/Downsample.js",
    "chars": 139724,
    "preview": "var Downsample = (() => {\n  var _scriptDir = import.meta.url\n\n  return async function(Downsample) {\n    Downsample = Dow"
  },
  {
    "path": "src/IO/Downsample/emscripten-build/Downsample.umd.js",
    "chars": 139831,
    "preview": "var Downsample = (() => {\n  var _scriptDir =\n    typeof document !== 'undefined' && document.currentScript\n      ? docum"
  },
  {
    "path": "src/IO/Downsample/emscripten-build/DownsampleLabelImage.js",
    "chars": 139839,
    "preview": "var DownsampleLabelImage = (() => {\n  var _scriptDir = import.meta.url\n\n  return async function(DownsampleLabelImage) {\n"
  },
  {
    "path": "src/IO/Downsample/emscripten-build/DownsampleLabelImage.umd.js",
    "chars": 139959,
    "preview": "var DownsampleLabelImage = (() => {\n  var _scriptDir =\n    typeof document !== 'undefined' && document.currentScript\n   "
  },
  {
    "path": "src/IO/Downsample/index.html",
    "chars": 2976,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>itk-wasm UMD Example</title>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"styl"
  },
  {
    "path": "src/IO/Downsample/package.json",
    "chars": 1380,
    "preview": "{\n  \"name\": \"itk-downsample\",\n  \"version\": \"1.0.1\",\n  \"description\": \"Downsample a 2D or 3D image\",\n  \"main\": \"downsampl"
  },
  {
    "path": "src/IO/Downsample/styles.css",
    "chars": 331,
    "preview": "html, body {\n  height: 90%;\n}\n\ntextarea {\n  resize: none;\n  overflow-y: scroll;\n  position: absolute;\n  box-sizing: bord"
  },
  {
    "path": "src/IO/HttpStore.js",
    "chars": 263,
    "preview": "import axios from 'axios'\n\nclass HttpStore {\n  constructor(url) {\n    this.href = url.href\n  }\n\n  async getItem(item) {\n"
  },
  {
    "path": "src/IO/ImageDataFromChunks.worker.js",
    "chars": 6767,
    "preview": "import registerWebworker from 'webworker-promise/lib/register'\nimport { computeRanges } from './Analyze/computeRanges'\ni"
  },
  {
    "path": "src/IO/InMemoryMultiscaleSpatialImage.js",
    "chars": 9909,
    "preview": "import MultiscaleSpatialImage, {\n  ensure3dDirection,\n  storeImage,\n} from './MultiscaleSpatialImage'\nimport componentTy"
  },
  {
    "path": "src/IO/MultiscaleSpatialImage.js",
    "chars": 12008,
    "preview": "import { mat4, vec3 } from 'gl-matrix'\nimport { setMatrixElement } from 'itk-wasm'\n\nimport componentTypeToTypedArray fro"
  },
  {
    "path": "src/IO/ResampleLabelImage/.gitignore",
    "chars": 70,
    "preview": "/emscripten-build/*\n!emscripten-build/ResampleLabelImage*\nresample.png"
  },
  {
    "path": "src/IO/ResampleLabelImage/CMakeLists.txt",
    "chars": 528,
    "preview": "cmake_minimum_required(VERSION 3.16)\nproject(ResampleLabelImage)\n\nset(CMAKE_CXX_STANDARD 17)\n\nset(io_components)\nif (NOT"
  },
  {
    "path": "src/IO/ResampleLabelImage/ResampleLabelImage.cxx",
    "chars": 6638,
    "preview": "/*=========================================================================\n *\n *  Copyright NumFOCUS\n *\n *  Licensed un"
  },
  {
    "path": "src/IO/ResampleLabelImage/emscripten-build/ResampleLabelImage.js",
    "chars": 139810,
    "preview": "var ResampleLabelImage = (() => {\n  var _scriptDir = import.meta.url\n\n  return async function(ResampleLabelImage) {\n    "
  },
  {
    "path": "src/IO/ResampleLabelImage/emscripten-build/ResampleLabelImage.umd.js",
    "chars": 139935,
    "preview": "var ResampleLabelImage = (() => {\n  var _scriptDir =\n    typeof document !== 'undefined' && document.currentScript\n     "
  },
  {
    "path": "src/IO/ResampleLabelImage/index.mjs",
    "chars": 1643,
    "preview": "#!/usr/bin/env node\n/* eslint-env node */\n\nimport { Command } from 'commander/esm.mjs'\nimport path from 'path'\n\nconst pr"
  },
  {
    "path": "src/IO/ResampleLabelImage/package.json",
    "chars": 431,
    "preview": "{\n  \"name\": \"resample\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"type\": \"module\",\n  \"scripts\""
  },
  {
    "path": "src/IO/ResampleLabelImage/resampleLabelImage.js",
    "chars": 684,
    "preview": "import { arraysEqual } from '../../internalUtils.js'\nimport { runWasm } from '../itkWasmUtils.js'\n\nexport async function"
  },
  {
    "path": "src/IO/ZarrMultiscaleSpatialImage.js",
    "chars": 8730,
    "preview": "import { PixelTypes } from 'itk-wasm'\nimport PQueue from 'p-queue'\n\nimport MultiscaleSpatialImage from './MultiscaleSpat"
  },
  {
    "path": "src/IO/ZarrStoreParser.js",
    "chars": 467,
    "preview": "const isMetadata = item =>\n  ['.zattrs', '.zgroup', '.zarray'].some(knownMetadataFile =>\n    item.endsWith(knownMetadata"
  },
  {
    "path": "src/IO/componentTypeToTypedArray.js",
    "chars": 409,
    "preview": "import { IntTypes, FloatTypes } from 'itk-wasm'\n\nconst componentTypeToTypedArray = new Map([\n  [IntTypes.Int8, Int8Array"
  },
  {
    "path": "src/IO/composeComponents.js",
    "chars": 3238,
    "preview": "const sum = (a, b) => a + b\n\nconst countElements = componentInfo =>\n  componentInfo\n    .map(({ data, srcComponentCount "
  },
  {
    "path": "src/IO/dimensionUtils.js",
    "chars": 778,
    "preview": "export const CXYZT = Object.freeze(['c', 'x', 'y', 'z', 't']) // viewer indexing\n\nexport const ensuredDims = (defaultVal"
  },
  {
    "path": "src/IO/dtypeUtils.js",
    "chars": 2248,
    "preview": "import { IntTypes, FloatTypes } from 'itk-wasm'\n\n// Currently missing on Safari\nconst bigIntArrayType =\n  typeof globalT"
  },
  {
    "path": "src/IO/fetchBinaryContent.js",
    "chars": 1173,
    "preview": "import axios from 'axios'\nimport any from 'promise.any'\n\nasync function fetchBinaryContent(urlObj, progressCallback) {\n "
  },
  {
    "path": "src/IO/fetchJsonContent.js",
    "chars": 252,
    "preview": "import vtkHttpDataAccessHelper from 'vtk.js/Sources/IO/Core/DataAccessHelper/HttpDataAccessHelper'\n\nconst fetchJsonConte"
  },
  {
    "path": "src/IO/itkWasmUtils.js",
    "chars": 1391,
    "preview": "import {\n  runPipeline,\n  InterfaceTypes,\n  imageSharedBufferOrCopy,\n  WorkerPool,\n  stackImages,\n} from 'itk-wasm'\n\nexp"
  },
  {
    "path": "src/IO/ndarrayToItkImage.js",
    "chars": 3045,
    "preview": "import { PixelTypes, IntTypes, FloatTypes } from 'itk-wasm'\n\nconst numpy2itkType = {\n  int8: {\n    componentType: IntTyp"
  },
  {
    "path": "src/IO/ndarrayToPointSet.js",
    "chars": 1919,
    "preview": "import vtk from 'vtk.js/Sources/vtk'\n\nconst numpy2TypedArray = {\n  int8: Int8Array,\n  uint8: Uint8Array,\n  int16: Int16A"
  },
  {
    "path": "src/IO/processFiles.js",
    "chars": 6182,
    "preview": "import {\n  extensionToMeshIO,\n  readImageFile,\n  readImageDICOMFileSeries,\n  readMeshFile,\n  FloatTypes,\n  getFileExtens"
  },
  {
    "path": "src/IO/toMultiscaleSpatialImage.js",
    "chars": 2488,
    "preview": "import { readImageArrayBuffer } from 'itk-wasm'\n\nimport MultiscaleSpatialImage from './MultiscaleSpatialImage'\nimport In"
  },
  {
    "path": "src/IO/uploadFileHandler.js",
    "chars": 1291,
    "preview": "import curry from 'curry'\n\nimport preventDefaults from './UserInterface/preventDefaults'\nimport processFiles from './pro"
  },
  {
    "path": "src/ImJoyPluginAPI.js",
    "chars": 8885,
    "preview": "class ImJoyPluginAPI {\n  async setup() {\n    this.viewer = null\n    itkVtkViewer.createViewerFromLocalFiles(container).t"
  },
  {
    "path": "src/Rendering/Images/createImageRenderingActor.js",
    "chars": 24445,
    "preview": "import { assign, createMachine, forwardTo, send } from 'xstate'\nimport { defaultCompare } from '../../Context/ImageActor"
  },
  {
    "path": "src/Rendering/Images/createImagesRenderingMachine.js",
    "chars": 6367,
    "preview": "import { Machine, assign, spawn, send, actions } from 'xstate'\nimport { makeTransitions } from './makeTransitions'\n\nimpo"
  },
  {
    "path": "src/Rendering/Images/makeTransitions.js",
    "chars": 157,
    "preview": "export const makeTransitions = (events, transition) =>\n  events.reduce(\n    (onEvents, e) => ({\n      ...onEvents,\n     "
  },
  {
    "path": "src/Rendering/Layers/createLayersRenderingMachine.js",
    "chars": 388,
    "preview": "import { Machine } from 'xstate'\n\nfunction createLayersRenderingMachine(options, context) {\n  return Machine(\n    {\n    "
  },
  {
    "path": "src/Rendering/Main/backgroundIsDark.js",
    "chars": 231,
    "preview": "function backgroundIsDark(context) {\n  const backgroundColor = context.main.backgroundColor\n  const isDark =\n    backgro"
  },
  {
    "path": "src/Rendering/Main/backgroundIsLight.js",
    "chars": 243,
    "preview": "function backgroundIsLight(context, event) {\n  const backgroundColor = context.main.backgroundColor\n  const isLight =\n  "
  },
  {
    "path": "src/Rendering/Main/createMainRenderingMachine.js",
    "chars": 6952,
    "preview": "import { Machine, assign, sendParent, send } from 'xstate'\n\nimport backgroundIsDark from './backgroundIsDark'\nimport bac"
  },
  {
    "path": "src/Rendering/VTKJS/Images/ComposeImage.worker.js",
    "chars": 4280,
    "preview": "import registerWebworker from 'webworker-promise/lib/register'\nimport vtkITKHelper from 'vtk.js/Sources/Common/DataModel"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyBlendMode.js",
    "chars": 761,
    "preview": "function applyBlendMode(context, event) {\n  const name = event.data.name\n  const blendMode = event.data.blendMode\n\n  if "
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyCinematicChanged.js",
    "chars": 1415,
    "preview": "import vtkLight from 'vtk.js/Sources/Rendering/Core/Light'\nimport {\n  VOLUME_AMBIENT_DEFAULT,\n  VOLUME_DIFFUSE_DEFAULT,\n"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyColorMap.js",
    "chars": 1191,
    "preview": "import { getColorMap } from 'itk-viewer-color-maps'\n\n// We want an offset so there is contrast with label image colors\nc"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyColorRange.js",
    "chars": 411,
    "preview": "function applyColorRange(context, e) {\n  const {\n    data: { component, range },\n  } = e\n  if (!context.images.colorTran"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyColorRangeBounds.js",
    "chars": 505,
    "preview": "const assignColorRangeBounds = (\n  { images },\n  { data: { name, component, range, keepAutoAdjusting = false } }\n) => {\n"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyComponentVisibility.js",
    "chars": 922,
    "preview": "import { applyComponentWeights } from './applyComponentWeights'\n\nfunction applyComponentVisibility(context, event) {\n  c"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyComponentWeights.js",
    "chars": 999,
    "preview": "export function applyComponentWeights(context, name) {\n  const actorContext = context.images.actorContext.get(name)\n\n  c"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyGradientOpacity.js",
    "chars": 1974,
    "preview": "function applyGradientOpacity(context, event) {\n  const name = event.data.name\n\n  const actorContext = context.images.ac"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyIndependentComponents.js",
    "chars": 546,
    "preview": "function applyIndependentComponents(context) {\n  const name = context.images.selectedName\n  const actorContext = context"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyLabelImageBlend.js",
    "chars": 202,
    "preview": "import { applyComponentWeights } from './applyComponentWeights'\n\nfunction applyLabelImageBlend(context, event) {\n  apply"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyLabelImageWeights.js",
    "chars": 2199,
    "preview": "import vtkPiecewiseFunction from 'vtk.js/Sources/Common/DataModel/PiecewiseFunction'\n\nimport transformLabelImageWeight f"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyLabelNames.js",
    "chars": 199,
    "preview": "function applyLabelNames(context, event) {\n  const name = event.data.name\n  const labelNames = event.data.labelNames\n\n  "
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyLookupTable.js",
    "chars": 1970,
    "preview": "import vtkColorTransferFunction from 'vtk.js/Sources/Rendering/Core/ColorTransferFunction'\nimport { OpacityMode } from '"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyPiecewiseFunction.js",
    "chars": 763,
    "preview": "function applyPiecewiseFunction(context, event) {\n  const name = event.data.name\n  const component = event.data.componen"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyRenderedImage.js",
    "chars": 16527,
    "preview": "import vtkColorTransferFunction from 'vtk.js/Sources/Rendering/Core/ColorTransferFunction'\nimport vtkPiecewiseFunction f"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applySelectedLabel.js",
    "chars": 82,
    "preview": "function applySelectedLabel(context, event) {}\n\nexport default applySelectedLabel\n"
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyShadow.js",
    "chars": 352,
    "preview": "function applyShadow(context, event) {\n  const name = event.data\n  const actorContext = context.images.actorContext.get("
  },
  {
    "path": "src/Rendering/VTKJS/Images/applyVolumeSampleDistance.js",
    "chars": 708,
    "preview": "function applyVolumeSampleDistance(context, event) {\n  if (context.images.representationProxy) {\n    const { volumeSampl"
  },
  {
    "path": "src/Rendering/VTKJS/Images/assignRenderedImage.js",
    "chars": 2282,
    "preview": "import vtkDataArray from 'vtk.js/Sources/Common/Core/DataArray'\nimport { assign } from 'xstate'\nimport numericalSort fro"
  },
  {
    "path": "src/Rendering/VTKJS/Images/assignVisualizedComponents.js",
    "chars": 1988,
    "preview": "import { assign } from 'xstate'\nimport { getOutputIntensityComponentCount } from '../../Images/createImageRenderingActor"
  },
  {
    "path": "src/Rendering/VTKJS/Images/createImageRenderer.js",
    "chars": 983,
    "preview": "import vtkImageData from 'vtk.js/Sources/Common/DataModel/ImageData'\nimport applyIndependentComponents from './applyInde"
  },
  {
    "path": "src/Rendering/VTKJS/Images/fuseImages.js",
    "chars": 1104,
    "preview": "import WebworkerPromise from 'webworker-promise'\nimport ComposeImageWorker from './ComposeImage.worker.js'\n\nimport itkCo"
  },
  {
    "path": "src/Rendering/VTKJS/Images/imagesRenderingMachineOptions.js",
    "chars": 5173,
    "preview": "import { convertVtkToItkImage } from 'vtk.js/Sources/Common/DataModel/ITKHelper'\nimport { writeImageArrayBuffer, copyIma"
  },
  {
    "path": "src/Rendering/VTKJS/Images/mapToColorFunctionRange.js",
    "chars": 891,
    "preview": "function mapToColorFunctionRange(\n  context,\n  { data: { name, component, points } }\n) {\n  const actorContext = context."
  },
  {
    "path": "src/Rendering/VTKJS/Images/mapToPiecewiseFunctionNodes.js",
    "chars": 822,
    "preview": "import { getNodes } from 'itk-viewer-transfer-function-editor'\n\n// grab head and tail or fallback to data range if 1 or "
  },
  {
    "path": "src/Rendering/VTKJS/Images/selectImageLayer.js",
    "chars": 239,
    "preview": "function selectImageLayer(context, event) {\n  // This may be highlight the selected image with an outline.\n  // For VTK."
  },
  {
    "path": "src/Rendering/VTKJS/Images/toggleInterpolation.js",
    "chars": 298,
    "preview": "function toggleInterpolation(context, event) {\n  const name = event.data\n  const actorContext = context.images.actorCont"
  },
  {
    "path": "src/Rendering/VTKJS/Images/toggleLayerBBox.js",
    "chars": 308,
    "preview": "function toggleLayerBBox(context, event) {\n  const name = event.data.layerName\n  const actorContext = context.layers.act"
  },
  {
    "path": "src/Rendering/VTKJS/Images/toggleLayerVisibility.js",
    "chars": 1462,
    "preview": "import applySlicingPlanes from '../Main/applySlicingPlanes'\n\nfunction toggleLayerVisibility(context, event) {\n  const na"
  },
  {
    "path": "src/Rendering/VTKJS/Images/transformLabelImageWeight.js",
    "chars": 165,
    "preview": "function transformLabelImageWeight(weight, minWeight, maxWeight) {\n  return weight * (maxWeight - minWeight) + minWeight"
  },
  {
    "path": "src/Rendering/VTKJS/Images/updateHistogram.js",
    "chars": 1305,
    "preview": "import { computeHistogram } from '../../../IO/Analyze/computeHistograms'\n\nfunction makeHistogram(actorContext, component"
  },
  {
    "path": "src/Rendering/VTKJS/Images/updateLabelImagePiecewiseFunction.js",
    "chars": 1901,
    "preview": "function transformUserWeight(userWeight, minWeight, maxWeight) {\n  return userWeight * (maxWeight - minWeight) + minWeig"
  },
  {
    "path": "src/Rendering/VTKJS/Images/updateRenderedImage.js",
    "chars": 4610,
    "preview": "import vtkITKHelper from 'vtk.js/Sources/Common/DataModel/ITKHelper'\nimport { mat4 } from 'gl-matrix'\n\nimport { fuseImag"
  },
  {
    "path": "src/Rendering/VTKJS/Layers/layersRenderingMachineOptions.js",
    "chars": 103,
    "preview": "const layersRenderingMachineOptions = {\n  actions: {},\n}\n\nexport default layersRenderingMachineOptions\n"
  },
  {
    "path": "src/Rendering/VTKJS/Main/applyCroppingPlanes.js",
    "chars": 1173,
    "preview": "import vtkMath from 'vtk.js/Sources/Common/Core/Math'\nimport { transformVec3 } from 'vtk.js/Sources/Widgets/Widgets3D/Im"
  },
  {
    "path": "src/Rendering/VTKJS/Main/applySlicingPlanes.js",
    "chars": 6179,
    "preview": "function applySlicingPlanes(context, event) {\n  const slicingPlanes = event.data\n\n  const volumeRep = context.images.rep"
  },
  {
    "path": "src/Rendering/VTKJS/Main/applyXSlice.js",
    "chars": 255,
    "preview": "function applyXSlice(context, event) {\n  const position = event.data\n\n  const volumeRep = context.images.representationP"
  },
  {
    "path": "src/Rendering/VTKJS/Main/applyYSlice.js",
    "chars": 255,
    "preview": "function applyYSlice(context, event) {\n  const position = event.data\n\n  const volumeRep = context.images.representationP"
  },
  {
    "path": "src/Rendering/VTKJS/Main/applyZSlice.js",
    "chars": 255,
    "preview": "function applyZSlice(context, event) {\n  const position = event.data\n\n  const volumeRep = context.images.representationP"
  },
  {
    "path": "src/Rendering/VTKJS/Main/computeRenderedBounds.js",
    "chars": 1530,
    "preview": "import vtkBoundingBox from 'vtk.js/Sources/Common/DataModel/BoundingBox'\n\nconst NDC_RANGE = [0, 1]\n\n// unproject NDC box"
  },
  {
    "path": "src/Rendering/VTKJS/Main/createMainRenderer.js",
    "chars": 377,
    "preview": "// Load the rendering pieces we want to use (for both WebGL and WebGPU)\nimport 'vtk.js/Sources/Rendering/Profiles/Geomet"
  },
  {
    "path": "src/Rendering/VTKJS/Main/croppingPlanes.js",
    "chars": 8345,
    "preview": "import { mat4, vec3, quat, vec4 } from 'gl-matrix'\nimport vtkImageData from 'vtk.js/Sources/Common/DataModel/ImageData'\n"
  },
  {
    "path": "src/Rendering/VTKJS/Main/mainRenderingMachineOptions.js",
    "chars": 1442,
    "preview": "import setBackgroundColor from './setBackgroundColor'\nimport setUnits from './setUnits'\nimport takeScreenshot from './ta"
  },
  {
    "path": "src/Rendering/VTKJS/Main/resetCamera.js",
    "chars": 181,
    "preview": "import { getCropWidgetBounds } from './croppingPlanes'\n\nfunction resetCamera(context) {\n  context.itkVtkView.resetCamera"
  },
  {
    "path": "src/Rendering/VTKJS/Main/resetCroppingPlanes.js",
    "chars": 1513,
    "preview": "import vtkMath from 'vtk.js/Sources/Common/Core/Math'\nimport { transformVec3 } from 'vtk.js/Sources/Widgets/Widgets3D/Im"
  },
  {
    "path": "src/Rendering/VTKJS/Main/setBackgroundColor.js",
    "chars": 293,
    "preview": "function setBackgroundColor(context, event) {\n  if (event.data) {\n    context.main.backgroundColor = event.data\n  }\n  co"
  },
  {
    "path": "src/Rendering/VTKJS/Main/setUnits.js",
    "chars": 173,
    "preview": "function setUnits(context, event) {\n  if (event.data) {\n    context.main.units = event.data\n  }\n  context.itkVtkView.set"
  },
  {
    "path": "src/Rendering/VTKJS/Main/takeScreenshot.js",
    "chars": 861,
    "preview": "async function takeScreenshot(context) {\n  const proxy = context.images.representationProxy\n  let mapper = null\n  let im"
  },
  {
    "path": "src/Rendering/VTKJS/Main/toggleAnnotations.js",
    "chars": 1291,
    "preview": "function toggleAnnotations(context) {\n  let annotationsEnabled = context.main.annotationsEnabled\n  context.itkVtkView.se"
  },
  {
    "path": "src/Rendering/VTKJS/Main/toggleAxes.js",
    "chars": 154,
    "preview": "function toggleAxes(context) {\n  context.itkVtkView.setEnableAxes(context.main.axesEnabled)\n  context.service.send('REND"
  },
  {
    "path": "src/Rendering/VTKJS/Main/toggleCroppingPlanes.js",
    "chars": 742,
    "preview": "function toggleCroppingPlanes(context) {\n  const enabled = context.main.croppingPlanesEnabled\n  const prop = context.itk"
  },
  {
    "path": "src/Rendering/VTKJS/Main/toggleRotate.js",
    "chars": 142,
    "preview": "function toggleRotate(context, event, actionMeta) {\n  context.itkVtkView.setRotate(context.main.rotateEnabled)\n}\n\nexport"
  },
  {
    "path": "src/Rendering/VTKJS/Main/updateFps.js",
    "chars": 709,
    "preview": "import numericalSort from '../numericalSort'\n\nfunction updateFps(context, event) {\n  const proxy = context.images.repres"
  },
  {
    "path": "src/Rendering/VTKJS/Main/updateSlicingPlanes.js",
    "chars": 2018,
    "preview": "import { computeCroppingPlanesBoundingBox } from './computeRenderedBounds'\n\nconst clampSlice = (old, fallback, { min, ma"
  },
  {
    "path": "src/Rendering/VTKJS/Main/viewModeVolume.js",
    "chars": 835,
    "preview": "function viewModeVolume(context) {\n  context.itkVtkView.setViewMode('Volume')\n\n  const volumeRep = context.images.repres"
  },
  {
    "path": "src/Rendering/VTKJS/Main/viewModeXPlane.js",
    "chars": 673,
    "preview": "function viewModeXPlane(context) {\n  context.itkVtkView.setViewMode('XPlane')\n\n  const volumeRep = context.images.repres"
  },
  {
    "path": "src/Rendering/VTKJS/Main/viewModeYPlane.js",
    "chars": 673,
    "preview": "function viewModeYPlane(context) {\n  context.itkVtkView.setViewMode('YPlane')\n\n  const volumeRep = context.images.repres"
  },
  {
    "path": "src/Rendering/VTKJS/Main/viewModeZPlane.js",
    "chars": 673,
    "preview": "function viewModeZPlane(context) {\n  context.itkVtkView.setViewMode('ZPlane')\n\n  const volumeRep = context.images.repres"
  },
  {
    "path": "src/Rendering/VTKJS/Widgets/DistanceWidget/DistanceWidget.js",
    "chars": 1583,
    "preview": "import macro from 'vtk.js/Sources/macros'\nimport vtkLineWidget from 'vtk.js/Sources/Widgets/Widgets3D/LineWidget'\nimport"
  },
  {
    "path": "src/Rendering/VTKJS/Widgets/DistanceWidget/state.js",
    "chars": 617,
    "preview": "import vtkStateBuilder from 'vtk.js/Sources/Widgets/Core/StateBuilder'\n\nexport default function generateState() {\n  retu"
  },
  {
    "path": "src/Rendering/VTKJS/Widgets/HandlesInPixelsImageCroppingWidget.js",
    "chars": 2311,
    "preview": "import macro from 'vtk.js/Sources/macros'\nimport vtkImageCroppingWidget from 'vtk.js/Sources/Widgets/Widgets3D/ImageCrop"
  },
  {
    "path": "src/Rendering/VTKJS/Widgets/createWidgets.js",
    "chars": 77,
    "preview": "function createWidgets(/*context, events*/) {}\n\nexport default createWidgets\n"
  },
  {
    "path": "src/Rendering/VTKJS/Widgets/toggleDistanceWidget.js",
    "chars": 1381,
    "preview": "import DistanceWidget from './DistanceWidget/DistanceWidget'\n\nlet valueChangedSubscription\n\nfunction toggleDistanceWidge"
  },
  {
    "path": "src/Rendering/VTKJS/Widgets/widgetsRenderingMachineOptions.js",
    "chars": 257,
    "preview": "import createWidgets from './createWidgets'\nimport toggleDistanceWidget from './toggleDistanceWidget'\n\nconst widgetsRend"
  },
  {
    "path": "src/Rendering/VTKJS/cancelAnimation.js",
    "chars": 176,
    "preview": "function cancelAnimation(context, event) {\n  const identifier = event.data\n  context.renderWindow.getInteractor().cancel"
  },
  {
    "path": "src/Rendering/VTKJS/createRenderer.js",
    "chars": 1095,
    "preview": "import vtkGestureCameraManipulator from 'vtk.js/Sources/Interaction/Manipulators/GestureCameraManipulator'\nimport create"
  },
  {
    "path": "src/Rendering/VTKJS/numericalSort.js",
    "chars": 160,
    "preview": "function numericalSort(eltA, eltB) {\n  if (eltA < eltB) {\n    return -1\n  } else if (eltB < eltA) {\n    return 1\n  }\n  r"
  },
  {
    "path": "src/Rendering/VTKJS/proxyManagerConfiguration.js",
    "chars": 2598,
    "preview": "import vtkSourceProxy from 'vtk.js/Sources/Proxy/Core/SourceProxy'\nimport vtkGeometryRepresentationProxy from 'vtk.js/So"
  },
  {
    "path": "src/Rendering/VTKJS/render.js",
    "chars": 151,
    "preview": "function render(context) {\n  if (!context.renderWindow.getInteractor().isAnimating()) {\n    context.renderWindow.render("
  },
  {
    "path": "src/Rendering/VTKJS/requestAnimation.js",
    "chars": 179,
    "preview": "function requestAnimation(context, event) {\n  const identifier = event.data\n  context.renderWindow.getInteractor().reque"
  },
  {
    "path": "src/Rendering/VTKJS/vtk/AxesLabelsWidget/behavior.js",
    "chars": 116,
    "preview": "export default function widgetBehavior(publicAPI, model) {\n  model.classHierarchy.push('vtkAxesLabelsWidgetProp')\n}\n"
  },
  {
    "path": "src/Rendering/VTKJS/vtk/AxesLabelsWidget/index.js",
    "chars": 2494,
    "preview": "import macro from 'vtk.js/Sources/macros'\nimport vtkAbstractWidgetFactory from 'vtk.js/Sources/Widgets/Core/AbstractWidg"
  },
  {
    "path": "src/Rendering/VTKJS/vtk/AxesLabelsWidget/state.js",
    "chars": 364,
    "preview": "import vtkStateBuilder from 'vtk.js/Sources/Widgets/Core/StateBuilder'\n\nexport default function generateState() {\n  retu"
  },
  {
    "path": "src/Rendering/VTKJS/vtk/ItkVtkViewProxy.js",
    "chars": 42310,
    "preview": "import macro from 'vtk.js/Sources/macros'\n\nimport vtkViewProxy from 'vtk.js/Sources/Proxy/Core/ViewProxy'\nimport vtkPoin"
  },
  {
    "path": "src/Rendering/VTKJS/vtk/OpenGLImageMapperFractional.js",
    "chars": 9330,
    "preview": "// ----------------------------------------------------------------------------\n// Additive mixing of components rather "
  },
  {
    "path": "src/Rendering/VTKJS/vtk/PointSetRepresentationProxy/index.js",
    "chars": 6885,
    "preview": "import macro from 'vtk.js/Sources/macros'\nimport vtkActor from 'vtk.js/Sources/Rendering/Core/Actor'\nimport vtkMapper fr"
  },
  {
    "path": "src/Rendering/VTKJS/vtk/SVGMarkerTextRepresentation/index.js",
    "chars": 2850,
    "preview": "import macro from 'vtk.js/Sources/macros'\nimport vtkSVGRepresentation from '../SVGRepresentation'\n\nconst { createSvgElem"
  },
  {
    "path": "src/Rendering/VTKJS/vtk/SVGRepresentation/index.js",
    "chars": 4888,
    "preview": "import macro from 'vtk.js/Sources/macros'\nimport vtkPolyData from 'vtk.js/Sources/Common/DataModel/PolyData'\nimport vtkA"
  },
  {
    "path": "src/Rendering/VTKJS/vtk/SliceOutlineFilter/index.js",
    "chars": 3332,
    "preview": "import macro from 'vtk.js/Sources/macros'\nimport vtkPolyData from 'vtk.js/Sources/Common/DataModel/PolyData'\nimport vtkM"
  },
  {
    "path": "src/Rendering/VTKJS/vtk/WidgetManagerPickWhileAnimating.js",
    "chars": 1348,
    "preview": "import Macro from 'vtk.js/Sources/macros'\nimport vtkWidgetManager from 'vtk.js/Sources/Widgets/Core/WidgetManager'\n\n// L"
  },
  {
    "path": "src/Rendering/VTKJS/vtkJSRenderingMachineOptions.js",
    "chars": 978,
    "preview": "import createRenderer from './createRenderer'\nimport render from './render'\nimport requestAnimation from './requestAnima"
  },
  {
    "path": "src/Rendering/Widgets/createWidgetsRenderingMachine.js",
    "chars": 588,
    "preview": "import { Machine, assign, spawn, send } from 'xstate'\n\nfunction createWidgetsRenderingMachine(options, context) {\n  retu"
  }
]

// ... and 200 more files (download for full content)

About this extraction

This page contains the full source code of the Kitware/itk-vtk-viewer GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 400 files (2.1 MB), approximately 578.6k tokens, and a symbol index with 1365 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!