@kepler.gl/constants 3.3.0-alpha.0 → 3.3.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/annotation.d.ts +23 -0
- package/dist/cjs/annotation.js +45 -0
- package/dist/cjs/color-palettes.js +461 -0
- package/dist/cjs/colors-by-theme.js +519 -0
- package/dist/cjs/dataset.js +176 -0
- package/dist/cjs/default-settings.js +1740 -0
- package/dist/cjs/gpu-parameters.js +125 -0
- package/dist/{index.js → cjs/index.js} +13 -1
- package/dist/cjs/keyevent.js +26 -0
- package/dist/cjs/layers.js +609 -0
- package/dist/{plot.js → cjs/plot.js} +1 -1
- package/dist/cjs/time.js +194 -0
- package/dist/cjs/tooltip.js +221 -0
- package/dist/cjs/user-feedbacks.js +15 -0
- package/dist/cjs/user-guides.js +19 -0
- package/dist/dataset.d.ts +70 -1
- package/dist/default-settings.d.ts +106 -2
- package/dist/esm/annotation.js +38 -0
- package/dist/esm/color-palettes.js +453 -0
- package/dist/esm/colors-by-theme.js +513 -0
- package/dist/esm/dataset.js +169 -0
- package/dist/esm/default-settings.js +1734 -0
- package/dist/esm/gpu-parameters.js +119 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/keyevent.js +19 -0
- package/dist/esm/layers.js +602 -0
- package/dist/esm/plot.js +9 -0
- package/dist/esm/time.js +190 -0
- package/dist/esm/tooltip.js +215 -0
- package/dist/esm/user-feedbacks.js +9 -0
- package/dist/esm/user-guides.js +13 -0
- package/dist/index.d.ts +1 -0
- package/dist/layers.d.ts +7 -0
- package/package.json +25 -16
- package/dist/color-palettes.js +0 -462
- package/dist/colors-by-theme.js +0 -519
- package/dist/dataset.js +0 -63
- package/dist/default-settings.js +0 -1495
- package/dist/gpu-parameters.js +0 -125
- package/dist/keyevent.js +0 -26
- package/dist/layers.js +0 -549
- package/dist/time.js +0 -194
- package/dist/tooltip.js +0 -221
- package/dist/user-feedbacks.js +0 -15
- package/dist/user-guides.js +0 -19
- package/umd/keplergl.min.js +0 -58
package/dist/color-palettes.js
DELETED
|
@@ -1,462 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.PALETTE_TYPES = exports.KEPLER_COLOR_PALETTES = exports.DataVizColors = exports.D3_COLOR_CHROMATIC_SCHEME = exports.COLORBREWER_SCHEME = exports.CATEGORIES = void 0;
|
|
9
|
-
exports.buildCategoricalPalette = buildCategoricalPalette;
|
|
10
|
-
exports.colorPaletteToColorRange = colorPaletteToColorRange;
|
|
11
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
12
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
-
var d3ScaleChromatic = _interopRequireWildcard(require("d3-scale-chromatic"));
|
|
15
|
-
var _d3Array = require("d3-array");
|
|
16
|
-
var _chromaJs = _interopRequireDefault(require("chroma-js"));
|
|
17
|
-
var _console = _interopRequireDefault(require("global/console"));
|
|
18
|
-
var _d3Color = require("d3-color");
|
|
19
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
20
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
21
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
22
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
|
23
|
-
// Copyright contributors to the kepler.gl project
|
|
24
|
-
// linear interpolator
|
|
25
|
-
|
|
26
|
-
var CATEGORIES = exports.CATEGORIES = {
|
|
27
|
-
COLORBREWER: 'ColorBrewer',
|
|
28
|
-
D3: 'D3',
|
|
29
|
-
UBER: 'Uber',
|
|
30
|
-
COLORBLIND: 'ColorBlind'
|
|
31
|
-
};
|
|
32
|
-
var PALETTE_TYPES = exports.PALETTE_TYPES = {
|
|
33
|
-
SEQ: 'sequential',
|
|
34
|
-
QUA: 'qualitative',
|
|
35
|
-
DIV: 'diverging',
|
|
36
|
-
CYC: 'cyclical'
|
|
37
|
-
};
|
|
38
|
-
var COLORBREWER_SCHEME = exports.COLORBREWER_SCHEME = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, PALETTE_TYPES.SEQ, ['BuGn', 'BuPu', 'GnBu', 'OrRd', 'PuBu', 'PuBuGn', 'PuRd', 'RdPu', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd', 'Blues', 'Greens', 'Greys', 'Oranges', 'Purples', 'Reds']), PALETTE_TYPES.DIV, ['BrBG', 'PiYG', 'PRGn', 'PuOr', 'RdBu', 'RdGy', 'RdYlBu', 'RdYlGn', 'Spectral']), PALETTE_TYPES.QUA, ['Accent', 'Dark2', 'Paired', 'Pastel1', 'Pastel2', 'Set1', 'Set2', 'Set3']);
|
|
39
|
-
|
|
40
|
-
// https://rdrr.io/cran/RColorBrewer/man/ColorBrewer.html
|
|
41
|
-
var COLOR_BLIND_SAFE_MAP = {
|
|
42
|
-
// colorbrewer
|
|
43
|
-
BrBG: true,
|
|
44
|
-
PiYG: true,
|
|
45
|
-
PRGn: true,
|
|
46
|
-
PuOr: true,
|
|
47
|
-
RdBu: true,
|
|
48
|
-
RdGy: false,
|
|
49
|
-
RdYlBu: true,
|
|
50
|
-
RdYlGn: false,
|
|
51
|
-
Spectral: false,
|
|
52
|
-
Accent: false,
|
|
53
|
-
Dark2: true,
|
|
54
|
-
Paired: true,
|
|
55
|
-
Pastel1: false,
|
|
56
|
-
Pastel2: false,
|
|
57
|
-
Set1: false,
|
|
58
|
-
Set2: true,
|
|
59
|
-
Set3: false,
|
|
60
|
-
Blues: true,
|
|
61
|
-
BuGn: true,
|
|
62
|
-
BuPu: true,
|
|
63
|
-
GnBu: true,
|
|
64
|
-
Greens: true,
|
|
65
|
-
Greys: true,
|
|
66
|
-
Oranges: true,
|
|
67
|
-
OrRd: true,
|
|
68
|
-
PuBu: true,
|
|
69
|
-
PuBuGn: true,
|
|
70
|
-
PuRd: true,
|
|
71
|
-
Purples: true,
|
|
72
|
-
RdPu: true,
|
|
73
|
-
Reds: true,
|
|
74
|
-
YlGn: true,
|
|
75
|
-
YlGnBu: true,
|
|
76
|
-
YlOrBr: true,
|
|
77
|
-
YlOrRd: true,
|
|
78
|
-
// d3 scale chromatic
|
|
79
|
-
Sinebow: true,
|
|
80
|
-
Rainbow: false,
|
|
81
|
-
Turbo: true,
|
|
82
|
-
Viridis: true,
|
|
83
|
-
Inferno: true,
|
|
84
|
-
Magma: true,
|
|
85
|
-
Plasma: true,
|
|
86
|
-
Cividis: true,
|
|
87
|
-
Warm: true,
|
|
88
|
-
Cool: false,
|
|
89
|
-
CubehelixDefault: true,
|
|
90
|
-
Tableau10: false
|
|
91
|
-
};
|
|
92
|
-
var D3_COLOR_CHROMATIC_SCHEME = exports.D3_COLOR_CHROMATIC_SCHEME = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, PALETTE_TYPES.CYC, ['Sinebow', 'Rainbow']), PALETTE_TYPES.SEQ, ['Turbo', 'Viridis', 'Inferno', 'Magma', 'Plasma', 'Cividis', 'Warm', 'Cool', 'CubehelixDefault']), PALETTE_TYPES.QUA, ['Tableau10']);
|
|
93
|
-
var DataVizColors = exports.DataVizColors = {
|
|
94
|
-
aqua: '#12939A',
|
|
95
|
-
tumbleweed: '#DDB27C',
|
|
96
|
-
mule_fawn: '#88572C',
|
|
97
|
-
tree_poppy: '#FF991F',
|
|
98
|
-
flame: '#F15C17',
|
|
99
|
-
sapphire: '#223F9A',
|
|
100
|
-
orchid: '#DA70BF',
|
|
101
|
-
chathams_blue: '#125C77',
|
|
102
|
-
med_aquamarine: '#4DC19C',
|
|
103
|
-
crocodile: '#776E57',
|
|
104
|
-
java: '#17B8BE',
|
|
105
|
-
chalky: '#F6D18A',
|
|
106
|
-
light_taupe: '#B7885E',
|
|
107
|
-
peach_orange: '#FFCB99',
|
|
108
|
-
apricot: '#F89570',
|
|
109
|
-
portage: '#829AE3',
|
|
110
|
-
light_orchid: '#E79FD5',
|
|
111
|
-
blue_green: '#1E96BE',
|
|
112
|
-
bermuda: '#89DAC1',
|
|
113
|
-
cloudy: '#B3AD9E'
|
|
114
|
-
};
|
|
115
|
-
var UberVizDiverging = {
|
|
116
|
-
name: 'Uber Viz Diverging',
|
|
117
|
-
category: CATEGORIES.UBER,
|
|
118
|
-
type: PALETTE_TYPES.DIV,
|
|
119
|
-
colors: ['#00939C', '#E6FAFA'],
|
|
120
|
-
colors2: ['#FEEEE8', '#C22E00'],
|
|
121
|
-
diverging: true,
|
|
122
|
-
correctLightness: false,
|
|
123
|
-
colorBlindSafe: true
|
|
124
|
-
};
|
|
125
|
-
var UberVizSequential = {
|
|
126
|
-
name: 'Uber Viz Sequential',
|
|
127
|
-
category: CATEGORIES.UBER,
|
|
128
|
-
type: PALETTE_TYPES.SEQ,
|
|
129
|
-
colors: ['#00939C', '#E6FAFA'],
|
|
130
|
-
colorBlindSafe: true
|
|
131
|
-
};
|
|
132
|
-
var UberPool = {
|
|
133
|
-
name: 'UberPool',
|
|
134
|
-
type: PALETTE_TYPES.DIV,
|
|
135
|
-
category: CATEGORIES.UBER,
|
|
136
|
-
colors: ['#223F9A', '#CF1750', '#FAE300'],
|
|
137
|
-
correctLightness: false,
|
|
138
|
-
colorBlindSafe: true
|
|
139
|
-
};
|
|
140
|
-
var IceAndFire = {
|
|
141
|
-
name: 'Ice And Fire',
|
|
142
|
-
type: PALETTE_TYPES.DIV,
|
|
143
|
-
category: CATEGORIES.UBER,
|
|
144
|
-
colors: ['#0198BD', '#FAFEB3'],
|
|
145
|
-
colors2: ['#FEEDB1', '#D50255'],
|
|
146
|
-
diverging: true,
|
|
147
|
-
colorBlindSafe: true
|
|
148
|
-
};
|
|
149
|
-
var GlobalWarming = {
|
|
150
|
-
name: 'Global Warming',
|
|
151
|
-
type: PALETTE_TYPES.SEQ,
|
|
152
|
-
category: CATEGORIES.UBER,
|
|
153
|
-
colors: ['#4C0035', '#AC1C17', '#FFC300'],
|
|
154
|
-
colorBlindSafe: true
|
|
155
|
-
};
|
|
156
|
-
var Sunrise = {
|
|
157
|
-
name: 'Sunrise',
|
|
158
|
-
type: PALETTE_TYPES.SEQ,
|
|
159
|
-
category: CATEGORIES.UBER,
|
|
160
|
-
colors: ['#355C7D', '#C06C84', '#F8B195'],
|
|
161
|
-
colorBlindSafe: true
|
|
162
|
-
};
|
|
163
|
-
var OceanGreen = {
|
|
164
|
-
name: 'Ocean Green',
|
|
165
|
-
type: PALETTE_TYPES.SEQ,
|
|
166
|
-
category: CATEGORIES.UBER,
|
|
167
|
-
colors: ['#37535E', '#3EACA8', '#E5EEC1'],
|
|
168
|
-
colorBlindSafe: true
|
|
169
|
-
};
|
|
170
|
-
var PinkWine = {
|
|
171
|
-
name: 'Pink Wine',
|
|
172
|
-
type: PALETTE_TYPES.SEQ,
|
|
173
|
-
category: CATEGORIES.UBER,
|
|
174
|
-
colors: ['#2C1E3D', '#956485', '#EDD1CA'],
|
|
175
|
-
colorBlindSafe: true
|
|
176
|
-
};
|
|
177
|
-
var PurpleBlueYellow = {
|
|
178
|
-
name: 'Purple Blue Yellow',
|
|
179
|
-
type: PALETTE_TYPES.SEQ,
|
|
180
|
-
category: CATEGORIES.UBER,
|
|
181
|
-
colors: ['#383C65', '#49838A', '#D6DEBF'],
|
|
182
|
-
mode: 'hsl',
|
|
183
|
-
colorBlindSafe: true
|
|
184
|
-
};
|
|
185
|
-
var ViovetOcean = {
|
|
186
|
-
name: 'ViovetOcean',
|
|
187
|
-
type: PALETTE_TYPES.SEQ,
|
|
188
|
-
category: CATEGORIES.UBER,
|
|
189
|
-
colors: ['#7400B8', '#5E60CE', '#4EA8DE', '#56CFE1', '#72EFDD'],
|
|
190
|
-
colorBlindSafe: false
|
|
191
|
-
};
|
|
192
|
-
var SummerSky = {
|
|
193
|
-
name: 'SummerSky',
|
|
194
|
-
type: PALETTE_TYPES.SEQ,
|
|
195
|
-
category: CATEGORIES.UBER,
|
|
196
|
-
colors: ['#184E77', '#168AAD', '#76C893', '#D9ED92'],
|
|
197
|
-
colorBlindSafe: false
|
|
198
|
-
};
|
|
199
|
-
var UberVizQualitative = {
|
|
200
|
-
name: 'Uber Viz Qualitative',
|
|
201
|
-
type: PALETTE_TYPES.QUA,
|
|
202
|
-
category: CATEGORIES.UBER,
|
|
203
|
-
colors: Object.values(DataVizColors),
|
|
204
|
-
colorBlindSafe: false
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
// https://personal.sron.nl/~pault/#sec:qualitative
|
|
208
|
-
// A set of Qualitative Colors designed by Paul Tol that are color blind friendly
|
|
209
|
-
var TolBright = {
|
|
210
|
-
name: 'Tol Bright',
|
|
211
|
-
type: PALETTE_TYPES.QUA,
|
|
212
|
-
category: CATEGORIES.COLORBLIND,
|
|
213
|
-
colors: ['#4477AA', '#EE6677', '#228833', '#CCBB44', '#66CCEE', '#AA3377', '#BBBBBB'],
|
|
214
|
-
colorBlindSafe: true
|
|
215
|
-
};
|
|
216
|
-
// Bad Data: #BBBBBB
|
|
217
|
-
|
|
218
|
-
var TolVibrant = {
|
|
219
|
-
name: 'Tol Vibrant',
|
|
220
|
-
type: PALETTE_TYPES.QUA,
|
|
221
|
-
category: CATEGORIES.COLORBLIND,
|
|
222
|
-
colors: ['#EE7733', '#0077BB', '#33BBEE', '#EE3377', '#CC3311', '#009988', '#BBBBBB'],
|
|
223
|
-
colorBlindSafe: true
|
|
224
|
-
};
|
|
225
|
-
// Bad Data: #BBBBBB
|
|
226
|
-
|
|
227
|
-
var TolMuted = {
|
|
228
|
-
name: 'Tol Muted',
|
|
229
|
-
type: PALETTE_TYPES.QUA,
|
|
230
|
-
category: CATEGORIES.COLORBLIND,
|
|
231
|
-
colors: ['#CC6677', '#332288', '#DDCC77', '#117733', '#88CCEE', '#882255', '#44AA99', '#999933', '#AA4499'],
|
|
232
|
-
colorBlindSafe: true
|
|
233
|
-
};
|
|
234
|
-
// Bad Data: #DDDDDD
|
|
235
|
-
|
|
236
|
-
var TolMediumContrast = {
|
|
237
|
-
name: 'Tol Medium Contrast',
|
|
238
|
-
type: PALETTE_TYPES.QUA,
|
|
239
|
-
category: CATEGORIES.COLORBLIND,
|
|
240
|
-
colors: ['#6699CC', '#004488', '#EECC66', '#994455', '#997700', '#EE99AA'],
|
|
241
|
-
colorBlindSafe: true
|
|
242
|
-
};
|
|
243
|
-
var TolLight = {
|
|
244
|
-
name: 'Tol Light',
|
|
245
|
-
type: PALETTE_TYPES.QUA,
|
|
246
|
-
category: CATEGORIES.COLORBLIND,
|
|
247
|
-
colors: ['#77AADD', '#EE8866', '#EEDD88', '#FFAABB', '#99DDFF', '#44BB99', '#BBCC33', '#AAAA00'],
|
|
248
|
-
colorBlindSafe: true
|
|
249
|
-
};
|
|
250
|
-
|
|
251
|
-
// https://jfly.uni-koeln.de/color/
|
|
252
|
-
var OkabeIto = {
|
|
253
|
-
name: 'Okabe Ito',
|
|
254
|
-
type: PALETTE_TYPES.QUA,
|
|
255
|
-
category: CATEGORIES.COLORBLIND,
|
|
256
|
-
colors: ['#E69F00', '#56B4E9', '#009E73', '#F0E442', '#0072B2', '#D55E00', '#CC79A7', '#000000'],
|
|
257
|
-
colorBlindSafe: true
|
|
258
|
-
};
|
|
259
|
-
// Bad Data: #DDDDDD
|
|
260
|
-
|
|
261
|
-
var FSQBrand = {
|
|
262
|
-
name: 'FSQ Brand',
|
|
263
|
-
type: PALETTE_TYPES.QUA,
|
|
264
|
-
category: CATEGORIES.COLORBLIND,
|
|
265
|
-
colors: ['#3333FF', '#6166EB', '#2ED9C3', '#82E8DB', '#FCCC0A', '#FFDAAF', '#30A5D9', '#97DAF8'],
|
|
266
|
-
colorBlindSafe: true
|
|
267
|
-
};
|
|
268
|
-
var FSQWarmTone = {
|
|
269
|
-
name: 'FSQ Warm Tone',
|
|
270
|
-
type: PALETTE_TYPES.QUA,
|
|
271
|
-
category: CATEGORIES.COLORBLIND,
|
|
272
|
-
colors: ['#C00B05', '#D150A5', '#E98ECA', '#FECE5A', '#FFDDBF', '#FFB4D3', '#EE5D86', '#D8D2D2'],
|
|
273
|
-
colorBlindSafe: true
|
|
274
|
-
};
|
|
275
|
-
var FSQCoolTone = {
|
|
276
|
-
name: 'FSQ Cool Tone',
|
|
277
|
-
type: PALETTE_TYPES.QUA,
|
|
278
|
-
category: CATEGORIES.COLORBLIND,
|
|
279
|
-
colors: ['#11439F', '#297EE8', '#95C6C9', '#FECE5A', '#FFDDBF', '#9FB1B7', '#5281B5', '#B9D0FB'],
|
|
280
|
-
colorBlindSafe: true
|
|
281
|
-
};
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Build Categorical color palette
|
|
285
|
-
*/
|
|
286
|
-
function buildCategoricalPalette(_ref) {
|
|
287
|
-
var name = _ref.name,
|
|
288
|
-
category = _ref.category,
|
|
289
|
-
colors = _ref.colors,
|
|
290
|
-
colorBlindSafe = _ref.colorBlindSafe;
|
|
291
|
-
var allColors;
|
|
292
|
-
// find d3 color scheme
|
|
293
|
-
var scheme = d3ScaleChromatic["scheme".concat(name)];
|
|
294
|
-
if (!scheme && !colors) {
|
|
295
|
-
_console["default"].warn("scheme".concat(name, " cant not be found in d3 scale chromatic, needs to provide colors"));
|
|
296
|
-
allColors = ['#DDDDDD'];
|
|
297
|
-
} else if (!scheme) {
|
|
298
|
-
// build from colors
|
|
299
|
-
allColors = colors;
|
|
300
|
-
} else {
|
|
301
|
-
allColors = scheme;
|
|
302
|
-
}
|
|
303
|
-
if (!allColors.length) {
|
|
304
|
-
_console["default"].warn('Needs to provide valid d3 color scheme name or an array of colors');
|
|
305
|
-
}
|
|
306
|
-
return {
|
|
307
|
-
name: name,
|
|
308
|
-
category: category,
|
|
309
|
-
type: PALETTE_TYPES.QUA,
|
|
310
|
-
colorBlindSafe: colorBlindSafe !== null && colorBlindSafe !== void 0 ? colorBlindSafe : COLOR_BLIND_SAFE_MAP[name],
|
|
311
|
-
maxStep: allColors.length,
|
|
312
|
-
colors: function colors(numColors) {
|
|
313
|
-
// if numColors > maxSteps, will return allColors
|
|
314
|
-
return allColors.slice(0, numColors).map(_colorToUppercase);
|
|
315
|
-
}
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
function _colorToUppercase(c) {
|
|
319
|
-
return (0, _d3Color.color)(c).formatHex().toUpperCase();
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* All sequantial palette is based on palette in d3-scale-chromatic
|
|
323
|
-
* https://github.com/d3/d3-scale-chromatic/blob/main/src/index.js
|
|
324
|
-
*/
|
|
325
|
-
function buildSequentialPalette(_ref2) {
|
|
326
|
-
var name = _ref2.name,
|
|
327
|
-
type = _ref2.type,
|
|
328
|
-
category = _ref2.category;
|
|
329
|
-
if (!Object.prototype.hasOwnProperty.call(COLOR_BLIND_SAFE_MAP, name)) {
|
|
330
|
-
_console["default"].warn("".concat(name, " does not exists in COLOR_BLIND_SAFE_MAP"));
|
|
331
|
-
}
|
|
332
|
-
var interpolator = d3ScaleChromatic["interpolate".concat(name)];
|
|
333
|
-
return {
|
|
334
|
-
name: name,
|
|
335
|
-
type: type,
|
|
336
|
-
category: category,
|
|
337
|
-
colorBlindSafe: COLOR_BLIND_SAFE_MAP[name],
|
|
338
|
-
colors: function colors(numColors) {
|
|
339
|
-
return (0, _d3Array.range)(0, numColors, 1).map(function (d) {
|
|
340
|
-
return interpolator(d / (numColors - 1));
|
|
341
|
-
}).map(_colorToUppercase);
|
|
342
|
-
},
|
|
343
|
-
linear: function linear() {
|
|
344
|
-
return interpolator;
|
|
345
|
-
}
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
function buildCustomPalette(_ref3) {
|
|
349
|
-
var colors = _ref3.colors,
|
|
350
|
-
_ref3$colors = _ref3.colors2,
|
|
351
|
-
colors2 = _ref3$colors === void 0 ? [] : _ref3$colors,
|
|
352
|
-
_ref3$correctLightnes = _ref3.correctLightness,
|
|
353
|
-
correctLightness = _ref3$correctLightnes === void 0 ? true : _ref3$correctLightnes,
|
|
354
|
-
_ref3$bezier = _ref3.bezier,
|
|
355
|
-
bezier = _ref3$bezier === void 0 ? false : _ref3$bezier,
|
|
356
|
-
_ref3$diverging = _ref3.diverging,
|
|
357
|
-
diverging = _ref3$diverging === void 0 ? false : _ref3$diverging,
|
|
358
|
-
_ref3$mode = _ref3.mode,
|
|
359
|
-
mode = _ref3$mode === void 0 ? 'lch' : _ref3$mode,
|
|
360
|
-
name = _ref3.name,
|
|
361
|
-
type = _ref3.type,
|
|
362
|
-
category = _ref3.category,
|
|
363
|
-
colorBlindSafe = _ref3.colorBlindSafe;
|
|
364
|
-
var palette = {
|
|
365
|
-
name: name,
|
|
366
|
-
type: type,
|
|
367
|
-
category: category,
|
|
368
|
-
colorBlindSafe: colorBlindSafe,
|
|
369
|
-
colors: function colors() {
|
|
370
|
-
return [];
|
|
371
|
-
},
|
|
372
|
-
linear: function linear() {
|
|
373
|
-
return function () {
|
|
374
|
-
return '';
|
|
375
|
-
};
|
|
376
|
-
}
|
|
377
|
-
};
|
|
378
|
-
if (!colors.length) {
|
|
379
|
-
_console["default"].error('colors has to be an array of colors');
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
var scaleLeft = _chromaJs["default"].scale(bezier && colors.length > 1 ? _chromaJs["default"].bezier(colors) : colors).mode(mode).correctLightness(correctLightness);
|
|
383
|
-
var scaleRight;
|
|
384
|
-
var scaleFull;
|
|
385
|
-
if (diverging) {
|
|
386
|
-
if (!colors.length) {
|
|
387
|
-
_console["default"].error('colors2 has to be an array of colors when diverging = true');
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
scaleRight = _chromaJs["default"].scale(bezier && colors2.length > 1 ? _chromaJs["default"].bezier(colors2) : colors2).mode(mode).correctLightness(correctLightness);
|
|
391
|
-
scaleFull = _chromaJs["default"].scale(bezier ? _chromaJs["default"].bezier(colors.concat(colors2)) : colors.concat(colors2)).mode(mode).correctLightness(correctLightness);
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
// return numColors => (scaleLeft ? stepsLeft.colors(numColors) : []);
|
|
395
|
-
|
|
396
|
-
// given number of colors return color steps
|
|
397
|
-
palette.colors = function (numColors) {
|
|
398
|
-
if (diverging) {
|
|
399
|
-
var even = numColors % 2 === 0;
|
|
400
|
-
var numColorsLeft = Math.ceil(numColors / 2) + (even ? 1 : 0);
|
|
401
|
-
var numColorsRight = Math.ceil(numColors / 2) + (even ? 1 : 0);
|
|
402
|
-
var colorsLeft = scaleLeft ? scaleLeft.colors(numColorsLeft) : [];
|
|
403
|
-
var colorsRight = scaleRight ? scaleRight.colors(numColorsRight) : [];
|
|
404
|
-
var _steps = (even ? colorsLeft.slice(0, colorsLeft.length - 1) : colorsLeft).concat(colorsRight.slice(1)).map(_colorToUppercase);
|
|
405
|
-
return _steps;
|
|
406
|
-
}
|
|
407
|
-
return scaleLeft ? scaleLeft.colors(numColors).map(_colorToUppercase) : [];
|
|
408
|
-
};
|
|
409
|
-
palette.linear = function () {
|
|
410
|
-
return diverging ? scaleFull : scaleLeft;
|
|
411
|
-
};
|
|
412
|
-
return palette;
|
|
413
|
-
}
|
|
414
|
-
function buildPaletteBySchemeGroups(schemeGroups, category) {
|
|
415
|
-
return Object.entries(schemeGroups).reduce(function (accu, _ref4) {
|
|
416
|
-
var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
|
|
417
|
-
type = _ref5[0],
|
|
418
|
-
palettes = _ref5[1];
|
|
419
|
-
return [].concat((0, _toConsumableArray2["default"])(accu), (0, _toConsumableArray2["default"])(palettes.reduce(function (group, name) {
|
|
420
|
-
var colorPalette = type === PALETTE_TYPES.QUA ? buildCategoricalPalette({
|
|
421
|
-
name: name,
|
|
422
|
-
category: category
|
|
423
|
-
}) :
|
|
424
|
-
// @ts-ignore jsdoc cant figure out type of 'type'
|
|
425
|
-
buildSequentialPalette({
|
|
426
|
-
name: name,
|
|
427
|
-
type: type,
|
|
428
|
-
category: category
|
|
429
|
-
});
|
|
430
|
-
// @ts-ignore type is not assignable to never[]
|
|
431
|
-
group.push(colorPalette);
|
|
432
|
-
return group;
|
|
433
|
-
}, [])));
|
|
434
|
-
}, []);
|
|
435
|
-
}
|
|
436
|
-
var COLORBREWER_PALETTES = buildPaletteBySchemeGroups(COLORBREWER_SCHEME, CATEGORIES.COLORBREWER);
|
|
437
|
-
var D3_COLOR_PALETTES = buildPaletteBySchemeGroups(D3_COLOR_CHROMATIC_SCHEME, CATEGORIES.D3);
|
|
438
|
-
var BRANDED_PALETTES = [UberVizDiverging, UberVizSequential, UberPool, IceAndFire, GlobalWarming, Sunrise, OceanGreen, PinkWine, PurpleBlueYellow, ViovetOcean, SummerSky, UberVizQualitative, TolBright, TolVibrant, TolMuted, TolMediumContrast, TolLight, OkabeIto, FSQBrand, FSQWarmTone, FSQCoolTone].map(function (recipe) {
|
|
439
|
-
return recipe.type === PALETTE_TYPES.QUA ? buildCategoricalPalette(recipe) : buildCustomPalette(recipe);
|
|
440
|
-
}).filter(Boolean);
|
|
441
|
-
var KEPLER_COLOR_PALETTES = exports.KEPLER_COLOR_PALETTES = [].concat((0, _toConsumableArray2["default"])(BRANDED_PALETTES), (0, _toConsumableArray2["default"])(COLORBREWER_PALETTES), (0, _toConsumableArray2["default"])(D3_COLOR_PALETTES));
|
|
442
|
-
|
|
443
|
-
/**
|
|
444
|
-
* create color range from palette, with steps and reversed as config
|
|
445
|
-
*/
|
|
446
|
-
function colorPaletteToColorRange(colorPalette, colorConfig) {
|
|
447
|
-
var steps = colorConfig.steps,
|
|
448
|
-
reversed = colorConfig.reversed;
|
|
449
|
-
var colors = colorPalette.colors(steps).slice();
|
|
450
|
-
if (reversed) {
|
|
451
|
-
colors.reverse();
|
|
452
|
-
}
|
|
453
|
-
return _objectSpread({
|
|
454
|
-
name: colorPalette.name,
|
|
455
|
-
type: colorPalette.type,
|
|
456
|
-
category: colorPalette.category,
|
|
457
|
-
colors: colors
|
|
458
|
-
}, reversed ? {
|
|
459
|
-
reversed: reversed
|
|
460
|
-
} : {});
|
|
461
|
-
}
|
|
462
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkM1NjYWxlQ2hyb21hdGljIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX2QzQXJyYXkiLCJfY2hyb21hSnMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NvbnNvbGUiLCJfZDNDb2xvciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIkNBVEVHT1JJRVMiLCJleHBvcnRzIiwiQ09MT1JCUkVXRVIiLCJEMyIsIlVCRVIiLCJDT0xPUkJMSU5EIiwiUEFMRVRURV9UWVBFUyIsIlNFUSIsIlFVQSIsIkRJViIsIkNZQyIsIkNPTE9SQlJFV0VSX1NDSEVNRSIsIkNPTE9SX0JMSU5EX1NBRkVfTUFQIiwiQnJCRyIsIlBpWUciLCJQUkduIiwiUHVPciIsIlJkQnUiLCJSZEd5IiwiUmRZbEJ1IiwiUmRZbEduIiwiU3BlY3RyYWwiLCJBY2NlbnQiLCJEYXJrMiIsIlBhaXJlZCIsIlBhc3RlbDEiLCJQYXN0ZWwyIiwiU2V0MSIsIlNldDIiLCJTZXQzIiwiQmx1ZXMiLCJCdUduIiwiQnVQdSIsIkduQnUiLCJHcmVlbnMiLCJHcmV5cyIsIk9yYW5nZXMiLCJPclJkIiwiUHVCdSIsIlB1QnVHbiIsIlB1UmQiLCJQdXJwbGVzIiwiUmRQdSIsIlJlZHMiLCJZbEduIiwiWWxHbkJ1IiwiWWxPckJyIiwiWWxPclJkIiwiU2luZWJvdyIsIlJhaW5ib3ciLCJUdXJibyIsIlZpcmlkaXMiLCJJbmZlcm5vIiwiTWFnbWEiLCJQbGFzbWEiLCJDaXZpZGlzIiwiV2FybSIsIkNvb2wiLCJDdWJlaGVsaXhEZWZhdWx0IiwiVGFibGVhdTEwIiwiRDNfQ09MT1JfQ0hST01BVElDX1NDSEVNRSIsIkRhdGFWaXpDb2xvcnMiLCJhcXVhIiwidHVtYmxld2VlZCIsIm11bGVfZmF3biIsInRyZWVfcG9wcHkiLCJmbGFtZSIsInNhcHBoaXJlIiwib3JjaGlkIiwiY2hhdGhhbXNfYmx1ZSIsIm1lZF9hcXVhbWFyaW5lIiwiY3JvY29kaWxlIiwiamF2YSIsImNoYWxreSIsImxpZ2h0X3RhdXBlIiwicGVhY2hfb3JhbmdlIiwiYXByaWNvdCIsInBvcnRhZ2UiLCJsaWdodF9vcmNoaWQiLCJibHVlX2dyZWVuIiwiYmVybXVkYSIsImNsb3VkeSIsIlViZXJWaXpEaXZlcmdpbmciLCJuYW1lIiwiY2F0ZWdvcnkiLCJ0eXBlIiwiY29sb3JzIiwiY29sb3JzMiIsImRpdmVyZ2luZyIsImNvcnJlY3RMaWdodG5lc3MiLCJjb2xvckJsaW5kU2FmZSIsIlViZXJWaXpTZXF1ZW50aWFsIiwiVWJlclBvb2wiLCJJY2VBbmRGaXJlIiwiR2xvYmFsV2FybWluZyIsIlN1bnJpc2UiLCJPY2VhbkdyZWVuIiwiUGlua1dpbmUiLCJQdXJwbGVCbHVlWWVsbG93IiwibW9kZSIsIlZpb3ZldE9jZWFuIiwiU3VtbWVyU2t5IiwiVWJlclZpelF1YWxpdGF0aXZlIiwidmFsdWVzIiwiVG9sQnJpZ2h0IiwiVG9sVmlicmFudCIsIlRvbE11dGVkIiwiVG9sTWVkaXVtQ29udHJhc3QiLCJUb2xMaWdodCIsIk9rYWJlSXRvIiwiRlNRQnJhbmQiLCJGU1FXYXJtVG9uZSIsIkZTUUNvb2xUb25lIiwiYnVpbGRDYXRlZ29yaWNhbFBhbGV0dGUiLCJfcmVmIiwiYWxsQ29sb3JzIiwic2NoZW1lIiwiY29uY2F0IiwiQ29uc29sZSIsIndhcm4iLCJtYXhTdGVwIiwibnVtQ29sb3JzIiwic2xpY2UiLCJtYXAiLCJfY29sb3JUb1VwcGVyY2FzZSIsImMiLCJkM0NvbG9yIiwiZm9ybWF0SGV4IiwidG9VcHBlckNhc2UiLCJidWlsZFNlcXVlbnRpYWxQYWxldHRlIiwiX3JlZjIiLCJwcm90b3R5cGUiLCJpbnRlcnBvbGF0b3IiLCJyYW5nZSIsImQiLCJsaW5lYXIiLCJidWlsZEN1c3RvbVBhbGV0dGUiLCJfcmVmMyIsIl9yZWYzJGNvbG9ycyIsIl9yZWYzJGNvcnJlY3RMaWdodG5lcyIsIl9yZWYzJGJlemllciIsImJlemllciIsIl9yZWYzJGRpdmVyZ2luZyIsIl9yZWYzJG1vZGUiLCJwYWxldHRlIiwiZXJyb3IiLCJzY2FsZUxlZnQiLCJjaHJvbWEiLCJzY2FsZSIsInNjYWxlUmlnaHQiLCJzY2FsZUZ1bGwiLCJldmVuIiwibnVtQ29sb3JzTGVmdCIsIk1hdGgiLCJjZWlsIiwibnVtQ29sb3JzUmlnaHQiLCJjb2xvcnNMZWZ0IiwiY29sb3JzUmlnaHQiLCJzdGVwcyIsImJ1aWxkUGFsZXR0ZUJ5U2NoZW1lR3JvdXBzIiwic2NoZW1lR3JvdXBzIiwiZW50cmllcyIsInJlZHVjZSIsImFjY3UiLCJfcmVmNCIsIl9yZWY1IiwiX3NsaWNlZFRvQXJyYXkyIiwicGFsZXR0ZXMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiZ3JvdXAiLCJjb2xvclBhbGV0dGUiLCJDT0xPUkJSRVdFUl9QQUxFVFRFUyIsIkQzX0NPTE9SX1BBTEVUVEVTIiwiQlJBTkRFRF9QQUxFVFRFUyIsInJlY2lwZSIsIkJvb2xlYW4iLCJLRVBMRVJfQ09MT1JfUEFMRVRURVMiLCJjb2xvclBhbGV0dGVUb0NvbG9yUmFuZ2UiLCJjb2xvckNvbmZpZyIsInJldmVyc2VkIiwicmV2ZXJzZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xvci1wYWxldHRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBkM1NjYWxlQ2hyb21hdGljIGZyb20gJ2QzLXNjYWxlLWNocm9tYXRpYyc7XG5pbXBvcnQge3JhbmdlfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQge2NvbG9yIGFzIGQzQ29sb3J9IGZyb20gJ2QzLWNvbG9yJztcbmltcG9ydCB7SGV4Q29sb3IsIE1pbmlDb2xvclJhbmdlLCBWYWx1ZU9mfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxudHlwZSBHZXRDb2xvcnMgPSAoc3RlcHM6IG51bWJlcikgPT4gSGV4Q29sb3JbXTtcbi8vIGxpbmVhciBpbnRlcnBvbGF0b3JcbnR5cGUgR2V0TGluZWFyID0gKCkgPT4gKG46IG51bWJlcikgPT4gc3RyaW5nO1xuXG5leHBvcnQgdHlwZSBDYXRlZ29yaWNhbFBhbGV0dGUgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogJ3F1YWxpdGF0aXZlJztcbiAgY2F0ZWdvcnk6IFZhbHVlT2Y8dHlwZW9mIENBVEVHT1JJRVM+O1xuICBjb2xvckJsaW5kU2FmZTogYm9vbGVhbjtcblxuICBjb2xvcnM6IEdldENvbG9ycztcbiAgLy8gY2F0ZWdvcmljYWwgcGFsZXR0ZVxuICBtYXhTdGVwOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTZXF1ZW50aWFsUGFsZXR0ZSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAnc2VxdWVudGlhbCcgfCAnZGl2ZXJnaW5nJyB8ICdjeWNsaWNhbCc7XG4gIGNhdGVnb3J5OiBWYWx1ZU9mPHR5cGVvZiBDQVRFR09SSUVTPjtcbiAgY29sb3JCbGluZFNhZmU6IGJvb2xlYW47XG4gIGNvbG9yczogR2V0Q29sb3JzO1xuICAvLyBzZXF1ZW50aWFsIHBhbGV0dGVcbiAgbGluZWFyOiBHZXRMaW5lYXI7XG59O1xuXG5leHBvcnQgdHlwZSBDb2xvclBhbGV0dGUgPSBDYXRlZ29yaWNhbFBhbGV0dGUgfCBTZXF1ZW50aWFsUGFsZXR0ZTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JJRVMgPSB7XG4gIENPTE9SQlJFV0VSOiAnQ29sb3JCcmV3ZXInLFxuICBEMzogJ0QzJyxcbiAgVUJFUjogJ1ViZXInLFxuICBDT0xPUkJMSU5EOiAnQ29sb3JCbGluZCdcbn07XG5cbmV4cG9ydCBjb25zdCBQQUxFVFRFX1RZUEVTOiB7XG4gIFNFUTogJ3NlcXVlbnRpYWwnO1xuICBRVUE6ICdxdWFsaXRhdGl2ZSc7XG4gIERJVjogJ2RpdmVyZ2luZyc7XG4gIENZQzogJ2N5Y2xpY2FsJztcbn0gPSB7XG4gIFNFUTogJ3NlcXVlbnRpYWwnLFxuICBRVUE6ICdxdWFsaXRhdGl2ZScsXG4gIERJVjogJ2RpdmVyZ2luZycsXG4gIENZQzogJ2N5Y2xpY2FsJ1xufTtcblxuZXhwb3J0IGNvbnN0IENPTE9SQlJFV0VSX1NDSEVNRSA9IHtcbiAgW1BBTEVUVEVfVFlQRVMuU0VRXTogW1xuICAgICdCdUduJyxcbiAgICAnQnVQdScsXG4gICAgJ0duQnUnLFxuICAgICdPclJkJyxcbiAgICAnUHVCdScsXG4gICAgJ1B1QnVHbicsXG4gICAgJ1B1UmQnLFxuICAgICdSZFB1JyxcbiAgICAnWWxHbicsXG4gICAgJ1lsR25CdScsXG4gICAgJ1lsT3JCcicsXG4gICAgJ1lsT3JSZCcsXG4gICAgJ0JsdWVzJyxcbiAgICAnR3JlZW5zJyxcbiAgICAnR3JleXMnLFxuICAgICdPcmFuZ2VzJyxcbiAgICAnUHVycGxlcycsXG4gICAgJ1JlZHMnXG4gIF0sIC8vIDE4ICsgOSArIDhcbiAgLy8gc2luZ2xlaHVlOiBbJ0JsdWVzJywgJ0dyZWVucycsICdHcmV5cycsICdPcmFuZ2VzJywgJ1B1cnBsZXMnLCAnUmVkcyddLFxuICBbUEFMRVRURV9UWVBFUy5ESVZdOiBbXG4gICAgJ0JyQkcnLFxuICAgICdQaVlHJyxcbiAgICAnUFJHbicsXG4gICAgJ1B1T3InLFxuICAgICdSZEJ1JyxcbiAgICAnUmRHeScsXG4gICAgJ1JkWWxCdScsXG4gICAgJ1JkWWxHbicsXG4gICAgJ1NwZWN0cmFsJ1xuICBdLFxuICBbUEFMRVRURV9UWVBFUy5RVUFdOiBbJ0FjY2VudCcsICdEYXJrMicsICdQYWlyZWQnLCAnUGFzdGVsMScsICdQYXN0ZWwyJywgJ1NldDEnLCAnU2V0MicsICdTZXQzJ11cbn07XG5cbi8vIGh0dHBzOi8vcmRyci5pby9jcmFuL1JDb2xvckJyZXdlci9tYW4vQ29sb3JCcmV3ZXIuaHRtbFxuY29uc3QgQ09MT1JfQkxJTkRfU0FGRV9NQVAgPSB7XG4gIC8vIGNvbG9yYnJld2VyXG4gIEJyQkc6IHRydWUsXG4gIFBpWUc6IHRydWUsXG4gIFBSR246IHRydWUsXG4gIFB1T3I6IHRydWUsXG4gIFJkQnU6IHRydWUsXG4gIFJkR3k6IGZhbHNlLFxuICBSZFlsQnU6IHRydWUsXG4gIFJkWWxHbjogZmFsc2UsXG4gIFNwZWN0cmFsOiBmYWxzZSxcbiAgQWNjZW50OiBmYWxzZSxcbiAgRGFyazI6IHRydWUsXG4gIFBhaXJlZDogdHJ1ZSxcbiAgUGFzdGVsMTogZmFsc2UsXG4gIFBhc3RlbDI6IGZhbHNlLFxuICBTZXQxOiBmYWxzZSxcbiAgU2V0MjogdHJ1ZSxcbiAgU2V0MzogZmFsc2UsXG4gIEJsdWVzOiB0cnVlLFxuICBCdUduOiB0cnVlLFxuICBCdVB1OiB0cnVlLFxuICBHbkJ1OiB0cnVlLFxuICBHcmVlbnM6IHRydWUsXG4gIEdyZXlzOiB0cnVlLFxuICBPcmFuZ2VzOiB0cnVlLFxuICBPclJkOiB0cnVlLFxuICBQdUJ1OiB0cnVlLFxuICBQdUJ1R246IHRydWUsXG4gIFB1UmQ6IHRydWUsXG4gIFB1cnBsZXM6IHRydWUsXG4gIFJkUHU6IHRydWUsXG4gIFJlZHM6IHRydWUsXG4gIFlsR246IHRydWUsXG4gIFlsR25CdTogdHJ1ZSxcbiAgWWxPckJyOiB0cnVlLFxuICBZbE9yUmQ6IHRydWUsXG5cbiAgLy8gZDMgc2NhbGUgY2hyb21hdGljXG4gIFNpbmVib3c6IHRydWUsXG4gIFJhaW5ib3c6IGZhbHNlLFxuICBUdXJibzogdHJ1ZSxcbiAgVmlyaWRpczogdHJ1ZSxcbiAgSW5mZXJubzogdHJ1ZSxcbiAgTWFnbWE6IHRydWUsXG4gIFBsYXNtYTogdHJ1ZSxcbiAgQ2l2aWRpczogdHJ1ZSxcbiAgV2FybTogdHJ1ZSxcbiAgQ29vbDogZmFsc2UsXG4gIEN1YmVoZWxpeERlZmF1bHQ6IHRydWUsXG4gIFRhYmxlYXUxMDogZmFsc2Vcbn07XG5cbmV4cG9ydCBjb25zdCBEM19DT0xPUl9DSFJPTUFUSUNfU0NIRU1FID0ge1xuICBbUEFMRVRURV9UWVBFUy5DWUNdOiBbJ1NpbmVib3cnLCAnUmFpbmJvdyddLFxuICBbUEFMRVRURV9UWVBFUy5TRVFdOiBbXG4gICAgJ1R1cmJvJyxcbiAgICAnVmlyaWRpcycsXG4gICAgJ0luZmVybm8nLFxuICAgICdNYWdtYScsXG4gICAgJ1BsYXNtYScsXG4gICAgJ0NpdmlkaXMnLFxuICAgICdXYXJtJyxcbiAgICAnQ29vbCcsXG4gICAgJ0N1YmVoZWxpeERlZmF1bHQnXG4gIF0sXG4gIFtQQUxFVFRFX1RZUEVTLlFVQV06IFsnVGFibGVhdTEwJ11cbn07XG5cbmV4cG9ydCBjb25zdCBEYXRhVml6Q29sb3JzID0ge1xuICBhcXVhOiAnIzEyOTM5QScsXG4gIHR1bWJsZXdlZWQ6ICcjRERCMjdDJyxcbiAgbXVsZV9mYXduOiAnIzg4NTcyQycsXG4gIHRyZWVfcG9wcHk6ICcjRkY5OTFGJyxcbiAgZmxhbWU6ICcjRjE1QzE3JyxcbiAgc2FwcGhpcmU6ICcjMjIzRjlBJyxcbiAgb3JjaGlkOiAnI0RBNzBCRicsXG4gIGNoYXRoYW1zX2JsdWU6ICcjMTI1Qzc3JyxcbiAgbWVkX2FxdWFtYXJpbmU6ICcjNERDMTlDJyxcbiAgY3JvY29kaWxlOiAnIzc3NkU1NycsXG4gIGphdmE6ICcjMTdCOEJFJyxcbiAgY2hhbGt5OiAnI0Y2RDE4QScsXG4gIGxpZ2h0X3RhdXBlOiAnI0I3ODg1RScsXG4gIHBlYWNoX29yYW5nZTogJyNGRkNCOTknLFxuICBhcHJpY290OiAnI0Y4OTU3MCcsXG4gIHBvcnRhZ2U6ICcjODI5QUUzJyxcbiAgbGlnaHRfb3JjaGlkOiAnI0U3OUZENScsXG4gIGJsdWVfZ3JlZW46ICcjMUU5NkJFJyxcbiAgYmVybXVkYTogJyM4OURBQzEnLFxuICBjbG91ZHk6ICcjQjNBRDlFJ1xufTtcblxuY29uc3QgVWJlclZpekRpdmVyZ2luZyA9IHtcbiAgbmFtZTogJ1ViZXIgVml6IERpdmVyZ2luZycsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLlVCRVIsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuRElWLFxuICBjb2xvcnM6IFsnIzAwOTM5QycsICcjRTZGQUZBJ10sXG4gIGNvbG9yczI6IFsnI0ZFRUVFOCcsICcjQzIyRTAwJ10sXG4gIGRpdmVyZ2luZzogdHJ1ZSxcbiAgY29ycmVjdExpZ2h0bmVzczogZmFsc2UsXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuXG5jb25zdCBVYmVyVml6U2VxdWVudGlhbCA9IHtcbiAgbmFtZTogJ1ViZXIgVml6IFNlcXVlbnRpYWwnLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5VQkVSLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlNFUSxcbiAgY29sb3JzOiBbJyMwMDkzOUMnLCAnI0U2RkFGQSddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuY29uc3QgVWJlclBvb2wgPSB7XG4gIG5hbWU6ICdVYmVyUG9vbCcsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuRElWLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5VQkVSLFxuICBjb2xvcnM6IFsnIzIyM0Y5QScsICcjQ0YxNzUwJywgJyNGQUUzMDAnXSxcbiAgY29ycmVjdExpZ2h0bmVzczogZmFsc2UsXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuXG5jb25zdCBJY2VBbmRGaXJlID0ge1xuICBuYW1lOiAnSWNlIEFuZCBGaXJlJyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5ESVYsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLlVCRVIsXG4gIGNvbG9yczogWycjMDE5OEJEJywgJyNGQUZFQjMnXSxcbiAgY29sb3JzMjogWycjRkVFREIxJywgJyNENTAyNTUnXSxcbiAgZGl2ZXJnaW5nOiB0cnVlLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuY29uc3QgR2xvYmFsV2FybWluZyA9IHtcbiAgbmFtZTogJ0dsb2JhbCBXYXJtaW5nJyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5TRVEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLlVCRVIsXG4gIGNvbG9yczogWycjNEMwMDM1JywgJyNBQzFDMTcnLCAnI0ZGQzMwMCddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuY29uc3QgU3VucmlzZSA9IHtcbiAgbmFtZTogJ1N1bnJpc2UnLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlNFUSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuVUJFUixcbiAgY29sb3JzOiBbJyMzNTVDN0QnLCAnI0MwNkM4NCcsICcjRjhCMTk1J10sXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuXG5jb25zdCBPY2VhbkdyZWVuID0ge1xuICBuYW1lOiAnT2NlYW4gR3JlZW4nLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlNFUSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuVUJFUixcbiAgY29sb3JzOiBbJyMzNzUzNUUnLCAnIzNFQUNBOCcsICcjRTVFRUMxJ10sXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuXG5jb25zdCBQaW5rV2luZSA9IHtcbiAgbmFtZTogJ1BpbmsgV2luZScsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuU0VRLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5VQkVSLFxuICBjb2xvcnM6IFsnIzJDMUUzRCcsICcjOTU2NDg1JywgJyNFREQxQ0EnXSxcbiAgY29sb3JCbGluZFNhZmU6IHRydWVcbn07XG5cbmNvbnN0IFB1cnBsZUJsdWVZZWxsb3cgPSB7XG4gIG5hbWU6ICdQdXJwbGUgQmx1ZSBZZWxsb3cnLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlNFUSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuVUJFUixcbiAgY29sb3JzOiBbJyMzODNDNjUnLCAnIzQ5ODM4QScsICcjRDZERUJGJ10sXG4gIG1vZGU6ICdoc2wnLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuY29uc3QgVmlvdmV0T2NlYW4gPSB7XG4gIG5hbWU6ICdWaW92ZXRPY2VhbicsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuU0VRLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5VQkVSLFxuICBjb2xvcnM6IFsnIzc0MDBCOCcsICcjNUU2MENFJywgJyM0RUE4REUnLCAnIzU2Q0ZFMScsICcjNzJFRkREJ10sXG4gIGNvbG9yQmxpbmRTYWZlOiBmYWxzZVxufTtcblxuY29uc3QgU3VtbWVyU2t5ID0ge1xuICBuYW1lOiAnU3VtbWVyU2t5JyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5TRVEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLlVCRVIsXG4gIGNvbG9yczogWycjMTg0RTc3JywgJyMxNjhBQUQnLCAnIzc2Qzg5MycsICcjRDlFRDkyJ10sXG4gIGNvbG9yQmxpbmRTYWZlOiBmYWxzZVxufTtcblxuY29uc3QgVWJlclZpelF1YWxpdGF0aXZlID0ge1xuICBuYW1lOiAnVWJlciBWaXogUXVhbGl0YXRpdmUnLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlFVQSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuVUJFUixcbiAgY29sb3JzOiBPYmplY3QudmFsdWVzKERhdGFWaXpDb2xvcnMpLFxuICBjb2xvckJsaW5kU2FmZTogZmFsc2Vcbn07XG5cbi8vIGh0dHBzOi8vcGVyc29uYWwuc3Jvbi5ubC9+cGF1bHQvI3NlYzpxdWFsaXRhdGl2ZVxuLy8gQSBzZXQgb2YgUXVhbGl0YXRpdmUgQ29sb3JzIGRlc2lnbmVkIGJ5IFBhdWwgVG9sIHRoYXQgYXJlIGNvbG9yIGJsaW5kIGZyaWVuZGx5XG5jb25zdCBUb2xCcmlnaHQgPSB7XG4gIG5hbWU6ICdUb2wgQnJpZ2h0JyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5RVUEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLkNPTE9SQkxJTkQsXG4gIGNvbG9yczogWycjNDQ3N0FBJywgJyNFRTY2NzcnLCAnIzIyODgzMycsICcjQ0NCQjQ0JywgJyM2NkNDRUUnLCAnI0FBMzM3NycsICcjQkJCQkJCJ10sXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuLy8gQmFkIERhdGE6ICNCQkJCQkJcblxuY29uc3QgVG9sVmlicmFudCA9IHtcbiAgbmFtZTogJ1RvbCBWaWJyYW50JyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5RVUEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLkNPTE9SQkxJTkQsXG4gIGNvbG9yczogWycjRUU3NzMzJywgJyMwMDc3QkInLCAnIzMzQkJFRScsICcjRUUzMzc3JywgJyNDQzMzMTEnLCAnIzAwOTk4OCcsICcjQkJCQkJCJ10sXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuLy8gQmFkIERhdGE6ICNCQkJCQkJcblxuY29uc3QgVG9sTXV0ZWQgPSB7XG4gIG5hbWU6ICdUb2wgTXV0ZWQnLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlFVQSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuQ09MT1JCTElORCxcbiAgY29sb3JzOiBbXG4gICAgJyNDQzY2NzcnLFxuICAgICcjMzMyMjg4JyxcbiAgICAnI0REQ0M3NycsXG4gICAgJyMxMTc3MzMnLFxuICAgICcjODhDQ0VFJyxcbiAgICAnIzg4MjI1NScsXG4gICAgJyM0NEFBOTknLFxuICAgICcjOTk5OTMzJyxcbiAgICAnI0FBNDQ5OSdcbiAgXSxcbiAgY29sb3JCbGluZFNhZmU6IHRydWVcbn07XG4vLyBCYWQgRGF0YTogI0RERERERFxuXG5jb25zdCBUb2xNZWRpdW1Db250cmFzdCA9IHtcbiAgbmFtZTogJ1RvbCBNZWRpdW0gQ29udHJhc3QnLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlFVQSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuQ09MT1JCTElORCxcbiAgY29sb3JzOiBbJyM2Njk5Q0MnLCAnIzAwNDQ4OCcsICcjRUVDQzY2JywgJyM5OTQ0NTUnLCAnIzk5NzcwMCcsICcjRUU5OUFBJ10sXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuXG5jb25zdCBUb2xMaWdodCA9IHtcbiAgbmFtZTogJ1RvbCBMaWdodCcsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuUVVBLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5DT0xPUkJMSU5ELFxuICBjb2xvcnM6IFsnIzc3QUFERCcsICcjRUU4ODY2JywgJyNFRUREODgnLCAnI0ZGQUFCQicsICcjOTlEREZGJywgJyM0NEJCOTknLCAnI0JCQ0MzMycsICcjQUFBQTAwJ10sXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuXG4vLyBodHRwczovL2pmbHkudW5pLWtvZWxuLmRlL2NvbG9yL1xuY29uc3QgT2thYmVJdG8gPSB7XG4gIG5hbWU6ICdPa2FiZSBJdG8nLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlFVQSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuQ09MT1JCTElORCxcbiAgY29sb3JzOiBbJyNFNjlGMDAnLCAnIzU2QjRFOScsICcjMDA5RTczJywgJyNGMEU0NDInLCAnIzAwNzJCMicsICcjRDU1RTAwJywgJyNDQzc5QTcnLCAnIzAwMDAwMCddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcbi8vIEJhZCBEYXRhOiAjREREREREXG5cbmNvbnN0IEZTUUJyYW5kID0ge1xuICBuYW1lOiAnRlNRIEJyYW5kJyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5RVUEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLkNPTE9SQkxJTkQsXG4gIGNvbG9yczogWycjMzMzM0ZGJywgJyM2MTY2RUInLCAnIzJFRDlDMycsICcjODJFOERCJywgJyNGQ0NDMEEnLCAnI0ZGREFBRicsICcjMzBBNUQ5JywgJyM5N0RBRjgnXSxcbiAgY29sb3JCbGluZFNhZmU6IHRydWVcbn07XG5cbmNvbnN0IEZTUVdhcm1Ub25lID0ge1xuICBuYW1lOiAnRlNRIFdhcm0gVG9uZScsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuUVVBLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5DT0xPUkJMSU5ELFxuICBjb2xvcnM6IFsnI0MwMEIwNScsICcjRDE1MEE1JywgJyNFOThFQ0EnLCAnI0ZFQ0U1QScsICcjRkZEREJGJywgJyNGRkI0RDMnLCAnI0VFNUQ4NicsICcjRDhEMkQyJ10sXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuXG5jb25zdCBGU1FDb29sVG9uZSA9IHtcbiAgbmFtZTogJ0ZTUSBDb29sIFRvbmUnLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlFVQSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuQ09MT1JCTElORCxcbiAgY29sb3JzOiBbJyMxMTQzOUYnLCAnIzI5N0VFOCcsICcjOTVDNkM5JywgJyNGRUNFNUEnLCAnI0ZGRERCRicsICcjOUZCMUI3JywgJyM1MjgxQjUnLCAnI0I5RDBGQiddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBCdWlsZCBDYXRlZ29yaWNhbCBjb2xvciBwYWxldHRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENhdGVnb3JpY2FsUGFsZXR0ZSh7XG4gIG5hbWUsXG4gIGNhdGVnb3J5LFxuICBjb2xvcnMsXG4gIGNvbG9yQmxpbmRTYWZlXG59OiB7XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IFZhbHVlT2Y8dHlwZW9mIENBVEVHT1JJRVM+O1xuICBjb2xvcnM/OiBIZXhDb2xvcltdO1xuICBjb2xvckJsaW5kU2FmZT86IGJvb2xlYW47XG59KTogQ2F0ZWdvcmljYWxQYWxldHRlIHtcbiAgbGV0IGFsbENvbG9ycztcbiAgLy8gZmluZCBkMyBjb2xvciBzY2hlbWVcbiAgY29uc3Qgc2NoZW1lID0gZDNTY2FsZUNocm9tYXRpY1tgc2NoZW1lJHtuYW1lfWBdO1xuXG4gIGlmICghc2NoZW1lICYmICFjb2xvcnMpIHtcbiAgICBDb25zb2xlLndhcm4oYHNjaGVtZSR7bmFtZX0gY2FudCBub3QgYmUgZm91bmQgaW4gZDMgc2NhbGUgY2hyb21hdGljLCBuZWVkcyB0byBwcm92aWRlIGNvbG9yc2ApO1xuICAgIGFsbENvbG9ycyA9IFsnI0RERERERCddO1xuICB9IGVsc2UgaWYgKCFzY2hlbWUpIHtcbiAgICAvLyBidWlsZCBmcm9tIGNvbG9yc1xuICAgIGFsbENvbG9ycyA9IGNvbG9ycztcbiAgfSBlbHNlIHtcbiAgICBhbGxDb2xvcnMgPSBzY2hlbWU7XG4gIH1cblxuICBpZiAoIWFsbENvbG9ycy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oJ05lZWRzIHRvIHByb3ZpZGUgdmFsaWQgZDMgY29sb3Igc2NoZW1lIG5hbWUgb3IgYW4gYXJyYXkgb2YgY29sb3JzJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgY2F0ZWdvcnksXG4gICAgdHlwZTogUEFMRVRURV9UWVBFUy5RVUEsXG4gICAgY29sb3JCbGluZFNhZmU6IGNvbG9yQmxpbmRTYWZlID8/IENPTE9SX0JMSU5EX1NBRkVfTUFQW25hbWVdLFxuICAgIG1heFN0ZXA6IGFsbENvbG9ycy5sZW5ndGgsXG4gICAgY29sb3JzOiBudW1Db2xvcnMgPT4ge1xuICAgICAgLy8gaWYgbnVtQ29sb3JzID4gbWF4U3RlcHMsICB3aWxsIHJldHVybiBhbGxDb2xvcnNcbiAgICAgIHJldHVybiBhbGxDb2xvcnMuc2xpY2UoMCwgbnVtQ29sb3JzKS5tYXAoX2NvbG9yVG9VcHBlcmNhc2UpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gX2NvbG9yVG9VcHBlcmNhc2UoYykge1xuICByZXR1cm4gZDNDb2xvcihjKS5mb3JtYXRIZXgoKS50b1VwcGVyQ2FzZSgpO1xufVxuLyoqXG4gKiBBbGwgc2VxdWFudGlhbCBwYWxldHRlIGlzIGJhc2VkIG9uIHBhbGV0dGUgaW4gZDMtc2NhbGUtY2hyb21hdGljXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtc2NhbGUtY2hyb21hdGljL2Jsb2IvbWFpbi9zcmMvaW5kZXguanNcbiAqL1xuZnVuY3Rpb24gYnVpbGRTZXF1ZW50aWFsUGFsZXR0ZSh7bmFtZSwgdHlwZSwgY2F0ZWdvcnl9KSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKENPTE9SX0JMSU5EX1NBRkVfTUFQLCBuYW1lKSkge1xuICAgIENvbnNvbGUud2FybihgJHtuYW1lfSBkb2VzIG5vdCBleGlzdHMgaW4gQ09MT1JfQkxJTkRfU0FGRV9NQVBgKTtcbiAgfVxuICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkM1NjYWxlQ2hyb21hdGljW2BpbnRlcnBvbGF0ZSR7bmFtZX1gXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgdHlwZSxcbiAgICBjYXRlZ29yeSxcbiAgICBjb2xvckJsaW5kU2FmZTogQ09MT1JfQkxJTkRfU0FGRV9NQVBbbmFtZV0sXG4gICAgY29sb3JzOiBudW1Db2xvcnMgPT4ge1xuICAgICAgcmV0dXJuIHJhbmdlKDAsIG51bUNvbG9ycywgMSlcbiAgICAgICAgLm1hcChkID0+IGludGVycG9sYXRvcihkIC8gKG51bUNvbG9ycyAtIDEpKSlcbiAgICAgICAgLm1hcChfY29sb3JUb1VwcGVyY2FzZSk7XG4gICAgfSxcbiAgICBsaW5lYXI6ICgpID0+IHtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0b3I7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEN1c3RvbVBhbGV0dGUoe1xuICBjb2xvcnMsXG4gIGNvbG9yczIgPSBbXSxcbiAgY29ycmVjdExpZ2h0bmVzcyA9IHRydWUsXG4gIGJlemllciA9IGZhbHNlLFxuICBkaXZlcmdpbmcgPSBmYWxzZSxcbiAgbW9kZSA9ICdsY2gnLFxuICBuYW1lLFxuICB0eXBlLFxuICBjYXRlZ29yeSxcbiAgY29sb3JCbGluZFNhZmVcbn06IHtcbiAgY29sb3JzOiBIZXhDb2xvcltdO1xuICBjb2xvcnMyPzogSGV4Q29sb3JbXTtcbiAgY29ycmVjdExpZ2h0bmVzcz86IGJvb2xlYW47XG4gIGJlemllcj86IGJvb2xlYW47XG4gIGRpdmVyZ2luZz86IGJvb2xlYW47XG4gIG1vZGU/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogU2VxdWVudGlhbFBhbGV0dGVbJ3R5cGUnXTtcbiAgY2F0ZWdvcnk6IFZhbHVlT2Y8dHlwZW9mIENBVEVHT1JJRVM+O1xuICBjb2xvckJsaW5kU2FmZTogYm9vbGVhbjtcbn0pOiBTZXF1ZW50aWFsUGFsZXR0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhbGV0dGU6IFNlcXVlbnRpYWxQYWxldHRlID0ge1xuICAgIG5hbWUsXG4gICAgdHlwZSxcbiAgICBjYXRlZ29yeSxcbiAgICBjb2xvckJsaW5kU2FmZSxcbiAgICBjb2xvcnM6ICgpID0+IFtdLFxuICAgIGxpbmVhcjogKCkgPT4gKCkgPT4gJydcbiAgfTtcblxuICBpZiAoIWNvbG9ycy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLmVycm9yKCdjb2xvcnMgaGFzIHRvIGJlIGFuIGFycmF5IG9mIGNvbG9ycycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNjYWxlTGVmdCA9IGNocm9tYVxuICAgIC5zY2FsZShiZXppZXIgJiYgY29sb3JzLmxlbmd0aCA+IDEgPyBjaHJvbWEuYmV6aWVyKGNvbG9ycykgOiBjb2xvcnMpXG4gICAgLm1vZGUobW9kZSlcbiAgICAuY29ycmVjdExpZ2h0bmVzcyhjb3JyZWN0TGlnaHRuZXNzKTtcbiAgbGV0IHNjYWxlUmlnaHQ7XG4gIGxldCBzY2FsZUZ1bGw7XG4gIGlmIChkaXZlcmdpbmcpIHtcbiAgICBpZiAoIWNvbG9ycy5sZW5ndGgpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoJ2NvbG9yczIgaGFzIHRvIGJlIGFuIGFycmF5IG9mIGNvbG9ycyB3aGVuIGRpdmVyZ2luZyA9IHRydWUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2NhbGVSaWdodCA9IGNocm9tYVxuICAgICAgLnNjYWxlKGJlemllciAmJiBjb2xvcnMyLmxlbmd0aCA+IDEgPyBjaHJvbWEuYmV6aWVyKGNvbG9yczIpIDogY29sb3JzMilcbiAgICAgIC5tb2RlKG1vZGUpXG4gICAgICAuY29ycmVjdExpZ2h0bmVzcyhjb3JyZWN0TGlnaHRuZXNzKTtcblxuICAgIHNjYWxlRnVsbCA9IGNocm9tYVxuICAgICAgLnNjYWxlKGJlemllciA/IGNocm9tYS5iZXppZXIoY29sb3JzLmNvbmNhdChjb2xvcnMyKSkgOiBjb2xvcnMuY29uY2F0KGNvbG9yczIpKVxuICAgICAgLm1vZGUobW9kZSlcbiAgICAgIC5jb3JyZWN0TGlnaHRuZXNzKGNvcnJlY3RMaWdodG5lc3MpO1xuICB9XG5cbiAgLy8gcmV0dXJuIG51bUNvbG9ycyA9PiAoc2NhbGVMZWZ0ID8gc3RlcHNMZWZ0LmNvbG9ycyhudW1Db2xvcnMpIDogW10pO1xuXG4gIC8vIGdpdmVuIG51bWJlciBvZiBjb2xvcnMgcmV0dXJuIGNvbG9yIHN0ZXBzXG4gIHBhbGV0dGUuY29sb3JzID0gbnVtQ29sb3JzID0+IHtcbiAgICBpZiAoZGl2ZXJnaW5nKSB7XG4gICAgICBjb25zdCBldmVuID0gbnVtQ29sb3JzICUgMiA9PT0gMDtcblxuICAgICAgY29uc3QgbnVtQ29sb3JzTGVmdCA9IE1hdGguY2VpbChudW1Db2xvcnMgLyAyKSArIChldmVuID8gMSA6IDApO1xuICAgICAgY29uc3QgbnVtQ29sb3JzUmlnaHQgPSBNYXRoLmNlaWwobnVtQ29sb3JzIC8gMikgKyAoZXZlbiA/IDEgOiAwKTtcblxuICAgICAgY29uc3QgY29sb3JzTGVmdCA9IHNjYWxlTGVmdCA/IHNjYWxlTGVmdC5jb2xvcnMobnVtQ29sb3JzTGVmdCkgOiBbXTtcbiAgICAgIGNvbnN0IGNvbG9yc1JpZ2h0ID0gc2NhbGVSaWdodCA/IHNjYWxlUmlnaHQuY29sb3JzKG51bUNvbG9yc1JpZ2h0KSA6IFtdO1xuICAgICAgY29uc3Qgc3RlcHMgPSAoZXZlbiA/IGNvbG9yc0xlZnQuc2xpY2UoMCwgY29sb3JzTGVmdC5sZW5ndGggLSAxKSA6IGNvbG9yc0xlZnQpXG4gICAgICAgIC5jb25jYXQoY29sb3JzUmlnaHQuc2xpY2UoMSkpXG4gICAgICAgIC5tYXAoX2NvbG9yVG9VcHBlcmNhc2UpO1xuXG4gICAgICByZXR1cm4gc3RlcHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlTGVmdCA/IHNjYWxlTGVmdC5jb2xvcnMobnVtQ29sb3JzKS5tYXAoX2NvbG9yVG9VcHBlcmNhc2UpIDogW107XG4gIH07XG5cbiAgcGFsZXR0ZS5saW5lYXIgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGRpdmVyZ2luZyA/IHNjYWxlRnVsbCA6IHNjYWxlTGVmdDtcbiAgfTtcblxuICByZXR1cm4gcGFsZXR0ZTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQYWxldHRlQnlTY2hlbWVHcm91cHMoXG4gIHNjaGVtZUdyb3VwczogdHlwZW9mIENPTE9SQlJFV0VSX1NDSEVNRSB8IHR5cGVvZiBEM19DT0xPUl9DSFJPTUFUSUNfU0NIRU1FLFxuICBjYXRlZ29yeTogVmFsdWVPZjx0eXBlb2YgQ0FURUdPUklFUz5cbik6IENvbG9yUGFsZXR0ZVtdIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHNjaGVtZUdyb3VwcykucmVkdWNlKChhY2N1LCBbdHlwZSwgcGFsZXR0ZXNdKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLmFjY3UsXG4gICAgICAuLi5wYWxldHRlcy5yZWR1Y2UoKGdyb3VwLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbG9yUGFsZXR0ZSA9XG4gICAgICAgICAgdHlwZSA9PT0gUEFMRVRURV9UWVBFUy5RVUFcbiAgICAgICAgICAgID8gYnVpbGRDYXRlZ29yaWNhbFBhbGV0dGUoe25hbWUsIGNhdGVnb3J5fSlcbiAgICAgICAgICAgIDogLy8gQHRzLWlnbm9yZSBqc2RvYyBjYW50IGZpZ3VyZSBvdXQgdHlwZSBvZiAndHlwZSdcbiAgICAgICAgICAgICAgYnVpbGRTZXF1ZW50aWFsUGFsZXR0ZSh7bmFtZSwgdHlwZSwgY2F0ZWdvcnl9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSB0eXBlIGlzIG5vdCBhc3NpZ25hYmxlIHRvIG5ldmVyW11cbiAgICAgICAgZ3JvdXAucHVzaChjb2xvclBhbGV0dGUpO1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICB9LCBbXSlcbiAgICBdO1xuICB9LCBbXSk7XG59XG5cbmNvbnN0IENPTE9SQlJFV0VSX1BBTEVUVEVTID0gYnVpbGRQYWxldHRlQnlTY2hlbWVHcm91cHMoQ09MT1JCUkVXRVJfU0NIRU1FLCBDQVRFR09SSUVTLkNPTE9SQlJFV0VSKTtcbmNvbnN0IEQzX0NPTE9SX1BBTEVUVEVTID0gYnVpbGRQYWxldHRlQnlTY2hlbWVHcm91cHMoRDNfQ09MT1JfQ0hST01BVElDX1NDSEVNRSwgQ0FURUdPUklFUy5EMyk7XG5jb25zdCBCUkFOREVEX1BBTEVUVEVTOiBDb2xvclBhbGV0dGVbXSA9IFtcbiAgVWJlclZpekRpdmVyZ2luZyxcbiAgVWJlclZpelNlcXVlbnRpYWwsXG4gIFViZXJQb29sLFxuICBJY2VBbmRGaXJlLFxuICBHbG9iYWxXYXJtaW5nLFxuICBTdW5yaXNlLFxuICBPY2VhbkdyZWVuLFxuICBQaW5rV2luZSxcbiAgUHVycGxlQmx1ZVllbGxvdyxcbiAgVmlvdmV0T2NlYW4sXG4gIFN1bW1lclNreSxcbiAgVWJlclZpelF1YWxpdGF0aXZlLFxuICBUb2xCcmlnaHQsXG4gIFRvbFZpYnJhbnQsXG4gIFRvbE11dGVkLFxuICBUb2xNZWRpdW1Db250cmFzdCxcbiAgVG9sTGlnaHQsXG4gIE9rYWJlSXRvLFxuICBGU1FCcmFuZCxcbiAgRlNRV2FybVRvbmUsXG4gIEZTUUNvb2xUb25lXG5dXG4gIC5tYXAocmVjaXBlID0+XG4gICAgcmVjaXBlLnR5cGUgPT09IFBBTEVUVEVfVFlQRVMuUVVBID8gYnVpbGRDYXRlZ29yaWNhbFBhbGV0dGUocmVjaXBlKSA6IGJ1aWxkQ3VzdG9tUGFsZXR0ZShyZWNpcGUpXG4gIClcbiAgLmZpbHRlcihCb29sZWFuKSBhcyBDb2xvclBhbGV0dGVbXTtcblxuZXhwb3J0IGNvbnN0IEtFUExFUl9DT0xPUl9QQUxFVFRFUzogQ29sb3JQYWxldHRlW10gPSBbXG4gIC4uLkJSQU5ERURfUEFMRVRURVMsXG4gIC4uLkNPTE9SQlJFV0VSX1BBTEVUVEVTLFxuICAuLi5EM19DT0xPUl9QQUxFVFRFU1xuXTtcblxuLyoqXG4gKiBjcmVhdGUgY29sb3IgcmFuZ2UgZnJvbSBwYWxldHRlLCB3aXRoIHN0ZXBzIGFuZCByZXZlcnNlZCBhcyBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yUGFsZXR0ZVRvQ29sb3JSYW5nZShcbiAgY29sb3JQYWxldHRlOiBDb2xvclBhbGV0dGUsXG4gIGNvbG9yQ29uZmlnOiB7XG4gICAgcmV2ZXJzZWQ6IGJvb2xlYW47XG4gICAgc3RlcHM6IG51bWJlcjtcbiAgfVxuKTogTWluaUNvbG9yUmFuZ2Uge1xuICBjb25zdCB7c3RlcHMsIHJldmVyc2VkfSA9IGNvbG9yQ29uZmlnO1xuICBjb25zdCBjb2xvcnMgPSBjb2xvclBhbGV0dGUuY29sb3JzKHN0ZXBzKS5zbGljZSgpO1xuICBpZiAocmV2ZXJzZWQpIHtcbiAgICBjb2xvcnMucmV2ZXJzZSgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBjb2xvclBhbGV0dGUubmFtZSxcbiAgICB0eXBlOiBjb2xvclBhbGV0dGUudHlwZSxcbiAgICBjYXRlZ29yeTogY29sb3JQYWxldHRlLmNhdGVnb3J5LFxuICAgIGNvbG9ycyxcbiAgICAuLi4ocmV2ZXJzZWQgPyB7cmV2ZXJzZWR9IDoge30pXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxnQkFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsU0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksUUFBQSxHQUFB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QUk7RUFDVkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBSSxFQUFFLEtBQUs7RUFDWEMsTUFBTSxFQUFFLElBQUk7RUFDWkMsTUFBTSxFQUFFLEtBQUs7RUFDYkMsUUFBUSxFQUFFLEtBQUs7RUFDZkMsTUFBTSxFQUFFLEtBQUs7RUFDYkMsS0FBSyxFQUFFLElBQUk7RUFDWEMsTUFBTSxFQUFFLElBQUk7RUFDWkMsT0FBTyxFQUFFLEtBQUs7RUFDZEMsT0FBTyxFQUFFLEtBQUs7RUFDZEMsSUFBSSxFQUFFLEtBQUs7RUFDWEMsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBSSxFQUFFLEtBQUs7RUFDWEMsS0FBSyxFQUFFLElBQUk7RUFDWEMsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsTUFBTSxFQUFFLElBQUk7RUFDWkMsS0FBSyxFQUFFLElBQUk7RUFDWEMsT0FBTyxFQUFFLElBQUk7RUFDYkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsTUFBTSxFQUFFLElBQUk7RUFDWkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsT0FBTyxFQUFFLElBQUk7RUFDYkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsTUFBTSxFQUFFLElBQUk7RUFDWkMsTUFBTSxFQUFFLElBQUk7RUFDWkMsTUFBTSxFQUFFLElBQUk7RUFFWjtFQUNBQyxPQUFPLEVBQUUsSUFBSTtFQUNiQyxPQUFPLEVBQUUsS0FBSztFQUNkQyxLQUFLLEVBQUUsSUFBSTtFQUNYQyxPQUFPLEVBQUUsSUFBSTtFQUNiQyxPQUFPLEVBQUUsSUFBSTtFQUNiQyxLQUFLLEVBQUUsSUFBSTtFQUNYQyxNQUFNLEVBQUUsSUFBSTtFQUNaQyxPQUFPLEVBQUUsSUFBSTtFQUNiQyxJQUFJLEVBQUUsSUFBSTtFQUNWQyxJQUFJLEVBQUUsS0FBSztFQUNYQyxnQkFB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
|