kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
629 lines (620 loc) • 73.6 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.rasterVisConfigs = exports.ZOOM_RANGES = exports.RASTER_COLOR_RESET_PARAMS = exports.PRESET_OPTIONS = exports.MAX_PIXEL_VALUES = exports.DEFAULT_BAND_MAPPINGS = exports.DATA_SOURCE_IDS = exports.DATA_SOURCE_COLOR_DEFAULTS = exports.COLORMAP_OPTIONS = exports.CATEGORICAL_COLORMAP_ID = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _rasterTileLayerSchema = require("./raster-tile-layer-schema");
var _types = require("./types");
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
/**
* Known Data Source IDs that work with current STAC Layer limitations
*/
var DATA_SOURCE_IDS = exports.DATA_SOURCE_IDS = /*#__PURE__*/function (DATA_SOURCE_IDS) {
DATA_SOURCE_IDS["SENTINEL_2_L1C"] = "sentinel-2-l1c";
DATA_SOURCE_IDS["SENTINEL_2_L1A"] = "sentinel-2-l2a";
DATA_SOURCE_IDS["SENTINEL_2_C1_L2A"] = "sentinel-2-c1-l2a";
DATA_SOURCE_IDS["SENTINEL_2_PRE_C1_L2A"] = "sentinel-2-pre-c1-l2a";
DATA_SOURCE_IDS["LANDSAT_C2_L1"] = "landsat-c2-l1";
DATA_SOURCE_IDS["LANDSAT_C2_L2"] = "landsat-c2-l2";
DATA_SOURCE_IDS["MODIS_09A1_061"] = "modis-09A1-061";
DATA_SOURCE_IDS["MODIS_43A4_061"] = "modis-43A4-061";
DATA_SOURCE_IDS["MOIDS_09Q1_061"] = "modis-09Q1-061";
return DATA_SOURCE_IDS;
}({});
var RASTER_COLOR_RESET_PARAMS = exports.RASTER_COLOR_RESET_PARAMS = {
gammaContrastFactor: 1,
sigmoidalContrastFactor: 0,
sigmoidalBiasFactor: 0.5,
saturationValue: 1.0,
dynamicColor: false
};
var DEFAULT_SENTINEL_COLOR_DEFAULTS = {
gammaContrastFactor: 2.2,
sigmoidalContrastFactor: 23,
sigmoidalBiasFactor: 0.12,
saturationValue: 2.0
};
var DEFAULT_MODIS_COLOR_DEFAULTS = {
gammaContrastFactor: 2.0,
sigmoidalContrastFactor: 8,
sigmoidalBiasFactor: 0.13,
saturationValue: 1.1
};
var DEFAULT_SENTINEL_BAND_MAPPING = {
coastal: 'B01',
blue: 'B02',
green: 'B03',
red: 'B04',
rededge1: 'B05',
rededge2: 'B06',
rededge3: 'B07',
nir: 'B08',
nir08: 'B8A',
nir09: 'B09',
cirrus: 'B10',
swir11: 'B11',
swir16: 'B11',
swir12: 'B12',
swir22: 'B12'
};
var DEFAULT_MODIS_BAND_MAPPING = {
sur_refl_b01: 'B01',
sur_refl_b02: 'B02',
sur_refl_b03: 'B03',
sur_refl_b04: 'B04',
sur_refl_b05: 'B05',
sur_refl_b06: 'B06',
sur_refl_b07: 'B07',
Nadir_Reflectance_Band1: 'B01',
Nadir_Reflectance_Band2: 'B02',
Nadir_Reflectance_Band3: 'B03',
Nadir_Reflectance_Band4: 'B04',
Nadir_Reflectance_Band5: 'B05',
Nadir_Reflectance_Band6: 'B06',
Nadir_Reflectance_Band7: 'B07'
};
var DEFAULT_LANDSAT_C2_L1_BAND_MAPPING = {
green: 'B01',
red: 'B02',
nir08: 'B03',
nir09: 'B04'
};
var DEFAULT_LANDSAT_C2_L2_BAND_MAPPING = {
blue: 'B01',
green: 'B02',
red: 'B03',
nir08: 'B04',
swir16: 'B05',
lwir: 'B06',
swir22: 'B07',
coastal: 'B01',
lwir11: 'B06'
};
var DEFAULT_BAND_MAPPINGS = exports.DEFAULT_BAND_MAPPINGS = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, DATA_SOURCE_IDS.SENTINEL_2_L1C, DEFAULT_SENTINEL_BAND_MAPPING), DATA_SOURCE_IDS.SENTINEL_2_L1A, DEFAULT_SENTINEL_BAND_MAPPING), DATA_SOURCE_IDS.SENTINEL_2_C1_L2A, DEFAULT_SENTINEL_BAND_MAPPING), DATA_SOURCE_IDS.SENTINEL_2_PRE_C1_L2A, DEFAULT_SENTINEL_BAND_MAPPING), DATA_SOURCE_IDS.LANDSAT_C2_L1, DEFAULT_LANDSAT_C2_L1_BAND_MAPPING), DATA_SOURCE_IDS.LANDSAT_C2_L2, DEFAULT_LANDSAT_C2_L2_BAND_MAPPING), DATA_SOURCE_IDS.MODIS_09A1_061, DEFAULT_MODIS_BAND_MAPPING), DATA_SOURCE_IDS.MODIS_43A4_061, DEFAULT_MODIS_BAND_MAPPING), DATA_SOURCE_IDS.MOIDS_09Q1_061, DEFAULT_MODIS_BAND_MAPPING);
/**
* Per-data source color rescaling defaults for known collections
*/
var DATA_SOURCE_COLOR_DEFAULTS = exports.DATA_SOURCE_COLOR_DEFAULTS = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, DATA_SOURCE_IDS.SENTINEL_2_L1C, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.SENTINEL_2_L1A, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.SENTINEL_2_C1_L2A, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.SENTINEL_2_PRE_C1_L2A, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.LANDSAT_C2_L1, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.LANDSAT_C2_L2, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.MODIS_09A1_061, DEFAULT_MODIS_COLOR_DEFAULTS), DATA_SOURCE_IDS.MODIS_43A4_061, DEFAULT_MODIS_COLOR_DEFAULTS), DATA_SOURCE_IDS.MOIDS_09Q1_061, DEFAULT_MODIS_COLOR_DEFAULTS);
/**
* Available "presets"
*
* I define a "preset" as one specific manner of loading bands and combining them on the frontend.
* In the future I expect we'll want a UI that gives the user full flexibility.
*/
var PRESET_OPTIONS = exports.PRESET_OPTIONS = {
trueColor: {
label: 'True Color',
id: _rasterTileLayerSchema.RasterTileLayerPresets.trueColor,
bandCombination: _types.BandCombination.Rgb,
commonNames: ['red', 'green', 'blue']
},
infrared: {
label: 'Infrared',
id: _rasterTileLayerSchema.RasterTileLayerPresets.infrared,
bandCombination: _types.BandCombination.Rgb,
commonNames: ['nir', 'red', 'green'],
description: 'False-color infrared composite. Near-infrared, red, green mapped to RGB'
},
agriculture: {
label: 'Agriculture',
id: _rasterTileLayerSchema.RasterTileLayerPresets.agriculture,
bandCombination: _types.BandCombination.Rgb,
commonNames: ['swir16', 'nir', 'blue'],
description: 'False-color agriculture composite. Short-wave infrared 1, near-infrared, blue mapped to RGB.'
},
forestBurn: {
label: 'Forest Burn',
id: _rasterTileLayerSchema.RasterTileLayerPresets.forestBurn,
bandCombination: _types.BandCombination.Rgb,
commonNames: ['swir22', 'nir', 'blue'],
description: 'False-color forest burn composite. Short-wave infrared 2, near-infrared, blue mapped to RGB'
},
ndvi: {
label: 'NDVI',
id: _rasterTileLayerSchema.RasterTileLayerPresets.ndvi,
bandCombination: _types.BandCombination.NormalizedDifference,
commonNames: ['nir', 'red'],
description: 'Normalized Difference Vegetation Index',
infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/landsat-normalized-difference-vegetation-index'
},
// Comment this out for now, because in testing it looks like there's an overflow of some sort;
// index values should be between -1 and 1, but values look way out of bounds
// evi: {
// label: 'EVI',
// id: RasterTileLayerPresets.evi,
// bandCombination: 'enhancedVegetationIndex',
// commonNames: ['nir', 'red', 'blue']
// },
savi: {
label: 'SAVI',
id: _rasterTileLayerSchema.RasterTileLayerPresets.savi,
bandCombination: _types.BandCombination.SoilAdjustedVegetationIndex,
commonNames: ['nir', 'red'],
description: 'Soil Adjusted Vegetation Index',
infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/landsat-soil-adjusted-vegetation-index'
},
msavi: {
label: 'MSAVI',
id: _rasterTileLayerSchema.RasterTileLayerPresets.msavi,
bandCombination: _types.BandCombination.ModifiedSoilAdjustedVegetationIndex,
commonNames: ['nir', 'red'],
description: 'Modified Soil Adjusted Vegetation Index',
infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/landsat-modified-soil-adjusted-vegetation-index'
},
ndmi: {
label: 'NDMI',
id: _rasterTileLayerSchema.RasterTileLayerPresets.ndmi,
bandCombination: _types.BandCombination.NormalizedDifference,
commonNames: ['nir', 'swir16'],
description: 'Normalized Difference Moisture Index',
infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/normalized-difference-moisture-index'
},
nbr: {
label: 'NBR',
id: _rasterTileLayerSchema.RasterTileLayerPresets.nbr,
bandCombination: _types.BandCombination.NormalizedDifference,
commonNames: ['nir', 'swir22'],
description: 'Normalized Burn Ratio',
infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/landsat-normalized-burn-ratio'
},
nbr2: {
label: 'NBR 2',
id: _rasterTileLayerSchema.RasterTileLayerPresets.nbr2,
bandCombination: _types.BandCombination.NormalizedDifference,
commonNames: ['swir16', 'swir22'],
description: 'Normalized Burn Ratio 2',
infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/landsat-normalized-burn-ratio-2'
},
singleBand: {
label: 'Single Band',
id: _rasterTileLayerSchema.RasterTileLayerPresets.singleBand,
bandCombination: _types.BandCombination.Single,
description: 'Render a single band data'
}
};
/**
* Valid zoom ranges for each data source
*
* The maximum zoom is derived from the resolution of each data source.
* The minimum zoom relates to the number of overviews in the COGs at the source. The more
* overviews, the easier it is to create downsampled tiles. The minimum zooms can be reduced but it
* takes longer to serve low-zoom tiles since the server must read from many image sources.
*/
// TODO: use render:max_overview_gsd from STAC
var ZOOM_RANGES = exports.ZOOM_RANGES = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, DATA_SOURCE_IDS.SENTINEL_2_C1_L2A, [8, 13]), DATA_SOURCE_IDS.SENTINEL_2_L1A, [8, 13]), DATA_SOURCE_IDS.SENTINEL_2_L1C, [8, 13]), DATA_SOURCE_IDS.SENTINEL_2_PRE_C1_L2A, [8, 13]), DATA_SOURCE_IDS.LANDSAT_C2_L1, [7, 12]), DATA_SOURCE_IDS.LANDSAT_C2_L2, [7, 12]), DATA_SOURCE_IDS.MODIS_09A1_061, [7, 13]), DATA_SOURCE_IDS.MODIS_43A4_061, [7, 13]), DATA_SOURCE_IDS.MOIDS_09Q1_061, [7, 13]);
/**
* Bit depth for each data source
* Sentinel-2 is 12-bit; Landsat-8 is 16-bit; Planet is 12-bit; NAIP is 8-bit
*/
// TODO: use range value and dtype in STAC collection instead of this
var MAX_PIXEL_VALUES = exports.MAX_PIXEL_VALUES = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, DATA_SOURCE_IDS.SENTINEL_2_C1_L2A, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.SENTINEL_2_L1A, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.SENTINEL_2_L1C, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.SENTINEL_2_PRE_C1_L2A, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.LANDSAT_C2_L1, Math.pow(2, 16) - 1), DATA_SOURCE_IDS.LANDSAT_C2_L2, Math.pow(2, 16) - 1), DATA_SOURCE_IDS.MODIS_09A1_061, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.MODIS_43A4_061, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.MOIDS_09Q1_061, Math.pow(2, 12) - 1);
/**
* Id for categorical colormap. Unlike most colormaps. Categorical colormap image is created
* from colormap set in visConfig
*/
var CATEGORICAL_COLORMAP_ID = exports.CATEGORICAL_COLORMAP_ID = '_categorical';
/**
* A list of available colormaps. Colormaps are originally derived from
* matplotlib, then via rio-tiler. Colormaps are 10x256 PNG images that are
* loaded as textures
*/
var COLORMAP_OPTIONS = exports.COLORMAP_OPTIONS = [{
label: 'Cfastie',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.cfastie
}, {
label: 'Rplumbo',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rplumbo
}, {
label: 'Schwarzwald',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.schwarzwald
}, {
label: 'Viridis',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.viridis
}, {
label: 'Plasma',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.plasma
}, {
label: 'Inferno',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.inferno
}, {
label: 'Magma',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.magma
}, {
label: 'Cividis',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.cividis
}, {
label: 'Greys',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.greys
}, {
label: 'Purples',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.purples
}, {
label: 'Blues',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.blues
}, {
label: 'Greens',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.greens
}, {
label: 'Oranges',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.oranges
}, {
label: 'Reds',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.reds
}, {
label: 'Yl-Or-Br',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.ylorbr
}, {
label: 'Yl-Or-Rd',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.ylorrd
}, {
label: 'Or-Rd',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.orrd
}, {
label: 'Pu-Rd',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.purd
}, {
label: 'Rd-Pu',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rdpu
}, {
label: 'Bu-Pu',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.bupu
}, {
label: 'Gn-Bu',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gnbu
}, {
label: 'Pu-Bu',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.pubu
}, {
label: 'Yl-Gn-Bu',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.ylgnbu
}, {
label: 'Pu-Bu-Gn',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.pubugn
}, {
label: 'Blue-Gn',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.bugn
}, {
label: 'Yl-Gn',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.ylgn
}, {
label: 'W-n-B',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.binary
}, {
label: 'B-n-W',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gray
}, {
label: 'Bone',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.bone
}, {
label: 'Pink',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.pink
}, {
label: 'Spring',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.spring
}, {
label: 'Summer',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.summer
}, {
label: 'Autumn',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.autumn
}, {
label: 'Winter',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.winter
}, {
label: 'Cool',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.cool
}, {
label: 'Wistia',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.wistia
}, {
label: 'Hot',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.hot
}, {
label: 'Afmhot',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.afmhot
}, {
label: 'Heat',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gist_heat
}, {
label: 'Copper',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.copper
}, {
label: 'Pi-Green',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.piyg
}, {
label: 'Pr-Gn',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.prgn
}, {
label: 'Br-Bg',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.brbg
}, {
label: 'Pu-Or',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.puor
}, {
label: 'Rd-Gy',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rdgy
}, {
label: 'Rd-Bu',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rdbu
}, {
label: 'Rd-Yl-Bu',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rdylbu
}, {
label: 'Rd-Yl-Gn',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rdylgn
}, {
label: 'Spectral',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.spectral
}, {
label: 'Cool-Warm',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.coolwarm
}, {
label: 'B-W-R',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.bwr
}, {
label: 'Seismic',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.seismic
}, {
label: 'Twilight',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.twilight
}, {
label: 'Twilight Shifted',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.twilight_shifted
}, {
label: 'HSV',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.hsv
}, {
label: 'Flag',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.flag
}, {
label: 'Prism',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.prism
}, {
label: 'Ocean',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.ocean
}, {
label: 'Gist Earth',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gist_earth
}, {
label: 'Terrain',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.terrain
}, {
label: 'Gist Stern',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gist_stern
}, {
label: 'Gnuplot',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gnuplot
}, {
label: 'Gnuplot2',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gnuplot2
}, {
label: 'Cmrmap',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.cmrmap
}, {
label: 'Cubehelix',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.cubehelix
}, {
label: 'Brg',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.brg
}, {
label: 'Gist Rainbow',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gist_rainbow
}, {
label: 'Rainbow',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rainbow
}, {
label: 'Jet',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.jet
}, {
label: 'Nipy Spectral',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.nipy_spectral
}, {
label: 'Gist NCAR',
id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gist_ncar
}];
var STAC_SEARCH_PROVIDERS = [
// {
// label: 'Microsoft Planetary Computer',
// id: 'microsoft'
// },
{
label: 'Element 84 Earth Search (AWS)',
id: 'earth-search'
}];
/**
* Configuration settings to be exposed through the UI
*/
var rasterVisConfigs = exports.rasterVisConfigs = {
preset: {
type: 'object-select',
defaultValue: 'trueColor',
label: 'Preset',
options: Object.values(PRESET_OPTIONS),
property: 'preset',
group: ''
},
useSTACSearching: {
type: 'boolean',
property: 'useSTACSearching',
defaultValue: false,
label: 'Use STAC Searching'
},
stacSearchProvider: {
type: 'object-select',
defaultValue: 'earth-search',
label: 'STAC Search Provider',
options: STAC_SEARCH_PROVIDERS,
property: 'stacSearchProvider'
},
startDate: {
type: 'input',
defaultValue: '2020-02-02',
label: 'Start Date',
property: 'startDate'
},
endDate: {
type: 'input',
defaultValue: '2020-03-02',
label: 'End Date',
property: 'endDate'
},
dynamicColor: {
type: 'boolean',
defaultValue: false,
label: 'Dynamic Color',
group: '',
property: 'dynamicColor',
description: 'Use a dynamic color scale based on data visible in the viewport'
},
colormapId: {
type: 'object-select',
defaultValue: 'cfastie',
label: 'Colormap',
options: COLORMAP_OPTIONS,
property: 'colormapId',
group: ''
},
// kepler's visConfig from kepler.gl https://github.com/foursquare/kepler.gl/blob/490a8938ffa1fac025e8d1997481acc1bffe4abd/src/layers/layer-factory.js#L228
// key `colorRange` is required becuase it is hardcoded in kepler.gl
// to make shallow copy of the visConfig item
// https://github.com/foursquare/kepler.gl/blob/490a8938ffa1fac025e8d1997481acc1bffe4abd/src/reducers/vis-state-merger.js#L736
colorRange: 'colorRange',
linearRescalingFactor: {
defaultValue: [0, 1],
// group: "color"
isRanged: true,
label: 'Linear Rescaling Factor',
property: 'linearRescalingFactor',
range: [0, 1],
step: 0.01,
type: 'number'
},
// Non-linear rescaling for true-color images
// If false, implies linear rescaling
nonLinearRescaling: {
type: 'boolean',
property: 'nonLinearRescaling',
defaultValue: true,
// group: undefined
label: 'Non-Linear Rescaling'
},
gammaContrastFactor: {
defaultValue: 1,
// group: "color"
isRanged: false,
label: 'Gamma Contrast',
property: 'gammaContrastFactor',
range: [0, 3],
step: 0.05,
type: 'number'
},
sigmoidalContrastFactor: {
defaultValue: 0,
// group: "color"
isRanged: false,
label: 'Sigmoidal Contrast',
property: 'sigmoidalContrastFactor',
range: [0, 50],
step: 1,
type: 'number'
},
sigmoidalBiasFactor: {
defaultValue: 0.5,
// group: "color"
isRanged: false,
label: 'Sigmoidal Bias',
property: 'sigmoidalBiasFactor',
range: [0, 1],
step: 0.01,
type: 'number'
},
saturationValue: {
defaultValue: 1,
// group: "color"
isRanged: false,
label: 'Saturation',
property: 'saturationValue',
range: [0, 2],
step: 0.05,
type: 'number'
},
filterEnabled: {
type: 'boolean',
property: 'filterEnabled',
defaultValue: false,
// group: undefined
label: 'Filter'
},
filterRange: {
defaultValue: [-1, 1],
// group: "color"
isRanged: true,
label: 'Filter',
property: 'filterRange',
range: [-1, 1],
step: 0.01,
type: 'number'
},
opacity: {
defaultValue: 1,
// group: "color"
isRanged: false,
label: 'Opacity',
property: 'opacity',
range: [0, 1],
step: 0.05,
type: 'number'
},
_stacQuery: {
defaultValue: null,
type: 'input'
},
singleBandName: {
type: 'object-select',
defaultValue: null,
label: 'Name of single band to render',
// defined dynamically from STAC item/collection
options: [],
property: 'singleBandName',
group: ''
},
enableTerrain: {
type: 'boolean',
defaultValue: true,
label: 'Enable 3D terrain',
group: '',
property: 'enableTerrain',
description: 'Use terrain when terrain data is available. By default enabled for 3D Map.'
},
enableTerrainTopView: {
type: 'boolean',
defaultValue: false,
label: 'Enable in Top view',
group: '',
property: 'enableTerrainTopView'
}
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmFzdGVyVGlsZUxheWVyU2NoZW1hIiwicmVxdWlyZSIsIl90eXBlcyIsIkRBVEFfU09VUkNFX0lEUyIsImV4cG9ydHMiLCJSQVNURVJfQ09MT1JfUkVTRVRfUEFSQU1TIiwiZ2FtbWFDb250cmFzdEZhY3RvciIsInNpZ21vaWRhbENvbnRyYXN0RmFjdG9yIiwic2lnbW9pZGFsQmlhc0ZhY3RvciIsInNhdHVyYXRpb25WYWx1ZSIsImR5bmFtaWNDb2xvciIsIkRFRkFVTFRfU0VOVElORUxfQ09MT1JfREVGQVVMVFMiLCJERUZBVUxUX01PRElTX0NPTE9SX0RFRkFVTFRTIiwiREVGQVVMVF9TRU5USU5FTF9CQU5EX01BUFBJTkciLCJjb2FzdGFsIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwicmVkZWRnZTEiLCJyZWRlZGdlMiIsInJlZGVkZ2UzIiwibmlyIiwibmlyMDgiLCJuaXIwOSIsImNpcnJ1cyIsInN3aXIxMSIsInN3aXIxNiIsInN3aXIxMiIsInN3aXIyMiIsIkRFRkFVTFRfTU9ESVNfQkFORF9NQVBQSU5HIiwic3VyX3JlZmxfYjAxIiwic3VyX3JlZmxfYjAyIiwic3VyX3JlZmxfYjAzIiwic3VyX3JlZmxfYjA0Iiwic3VyX3JlZmxfYjA1Iiwic3VyX3JlZmxfYjA2Iiwic3VyX3JlZmxfYjA3IiwiTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDEiLCJOYWRpcl9SZWZsZWN0YW5jZV9CYW5kMiIsIk5hZGlyX1JlZmxlY3RhbmNlX0JhbmQzIiwiTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDQiLCJOYWRpcl9SZWZsZWN0YW5jZV9CYW5kNSIsIk5hZGlyX1JlZmxlY3RhbmNlX0JhbmQ2IiwiTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDciLCJERUZBVUxUX0xBTkRTQVRfQzJfTDFfQkFORF9NQVBQSU5HIiwiREVGQVVMVF9MQU5EU0FUX0MyX0wyX0JBTkRfTUFQUElORyIsImx3aXIiLCJsd2lyMTEiLCJERUZBVUxUX0JBTkRfTUFQUElOR1MiLCJfZGVmaW5lUHJvcGVydHkyIiwiU0VOVElORUxfMl9MMUMiLCJTRU5USU5FTF8yX0wxQSIsIlNFTlRJTkVMXzJfQzFfTDJBIiwiU0VOVElORUxfMl9QUkVfQzFfTDJBIiwiTEFORFNBVF9DMl9MMSIsIkxBTkRTQVRfQzJfTDIiLCJNT0RJU18wOUExXzA2MSIsIk1PRElTXzQzQTRfMDYxIiwiTU9JRFNfMDlRMV8wNjEiLCJEQVRBX1NPVVJDRV9DT0xPUl9ERUZBVUxUUyIsIlBSRVNFVF9PUFRJT05TIiwidHJ1ZUNvbG9yIiwibGFiZWwiLCJpZCIsIlJhc3RlclRpbGVMYXllclByZXNldHMiLCJiYW5kQ29tYmluYXRpb24iLCJCYW5kQ29tYmluYXRpb24iLCJSZ2IiLCJjb21tb25OYW1lcyIsImluZnJhcmVkIiwiZGVzY3JpcHRpb24iLCJhZ3JpY3VsdHVyZSIsImZvcmVzdEJ1cm4iLCJuZHZpIiwiTm9ybWFsaXplZERpZmZlcmVuY2UiLCJpbmZvVXJsIiwic2F2aSIsIlNvaWxBZGp1c3RlZFZlZ2V0YXRpb25JbmRleCIsIm1zYXZpIiwiTW9kaWZpZWRTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXgiLCJuZG1pIiwibmJyIiwibmJyMiIsInNpbmdsZUJhbmQiLCJTaW5nbGUiLCJaT09NX1JBTkdFUyIsIk1BWF9QSVhFTF9WQUxVRVMiLCJNYXRoIiwicG93IiwiQ0FURUdPUklDQUxfQ09MT1JNQVBfSUQiLCJDT0xPUk1BUF9PUFRJT05TIiwiUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzIiwiY2Zhc3RpZSIsInJwbHVtYm8iLCJzY2h3YXJ6d2FsZCIsInZpcmlkaXMiLCJwbGFzbWEiLCJpbmZlcm5vIiwibWFnbWEiLCJjaXZpZGlzIiwiZ3JleXMiLCJwdXJwbGVzIiwiYmx1ZXMiLCJncmVlbnMiLCJvcmFuZ2VzIiwicmVkcyIsInlsb3JiciIsInlsb3JyZCIsIm9ycmQiLCJwdXJkIiwicmRwdSIsImJ1cHUiLCJnbmJ1IiwicHVidSIsInlsZ25idSIsInB1YnVnbiIsImJ1Z24iLCJ5bGduIiwiYmluYXJ5IiwiZ3JheSIsImJvbmUiLCJwaW5rIiwic3ByaW5nIiwic3VtbWVyIiwiYXV0dW1uIiwid2ludGVyIiwiY29vbCIsIndpc3RpYSIsImhvdCIsImFmbWhvdCIsImdpc3RfaGVhdCIsImNvcHBlciIsInBpeWciLCJwcmduIiwiYnJiZyIsInB1b3IiLCJyZGd5IiwicmRidSIsInJkeWxidSIsInJkeWxnbiIsInNwZWN0cmFsIiwiY29vbHdhcm0iLCJid3IiLCJzZWlzbWljIiwidHdpbGlnaHQiLCJ0d2lsaWdodF9zaGlmdGVkIiwiaHN2IiwiZmxhZyIsInByaXNtIiwib2NlYW4iLCJnaXN0X2VhcnRoIiwidGVycmFpbiIsImdpc3Rfc3Rlcm4iLCJnbnVwbG90IiwiZ251cGxvdDIiLCJjbXJtYXAiLCJjdWJlaGVsaXgiLCJicmciLCJnaXN0X3JhaW5ib3ciLCJyYWluYm93IiwiamV0IiwibmlweV9zcGVjdHJhbCIsImdpc3RfbmNhciIsIlNUQUNfU0VBUkNIX1BST1ZJREVSUyIsInJhc3RlclZpc0NvbmZpZ3MiLCJwcmVzZXQiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwib3B0aW9ucyIsIk9iamVjdCIsInZhbHVlcyIsInByb3BlcnR5IiwiZ3JvdXAiLCJ1c2VTVEFDU2VhcmNoaW5nIiwic3RhY1NlYXJjaFByb3ZpZGVyIiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsImNvbG9ybWFwSWQiLCJjb2xvclJhbmdlIiwibGluZWFyUmVzY2FsaW5nRmFjdG9yIiwiaXNSYW5nZWQiLCJyYW5nZSIsInN0ZXAiLCJub25MaW5lYXJSZXNjYWxpbmciLCJmaWx0ZXJFbmFibGVkIiwiZmlsdGVyUmFuZ2UiLCJvcGFjaXR5IiwiX3N0YWNRdWVyeSIsInNpbmdsZUJhbmROYW1lIiwiZW5hYmxlVGVycmFpbiIsImVuYWJsZVRlcnJhaW5Ub3BWaWV3Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci10aWxlL2NvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1Jhc3RlclRpbGVMYXllckNvbG9yTWFwcywgUmFzdGVyVGlsZUxheWVyUHJlc2V0c30gZnJvbSAnLi9yYXN0ZXItdGlsZS1sYXllci1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgVmlzQ29uZmlnQm9vbGVhbixcbiAgVmlzQ29uZmlnTnVtYmVyLFxuICBWaXNDb25maWdSYW5nZSxcbiAgVmlzQ29uZmlnT2JqZWN0U2VsZWN0aW9uLFxuICBWaXNDb25maWdJbnB1dFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtDb2xvclJlc2NhbGluZywgQ29uZmlnT3B0aW9uLCBQcmVzZXREYXRhLCBCYW5kQ29tYmluYXRpb259IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEtub3duIERhdGEgU291cmNlIElEcyB0aGF0IHdvcmsgd2l0aCBjdXJyZW50IFNUQUMgTGF5ZXIgbGltaXRhdGlvbnNcbiAqL1xuZXhwb3J0IGVudW0gREFUQV9TT1VSQ0VfSURTIHtcbiAgU0VOVElORUxfMl9MMUMgPSAnc2VudGluZWwtMi1sMWMnLFxuICBTRU5USU5FTF8yX0wxQSA9ICdzZW50aW5lbC0yLWwyYScsXG4gIFNFTlRJTkVMXzJfQzFfTDJBID0gJ3NlbnRpbmVsLTItYzEtbDJhJyxcbiAgU0VOVElORUxfMl9QUkVfQzFfTDJBID0gJ3NlbnRpbmVsLTItcHJlLWMxLWwyYScsXG4gIExBTkRTQVRfQzJfTDEgPSAnbGFuZHNhdC1jMi1sMScsXG4gIExBTkRTQVRfQzJfTDIgPSAnbGFuZHNhdC1jMi1sMicsXG4gIE1PRElTXzA5QTFfMDYxID0gJ21vZGlzLTA5QTEtMDYxJyxcbiAgTU9ESVNfNDNBNF8wNjEgPSAnbW9kaXMtNDNBNC0wNjEnLFxuICBNT0lEU18wOVExXzA2MSA9ICdtb2Rpcy0wOVExLTA2MSdcbn1cblxuZXhwb3J0IGNvbnN0IFJBU1RFUl9DT0xPUl9SRVNFVF9QQVJBTVMgPSB7XG4gIGdhbW1hQ29udHJhc3RGYWN0b3I6IDEsXG4gIHNpZ21vaWRhbENvbnRyYXN0RmFjdG9yOiAwLFxuICBzaWdtb2lkYWxCaWFzRmFjdG9yOiAwLjUsXG4gIHNhdHVyYXRpb25WYWx1ZTogMS4wLFxuICBkeW5hbWljQ29sb3I6IGZhbHNlXG59O1xuXG5jb25zdCBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTID0ge1xuICBnYW1tYUNvbnRyYXN0RmFjdG9yOiAyLjIsXG4gIHNpZ21vaWRhbENvbnRyYXN0RmFjdG9yOiAyMyxcbiAgc2lnbW9pZGFsQmlhc0ZhY3RvcjogMC4xMixcbiAgc2F0dXJhdGlvblZhbHVlOiAyLjBcbn07XG5cbmNvbnN0IERFRkFVTFRfTU9ESVNfQ09MT1JfREVGQVVMVFMgPSB7XG4gIGdhbW1hQ29udHJhc3RGYWN0b3I6IDIuMCxcbiAgc2lnbW9pZGFsQ29udHJhc3RGYWN0b3I6IDgsXG4gIHNpZ21vaWRhbEJpYXNGYWN0b3I6IDAuMTMsXG4gIHNhdHVyYXRpb25WYWx1ZTogMS4xXG59O1xuXG5jb25zdCBERUZBVUxUX1NFTlRJTkVMX0JBTkRfTUFQUElORyA9IHtcbiAgY29hc3RhbDogJ0IwMScsXG4gIGJsdWU6ICdCMDInLFxuICBncmVlbjogJ0IwMycsXG4gIHJlZDogJ0IwNCcsXG4gIHJlZGVkZ2UxOiAnQjA1JyxcbiAgcmVkZWRnZTI6ICdCMDYnLFxuICByZWRlZGdlMzogJ0IwNycsXG4gIG5pcjogJ0IwOCcsXG4gIG5pcjA4OiAnQjhBJyxcbiAgbmlyMDk6ICdCMDknLFxuICBjaXJydXM6ICdCMTAnLFxuICBzd2lyMTE6ICdCMTEnLFxuICBzd2lyMTY6ICdCMTEnLFxuICBzd2lyMTI6ICdCMTInLFxuICBzd2lyMjI6ICdCMTInXG59O1xuXG5jb25zdCBERUZBVUxUX01PRElTX0JBTkRfTUFQUElORyA9IHtcbiAgc3VyX3JlZmxfYjAxOiAnQjAxJyxcbiAgc3VyX3JlZmxfYjAyOiAnQjAyJyxcbiAgc3VyX3JlZmxfYjAzOiAnQjAzJyxcbiAgc3VyX3JlZmxfYjA0OiAnQjA0JyxcbiAgc3VyX3JlZmxfYjA1OiAnQjA1JyxcbiAgc3VyX3JlZmxfYjA2OiAnQjA2JyxcbiAgc3VyX3JlZmxfYjA3OiAnQjA3JyxcbiAgTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDE6ICdCMDEnLFxuICBOYWRpcl9SZWZsZWN0YW5jZV9CYW5kMjogJ0IwMicsXG4gIE5hZGlyX1JlZmxlY3RhbmNlX0JhbmQzOiAnQjAzJyxcbiAgTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDQ6ICdCMDQnLFxuICBOYWRpcl9SZWZsZWN0YW5jZV9CYW5kNTogJ0IwNScsXG4gIE5hZGlyX1JlZmxlY3RhbmNlX0JhbmQ2OiAnQjA2JyxcbiAgTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDc6ICdCMDcnXG59O1xuXG5jb25zdCBERUZBVUxUX0xBTkRTQVRfQzJfTDFfQkFORF9NQVBQSU5HID0ge1xuICBncmVlbjogJ0IwMScsXG4gIHJlZDogJ0IwMicsXG4gIG5pcjA4OiAnQjAzJyxcbiAgbmlyMDk6ICdCMDQnXG59O1xuXG5jb25zdCBERUZBVUxUX0xBTkRTQVRfQzJfTDJfQkFORF9NQVBQSU5HID0ge1xuICBibHVlOiAnQjAxJyxcbiAgZ3JlZW46ICdCMDInLFxuICByZWQ6ICdCMDMnLFxuICBuaXIwODogJ0IwNCcsXG4gIHN3aXIxNjogJ0IwNScsXG4gIGx3aXI6ICdCMDYnLFxuICBzd2lyMjI6ICdCMDcnLFxuICBjb2FzdGFsOiAnQjAxJyxcbiAgbHdpcjExOiAnQjA2J1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFORF9NQVBQSU5HUyA9IHtcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0wxQ106IERFRkFVTFRfU0VOVElORUxfQkFORF9NQVBQSU5HLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfTDFBXTogREVGQVVMVF9TRU5USU5FTF9CQU5EX01BUFBJTkcsXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9DMV9MMkFdOiBERUZBVUxUX1NFTlRJTkVMX0JBTkRfTUFQUElORyxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX1BSRV9DMV9MMkFdOiBERUZBVUxUX1NFTlRJTkVMX0JBTkRfTUFQUElORyxcbiAgW0RBVEFfU09VUkNFX0lEUy5MQU5EU0FUX0MyX0wxXTogREVGQVVMVF9MQU5EU0FUX0MyX0wxX0JBTkRfTUFQUElORyxcbiAgW0RBVEFfU09VUkNFX0lEUy5MQU5EU0FUX0MyX0wyXTogREVGQVVMVF9MQU5EU0FUX0MyX0wyX0JBTkRfTUFQUElORyxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0RJU18wOUExXzA2MV06IERFRkFVTFRfTU9ESVNfQkFORF9NQVBQSU5HLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PRElTXzQzQTRfMDYxXTogREVGQVVMVF9NT0RJU19CQU5EX01BUFBJTkcsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9JRFNfMDlRMV8wNjFdOiBERUZBVUxUX01PRElTX0JBTkRfTUFQUElOR1xufTtcblxuLyoqXG4gKiBQZXItZGF0YSBzb3VyY2UgY29sb3IgcmVzY2FsaW5nIGRlZmF1bHRzIGZvciBrbm93biBjb2xsZWN0aW9uc1xuICovXG5leHBvcnQgY29uc3QgREFUQV9TT1VSQ0VfQ09MT1JfREVGQVVMVFM6IFJlY29yZDxEQVRBX1NPVVJDRV9JRFMsIENvbG9yUmVzY2FsaW5nPiA9IHtcbiAgLy8gTm90ZTogZ29vZCBmb3IgVHJ1ZSBDb2xvciwgdG9vIHNhdHVyYXRlZCBmb3Igb3RoZXIgY2hhbm5lbHNcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0wxQ106IERFRkFVTFRfU0VOVElORUxfQ09MT1JfREVGQVVMVFMsXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9MMUFdOiBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfQzFfTDJBXTogREVGQVVMVF9TRU5USU5FTF9DT0xPUl9ERUZBVUxUUyxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX1BSRV9DMV9MMkFdOiBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTLFxuICBbREFUQV9TT1VSQ0VfSURTLkxBTkRTQVRfQzJfTDFdOiBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTLFxuICBbREFUQV9TT1VSQ0VfSURTLkxBTkRTQVRfQzJfTDJdOiBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PRElTXzA5QTFfMDYxXTogREVGQVVMVF9NT0RJU19DT0xPUl9ERUZBVUxUUyxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0RJU180M0E0XzA2MV06IERFRkFVTFRfTU9ESVNfQ09MT1JfREVGQVVMVFMsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9JRFNfMDlRMV8wNjFdOiBERUZBVUxUX01PRElTX0NPTE9SX0RFRkFVTFRTXG59O1xuXG4vKipcbiAqIEF2YWlsYWJsZSBcInByZXNldHNcIlxuICpcbiAqIEkgZGVmaW5lIGEgXCJwcmVzZXRcIiBhcyBvbmUgc3BlY2lmaWMgbWFubmVyIG9mIGxvYWRpbmcgYmFuZHMgYW5kIGNvbWJpbmluZyB0aGVtIG9uIHRoZSBmcm9udGVuZC5cbiAqIEluIHRoZSBmdXR1cmUgSSBleHBlY3Qgd2UnbGwgd2FudCBhIFVJIHRoYXQgZ2l2ZXMgdGhlIHVzZXIgZnVsbCBmbGV4aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IFBSRVNFVF9PUFRJT05TOiBSZWNvcmQ8c3RyaW5nLCBQcmVzZXREYXRhPiA9IHtcbiAgdHJ1ZUNvbG9yOiB7XG4gICAgbGFiZWw6ICdUcnVlIENvbG9yJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy50cnVlQ29sb3IsXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uUmdiLFxuICAgIGNvbW1vbk5hbWVzOiBbJ3JlZCcsICdncmVlbicsICdibHVlJ11cbiAgfSxcbiAgaW5mcmFyZWQ6IHtcbiAgICBsYWJlbDogJ0luZnJhcmVkJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5pbmZyYXJlZCxcbiAgICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbi5SZ2IsXG4gICAgY29tbW9uTmFtZXM6IFsnbmlyJywgJ3JlZCcsICdncmVlbiddLFxuICAgIGRlc2NyaXB0aW9uOiAnRmFsc2UtY29sb3IgaW5mcmFyZWQgY29tcG9zaXRlLiBOZWFyLWluZnJhcmVkLCByZWQsIGdyZWVuIG1hcHBlZCB0byBSR0InXG4gIH0sXG4gIGFncmljdWx0dXJlOiB7XG4gICAgbGFiZWw6ICdBZ3JpY3VsdHVyZScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMuYWdyaWN1bHR1cmUsXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uUmdiLFxuICAgIGNvbW1vbk5hbWVzOiBbJ3N3aXIxNicsICduaXInLCAnYmx1ZSddLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0ZhbHNlLWNvbG9yIGFncmljdWx0dXJlIGNvbXBvc2l0ZS4gU2hvcnQtd2F2ZSBpbmZyYXJlZCAxLCBuZWFyLWluZnJhcmVkLCBibHVlIG1hcHBlZCB0byBSR0IuJ1xuICB9LFxuICBmb3Jlc3RCdXJuOiB7XG4gICAgbGFiZWw6ICdGb3Jlc3QgQnVybicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMuZm9yZXN0QnVybixcbiAgICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbi5SZ2IsXG4gICAgY29tbW9uTmFtZXM6IFsnc3dpcjIyJywgJ25pcicsICdibHVlJ10sXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnRmFsc2UtY29sb3IgZm9yZXN0IGJ1cm4gY29tcG9zaXRlLiBTaG9ydC13YXZlIGluZnJhcmVkIDIsIG5lYXItaW5mcmFyZWQsIGJsdWUgbWFwcGVkIHRvIFJHQidcbiAgfSxcbiAgbmR2aToge1xuICAgIGxhYmVsOiAnTkRWSScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMubmR2aSxcbiAgICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbi5Ob3JtYWxpemVkRGlmZmVyZW5jZSxcbiAgICBjb21tb25OYW1lczogWyduaXInLCAncmVkJ10sXG4gICAgZGVzY3JpcHRpb246ICdOb3JtYWxpemVkIERpZmZlcmVuY2UgVmVnZXRhdGlvbiBJbmRleCcsXG4gICAgaW5mb1VybDpcbiAgICAgICdodHRwczovL3d3dy51c2dzLmdvdi9jb3JlLXNjaWVuY2Utc3lzdGVtcy9ubGkvbGFuZHNhdC9sYW5kc2F0LW5vcm1hbGl6ZWQtZGlmZmVyZW5jZS12ZWdldGF0aW9uLWluZGV4J1xuICB9LFxuICAvLyBDb21tZW50IHRoaXMgb3V0IGZvciBub3csIGJlY2F1c2UgaW4gdGVzdGluZyBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYW4gb3ZlcmZsb3cgb2Ygc29tZSBzb3J0O1xuICAvLyBpbmRleCB2YWx1ZXMgc2hvdWxkIGJlIGJldHdlZW4gLTEgYW5kIDEsIGJ1dCB2YWx1ZXMgbG9vayB3YXkgb3V0IG9mIGJvdW5kc1xuICAvLyBldmk6IHtcbiAgLy8gICBsYWJlbDogJ0VWSScsXG4gIC8vICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMuZXZpLFxuICAvLyAgIGJhbmRDb21iaW5hdGlvbjogJ2VuaGFuY2VkVmVnZXRhdGlvbkluZGV4JyxcbiAgLy8gICBjb21tb25OYW1lczogWyduaXInLCAncmVkJywgJ2JsdWUnXVxuICAvLyB9LFxuICBzYXZpOiB7XG4gICAgbGFiZWw6ICdTQVZJJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5zYXZpLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLlNvaWxBZGp1c3RlZFZlZ2V0YXRpb25JbmRleCxcbiAgICBjb21tb25OYW1lczogWyduaXInLCAncmVkJ10sXG4gICAgZGVzY3JpcHRpb246ICdTb2lsIEFkanVzdGVkIFZlZ2V0YXRpb24gSW5kZXgnLFxuICAgIGluZm9Vcmw6XG4gICAgICAnaHR0cHM6Ly93d3cudXNncy5nb3YvY29yZS1zY2llbmNlLXN5c3RlbXMvbmxpL2xhbmRzYXQvbGFuZHNhdC1zb2lsLWFkanVzdGVkLXZlZ2V0YXRpb24taW5kZXgnXG4gIH0sXG4gIG1zYXZpOiB7XG4gICAgbGFiZWw6ICdNU0FWSScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMubXNhdmksXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uTW9kaWZpZWRTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXgsXG4gICAgY29tbW9uTmFtZXM6IFsnbmlyJywgJ3JlZCddLFxuICAgIGRlc2NyaXB0aW9uOiAnTW9kaWZpZWQgU29pbCBBZGp1c3RlZCBWZWdldGF0aW9uIEluZGV4JyxcbiAgICBpbmZvVXJsOlxuICAgICAgJ2h0dHBzOi8vd3d3LnVzZ3MuZ292L2NvcmUtc2NpZW5jZS1zeXN0ZW1zL25saS9sYW5kc2F0L2xhbmRzYXQtbW9kaWZpZWQtc29pbC1hZGp1c3RlZC12ZWdldGF0aW9uLWluZGV4J1xuICB9LFxuICBuZG1pOiB7XG4gICAgbGFiZWw6ICdORE1JJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5uZG1pLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLk5vcm1hbGl6ZWREaWZmZXJlbmNlLFxuICAgIGNvbW1vbk5hbWVzOiBbJ25pcicsICdzd2lyMTYnXSxcbiAgICBkZXNjcmlwdGlvbjogJ05vcm1hbGl6ZWQgRGlmZmVyZW5jZSBNb2lzdHVyZSBJbmRleCcsXG4gICAgaW5mb1VybDpcbiAgICAgICdodHRwczovL3d3dy51c2dzLmdvdi9jb3JlLXNjaWVuY2Utc3lzdGVtcy9ubGkvbGFuZHNhdC9ub3JtYWxpemVkLWRpZmZlcmVuY2UtbW9pc3R1cmUtaW5kZXgnXG4gIH0sXG4gIG5icjoge1xuICAgIGxhYmVsOiAnTkJSJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5uYnIsXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uTm9ybWFsaXplZERpZmZlcmVuY2UsXG4gICAgY29tbW9uTmFtZXM6IFsnbmlyJywgJ3N3aXIyMiddLFxuICAgIGRlc2NyaXB0aW9uOiAnTm9ybWFsaXplZCBCdXJuIFJhdGlvJyxcbiAgICBpbmZvVXJsOiAnaHR0cHM6Ly93d3cudXNncy5nb3YvY29yZS1zY2llbmNlLXN5c3RlbXMvbmxpL2xhbmRzYXQvbGFuZHNhdC1ub3JtYWxpemVkLWJ1cm4tcmF0aW8nXG4gIH0sXG4gIG5icjI6IHtcbiAgICBsYWJlbDogJ05CUiAyJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5uYnIyLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLk5vcm1hbGl6ZWREaWZmZXJlbmNlLFxuICAgIGNvbW1vbk5hbWVzOiBbJ3N3aXIxNicsICdzd2lyMjInXSxcbiAgICBkZXNjcmlwdGlvbjogJ05vcm1hbGl6ZWQgQnVybiBSYXRpbyAyJyxcbiAgICBpbmZvVXJsOiAnaHR0cHM6Ly93d3cudXNncy5nb3YvY29yZS1zY2llbmNlLXN5c3RlbXMvbmxpL2xhbmRzYXQvbGFuZHNhdC1ub3JtYWxpemVkLWJ1cm4tcmF0aW8tMidcbiAgfSxcbiAgc2luZ2xlQmFuZDoge1xuICAgIGxhYmVsOiAnU2luZ2xlIEJhbmQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJQcmVzZXRzLnNpbmdsZUJhbmQsXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uU2luZ2xlLFxuICAgIGRlc2NyaXB0aW9uOiAnUmVuZGVyIGEgc2luZ2xlIGJhbmQgZGF0YSdcbiAgfVxufTtcblxuLyoqXG4gKiBWYWxpZCB6b29tIHJhbmdlcyBmb3IgZWFjaCBkYXRhIHNvdXJjZVxuICpcbiAqIFRoZSBtYXhpbXVtIHpvb20gaXMgZGVyaXZlZCBmcm9tIHRoZSByZXNvbHV0aW9uIG9mIGVhY2ggZGF0YSBzb3VyY2UuXG4gKiBUaGUgbWluaW11bSB6b29tIHJlbGF0ZXMgdG8gdGhlIG51bWJlciBvZiBvdmVydmlld3MgaW4gdGhlIENPR3MgYXQgdGhlIHNvdXJjZS4gVGhlIG1vcmVcbiAqIG92ZXJ2aWV3cywgdGhlIGVhc2llciBpdCBpcyB0byBjcmVhdGUgZG93bnNhbXBsZWQgdGlsZXMuIFRoZSBtaW5pbXVtIHpvb21zIGNhbiBiZSByZWR1Y2VkIGJ1dCBpdFxuICogdGFrZXMgbG9uZ2VyIHRvIHNlcnZlIGxvdy16b29tIHRpbGVzIHNpbmNlIHRoZSBzZXJ2ZXIgbXVzdCByZWFkIGZyb20gbWFueSBpbWFnZSBzb3VyY2VzLlxuICovXG4vLyBUT0RPOiB1c2UgcmVuZGVyOm1heF9vdmVydmlld19nc2QgZnJvbSBTVEFDXG5leHBvcnQgY29uc3QgWk9PTV9SQU5HRVM6IFJlY29yZDxEQVRBX1NPVVJDRV9JRFMsIFtudW1iZXIsIG51bWJlcl0+ID0ge1xuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfQzFfTDJBXTogWzgsIDEzXSxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0wxQV06IFs4LCAxM10sXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9MMUNdOiBbOCwgMTNdLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfUFJFX0MxX0wyQV06IFs4LCAxM10sXG4gIFtEQVRBX1NPVVJDRV9JRFMuTEFORFNBVF9DMl9MMV06IFs3LCAxMl0sXG4gIFtEQVRBX1NPVVJDRV9JRFMuTEFORFNBVF9DMl9MMl06IFs3LCAxMl0sXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9ESVNfMDlBMV8wNjFdOiBbNywgMTNdLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PRElTXzQzQTRfMDYxXTogWzcsIDEzXSxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0lEU18wOVExXzA2MV06IFs3LCAxM11cbn07XG5cbi8qKlxuICogQml0IGRlcHRoIGZvciBlYWNoIGRhdGEgc291cmNlXG4gKiBTZW50aW5lbC0yIGlzIDEyLWJpdDsgTGFuZHNhdC04IGlzIDE2LWJpdDsgUGxhbmV0IGlzIDEyLWJpdDsgTkFJUCBpcyA4LWJpdFxuICovXG4vLyBUT0RPOiB1c2UgcmFuZ2UgdmFsdWUgYW5kIGR0eXBlIGluIFNUQUMgY29sbGVjdGlvbiBpbnN0ZWFkIG9mIHRoaXNcbmV4cG9ydCBjb25zdCBNQVhfUElYRUxfVkFMVUVTOiBSZWNvcmQ8REFUQV9TT1VSQ0VfSURTLCBudW1iZXI+ID0ge1xuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfQzFfTDJBXTogTWF0aC5wb3coMiwgMTIpIC0gMSxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0wxQV06IE1hdGgucG93KDIsIDEyKSAtIDEsXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9MMUNdOiBNYXRoLnBvdygyLCAxMikgLSAxLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfUFJFX0MxX0wyQV06IE1hdGgucG93KDIsIDEyKSAtIDEsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTEFORFNBVF9DMl9MMV06IE1hdGgucG93KDIsIDE2KSAtIDEsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTEFORFNBVF9DMl9MMl06IE1hdGgucG93KDIsIDE2KSAtIDEsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9ESVNfMDlBMV8wNjFdOiBNYXRoLnBvdygyLCAxMikgLSAxLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PRElTXzQzQTRfMDYxXTogTWF0aC5wb3coMiwgMTIpIC0gMSxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0lEU18wOVExXzA2MV06IE1hdGgucG93KDIsIDEyKSAtIDFcbn07XG5cbi8qKlxuICogSWQgZm9yIGNhdGVnb3JpY2FsIGNvbG9ybWFwLiBVbmxpa2UgbW9zdCBjb2xvcm1hcHMuIENhdGVnb3JpY2FsIGNvbG9ybWFwIGltYWdlIGlzIGNyZWF0ZWRcbiAqIGZyb20gY29sb3JtYXAgc2V0IGluIHZpc0NvbmZpZ1xuICovXG5leHBvcnQgY29uc3QgQ0FURUdPUklDQUxfQ09MT1JNQVBfSUQgPSAnX2NhdGVnb3JpY2FsJztcblxuLyoqXG4gKiBBIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbG9ybWFwcy4gQ29sb3JtYXBzIGFyZSBvcmlnaW5hbGx5IGRlcml2ZWQgZnJvbVxuICogbWF0cGxvdGxpYiwgdGhlbiB2aWEgcmlvLXRpbGVyLiBDb2xvcm1hcHMgYXJlIDEweDI1NiBQTkcgaW1hZ2VzIHRoYXQgYXJlXG4gKiBsb2FkZWQgYXMgdGV4dHVyZXNcbiAqL1xuXG5leHBvcnQgY29uc3QgQ09MT1JNQVBfT1BUSU9OUzogcmVhZG9ubHkgQ29uZmlnT3B0aW9uW10gPSBbXG4gIHtcbiAgICBsYWJlbDogJ0NmYXN0aWUnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuY2Zhc3RpZVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdScGx1bWJvJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnJwbHVtYm9cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2Nod2FyendhbGQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuc2Nod2FyendhbGRcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVmlyaWRpcycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy52aXJpZGlzXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1BsYXNtYScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5wbGFzbWFcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW5mZXJubycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5pbmZlcm5vXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01hZ21hJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLm1hZ21hXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NpdmlkaXMnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuY2l2aWRpc1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdHcmV5cycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5ncmV5c1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQdXJwbGVzJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnB1cnBsZXNcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQmx1ZXMnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYmx1ZXNcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnR3JlZW5zJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmdyZWVuc1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdPcmFuZ2VzJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLm9yYW5nZXNcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmVkcycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5yZWRzXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1lsLU9yLUJyJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnlsb3JiclxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdZbC1Pci1SZCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy55bG9ycmRcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnT3ItUmQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMub3JyZFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQdS1SZCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5wdXJkXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1JkLVB1JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnJkcHVcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQnUtUHUnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYnVwdVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdHbi1CdScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5nbmJ1XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1B1LUJ1JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnB1YnVcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnWWwtR24tQnUnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMueWxnbmJ1XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1B1LUJ1LUduJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnB1YnVnblxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCbHVlLUduJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmJ1Z25cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnWWwtR24nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMueWxnblxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdXLW4tQicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5iaW5hcnlcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQi1uLVcnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuZ3JheVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCb25lJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmJvbmVcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUGluaycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5waW5rXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NwcmluZycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5zcHJpbmdcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3VtbWVyJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnN1bW1lclxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdBdXR1bW4nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYXV0dW1uXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1dpbnRlcicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy53aW50ZXJcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29vbCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5jb29sXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1dpc3RpYScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy53aXN0aWFcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSG90JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmhvdFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdBZm1ob3QnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYWZtaG90XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0hlYXQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuZ2lzdF9oZWF0XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvcHBlcicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5jb3BwZXJcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUGktR3JlZW4nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucGl5Z1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQci1HbicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5wcmduXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0JyLUJnJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmJyYmdcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUHUtT3InLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucHVvclxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdSZC1HeScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5yZGd5XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1JkLUJ1JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnJkYnVcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmQtWWwtQnUnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucmR5bGJ1XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1JkLVlsLUduJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnJkeWxnblxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTcGVjdHJhbCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5zcGVjdHJhbFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb29sLVdhcm0nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuY29vbHdhcm1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQi1XLVInLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYndyXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NlaXNtaWMnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuc2Vpc21pY1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUd2lsaWdodCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy50d2lsaWdodFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUd2lsaWdodCBTaGlmdGVkJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnR3aWxpZ2h0X3NoaWZ0ZWRcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSFNWJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmhzdlxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdGbGFnJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmZsYWdcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUHJpc20nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucHJpc21cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnT2NlYW4nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMub2NlYW5cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnR2lzdCBFYXJ0aCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5naXN0X2VhcnRoXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RlcnJhaW4nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMudGVycmFpblxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdHaXN0IFN0ZXJuJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmdpc3Rfc3Rlcm5cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnR251cGxvdCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5nbnVwbG90XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0dudXBsb3QyJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmdudXBsb3QyXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0Ntcm1hcCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5jbXJtYXBcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ3ViZWhlbGl4JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmN1YmVoZWxpeFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCcmcnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYnJnXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0dpc3QgUmFpbmJvdycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5naXN0X3JhaW5ib3dcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmFpbmJvdycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5yYWluYm93XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0pldCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5qZXRcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTmlweSBTcGVjdHJhbCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5uaXB5X3NwZWN0cmFsXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0dpc3QgTkNBUicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5naXN0X25jYXJcbiAgfVxuXTtcblxuY29uc3QgU1RBQ19TRUFSQ0hfUFJPVklERVJTOiBDb25maWdPcHRpb25bXSA9IFtcbiAgLy8ge1xuICAvLyAgIGxhYmVsOiAnTWljcm9zb2Z0IFBsYW5ldGFyeSBDb21wdXRlcicsXG4gIC8vICAgaWQ6ICdtaWNyb3NvZnQnXG4gIC8vIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VsZW1lbnQgODQgRWFydGggU2VhcmNoIChBV1MpJyxcbiAgICBpZDogJ2VhcnRoLXNlYXJjaCdcbiAgfVxuXTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIGJlIGV4cG9zZWQgdGhyb3VnaCB0aGUgVUlcbiAqL1xuZXhwb3J0IGNvbnN0IHJhc3RlclZpc0NvbmZpZ3MgPSB7XG4gIHByZXNldDoge1xuICAgIHR5cGU6ICdvYmplY3Qtc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cnVlQ29sb3InLFxuICAgIGxhYmVsOiAnUHJlc2V0JyxcbiAgICBvcHRpb25zOiBPYmplY3QudmFsdWVzKFBSRVNFVF9PUFRJT05TKSxcbiAgICBwcm9wZXJ0eTogJ3ByZXNldCcsXG4gICAgZ3JvdXA6ICcnXG4gIH0gYXMgVmlzQ29uZmlnT2JqZWN0U2VsZWN0aW9uLFxuICB1c2VTVEFDU2VhcmNoaW5nOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIHByb3BlcnR5OiAndXNlU1RBQ1NlYXJjaGluZycsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ1VzZSBTVEFDIFNlYXJjaGluZydcbiAgfSBhcyBWaXNDb25maWdCb29sZWFuLFxuICBzdGFjU2VhcmNoUHJvdmlkZXI6IHtcbiAgICB0eXBlOiAnb2JqZWN0LXNlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiAnZWFydGgtc2VhcmNoJyxcbiAgICBsYWJlbDogJ1NUQUMgU2VhcmNoIFByb3ZpZGVyJyxcbiAgICBvcHRpb25zOiBTVEFDX1NFQVJDSF9QUk9WSURFUlMsXG4gICAgcHJvcGVydHk6ICdzdGFjU2VhcmNoUHJvdmlkZXInXG4gIH0gYXMgVmlzQ29uZmlnT2JqZWN0U2VsZWN0aW9uLFxuICBzdGFydERhdGU6IHtcbiAgICB0eXBlOiAnaW5wdXQnLFxuICAgIGRlZmF1bHRWYWx1ZTogJzIwMjAtMDItMDInLFxuICAgIGxhYmVsOiAnU3RhcnQgRGF0ZScsXG4gICAgcHJvcGVydHk6ICdzdGFydERhdGUnXG4gIH0gYXMgVmlzQ29uZmlnSW5wdXQsXG4gIGVuZERhdGU6IHtcbiAgICB0eXBlOiAnaW5wdXQnLFxuICAgIGRlZmF1bHRWYWx1ZTogJzIwMjAtMDMtMDInLFxuICAgIGxhYmVsOiAnRW5kIERhdGUnLFxuICAgIHByb3BlcnR5OiAnZW5kRGF0ZSdcbiAgfSBhcyBWaXNDb25maWdJbnB1dCxcbiAgZHluYW1pY0NvbG9yOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdEeW5hbWljIENvbG9yJyxcbiAgICBncm91cDogJycsXG4gICAgcHJvcGVydHk6ICdkeW5hbWljQ29sb3InLFxuICAgIGRlc2NyaXB0aW9uOiAnVXNlIGEgZHluYW1pYyBjb2xvciBzY2FsZSBiYXNlZCBvbiBkYXRhIHZpc2libGUgaW4gdGhlIHZpZXdwb3J0J1xuICB9IGFzIFZpc0NvbmZpZ0Jvb2xlYW4sXG4gIGNvbG9ybWFwSWQ6IHtcbiAgICB0eXBlOiAnb2JqZWN0LXNlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiAnY2Zhc3RpZScsXG4gICAgbGFiZWw6ICdDb2xvcm1hcCcsXG4gICAgb3B0aW9uczogQ09MT1JNQVBfT1BUSU9OUyxcbiAgICBwcm9wZXJ0eTogJ2NvbG9ybWFwSWQnLFxuICAgIGdyb3VwOiAnJ1xuICB9IGFzIFZpc0NvbmZpZ09iamVjdFNlbGVjdGlvbixcbiAgLy8ga2VwbGVyJ3MgdmlzQ29uZmlnIGZyb20ga2VwbGVyLmdsIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3Vyc3F1YXJlL2tlcGxlci5nbC9ibG9iLzQ5MGE4OTM4ZmZhMWZhYzAyNWU4ZDE5OTc0ODFhY2MxYmZmZTRhYmQvc3JjL2xheWVycy9sYXllci1mYWN0b3J5LmpzI0wyMjhcbiAgLy8ga2V5IGBjb2xvclJhbmdlYCBpcyByZXF1aXJlZCBiZWN1YXNlIGl0IGlzIGhhcmRjb2RlZCBpbiBrZXBsZXIuZ2xcbiAgLy8gdG8gbWFrZSBzaGFsbG93IGNvcHkgb2YgdGhlIHZpc0NvbmZpZyBpdGVtXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3Vyc3F1YXJlL2tlcGxlci5nbC9ibG9iLzQ5MGE4OTM4ZmZhMWZhYzAyNWU4ZDE5OTc0ODFhY2MxYmZmZTRhYmQvc3JjL3JlZHVjZXJzL3Zpcy1zdGF0ZS1tZXJnZXIuanMjTDczNlxuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZScgYXMgY29uc3QsXG4gIGxpbmVhclJlc2NhbGluZ0ZhY3Rvcjoge1xuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDFdLFxuICAgIC8vIGdyb3VwOiBcImNvbG9yXCJcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICBsYWJlbDogJ0xpbmVhciBSZXNjYWxpbmcgRmFjdG9yJyxcbiAgICBwcm9wZXJ0eTogJ2xpbmVhclJlc2NhbGluZ0ZhY3RvcicsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIHR5cGU6ICdudW1iZXInXG4gIH0gYXMgVmlzQ29uZmlnUmFuZ2UsXG4gIC8vIE5vbi1saW5lYXIgcmVzY2FsaW5nIGZvciB0cnVlLWNvbG9yIGltYWdlc1xuICAvLyBJZiBmYWxzZSwgaW1wbGllcyBsaW5lYXIgcmVzY2FsaW5nXG4gIG5vbkxpbmVhclJlc2NhbGluZzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBwcm9wZXJ0eTogJ25vbkxpbmVhclJlc2NhbGluZycsXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgIC8vIGdyb3VwOiB1bmRlZmluZWRcbiAgICBsYWJlbDogJ05vbi1MaW5lYXIgUmVzY2FsaW5nJ1xuI