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