kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
622 lines (613 loc) • 73 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 3D terrain when available. Only affects Map View in 3D mode.'
}
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmFzdGVyVGlsZUxheWVyU2NoZW1hIiwicmVxdWlyZSIsIl90eXBlcyIsIkRBVEFfU09VUkNFX0lEUyIsImV4cG9ydHMiLCJSQVNURVJfQ09MT1JfUkVTRVRfUEFSQU1TIiwiZ2FtbWFDb250cmFzdEZhY3RvciIsInNpZ21vaWRhbENvbnRyYXN0RmFjdG9yIiwic2lnbW9pZGFsQmlhc0ZhY3RvciIsInNhdHVyYXRpb25WYWx1ZSIsImR5bmFtaWNDb2xvciIsIkRFRkFVTFRfU0VOVElORUxfQ09MT1JfREVGQVVMVFMiLCJERUZBVUxUX01PRElTX0NPTE9SX0RFRkFVTFRTIiwiREVGQVVMVF9TRU5USU5FTF9CQU5EX01BUFBJTkciLCJjb2FzdGFsIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwicmVkZWRnZTEiLCJyZWRlZGdlMiIsInJlZGVkZ2UzIiwibmlyIiwibmlyMDgiLCJuaXIwOSIsImNpcnJ1cyIsInN3aXIxMSIsInN3aXIxNiIsInN3aXIxMiIsInN3aXIyMiIsIkRFRkFVTFRfTU9ESVNfQkFORF9NQVBQSU5HIiwic3VyX3JlZmxfYjAxIiwic3VyX3JlZmxfYjAyIiwic3VyX3JlZmxfYjAzIiwic3VyX3JlZmxfYjA0Iiwic3VyX3JlZmxfYjA1Iiwic3VyX3JlZmxfYjA2Iiwic3VyX3JlZmxfYjA3IiwiTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDEiLCJOYWRpcl9SZWZsZWN0YW5jZV9CYW5kMiIsIk5hZGlyX1JlZmxlY3RhbmNlX0JhbmQzIiwiTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDQiLCJOYWRpcl9SZWZsZWN0YW5jZV9CYW5kNSIsIk5hZGlyX1JlZmxlY3RhbmNlX0JhbmQ2IiwiTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDciLCJERUZBVUxUX0xBTkRTQVRfQzJfTDFfQkFORF9NQVBQSU5HIiwiREVGQVVMVF9MQU5EU0FUX0MyX0wyX0JBTkRfTUFQUElORyIsImx3aXIiLCJsd2lyMTEiLCJERUZBVUxUX0JBTkRfTUFQUElOR1MiLCJfZGVmaW5lUHJvcGVydHkyIiwiU0VOVElORUxfMl9MMUMiLCJTRU5USU5FTF8yX0wxQSIsIlNFTlRJTkVMXzJfQzFfTDJBIiwiU0VOVElORUxfMl9QUkVfQzFfTDJBIiwiTEFORFNBVF9DMl9MMSIsIkxBTkRTQVRfQzJfTDIiLCJNT0RJU18wOUExXzA2MSIsIk1PRElTXzQzQTRfMDYxIiwiTU9JRFNfMDlRMV8wNjEiLCJEQVRBX1NPVVJDRV9DT0xPUl9ERUZBVUxUUyIsIlBSRVNFVF9PUFRJT05TIiwidHJ1ZUNvbG9yIiwibGFiZWwiLCJpZCIsIlJhc3RlclRpbGVMYXllclByZXNldHMiLCJiYW5kQ29tYmluYXRpb24iLCJCYW5kQ29tYmluYXRpb24iLCJSZ2IiLCJjb21tb25OYW1lcyIsImluZnJhcmVkIiwiZGVzY3JpcHRpb24iLCJhZ3JpY3VsdHVyZSIsImZvcmVzdEJ1cm4iLCJuZHZpIiwiTm9ybWFsaXplZERpZmZlcmVuY2UiLCJpbmZvVXJsIiwic2F2aSIsIlNvaWxBZGp1c3RlZFZlZ2V0YXRpb25JbmRleCIsIm1zYXZpIiwiTW9kaWZpZWRTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXgiLCJuZG1pIiwibmJyIiwibmJyMiIsInNpbmdsZUJhbmQiLCJTaW5nbGUiLCJaT09NX1JBTkdFUyIsIk1BWF9QSVhFTF9WQUxVRVMiLCJNYXRoIiwicG93IiwiQ0FURUdPUklDQUxfQ09MT1JNQVBfSUQiLCJDT0xPUk1BUF9PUFRJT05TIiwiUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzIiwiY2Zhc3RpZSIsInJwbHVtYm8iLCJzY2h3YXJ6d2FsZCIsInZpcmlkaXMiLCJwbGFzbWEiLCJpbmZlcm5vIiwibWFnbWEiLCJjaXZpZGlzIiwiZ3JleXMiLCJwdXJwbGVzIiwiYmx1ZXMiLCJncmVlbnMiLCJvcmFuZ2VzIiwicmVkcyIsInlsb3JiciIsInlsb3JyZCIsIm9ycmQiLCJwdXJkIiwicmRwdSIsImJ1cHUiLCJnbmJ1IiwicHVidSIsInlsZ25idSIsInB1YnVnbiIsImJ1Z24iLCJ5bGduIiwiYmluYXJ5IiwiZ3JheSIsImJvbmUiLCJwaW5rIiwic3ByaW5nIiwic3VtbWVyIiwiYXV0dW1uIiwid2ludGVyIiwiY29vbCIsIndpc3RpYSIsImhvdCIsImFmbWhvdCIsImdpc3RfaGVhdCIsImNvcHBlciIsInBpeWciLCJwcmduIiwiYnJiZyIsInB1b3IiLCJyZGd5IiwicmRidSIsInJkeWxidSIsInJkeWxnbiIsInNwZWN0cmFsIiwiY29vbHdhcm0iLCJid3IiLCJzZWlzbWljIiwidHdpbGlnaHQiLCJ0d2lsaWdodF9zaGlmdGVkIiwiaHN2IiwiZmxhZyIsInByaXNtIiwib2NlYW4iLCJnaXN0X2VhcnRoIiwidGVycmFpbiIsImdpc3Rfc3Rlcm4iLCJnbnVwbG90IiwiZ251cGxvdDIiLCJjbXJtYXAiLCJjdWJlaGVsaXgiLCJicmciLCJnaXN0X3JhaW5ib3ciLCJyYWluYm93IiwiamV0IiwibmlweV9zcGVjdHJhbCIsImdpc3RfbmNhciIsIlNUQUNfU0VBUkNIX1BST1ZJREVSUyIsInJhc3RlclZpc0NvbmZpZ3MiLCJwcmVzZXQiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwib3B0aW9ucyIsIk9iamVjdCIsInZhbHVlcyIsInByb3BlcnR5IiwiZ3JvdXAiLCJ1c2VTVEFDU2VhcmNoaW5nIiwic3RhY1NlYXJjaFByb3ZpZGVyIiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsImNvbG9ybWFwSWQiLCJjb2xvclJhbmdlIiwibGluZWFyUmVzY2FsaW5nRmFjdG9yIiwiaXNSYW5nZWQiLCJyYW5nZSIsInN0ZXAiLCJub25MaW5lYXJSZXNjYWxpbmciLCJmaWx0ZXJFbmFibGVkIiwiZmlsdGVyUmFuZ2UiLCJvcGFjaXR5IiwiX3N0YWNRdWVyeSIsInNpbmdsZUJhbmROYW1lIiwiZW5hYmxlVGVycmFpbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYXN0ZXItdGlsZS9jb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMsIFJhc3RlclRpbGVMYXllclByZXNldHN9IGZyb20gJy4vcmFzdGVyLXRpbGUtbGF5ZXItc2NoZW1hJztcbmltcG9ydCB7XG4gIFZpc0NvbmZpZ0Jvb2xlYW4sXG4gIFZpc0NvbmZpZ051bWJlcixcbiAgVmlzQ29uZmlnUmFuZ2UsXG4gIFZpc0NvbmZpZ09iamVjdFNlbGVjdGlvbixcbiAgVmlzQ29uZmlnSW5wdXRcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCB7Q29sb3JSZXNjYWxpbmcsIENvbmZpZ09wdGlvbiwgUHJlc2V0RGF0YSwgQmFuZENvbWJpbmF0aW9ufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBLbm93biBEYXRhIFNvdXJjZSBJRHMgdGhhdCB3b3JrIHdpdGggY3VycmVudCBTVEFDIExheWVyIGxpbWl0YXRpb25zXG4gKi9cbmV4cG9ydCBlbnVtIERBVEFfU09VUkNFX0lEUyB7XG4gIFNFTlRJTkVMXzJfTDFDID0gJ3NlbnRpbmVsLTItbDFjJyxcbiAgU0VOVElORUxfMl9MMUEgPSAnc2VudGluZWwtMi1sMmEnLFxuICBTRU5USU5FTF8yX0MxX0wyQSA9ICdzZW50aW5lbC0yLWMxLWwyYScsXG4gIFNFTlRJTkVMXzJfUFJFX0MxX0wyQSA9ICdzZW50aW5lbC0yLXByZS1jMS1sMmEnLFxuICBMQU5EU0FUX0MyX0wxID0gJ2xhbmRzYXQtYzItbDEnLFxuICBMQU5EU0FUX0MyX0wyID0gJ2xhbmRzYXQtYzItbDInLFxuICBNT0RJU18wOUExXzA2MSA9ICdtb2Rpcy0wOUExLTA2MScsXG4gIE1PRElTXzQzQTRfMDYxID0gJ21vZGlzLTQzQTQtMDYxJyxcbiAgTU9JRFNfMDlRMV8wNjEgPSAnbW9kaXMtMDlRMS0wNjEnXG59XG5cbmV4cG9ydCBjb25zdCBSQVNURVJfQ09MT1JfUkVTRVRfUEFSQU1TID0ge1xuICBnYW1tYUNvbnRyYXN0RmFjdG9yOiAxLFxuICBzaWdtb2lkYWxDb250cmFzdEZhY3RvcjogMCxcbiAgc2lnbW9pZGFsQmlhc0ZhY3RvcjogMC41LFxuICBzYXR1cmF0aW9uVmFsdWU6IDEuMCxcbiAgZHluYW1pY0NvbG9yOiBmYWxzZVxufTtcblxuY29uc3QgREVGQVVMVF9TRU5USU5FTF9DT0xPUl9ERUZBVUxUUyA9IHtcbiAgZ2FtbWFDb250cmFzdEZhY3RvcjogMi4yLFxuICBzaWdtb2lkYWxDb250cmFzdEZhY3RvcjogMjMsXG4gIHNpZ21vaWRhbEJpYXNGYWN0b3I6IDAuMTIsXG4gIHNhdHVyYXRpb25WYWx1ZTogMi4wXG59O1xuXG5jb25zdCBERUZBVUxUX01PRElTX0NPTE9SX0RFRkFVTFRTID0ge1xuICBnYW1tYUNvbnRyYXN0RmFjdG9yOiAyLjAsXG4gIHNpZ21vaWRhbENvbnRyYXN0RmFjdG9yOiA4LFxuICBzaWdtb2lkYWxCaWFzRmFjdG9yOiAwLjEzLFxuICBzYXR1cmF0aW9uVmFsdWU6IDEuMVxufTtcblxuY29uc3QgREVGQVVMVF9TRU5USU5FTF9CQU5EX01BUFBJTkcgPSB7XG4gIGNvYXN0YWw6ICdCMDEnLFxuICBibHVlOiAnQjAyJyxcbiAgZ3JlZW46ICdCMDMnLFxuICByZWQ6ICdCMDQnLFxuICByZWRlZGdlMTogJ0IwNScsXG4gIHJlZGVkZ2UyOiAnQjA2JyxcbiAgcmVkZWRnZTM6ICdCMDcnLFxuICBuaXI6ICdCMDgnLFxuICBuaXIwODogJ0I4QScsXG4gIG5pcjA5OiAnQjA5JyxcbiAgY2lycnVzOiAnQjEwJyxcbiAgc3dpcjExOiAnQjExJyxcbiAgc3dpcjE2OiAnQjExJyxcbiAgc3dpcjEyOiAnQjEyJyxcbiAgc3dpcjIyOiAnQjEyJ1xufTtcblxuY29uc3QgREVGQVVMVF9NT0RJU19CQU5EX01BUFBJTkcgPSB7XG4gIHN1cl9yZWZsX2IwMTogJ0IwMScsXG4gIHN1cl9yZWZsX2IwMjogJ0IwMicsXG4gIHN1cl9yZWZsX2IwMzogJ0IwMycsXG4gIHN1cl9yZWZsX2IwNDogJ0IwNCcsXG4gIHN1cl9yZWZsX2IwNTogJ0IwNScsXG4gIHN1cl9yZWZsX2IwNjogJ0IwNicsXG4gIHN1cl9yZWZsX2IwNzogJ0IwNycsXG4gIE5hZGlyX1JlZmxlY3RhbmNlX0JhbmQxOiAnQjAxJyxcbiAgTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDI6ICdCMDInLFxuICBOYWRpcl9SZWZsZWN0YW5jZV9CYW5kMzogJ0IwMycsXG4gIE5hZGlyX1JlZmxlY3RhbmNlX0JhbmQ0OiAnQjA0JyxcbiAgTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDU6ICdCMDUnLFxuICBOYWRpcl9SZWZsZWN0YW5jZV9CYW5kNjogJ0IwNicsXG4gIE5hZGlyX1JlZmxlY3RhbmNlX0JhbmQ3OiAnQjA3J1xufTtcblxuY29uc3QgREVGQVVMVF9MQU5EU0FUX0MyX0wxX0JBTkRfTUFQUElORyA9IHtcbiAgZ3JlZW46ICdCMDEnLFxuICByZWQ6ICdCMDInLFxuICBuaXIwODogJ0IwMycsXG4gIG5pcjA5OiAnQjA0J1xufTtcblxuY29uc3QgREVGQVVMVF9MQU5EU0FUX0MyX0wyX0JBTkRfTUFQUElORyA9IHtcbiAgYmx1ZTogJ0IwMScsXG4gIGdyZWVuOiAnQjAyJyxcbiAgcmVkOiAnQjAzJyxcbiAgbmlyMDg6ICdCMDQnLFxuICBzd2lyMTY6ICdCMDUnLFxuICBsd2lyOiAnQjA2JyxcbiAgc3dpcjIyOiAnQjA3JyxcbiAgY29hc3RhbDogJ0IwMScsXG4gIGx3aXIxMTogJ0IwNidcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBTkRfTUFQUElOR1MgPSB7XG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9MMUNdOiBERUZBVUxUX1NFTlRJTkVMX0JBTkRfTUFQUElORyxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0wxQV06IERFRkFVTFRfU0VOVElORUxfQkFORF9NQVBQSU5HLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfQzFfTDJBXTogREVGQVVMVF9TRU5USU5FTF9CQU5EX01BUFBJTkcsXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9QUkVfQzFfTDJBXTogREVGQVVMVF9TRU5USU5FTF9CQU5EX01BUFBJTkcsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTEFORFNBVF9DMl9MMV06IERFRkFVTFRfTEFORFNBVF9DMl9MMV9CQU5EX01BUFBJTkcsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTEFORFNBVF9DMl9MMl06IERFRkFVTFRfTEFORFNBVF9DMl9MMl9CQU5EX01BUFBJTkcsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9ESVNfMDlBMV8wNjFdOiBERUZBVUxUX01PRElTX0JBTkRfTUFQUElORyxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0RJU180M0E0XzA2MV06IERFRkFVTFRfTU9ESVNfQkFORF9NQVBQSU5HLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PSURTXzA5UTFfMDYxXTogREVGQVVMVF9NT0RJU19CQU5EX01BUFBJTkdcbn07XG5cbi8qKlxuICogUGVyLWRhdGEgc291cmNlIGNvbG9yIHJlc2NhbGluZyBkZWZhdWx0cyBmb3Iga25vd24gY29sbGVjdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IERBVEFfU09VUkNFX0NPTE9SX0RFRkFVTFRTOiBSZWNvcmQ8REFUQV9TT1VSQ0VfSURTLCBDb2xvclJlc2NhbGluZz4gPSB7XG4gIC8vIE5vdGU6IGdvb2QgZm9yIFRydWUgQ29sb3IsIHRvbyBzYXR1cmF0ZWQgZm9yIG90aGVyIGNoYW5uZWxzXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9MMUNdOiBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfTDFBXTogREVGQVVMVF9TRU5USU5FTF9DT0xPUl9ERUZBVUxUUyxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0MxX0wyQV06IERFRkFVTFRfU0VOVElORUxfQ09MT1JfREVGQVVMVFMsXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9QUkVfQzFfTDJBXTogREVGQVVMVF9TRU5USU5FTF9DT0xPUl9ERUZBVUxUUyxcbiAgW0RBVEFfU09VUkNFX0lEUy5MQU5EU0FUX0MyX0wxXTogREVGQVVMVF9TRU5USU5FTF9DT0xPUl9ERUZBVUxUUyxcbiAgW0RBVEFfU09VUkNFX0lEUy5MQU5EU0FUX0MyX0wyXTogREVGQVVMVF9TRU5USU5FTF9DT0xPUl9ERUZBVUxUUyxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0RJU18wOUExXzA2MV06IERFRkFVTFRfTU9ESVNfQ09MT1JfREVGQVVMVFMsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9ESVNfNDNBNF8wNjFdOiBERUZBVUxUX01PRElTX0NPTE9SX0RFRkFVTFRTLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PSURTXzA5UTFfMDYxXTogREVGQVVMVF9NT0RJU19DT0xPUl9ERUZBVUxUU1xufTtcblxuLyoqXG4gKiBBdmFpbGFibGUgXCJwcmVzZXRzXCJcbiAqXG4gKiBJIGRlZmluZSBhIFwicHJlc2V0XCIgYXMgb25lIHNwZWNpZmljIG1hbm5lciBvZiBsb2FkaW5nIGJhbmRzIGFuZCBjb21iaW5pbmcgdGhlbSBvbiB0aGUgZnJvbnRlbmQuXG4gKiBJbiB0aGUgZnV0dXJlIEkgZXhwZWN0IHdlJ2xsIHdhbnQgYSBVSSB0aGF0IGdpdmVzIHRoZSB1c2VyIGZ1bGwgZmxleGliaWxpdHkuXG4gKi9cbmV4cG9ydCBjb25zdCBQUkVTRVRfT1BUSU9OUzogUmVjb3JkPHN0cmluZywgUHJlc2V0RGF0YT4gPSB7XG4gIHRydWVDb2xvcjoge1xuICAgIGxhYmVsOiAnVHJ1ZSBDb2xvcicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMudHJ1ZUNvbG9yLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLlJnYixcbiAgICBjb21tb25OYW1lczogWydyZWQnLCAnZ3JlZW4nLCAnYmx1ZSddXG4gIH0sXG4gIGluZnJhcmVkOiB7XG4gICAgbGFiZWw6ICdJbmZyYXJlZCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMuaW5mcmFyZWQsXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uUmdiLFxuICAgIGNvbW1vbk5hbWVzOiBbJ25pcicsICdyZWQnLCAnZ3JlZW4nXSxcbiAgICBkZXNjcmlwdGlvbjogJ0ZhbHNlLWNvbG9yIGluZnJhcmVkIGNvbXBvc2l0ZS4gTmVhci1pbmZyYXJlZCwgcmVkLCBncmVlbiBtYXBwZWQgdG8gUkdCJ1xuICB9LFxuICBhZ3JpY3VsdHVyZToge1xuICAgIGxhYmVsOiAnQWdyaWN1bHR1cmUnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJQcmVzZXRzLmFncmljdWx0dXJlLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLlJnYixcbiAgICBjb21tb25OYW1lczogWydzd2lyMTYnLCAnbmlyJywgJ2JsdWUnXSxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdGYWxzZS1jb2xvciBhZ3JpY3VsdHVyZSBjb21wb3NpdGUuIFNob3J0LXdhdmUgaW5mcmFyZWQgMSwgbmVhci1pbmZyYXJlZCwgYmx1ZSBtYXBwZWQgdG8gUkdCLidcbiAgfSxcbiAgZm9yZXN0QnVybjoge1xuICAgIGxhYmVsOiAnRm9yZXN0IEJ1cm4nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJQcmVzZXRzLmZvcmVzdEJ1cm4sXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uUmdiLFxuICAgIGNvbW1vbk5hbWVzOiBbJ3N3aXIyMicsICduaXInLCAnYmx1ZSddLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0ZhbHNlLWNvbG9yIGZvcmVzdCBidXJuIGNvbXBvc2l0ZS4gU2hvcnQtd2F2ZSBpbmZyYXJlZCAyLCBuZWFyLWluZnJhcmVkLCBibHVlIG1hcHBlZCB0byBSR0InXG4gIH0sXG4gIG5kdmk6IHtcbiAgICBsYWJlbDogJ05EVkknLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJQcmVzZXRzLm5kdmksXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uTm9ybWFsaXplZERpZmZlcmVuY2UsXG4gICAgY29tbW9uTmFtZXM6IFsnbmlyJywgJ3JlZCddLFxuICAgIGRlc2NyaXB0aW9uOiAnTm9ybWFsaXplZCBEaWZmZXJlbmNlIFZlZ2V0YXRpb24gSW5kZXgnLFxuICAgIGluZm9Vcmw6XG4gICAgICAnaHR0cHM6Ly93d3cudXNncy5nb3YvY29yZS1zY2llbmNlLXN5c3RlbXMvbmxpL2xhbmRzYXQvbGFuZHNhdC1ub3JtYWxpemVkLWRpZmZlcmVuY2UtdmVnZXRhdGlvbi1pbmRleCdcbiAgfSxcbiAgLy8gQ29tbWVudCB0aGlzIG91dCBmb3Igbm93LCBiZWNhdXNlIGluIHRlc3RpbmcgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGFuIG92ZXJmbG93IG9mIHNvbWUgc29ydDtcbiAgLy8gaW5kZXggdmFsdWVzIHNob3VsZCBiZSBiZXR3ZWVuIC0xIGFuZCAxLCBidXQgdmFsdWVzIGxvb2sgd2F5IG91dCBvZiBib3VuZHNcbiAgLy8gZXZpOiB7XG4gIC8vICAgbGFiZWw6ICdFVkknLFxuICAvLyAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJQcmVzZXRzLmV2aSxcbiAgLy8gICBiYW5kQ29tYmluYXRpb246ICdlbmhhbmNlZFZlZ2V0YXRpb25JbmRleCcsXG4gIC8vICAgY29tbW9uTmFtZXM6IFsnbmlyJywgJ3JlZCcsICdibHVlJ11cbiAgLy8gfSxcbiAgc2F2aToge1xuICAgIGxhYmVsOiAnU0FWSScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMuc2F2aSxcbiAgICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbi5Tb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXgsXG4gICAgY29tbW9uTmFtZXM6IFsnbmlyJywgJ3JlZCddLFxuICAgIGRlc2NyaXB0aW9uOiAnU29pbCBBZGp1c3RlZCBWZWdldGF0aW9uIEluZGV4JyxcbiAgICBpbmZvVXJsOlxuICAgICAgJ2h0dHBzOi8vd3d3LnVzZ3MuZ292L2NvcmUtc2NpZW5jZS1zeXN0ZW1zL25saS9sYW5kc2F0L2xhbmRzYXQtc29pbC1hZGp1c3RlZC12ZWdldGF0aW9uLWluZGV4J1xuICB9LFxuICBtc2F2aToge1xuICAgIGxhYmVsOiAnTVNBVkknLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJQcmVzZXRzLm1zYXZpLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLk1vZGlmaWVkU29pbEFkanVzdGVkVmVnZXRhdGlvbkluZGV4LFxuICAgIGNvbW1vbk5hbWVzOiBbJ25pcicsICdyZWQnXSxcbiAgICBkZXNjcmlwdGlvbjogJ01vZGlmaWVkIFNvaWwgQWRqdXN0ZWQgVmVnZXRhdGlvbiBJbmRleCcsXG4gICAgaW5mb1VybDpcbiAgICAgICdodHRwczovL3d3dy51c2dzLmdvdi9jb3JlLXNjaWVuY2Utc3lzdGVtcy9ubGkvbGFuZHNhdC9sYW5kc2F0LW1vZGlmaWVkLXNvaWwtYWRqdXN0ZWQtdmVnZXRhdGlvbi1pbmRleCdcbiAgfSxcbiAgbmRtaToge1xuICAgIGxhYmVsOiAnTkRNSScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMubmRtaSxcbiAgICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbi5Ob3JtYWxpemVkRGlmZmVyZW5jZSxcbiAgICBjb21tb25OYW1lczogWyduaXInLCAnc3dpcjE2J10sXG4gICAgZGVzY3JpcHRpb246ICdOb3JtYWxpemVkIERpZmZlcmVuY2UgTW9pc3R1cmUgSW5kZXgnLFxuICAgIGluZm9Vcmw6XG4gICAgICAnaHR0cHM6Ly93d3cudXNncy5nb3YvY29yZS1zY2llbmNlLXN5c3RlbXMvbmxpL2xhbmRzYXQvbm9ybWFsaXplZC1kaWZmZXJlbmNlLW1vaXN0dXJlLWluZGV4J1xuICB9LFxuICBuYnI6IHtcbiAgICBsYWJlbDogJ05CUicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMubmJyLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLk5vcm1hbGl6ZWREaWZmZXJlbmNlLFxuICAgIGNvbW1vbk5hbWVzOiBbJ25pcicsICdzd2lyMjInXSxcbiAgICBkZXNjcmlwdGlvbjogJ05vcm1hbGl6ZWQgQnVybiBSYXRpbycsXG4gICAgaW5mb1VybDogJ2h0dHBzOi8vd3d3LnVzZ3MuZ292L2NvcmUtc2NpZW5jZS1zeXN0ZW1zL25saS9sYW5kc2F0L2xhbmRzYXQtbm9ybWFsaXplZC1idXJuLXJhdGlvJ1xuICB9LFxuICBuYnIyOiB7XG4gICAgbGFiZWw6ICdOQlIgMicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMubmJyMixcbiAgICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbi5Ob3JtYWxpemVkRGlmZmVyZW5jZSxcbiAgICBjb21tb25OYW1lczogWydzd2lyMTYnLCAnc3dpcjIyJ10sXG4gICAgZGVzY3JpcHRpb246ICdOb3JtYWxpemVkIEJ1cm4gUmF0aW8gMicsXG4gICAgaW5mb1VybDogJ2h0dHBzOi8vd3d3LnVzZ3MuZ292L2NvcmUtc2NpZW5jZS1zeXN0ZW1zL25saS9sYW5kc2F0L2xhbmRzYXQtbm9ybWFsaXplZC1idXJuLXJhdGlvLTInXG4gIH0sXG4gIHNpbmdsZUJhbmQ6IHtcbiAgICBsYWJlbDogJ1NpbmdsZSBCYW5kJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5zaW5nbGVCYW5kLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLlNpbmdsZSxcbiAgICBkZXNjcmlwdGlvbjogJ1JlbmRlciBhIHNpbmdsZSBiYW5kIGRhdGEnXG4gIH1cbn07XG5cbi8qKlxuICogVmFsaWQgem9vbSByYW5nZXMgZm9yIGVhY2ggZGF0YSBzb3VyY2VcbiAqXG4gKiBUaGUgbWF4aW11bSB6b29tIGlzIGRlcml2ZWQgZnJvbSB0aGUgcmVzb2x1dGlvbiBvZiBlYWNoIGRhdGEgc291cmNlLlxuICogVGhlIG1pbmltdW0gem9vbSByZWxhdGVzIHRvIHRoZSBudW1iZXIgb2Ygb3ZlcnZpZXdzIGluIHRoZSBDT0dzIGF0IHRoZSBzb3VyY2UuIFRoZSBtb3JlXG4gKiBvdmVydmlld3MsIHRoZSBlYXNpZXIgaXQgaXMgdG8gY3JlYXRlIGRvd25zYW1wbGVkIHRpbGVzLiBUaGUgbWluaW11bSB6b29tcyBjYW4gYmUgcmVkdWNlZCBidXQgaXRcbiAqIHRha2VzIGxvbmdlciB0byBzZXJ2ZSBsb3ctem9vbSB0aWxlcyBzaW5jZSB0aGUgc2VydmVyIG11c3QgcmVhZCBmcm9tIG1hbnkgaW1hZ2Ugc291cmNlcy5cbiAqL1xuLy8gVE9ETzogdXNlIHJlbmRlcjptYXhfb3ZlcnZpZXdfZ3NkIGZyb20gU1RBQ1xuZXhwb3J0IGNvbnN0IFpPT01fUkFOR0VTOiBSZWNvcmQ8REFUQV9TT1VSQ0VfSURTLCBbbnVtYmVyLCBudW1iZXJdPiA9IHtcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0MxX0wyQV06IFs4LCAxM10sXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9MMUFdOiBbOCwgMTNdLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfTDFDXTogWzgsIDEzXSxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX1BSRV9DMV9MMkFdOiBbOCwgMTNdLFxuICBbREFUQV9TT1VSQ0VfSURTLkxBTkRTQVRfQzJfTDFdOiBbNywgMTJdLFxuICBbREFUQV9TT1VSQ0VfSURTLkxBTkRTQVRfQzJfTDJdOiBbNywgMTJdLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PRElTXzA5QTFfMDYxXTogWzcsIDEzXSxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0RJU180M0E0XzA2MV06IFs3LCAxM10sXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9JRFNfMDlRMV8wNjFdOiBbNywgMTNdXG59O1xuXG4vKipcbiAqIEJpdCBkZXB0aCBmb3IgZWFjaCBkYXRhIHNvdXJjZVxuICogU2VudGluZWwtMiBpcyAxMi1iaXQ7IExhbmRzYXQtOCBpcyAxNi1iaXQ7IFBsYW5ldCBpcyAxMi1iaXQ7IE5BSVAgaXMgOC1iaXRcbiAqL1xuLy8gVE9ETzogdXNlIHJhbmdlIHZhbHVlIGFuZCBkdHlwZSBpbiBTVEFDIGNvbGxlY3Rpb24gaW5zdGVhZCBvZiB0aGlzXG5leHBvcnQgY29uc3QgTUFYX1BJWEVMX1ZBTFVFUzogUmVjb3JkPERBVEFfU09VUkNFX0lEUywgbnVtYmVyPiA9IHtcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0MxX0wyQV06IE1hdGgucG93KDIsIDEyKSAtIDEsXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9MMUFdOiBNYXRoLnBvdygyLCAxMikgLSAxLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfTDFDXTogTWF0aC5wb3coMiwgMTIpIC0gMSxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX1BSRV9DMV9MMkFdOiBNYXRoLnBvdygyLCAxMikgLSAxLFxuICBbREFUQV9TT1VSQ0VfSURTLkxBTkRTQVRfQzJfTDFdOiBNYXRoLnBvdygyLCAxNikgLSAxLFxuICBbREFUQV9TT1VSQ0VfSURTLkxBTkRTQVRfQzJfTDJdOiBNYXRoLnBvdygyLCAxNikgLSAxLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PRElTXzA5QTFfMDYxXTogTWF0aC5wb3coMiwgMTIpIC0gMSxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0RJU180M0E0XzA2MV06IE1hdGgucG93KDIsIDEyKSAtIDEsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9JRFNfMDlRMV8wNjFdOiBNYXRoLnBvdygyLCAxMikgLSAxXG59O1xuXG4vKipcbiAqIElkIGZvciBjYXRlZ29yaWNhbCBjb2xvcm1hcC4gVW5saWtlIG1vc3QgY29sb3JtYXBzLiBDYXRlZ29yaWNhbCBjb2xvcm1hcCBpbWFnZSBpcyBjcmVhdGVkXG4gKiBmcm9tIGNvbG9ybWFwIHNldCBpbiB2aXNDb25maWdcbiAqL1xuZXhwb3J0IGNvbnN0IENBVEVHT1JJQ0FMX0NPTE9STUFQX0lEID0gJ19jYXRlZ29yaWNhbCc7XG5cbi8qKlxuICogQSBsaXN0IG9mIGF2YWlsYWJsZSBjb2xvcm1hcHMuIENvbG9ybWFwcyBhcmUgb3JpZ2luYWxseSBkZXJpdmVkIGZyb21cbiAqIG1hdHBsb3RsaWIsIHRoZW4gdmlhIHJpby10aWxlci4gQ29sb3JtYXBzIGFyZSAxMHgyNTYgUE5HIGltYWdlcyB0aGF0IGFyZVxuICogbG9hZGVkIGFzIHRleHR1cmVzXG4gKi9cblxuZXhwb3J0IGNvbnN0IENPTE9STUFQX09QVElPTlM6IHJlYWRvbmx5IENvbmZpZ09wdGlvbltdID0gW1xuICB7XG4gICAgbGFiZWw6ICdDZmFzdGllJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmNmYXN0aWVcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUnBsdW1ibycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5ycGx1bWJvXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NjaHdhcnp3YWxkJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnNjaHdhcnp3YWxkXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1ZpcmlkaXMnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMudmlyaWRpc1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQbGFzbWEnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucGxhc21hXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0luZmVybm8nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuaW5mZXJub1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdNYWdtYScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5tYWdtYVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDaXZpZGlzJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmNpdmlkaXNcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnR3JleXMnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuZ3JleXNcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUHVycGxlcycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5wdXJwbGVzXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0JsdWVzJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmJsdWVzXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0dyZWVucycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5ncmVlbnNcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnT3JhbmdlcycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5vcmFuZ2VzXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1JlZHMnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucmVkc1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdZbC1Pci1CcicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy55bG9yYnJcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnWWwtT3ItUmQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMueWxvcnJkXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ09yLVJkJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLm9ycmRcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUHUtUmQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucHVyZFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdSZC1QdScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5yZHB1XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0J1LVB1JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmJ1cHVcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnR24tQnUnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuZ25idVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQdS1CdScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5wdWJ1XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1lsLUduLUJ1JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnlsZ25idVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQdS1CdS1HbicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5wdWJ1Z25cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQmx1ZS1HbicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5idWduXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1lsLUduJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnlsZ25cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVy1uLUInLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYmluYXJ5XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0Itbi1XJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmdyYXlcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQm9uZScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5ib25lXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1BpbmsnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucGlua1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTcHJpbmcnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuc3ByaW5nXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1N1bW1lcicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5zdW1tZXJcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQXV0dW1uJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmF1dHVtblxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdXaW50ZXInLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMud2ludGVyXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0Nvb2wnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuY29vbFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdXaXN0aWEnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMud2lzdGlhXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0hvdCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5ob3RcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQWZtaG90JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmFmbWhvdFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdIZWF0JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmdpc3RfaGVhdFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb3BwZXInLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuY29wcGVyXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1BpLUdyZWVuJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnBpeWdcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUHItR24nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucHJnblxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCci1CZycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5icmJnXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1B1LU9yJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnB1b3JcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmQtR3knLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucmRneVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdSZC1CdScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5yZGJ1XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1JkLVlsLUJ1JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnJkeWxidVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdSZC1ZbC1HbicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5yZHlsZ25cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3BlY3RyYWwnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuc3BlY3RyYWxcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29vbC1XYXJtJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmNvb2x3YXJtXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0ItVy1SJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmJ3clxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTZWlzbWljJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnNlaXNtaWNcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVHdpbGlnaHQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMudHdpbGlnaHRcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVHdpbGlnaHQgU2hpZnRlZCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy50d2lsaWdodF9zaGlmdGVkXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0hTVicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5oc3ZcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRmxhZycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5mbGFnXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1ByaXNtJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnByaXNtXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ09jZWFuJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLm9jZWFuXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0dpc3QgRWFydGgnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuZ2lzdF9lYXJ0aFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUZXJyYWluJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnRlcnJhaW5cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnR2lzdCBTdGVybicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5naXN0X3N0ZXJuXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0dudXBsb3QnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuZ251cGxvdFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdHbnVwbG90MicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5nbnVwbG90MlxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDbXJtYXAnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuY21ybWFwXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0N1YmVoZWxpeCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5jdWJlaGVsaXhcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQnJnJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmJyZ1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdHaXN0IFJhaW5ib3cnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuZ2lzdF9yYWluYm93XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1JhaW5ib3cnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucmFpbmJvd1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdKZXQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuamV0XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ05pcHkgU3BlY3RyYWwnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMubmlweV9zcGVjdHJhbFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdHaXN0IE5DQVInLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuZ2lzdF9uY2FyXG4gIH1cbl07XG5cbmNvbnN0IFNUQUNfU0VBUkNIX1BST1ZJREVSUzogQ29uZmlnT3B0aW9uW10gPSBbXG4gIC8vIHtcbiAgLy8gICBsYWJlbDogJ01pY3Jvc29mdCBQbGFuZXRhcnkgQ29tcHV0ZXInLFxuICAvLyAgIGlkOiAnbWljcm9zb2Z0J1xuICAvLyB9LFxuICB7XG4gICAgbGFiZWw6ICdFbGVtZW50IDg0IEVhcnRoIFNlYXJjaCAoQVdTKScsXG4gICAgaWQ6ICdlYXJ0aC1zZWFyY2gnXG4gIH1cbl07XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBiZSBleHBvc2VkIHRocm91Z2ggdGhlIFVJXG4gKi9cbmV4cG9ydCBjb25zdCByYXN0ZXJWaXNDb25maWdzID0ge1xuICBwcmVzZXQ6IHtcbiAgICB0eXBlOiAnb2JqZWN0LXNlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiAndHJ1ZUNvbG9yJyxcbiAgICBsYWJlbDogJ1ByZXNldCcsXG4gICAgb3B0aW9uczogT2JqZWN0LnZhbHVlcyhQUkVTRVRfT1BUSU9OUyksXG4gICAgcHJvcGVydHk6ICdwcmVzZXQnLFxuICAgIGdyb3VwOiAnJ1xuICB9IGFzIFZpc0NvbmZpZ09iamVjdFNlbGVjdGlvbixcbiAgdXNlU1RBQ1NlYXJjaGluZzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBwcm9wZXJ0eTogJ3VzZVNUQUNTZWFyY2hpbmcnLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdVc2UgU1RBQyBTZWFyY2hpbmcnXG4gIH0gYXMgVmlzQ29uZmlnQm9vbGVhbixcbiAgc3RhY1NlYXJjaFByb3ZpZGVyOiB7XG4gICAgdHlwZTogJ29iamVjdC1zZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogJ2VhcnRoLXNlYXJjaCcsXG4gICAgbGFiZWw6ICdTVEFDIFNlYXJjaCBQcm92aWRlcicsXG4gICAgb3B0aW9uczogU1RBQ19TRUFSQ0hfUFJPVklERVJTLFxuICAgIHByb3BlcnR5OiAnc3RhY1NlYXJjaFByb3ZpZGVyJ1xuICB9IGFzIFZpc0NvbmZpZ09iamVjdFNlbGVjdGlvbixcbiAgc3RhcnREYXRlOiB7XG4gICAgdHlwZTogJ2lucHV0JyxcbiAgICBkZWZhdWx0VmFsdWU6ICcyMDIwLTAyLTAyJyxcbiAgICBsYWJlbDogJ1N0YXJ0IERhdGUnLFxuICAgIHByb3BlcnR5OiAnc3RhcnREYXRlJ1xuICB9IGFzIFZpc0NvbmZpZ0lucHV0LFxuICBlbmREYXRlOiB7XG4gICAgdHlwZTogJ2lucHV0JyxcbiAgICBkZWZhdWx0VmFsdWU6ICcyMDIwLTAzLTAyJyxcbiAgICBsYWJlbDogJ0VuZCBEYXRlJyxcbiAgICBwcm9wZXJ0eTogJ2VuZERhdGUnXG4gIH0gYXMgVmlzQ29uZmlnSW5wdXQsXG4gIGR5bmFtaWNDb2xvcjoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnRHluYW1pYyBDb2xvcicsXG4gICAgZ3JvdXA6ICcnLFxuICAgIHByb3BlcnR5OiAnZHluYW1pY0NvbG9yJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VzZSBhIGR5bmFtaWMgY29sb3Igc2NhbGUgYmFzZWQgb24gZGF0YSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydCdcbiAgfSBhcyBWaXNDb25maWdCb29sZWFuLFxuICBjb2xvcm1hcElkOiB7XG4gICAgdHlwZTogJ29iamVjdC1zZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogJ2NmYXN0aWUnLFxuICAgIGxhYmVsOiAnQ29sb3JtYXAnLFxuICAgIG9wdGlvbnM6IENPTE9STUFQX09QVElPTlMsXG4gICAgcHJvcGVydHk6ICdjb2xvcm1hcElkJyxcbiAgICBncm91cDogJydcbiAgfSBhcyBWaXNDb25maWdPYmplY3RTZWxlY3Rpb24sXG4gIC8vIGtlcGxlcidzIHZpc0NvbmZpZyBmcm9tIGtlcGxlci5nbCBodHRwczovL2dpdGh1Yi5jb20vZm91cnNxdWFyZS9rZXBsZXIuZ2wvYmxvYi80OTBhODkzOGZmYTFmYWMwMjVlOGQxOTk3NDgxYWNjMWJmZmU0YWJkL3NyYy9sYXllcnMvbGF5ZXItZmFjdG9yeS5qcyNMMjI4XG4gIC8vIGtleSBgY29sb3JSYW5nZWAgaXMgcmVxdWlyZWQgYmVjdWFzZSBpdCBpcyBoYXJkY29kZWQgaW4ga2VwbGVyLmdsXG4gIC8vIHRvIG1ha2Ugc2hhbGxvdyBjb3B5IG9mIHRoZSB2aXNDb25maWcgaXRlbVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm91cnNxdWFyZS9rZXBsZXIuZ2wvYmxvYi80OTBhODkzOGZmYTFmYWMwMjVlOGQxOTk3NDgxYWNjMWJmZmU0YWJkL3NyYy9yZWR1Y2Vycy92aXMtc3RhdGUtbWVyZ2VyLmpzI0w3MzZcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnIGFzIGNvbnN0LFxuICBsaW5lYXJSZXNjYWxpbmdGYWN0b3I6IHtcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxXSxcbiAgICAvLyBncm91cDogXCJjb2xvclwiXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgbGFiZWw6ICdMaW5lYXIgUmVzY2FsaW5nIEZhY3RvcicsXG4gICAgcHJvcGVydHk6ICdsaW5lYXJSZXNjYWxpbmdGYWN0b3InLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICB0eXBlOiAnbnVtYmVyJ1xuICB9IGFzIFZpc0NvbmZpZ1JhbmdlLFxuICAvLyBOb24tbGluZWFyIHJlc2NhbGluZyBmb3IgdHJ1ZS1jb2xvciBpbWFnZXNcbiAgLy8gSWYgZmFsc2UsIGltcGxpZXMgbGluZWFyIHJlc2NhbGluZ1xuICBub25MaW5lYXJSZXNjYWxpbmc6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgcHJvcGVydHk6ICdub25MaW5lYXJSZXNjYWxpbmcnLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICAvLyBncm91cDogdW5kZWZpbmVkXG4gICAgbGFiZWw6ICdOb24tTGluZWFyIFJlc2NhbGluZydcbiAgfSBhcyBWaXNDb25maWdCb29sZWFuLFxuICBnYW1tYUNvbnRyYXN0RmFjdG9yOiB7XG4gICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgIC8vIGdyb3VwOiBcImNvbG9yXCJcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgbGFiZWw6ICdHYW1tYSBDb250cmFzdCcsXG4gI