@kiwibit/chart 17.0.0 → 17.0.1

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.
@@ -0,0 +1,452 @@
1
+ // Angular Imports
2
+ import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
3
+ // Kiwi Chart Imports
4
+ import { ShapeVariant } from '../models/chart.models';
5
+ import { ADD_POINT, RESTORE, SAVE_AS_SVG, ZOOM_IN, ZOOM_OUT } from '../constants/chart.constants';
6
+ // Echarts Imports
7
+ import * as echarts from 'echarts/core';
8
+ import { init } from 'echarts';
9
+ import { TitleComponent, TooltipComponent, GridComponent, LegendComponent, DataZoomComponent, ToolboxComponent } from 'echarts/components';
10
+ import { LineChart } from 'echarts/charts';
11
+ import { CanvasRenderer } from 'echarts/renderers';
12
+ import * as i0 from "@angular/core";
13
+ echarts.use([
14
+ TitleComponent,
15
+ TooltipComponent,
16
+ GridComponent,
17
+ LineChart,
18
+ CanvasRenderer,
19
+ LegendComponent,
20
+ DataZoomComponent,
21
+ ToolboxComponent,
22
+ ]);
23
+ export class KiwiChartDirective {
24
+ /**
25
+ * If you resize the page, the chart is automatically re-rendered wiht the right proportions.
26
+ *
27
+ * @memberof EnchartingDirective
28
+ */
29
+ onResize() {
30
+ if (this.echartsInstance) {
31
+ this.echartsInstance.resize();
32
+ }
33
+ }
34
+ constructor(el) {
35
+ this.el = el;
36
+ /**
37
+ * The Chart Object rendered by the canvas. For all the available options refer
38
+ * to Chart interface in the models folder.
39
+ *
40
+ * @type {(Chart | null)}
41
+ * @memberof KiwiChartDirective
42
+ */
43
+ this.chart = null;
44
+ /**
45
+ * Width and Height of the chart area. The dimensions refer to the father component
46
+ * into which the kiwi-chart is inserted. For example in an empty page the width/height
47
+ * of the chart can take the whole available space in the page.
48
+ *
49
+ * @type {string}
50
+ * @memberof KiwiChartDirective
51
+ */
52
+ this.width = '100%';
53
+ this.height = '480px';
54
+ this.chartInit = new EventEmitter();
55
+ /**
56
+ * Output event used to emit to the father component the coordinates
57
+ * of the point clicked in the chart area. This functionality to be used must
58
+ * have the property "clickToAddPoint" in the Chart object set to true.
59
+ *
60
+ * @type {EventEmitter<BasePoint>}
61
+ * @memberof KiwiChartDirective
62
+ */
63
+ this.addPoint = new EventEmitter();
64
+ /**
65
+ * When the cursor hovers the chart area it emits to the father component the
66
+ * x and y coordinates relative to the chart reference system.
67
+ *
68
+ * @type {EventEmitter<BasePoint>}
69
+ * @memberof KiwiChartDirective
70
+ */
71
+ this.chartHover = new EventEmitter();
72
+ /**
73
+ * This property simply activates or not the dark theme of the chart
74
+ * defined by the Echarts library. In addition the background color can be custom
75
+ * so that the chart can match the background of the application in which it's used.
76
+ *
77
+ * @type {boolean}
78
+ * @memberof KiwiChartDirective
79
+ */
80
+ this.darkTheme = false;
81
+ this.darkThemeBackground = null;
82
+ /**
83
+ * The instance of the Chart.
84
+ *
85
+ * @type {ECharts}
86
+ * @memberof KiwiChartDirective
87
+ */
88
+ this.echartsInstance = null;
89
+ /**
90
+ * Default number of decimals that can have
91
+ * the values on the x and y axes.
92
+ *
93
+ * @private
94
+ * @type {number}
95
+ * @memberof KiwiChartDirective
96
+ */
97
+ this.MAX_DECIMALS = 3;
98
+ this.legendSelected = {};
99
+ this.isLegendClicked = false;
100
+ /**
101
+ * Used to perform actions (as point addition based on the cursor position) on the chart.
102
+ *
103
+ * @type {(zrender.ZRenderType | null)}
104
+ * @memberof KiwiChartComponent
105
+ */
106
+ this.zr = null;
107
+ }
108
+ ngAfterViewInit() {
109
+ if (this.chart) {
110
+ this.renderChart(this.chart);
111
+ }
112
+ }
113
+ ngOnChanges(changes) {
114
+ let chart = changes['chart']?.currentValue;
115
+ if (this.echartsInstance) {
116
+ // Every time we have an external change we
117
+ // destroy the chart and re-initialize it
118
+ this.echartsInstance.dispose();
119
+ this.renderChart(chart);
120
+ }
121
+ }
122
+ renderChart(chart) {
123
+ // Update ElementRef styles
124
+ this.el.nativeElement.style.width = this.width;
125
+ this.el.nativeElement.style.height = this.height;
126
+ this.echartsInstance = init(this.el.nativeElement, this.darkTheme ? 'dark' : 'default', {
127
+ renderer: 'svg'
128
+ });
129
+ if (chart) {
130
+ this.echartsInstance.setOption({
131
+ title: {
132
+ text: chart.title,
133
+ },
134
+ grid: {
135
+ width: '70%'
136
+ },
137
+ backgroundColor: this.darkTheme ? this.darkThemeBackground ?? '#303030' : 'transparent', tooltip: {
138
+ axisPointer: {
139
+ type: 'cross',
140
+ crossStyle: {
141
+ color: '#bebebe'
142
+ }
143
+ }
144
+ },
145
+ toolbox: {
146
+ orient: 'horizontal',
147
+ left: 'center',
148
+ top: '25px',
149
+ feature: {
150
+ dataZoom: {
151
+ brushStyle: {
152
+ borderColor: '#000',
153
+ borderWidth: 1,
154
+ borderType: 'dashed'
155
+ },
156
+ emphasis: {
157
+ iconStyle: {
158
+ textPosition: 'top',
159
+ textPadding: 5
160
+ }
161
+ },
162
+ icon: {
163
+ zoom: ZOOM_IN,
164
+ back: ZOOM_OUT
165
+ },
166
+ },
167
+ saveAsImage: {
168
+ emphasis: {
169
+ iconStyle: {
170
+ textPosition: 'top',
171
+ textPadding: 5
172
+ }
173
+ },
174
+ icon: SAVE_AS_SVG,
175
+ },
176
+ restore: {
177
+ emphasis: {
178
+ iconStyle: {
179
+ textPosition: 'top',
180
+ textPadding: 5
181
+ }
182
+ },
183
+ icon: RESTORE,
184
+ },
185
+ myAddPoint: {
186
+ show: chart.clickToAddPoint ?? false,
187
+ title: chart.addPointCustomName ?? 'Add Point',
188
+ icon: ADD_POINT,
189
+ onclick: () => {
190
+ if (this.echartsInstance) {
191
+ const option = this.echartsInstance.getOption();
192
+ const toolbox = option.toolbox;
193
+ if (toolbox) {
194
+ const status = toolbox[0].feature?.['myAddPoint']?.iconStatus;
195
+ const offColor = 'rgb(102,102,102)';
196
+ const highlightColor = 'rgb(62,152,197)';
197
+ this.echartsInstance.setOption({
198
+ toolbox: {
199
+ feature: {
200
+ myAddPoint: {
201
+ iconStatus: !status,
202
+ iconStyle: {
203
+ borderColor: !status ? highlightColor : offColor
204
+ }
205
+ }
206
+ }
207
+ }
208
+ });
209
+ }
210
+ }
211
+ },
212
+ emphasis: {
213
+ iconStyle: {
214
+ textPosition: 'top',
215
+ textPadding: 5
216
+ }
217
+ }
218
+ }
219
+ },
220
+ },
221
+ dataZoom: [
222
+ {
223
+ type: 'inside',
224
+ xAxisIndex: [0],
225
+ throttle: 0,
226
+ filterMode: 'none',
227
+ disabled: !chart.scrollToZoom
228
+ },
229
+ {
230
+ type: 'inside',
231
+ yAxisIndex: [0],
232
+ throttle: 0,
233
+ filterMode: 'none',
234
+ disabled: !chart.scrollToZoom
235
+ },
236
+ ],
237
+ legend: {
238
+ inactiveColor: this.darkTheme ? '#8b8b8b' : '#ccc',
239
+ data: chart.shapes.map((shape) => ({
240
+ name: shape.name,
241
+ icon: 'circle',
242
+ })),
243
+ selected: chart.shapes.reduce((accumulator, shape) => ({
244
+ ...accumulator,
245
+ [shape.name]: this.getLegendItemSelection(shape),
246
+ }), {}),
247
+ show: chart.showLegend ?? false,
248
+ orient: 'vertical',
249
+ left: 'right',
250
+ padding: [60, 20],
251
+ type: 'scroll',
252
+ textStyle: {
253
+ width: 120,
254
+ fontWeight: 'bold',
255
+ overflow: 'break'
256
+ }
257
+ },
258
+ xAxis: {
259
+ type: chart.xAxisType,
260
+ name: chart.xAxisUom ? `${chart.xAxisName} [ ${chart.xAxisUom} ]` : chart.xAxisName,
261
+ nameLocation: 'middle',
262
+ nameGap: 30,
263
+ splitLine: {
264
+ show: chart.showGrid ?? true,
265
+ lineStyle: {
266
+ color: this.darkTheme ? '#595959' : '#ccc'
267
+ }
268
+ },
269
+ min: chart.xMin?.toFixed(chart.maxAxesDecimals ?? this.MAX_DECIMALS),
270
+ max: chart.xMax?.toFixed(chart.maxAxesDecimals ?? this.MAX_DECIMALS),
271
+ },
272
+ yAxis: {
273
+ type: chart.yAxisType,
274
+ name: chart.yAxisUom ? `${chart.yAxisName} [ ${chart.yAxisUom} ]` : chart.yAxisName,
275
+ nameLocation: 'middle',
276
+ nameGap: 50,
277
+ splitLine: {
278
+ show: chart.showGrid ?? true,
279
+ lineStyle: {
280
+ color: this.darkTheme ? '#595959' : '#ccc'
281
+ }
282
+ },
283
+ min: chart.yMin?.toFixed(chart.maxAxesDecimals ?? this.MAX_DECIMALS),
284
+ max: chart.yMax?.toFixed(chart.maxAxesDecimals ?? this.MAX_DECIMALS),
285
+ },
286
+ series: this.createSeries(chart.shapes),
287
+ animation: chart.hasAnimations,
288
+ animationDuration: chart.animationDuration ?? 250,
289
+ animationEasing: 'cubicOut'
290
+ }, true, true);
291
+ }
292
+ this.setupZrEventHandler(this.echartsInstance);
293
+ this.setupLegendEventHandler(this.echartsInstance);
294
+ }
295
+ createSeries(shapes) {
296
+ let series = [];
297
+ shapes.forEach((shape) => {
298
+ switch (shape.variant) {
299
+ case ShapeVariant.TRACE:
300
+ series.push(this.createTrace(shape));
301
+ break;
302
+ default:
303
+ break;
304
+ }
305
+ });
306
+ return series;
307
+ }
308
+ createTrace(trace) {
309
+ return {
310
+ type: trace.type,
311
+ name: trace.name,
312
+ data: trace.points.map((point) => ({
313
+ value: [point.x, point.y],
314
+ symbol: point.symbol ?? 'circle',
315
+ name: point.name,
316
+ symbolSize: point.symbolSize ?? 2,
317
+ itemStyle: {
318
+ color: point.color
319
+ },
320
+ emphasis: {
321
+ disabled: true
322
+ },
323
+ label: {
324
+ show: true,
325
+ position: 'bottom',
326
+ align: 'left',
327
+ verticalAlign: 'bottom',
328
+ formatter: () => `${point.name ?? ''}`,
329
+ fontSize: 13,
330
+ padding: [0, 0, 0, 10],
331
+ width: 100,
332
+ overflow: 'truncate',
333
+ ellipsis: '...',
334
+ fontWeight: 'bold',
335
+ color: this.darkTheme ? '#fff' : '#000'
336
+ },
337
+ tooltip: {
338
+ formatter: ({ value }) => `
339
+ <strong>${this.chart?.xAxisName}:</strong> ${value[0].toFixed(3).replace(/[.,]000$/, "")}
340
+ <br>
341
+ <strong>${this.chart?.yAxisName}:</strong> ${value[1].toFixed(3).replace(/[.,]000$/, "")}
342
+ `
343
+ }
344
+ })),
345
+ color: trace.color,
346
+ lineStyle: {
347
+ width: trace.width,
348
+ type: trace.style,
349
+ opacity: trace.opacity ?? 1
350
+ },
351
+ smooth: trace.smooth ?? false
352
+ };
353
+ }
354
+ getLegendItemSelection(shape) {
355
+ if (this.isLegendClicked) {
356
+ return this.legendSelected[shape.name] ?? true;
357
+ }
358
+ else {
359
+ return shape.selectedByDefault ?? true;
360
+ }
361
+ }
362
+ /**
363
+ * intercept a selection change event on the legend and save the state
364
+ * of all selections on the supporting variable legendSelected
365
+ *
366
+ * @param ec
367
+ */
368
+ setupLegendEventHandler(ec) {
369
+ if (this.echartsInstance != null) {
370
+ this.echartsInstance.on('legendselectchanged', (params) => {
371
+ this.isLegendClicked = true;
372
+ this.legendSelected = params.selected;
373
+ });
374
+ }
375
+ }
376
+ setupZrEventHandler(ec) {
377
+ this.zr = ec.getZr();
378
+ /**
379
+ * Intercepts the click event on the chart (if the clickToAddPoint property is set to true)
380
+ * and emits the point coordinates to the father component.
381
+ */
382
+ this.zr.on('click', params => {
383
+ let option = ec.getOption();
384
+ let active = option?.toolbox?.[0]?.feature?.myAddPoint?.iconStatus;
385
+ if (active && this.chart?.clickToAddPoint) {
386
+ const pointInPixel = [params.offsetX, params.offsetY];
387
+ const pointInGrid = ec.convertFromPixel('grid', pointInPixel);
388
+ if (ec.containPixel('grid', pointInPixel) && pointInGrid) {
389
+ let newPoint = {
390
+ x: +pointInGrid[0].toFixed(3),
391
+ y: +pointInGrid[1].toFixed(3)
392
+ };
393
+ this.addPoint.emit(newPoint);
394
+ }
395
+ }
396
+ });
397
+ /**
398
+ * This is used perform custom actions when the mouse is hovering the chart area
399
+ */
400
+ this.zr.on('mousemove', params => {
401
+ const pointInPixel = [params.offsetX, params.offsetY];
402
+ const pointInGrid = ec.convertFromPixel('grid', pointInPixel);
403
+ /*
404
+ * Logic to emit to the father component the x and y cdinates when the
405
+ * cursor is hovering the chart area .
406
+ */
407
+ if (ec.containPixel('grid', pointInPixel) && pointInGrid) {
408
+ let newPoint = {
409
+ x: +pointInGrid[0].toFixed(3),
410
+ y: +pointInGrid[1].toFixed(3)
411
+ };
412
+ this.chartHover.emit(newPoint);
413
+ }
414
+ /* Logic to change the cursor icon when the "Click to Add Point" feature is active and viceversa. */
415
+ const option = ec.getOption();
416
+ const addPointIsActive = option?.toolbox?.[0]?.feature?.myAddPoint?.iconStatus;
417
+ if (addPointIsActive) {
418
+ this.zr?.setCursorStyle(ec.containPixel('grid', pointInPixel) ? 'copy' : 'default');
419
+ }
420
+ });
421
+ }
422
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: KiwiChartDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
423
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.1", type: KiwiChartDirective, isStandalone: true, selector: "div[kiwi-chart]", inputs: { chart: "chart", width: "width", height: "height", darkTheme: "darkTheme", darkThemeBackground: "darkThemeBackground" }, outputs: { chartInit: "chartInit", addPoint: "addPoint", chartHover: "chartHover" }, host: { listeners: { "window:resize": "onResize($event)" } }, usesOnChanges: true, ngImport: i0 }); }
424
+ }
425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: KiwiChartDirective, decorators: [{
426
+ type: Directive,
427
+ args: [{
428
+ selector: 'div[kiwi-chart]',
429
+ standalone: true
430
+ }]
431
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { chart: [{
432
+ type: Input,
433
+ args: [{ required: true }]
434
+ }], width: [{
435
+ type: Input
436
+ }], height: [{
437
+ type: Input
438
+ }], chartInit: [{
439
+ type: Output
440
+ }], addPoint: [{
441
+ type: Output
442
+ }], chartHover: [{
443
+ type: Output
444
+ }], darkTheme: [{
445
+ type: Input
446
+ }], darkThemeBackground: [{
447
+ type: Input
448
+ }], onResize: [{
449
+ type: HostListener,
450
+ args: ['window:resize', ['$event']]
451
+ }] } });
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l3aS1jaGFydC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXdpYml0L2NoYXJ0L3NyYy9saWIvZGlyZWN0aXZlcy9raXdpLWNoYXJ0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0I7QUFDbEIsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMxSSxxQkFBcUI7QUFDckIsT0FBTyxFQUFrQyxZQUFZLEVBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xHLGtCQUFrQjtBQUNsQixPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBWUwsSUFBSSxFQUVMLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNJLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDVixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixTQUFTO0lBQ1QsY0FBYztJQUNkLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsZ0JBQWdCO0NBQ2pCLENBQUMsQ0FBQztBQWVILE1BQU0sT0FBTyxrQkFBa0I7SUFtRjdCOzs7O01BSUU7SUFFRixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFF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dCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbi8vIEtpd2kgQ2hhcnQgSW1wb3J0c1xyXG5pbXBvcnQgeyBCYXNlUG9pbnQsIENoYXJ0LCBQb2ludCwgU2hhcGUsIFNoYXBlVmFyaWFudCwgVHJhY2UgfSBmcm9tICcuLi9tb2RlbHMvY2hhcnQubW9kZWxzJztcclxuaW1wb3J0IHsgQUREX1BPSU5ULCBSRVNUT1JFLCBTQVZFX0FTX1NWRywgWk9PTV9JTiwgWk9PTV9PVVQgfSBmcm9tICcuLi9jb25zdGFudHMvY2hhcnQuY29uc3RhbnRzJztcclxuLy8gRWNoYXJ0cyBJbXBvcnRzXHJcbmltcG9ydCAqIGFzIGVjaGFydHMgZnJvbSAnZWNoYXJ0cy9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb21wb3NlT3B0aW9uLFxyXG4gIEN1c3RvbVNlcmllc09wdGlvbixcclxuICBEYXRhc2V0Q29tcG9uZW50T3B0aW9uLFxyXG4gIEVDaGFydHMsXHJcbiAgR3JpZENvbXBvbmVudE9wdGlvbixcclxuICBMZWdlbmRDb21wb25lbnRPcHRpb24sXHJcbiAgTGluZVNlcmllc09wdGlvbixcclxuICBTY2F0dGVyU2VyaWVzT3B0aW9uLFxyXG4gIFRpdGxlQ29tcG9uZW50T3B0aW9uLFxyXG4gIFRvb2xib3hDb21wb25lbnRPcHRpb24sXHJcbiAgVG9vbHRpcENvbXBvbmVudE9wdGlvbixcclxuICBpbml0LFxyXG4gIHpyZW5kZXJcclxufSBmcm9tICdlY2hhcnRzJztcclxuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQsIFRvb2x0aXBDb21wb25lbnQsIEdyaWRDb21wb25lbnQsIExlZ2VuZENvbXBvbmVudCwgRGF0YVpvb21Db21wb25lbnQsIFRvb2xib3hDb21wb25lbnQgfSBmcm9tICdlY2hhcnRzL2NvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyBMaW5lQ2hhcnQgfSBmcm9tICdlY2hhcnRzL2NoYXJ0cyc7XHJcbmltcG9ydCB7IENhbnZhc1JlbmRlcmVyIH0gZnJvbSAnZWNoYXJ0cy9yZW5kZXJlcnMnO1xyXG5lY2hhcnRzLnVzZShbXHJcbiAgVGl0bGVDb21wb25lbnQsXHJcbiAgVG9vbHRpcENvbXBvbmVudCxcclxuICBHcmlkQ29tcG9uZW50LFxyXG4gIExpbmVDaGFydCxcclxuICBDYW52YXNSZW5kZXJlcixcclxuICBMZWdlbmRDb21wb25lbnQsXHJcbiAgRGF0YVpvb21Db21wb25lbnQsXHJcbiAgVG9vbGJveENvbXBvbmVudCxcclxuXSk7XHJcbmV4cG9ydCB0eXBlIEVDT3B0aW9uID0gQ29tcG9zZU9wdGlvbjxcclxuICB8IExpbmVTZXJpZXNPcHRpb25cclxuICB8IFRpdGxlQ29tcG9uZW50T3B0aW9uXHJcbiAgfCBUb29sdGlwQ29tcG9uZW50T3B0aW9uXHJcbiAgfCBHcmlkQ29tcG9uZW50T3B0aW9uXHJcbiAgfCBEYXRhc2V0Q29tcG9uZW50T3B0aW9uXHJcbiAgfCBMZWdlbmRDb21wb25lbnRPcHRpb25cclxuICB8IFRvb2xib3hDb21wb25lbnRPcHRpb25cclxuPjtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnZGl2W2tpd2ktY2hhcnRdJyxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLaXdpQ2hhcnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgQ2hhcnQgT2JqZWN0IHJlbmRlcmVkIGJ5IHRoZSBjYW52YXMuIEZvciBhbGwgdGhlIGF2YWlsYWJsZSBvcHRpb25zIHJlZmVyIFxyXG4gICAqIHRvIENoYXJ0IGludGVyZmFjZSBpbiB0aGUgbW9kZWxzIGZvbGRlci5cclxuICAgKlxyXG4gICAqIEB0eXBlIHsoQ2hhcnQgfCBudWxsKX1cclxuICAgKiBAbWVtYmVyb2YgS2l3aUNoYXJ0RGlyZWN0aXZlXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY2hhcnQ6IENoYXJ0IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdpZHRoIGFuZCBIZWlnaHQgb2YgdGhlIGNoYXJ0IGFyZWEuIFRoZSBkaW1lbnNpb25zIHJlZmVyIHRvIHRoZSBmYXRoZXIgY29tcG9uZW50IFxyXG4gICAqIGludG8gd2hpY2ggdGhlIGtpd2ktY2hhcnQgaXMgaW5zZXJ0ZWQuIEZvciBleGFtcGxlIGluIGFuIGVtcHR5IHBhZ2UgdGhlIHdpZHRoL2hlaWdodCBcclxuICAgKiBvZiB0aGUgY2hhcnQgY2FuIHRha2UgdGhlIHdob2xlIGF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgcGFnZS5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICogQG1lbWJlcm9mIEtpd2lDaGFydERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSAnMTAwJSc7XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSAnNDgwcHgnO1xyXG5cclxuICBAT3V0cHV0KCkgY2hhcnRJbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxFQ2hhcnRzPigpO1xyXG5cclxuICAvKipcclxuICAgKiBPdXRwdXQgZXZlbnQgdXNlZCB0byBlbWl0IHRvIHRoZSBmYXRoZXIgY29tcG9uZW50IHRoZSBjb29yZGluYXRlc1xyXG4gICAqIG9mIHRoZSBwb2ludCBjbGlja2VkIGluIHRoZSBjaGFydCBhcmVhLiBUaGlzIGZ1bmN0aW9uYWxpdHkgdG8gYmUgdXNlZCBtdXN0XHJcbiAgICogaGF2ZSB0aGUgcHJvcGVydHkgXCJjbGlja1RvQWRkUG9pbnRcIiBpbiB0aGUgQ2hhcnQgb2JqZWN0IHNldCB0byB0cnVlLlxyXG4gICAqXHJcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxCYXNlUG9pbnQ+fVxyXG4gICAqIEBtZW1iZXJvZiBLaXdpQ2hhcnREaXJlY3RpdmVcclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWRkUG9pbnQ6IEV2ZW50RW1pdHRlcjxCYXNlUG9pbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxCYXNlUG9pbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gdGhlIGN1cnNvciBob3ZlcnMgdGhlIGNoYXJ0IGFyZWEgaXQgZW1pdHMgdG8gdGhlIGZhdGhlciBjb21wb25lbnQgdGhlXHJcbiAgICogeCBhbmQgeSBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgY2hhcnQgcmVmZXJlbmNlIHN5c3RlbS5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8QmFzZVBvaW50Pn1cclxuICAgKiBAbWVtYmVyb2YgS2l3aUNoYXJ0RGlyZWN0aXZlXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGNoYXJ0SG92ZXI6IEV2ZW50RW1pdHRlcjxCYXNlUG9pbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxCYXNlUG9pbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgcHJvcGVydHkgc2ltcGx5IGFjdGl2YXRlcyBvciBub3QgdGhlIGRhcmsgdGhlbWUgb2YgdGhlIGNoYXJ0XHJcbiAgICogZGVmaW5lZCBieSB0aGUgRWNoYXJ0cyBsaWJyYXJ5LiBJbiBhZGRpdGlvbiB0aGUgYmFja2dyb3VuZCBjb2xvciBjYW4gYmUgY3VzdG9tXHJcbiAgICogc28gdGhhdCB0aGUgY2hhcnQgY2FuIG1hdGNoIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBhcHBsaWNhdGlvbiBpbiB3aGljaCBpdCdzIHVzZWQuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgS2l3aUNoYXJ0RGlyZWN0aXZlXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGFya1RoZW1lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGFya1RoZW1lQmFja2dyb3VuZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgQ2hhcnQuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7RUNoYXJ0c31cclxuICAgKiBAbWVtYmVyb2YgS2l3aUNoYXJ0RGlyZWN0aXZlXHJcbiAgICovXHJcbiAgZWNoYXJ0c0luc3RhbmNlOiBFQ2hhcnRzIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmF1bHQgbnVtYmVyIG9mIGRlY2ltYWxzIHRoYXQgY2FuIGhhdmVcclxuICAgKiB0aGUgdmFsdWVzIG9uIHRoZSB4IGFuZCB5IGF4ZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICogQG1lbWJlcm9mIEtpd2lDaGFydERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX0RFQ0lNQUxTOiBudW1iZXIgPSAzO1xyXG5cclxuICBwcml2YXRlIGxlZ2VuZFNlbGVjdGVkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xyXG4gIHByaXZhdGUgaXNMZWdlbmRDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgdG8gcGVyZm9ybSBhY3Rpb25zIChhcyBwb2ludCBhZGRpdGlvbiBiYXNlZCBvbiB0aGUgY3Vyc29yIHBvc2l0aW9uKSBvbiB0aGUgY2hhcnQuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7KHpyZW5kZXIuWlJlbmRlclR5cGUgfCBudWxsKX1cclxuICAgKiBAbWVtYmVyb2YgS2l3aUNoYXJ0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgenI6IHpyZW5kZXIuWlJlbmRlclR5cGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgKiBJZiB5b3UgcmVzaXplIHRoZSBwYWdlLCB0aGUgY2hhcnQgaXMgYXV0b21hdGljYWxseSByZS1yZW5kZXJlZCB3aWh0IHRoZSByaWdodCBwcm9wb3J0aW9ucy5cclxuICAqXHJcbiAgKiBAbWVtYmVyb2YgRW5jaGFydGluZ0RpcmVjdGl2ZVxyXG4gICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5lY2hhcnRzSW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2UucmVzaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+XHJcbiAgKSB7IH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJDaGFydCh0aGlzLmNoYXJ0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGxldCBjaGFydDogQ2hhcnQgPSBjaGFuZ2VzWydjaGFydCddPy5jdXJyZW50VmFsdWU7XHJcbiAgICBpZiAodGhpcy5lY2hhcnRzSW5zdGFuY2UpIHtcclxuICAgICAgLy8gRXZlcnkgdGltZSB3ZSBoYXZlIGFuIGV4dGVybmFsIGNoYW5nZSB3ZVxyXG4gICAgICAvLyBkZXN0cm95IHRoZSBjaGFydCBhbmQgcmUtaW5pdGlhbGl6ZSBpdFxyXG4gICAgICB0aGlzLmVjaGFydHNJbnN0YW5jZS5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMucmVuZGVyQ2hhcnQoY2hhcnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVuZGVyQ2hhcnQoY2hhcnQ6IENoYXJ0KTogdm9pZCB7XHJcbiAgICAvLyBVcGRhdGUgRWxlbWVudFJlZiBzdHlsZXNcclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2UgPSBpbml0KFxyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHRoaXMuZGFya1RoZW1lID8gJ2RhcmsnIDogJ2RlZmF1bHQnLFxyXG4gICAgICB7XHJcbiAgICAgICAgcmVuZGVyZXI6ICdzdmcnXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgaWYgKGNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih7XHJcbiAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgIHRleHQ6IGNoYXJ0LnRpdGxlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ3JpZDoge1xyXG4gICAgICAgICAgd2lkdGg6ICc3MCUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuZGFya1RoZW1lID8gdGhpcy5kYXJrVGhlbWVCYWNrZ3JvdW5kID8/ICcjMzAzMDMwJyA6ICd0cmFuc3BhcmVudCcsIHRvb2x0aXA6IHtcclxuICAgICAgICAgIGF4aXNQb2ludGVyOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdjcm9zcycsXHJcbiAgICAgICAgICAgIGNyb3NzU3R5bGU6IHtcclxuICAgICAgICAgICAgICBjb2xvcjogJyNiZWJlYmUnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvb2xib3g6IHtcclxuICAgICAgICAgIG9yaWVudDogJ2hvcml6b250YWwnLFxyXG4gICAgICAgICAgbGVmdDogJ2NlbnRlcicsXHJcbiAgICAgICAgICB0b3A6ICcyNXB4JyxcclxuICAgICAgICAgIGZlYXR1cmU6IHtcclxuICAgICAgICAgICAgZGF0YVpvb206IHtcclxuICAgICAgICAgICAgICBicnVzaFN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyMwMDAnLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgICBib3JkZXJUeXBlOiAnZGFzaGVkJ1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW1waGFzaXM6IHtcclxuICAgICAgICAgICAgICAgIGljb25TdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICB0ZXh0UG9zaXRpb246ICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgICB0ZXh0UGFkZGluZzogNVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgaWNvbjoge1xyXG4gICAgICAgICAgICAgICAgem9vbTogWk9PTV9JTixcclxuICAgICAgICAgICAgICAgIGJhY2s6IFpPT01fT1VUXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2F2ZUFzSW1hZ2U6IHtcclxuICAgICAgICAgICAgICBlbXBoYXNpczoge1xyXG4gICAgICAgICAgICAgICAgaWNvblN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgIHRleHRQb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgIHRleHRQYWRkaW5nOiA1XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBpY29uOiBTQVZFX0FTX1NWRyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzdG9yZToge1xyXG4gICAgICAgICAgICAgIGVtcGhhc2lzOiB7XHJcbiAgICAgICAgICAgICAgICBpY29uU3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgdGV4dFBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgICAgICAgICAgICAgdGV4dFBhZGRpbmc6IDVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGljb246IFJFU1RPUkUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG15QWRkUG9pbnQ6IHtcclxuICAgICAgICAgICAgICBzaG93OiBjaGFydC5jbGlja1RvQWRkUG9pbnQgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgdGl0bGU6IGNoYXJ0LmFkZFBvaW50Q3VzdG9tTmFtZSA/PyAnQWRkIFBvaW50JyxcclxuICAgICAgICAgICAgICBpY29uOiBBRERfUE9JTlQsXHJcbiAgICAgICAgICAgICAgb25jbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWNoYXJ0c0luc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbjogRUNPcHRpb24gPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgdG9vbGJveCA9IG9wdGlvbi50b29sYm94IGFzIFRvb2xib3hDb21wb25lbnRPcHRpb25bXTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRvb2xib3gpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXM6IGJvb2xlYW4gPSB0b29sYm94WzBdLmZlYXR1cmU/LlsnbXlBZGRQb2ludCddPy5pY29uU3RhdHVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZkNvbG9yOiBzdHJpbmcgPSAncmdiKDEwMiwxMDIsMTAyKSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlnaGxpZ2h0Q29sb3I6IHN0cmluZyA9ICdyZ2IoNjIsMTUyLDE5NyknO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0b29sYm94OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBteUFkZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uU3RhdHVzOiAhc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAhc3RhdHVzID8gaGlnaGxpZ2h0Q29sb3IgOiBvZmZDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbXBoYXNpczoge1xyXG4gICAgICAgICAgICAgICAgaWNvblN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgIHRleHRQb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgIHRleHRQYWRkaW5nOiA1XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YVpvb206IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogJ2luc2lkZScsXHJcbiAgICAgICAgICAgIHhBeGlzSW5kZXg6IFswXSxcclxuICAgICAgICAgICAgdGhyb3R0bGU6IDAsXHJcbiAgICAgICAgICAgIGZpbHRlck1vZGU6ICdub25lJyxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6ICFjaGFydC5zY3JvbGxUb1pvb21cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdpbnNpZGUnLFxyXG4gICAgICAgICAgICB5QXhpc0luZGV4OiBbMF0sXHJcbiAgICAgICAgICAgIHRocm90dGxlOiAwLFxyXG4gICAgICAgICAgICBmaWx0ZXJNb2RlOiAnbm9uZScsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAhY2hhcnQuc2Nyb2xsVG9ab29tXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgbGVnZW5kOiB7XHJcbiAgICAgICAgICBpbmFjdGl2ZUNvbG9yOiB0aGlzLmRhcmtUaGVtZSA/ICcjOGI4YjhiJyA6ICcjY2NjJyxcclxuICAgICAgICAgIGRhdGE6IGNoYXJ0LnNoYXBlcy5tYXAoXHJcbiAgICAgICAgICAgIChzaGFwZTogU2hhcGUpID0+ICh7XHJcbiAgICAgICAgICAgICAgbmFtZTogc2hhcGUubmFtZSxcclxuICAgICAgICAgICAgICBpY29uOiAnY2lyY2xlJyxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBzZWxlY3RlZDogY2hhcnQuc2hhcGVzLnJlZHVjZShcclxuICAgICAgICAgICAgKGFjY3VtdWxhdG9yLCBzaGFwZTogU2hhcGUpID0+ICh7XHJcbiAgICAgICAgICAgICAgLi4uYWNjdW11bGF0b3IsXHJcbiAgICAgICAgICAgICAgW3NoYXBlLm5hbWUgYXMgc3RyaW5nXTogdGhpcy5nZXRMZWdlbmRJdGVtU2VsZWN0aW9uKHNoYXBlKSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHt9KSxcclxuICAgICAgICAgIHNob3c6IGNoYXJ0LnNob3dMZWdlbmQgPz8gZmFsc2UsXHJcbiAgICAgICAgICBvcmllbnQ6ICd2ZXJ0aWNhbCcsXHJcbiAgICAgICAgICBsZWZ0OiAncmlnaHQnLFxyXG4gICAgICAgICAgcGFkZGluZzogWzYwLCAyMF0sXHJcbiAgICAgICAgICB0eXBlOiAnc2Nyb2xsJyxcclxuICAgICAgICAgIHRleHRTdHlsZToge1xyXG4gICAgICAgICAgICB3aWR0aDogMTIwLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiAnYm9sZCcsXHJcbiAgICAgICAgICAgIG92ZXJmbG93OiAnYnJlYWsnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB4QXhpczoge1xyXG4gICAgICAgICAgdHlwZTogY2hhcnQueEF4aXNUeXBlLFxyXG4gICAgICAgICAgbmFtZTogY2hhcnQueEF4aXNVb20gPyBgJHtjaGFydC54QXhpc05hbWV9IFsgJHtjaGFydC54QXhpc1VvbX0gXWAgOiBjaGFydC54QXhpc05hbWUsXHJcbiAgICAgICAgICBuYW1lTG9jYXRpb246ICdtaWRkbGUnLFxyXG4gICAgICAgICAgbmFtZUdhcDogMzAsXHJcbiAgICAgICAgICBzcGxpdExpbmU6IHtcclxuICAgICAgICAgICAgc2hvdzogY2hhcnQuc2hvd0dyaWQgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgbGluZVN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgY29sb3I6IHRoaXMuZGFya1RoZW1lID8gJyM1OTU5NTknIDogJyNjY2MnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBtaW46IGNoYXJ0LnhNaW4/LnRvRml4ZWQoY2hhcnQubWF4QXhlc0RlY2ltYWxzID8/IHRoaXMuTUFYX0RFQ0lNQUxTKSxcclxuICAgICAgICAgIG1heDogY2hhcnQueE1heD8udG9GaXhlZChjaGFydC5tYXhBeGVzRGVjaW1hbHMgPz8gdGhpcy5NQVhfREVDSU1BTFMpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeUF4aXM6IHtcclxuICAgICAgICAgIHR5cGU6IGNoYXJ0LnlBeGlzVHlwZSxcclxuICAgICAgICAgIG5hbWU6IGNoYXJ0LnlBeGlzVW9tID8gYCR7Y2hhcnQueUF4aXNOYW1lfSBbICR7Y2hhcnQueUF4aXNVb219IF1gIDogY2hhcnQueUF4aXNOYW1lLFxyXG4gICAgICAgICAgbmFtZUxvY2F0aW9uOiAnbWlkZGxlJyxcclxuICAgICAgICAgIG5hbWVHYXA6IDUwLFxyXG4gICAgICAgICAgc3BsaXRMaW5lOiB7XHJcbiAgICAgICAgICAgIHNob3c6IGNoYXJ0LnNob3dHcmlkID8/IHRydWUsXHJcbiAgICAgICAgICAgIGxpbmVTdHlsZToge1xyXG4gICAgICAgICAgICAgIGNvbG9yOiB0aGlzLmRhcmtUaGVtZSA/ICcjNTk1OTU5JyA6ICcjY2NjJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgbWluOiBjaGFydC55TWluPy50b0ZpeGVkKGNoYXJ0Lm1heEF4ZXNEZWNpbWFscyA/PyB0aGlzLk1BWF9ERUNJTUFMUyksXHJcbiAgICAgICAgICBtYXg6IGNoYXJ0LnlNYXg/LnRvRml4ZWQoY2hhcnQubWF4QXhlc0RlY2ltYWxzID8/IHRoaXMuTUFYX0RFQ0lNQUxTKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlcmllczogdGhpcy5jcmVhdGVTZXJpZXMoY2hhcnQuc2hhcGVzKSxcclxuICAgICAgICBhbmltYXRpb246IGNoYXJ0Lmhhc0FuaW1hdGlvbnMsXHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGNoYXJ0LmFuaW1hdGlvbkR1cmF0aW9uID8/IDI1MCxcclxuICAgICAgICBhbmltYXRpb25FYXNpbmc6ICdjdWJpY091dCdcclxuICAgICAgfSxcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldHVwWnJFdmVudEhhbmRsZXIodGhpcy5lY2hhcnRzSW5zdGFuY2UpO1xyXG5cclxuICAgIHRoaXMuc2V0dXBMZWdlbmRFdmVudEhhbmRsZXIodGhpcy5lY2hhcnRzSW5zdGFuY2UpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2VyaWVzKHNoYXBlczogU2hhcGVbXSk6IEFycmF5PExpbmVTZXJpZXNPcHRpb24gfCBDdXN0b21TZXJpZXNPcHRpb24gfCBTY2F0dGVyU2VyaWVzT3B0aW9uPiB7XHJcbiAgICBsZXQgc2VyaWVzOiBBcnJheTxMaW5lU2VyaWVzT3B0aW9uIHwgQ3VzdG9tU2VyaWVzT3B0aW9uIHwgU2NhdHRlclNlcmllc09wdGlvbj4gPSBbXTtcclxuICAgIHNoYXBlcy5mb3JFYWNoKFxyXG4gICAgICAoc2hhcGU6IFNoYXBlKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChzaGFwZS52YXJpYW50KSB7XHJcbiAgICAgICAgICBjYXNlIFNoYXBlVmFyaWFudC5UUkFDRTpcclxuICAgICAgICAgICAgc2VyaWVzLnB1c2godGhpcy5jcmVhdGVUcmFjZShzaGFwZSBhcyBUcmFjZSkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHNlcmllcztcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRyYWNlKHRyYWNlOiBUcmFjZSk6IExpbmVTZXJpZXNPcHRpb24gfCBTY2F0dGVyU2VyaWVzT3B0aW9uIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6IHRyYWNlLnR5cGUsXHJcbiAgICAgIG5hbWU6IHRyYWNlLm5hbWUsXHJcbiAgICAgIGRhdGE6IHRyYWNlLnBvaW50cy5tYXAoXHJcbiAgICAgICAgKHBvaW50OiBQb2ludCkgPT4gKHtcclxuICAgICAgICAgIHZhbHVlOiBbcG9pbnQueCwgcG9pbnQueV0sXHJcbiAgICAgICAgICBzeW1ib2w6IHBvaW50LnN5bWJvbCA/PyAnY2lyY2xlJyxcclxuICAgICAgICAgIG5hbWU6IHBvaW50Lm5hbWUsXHJcbiAgICAgICAgICBzeW1ib2xTaXplOiBwb2ludC5zeW1ib2xTaXplID8/IDIsXHJcbiAgICAgICAgICBpdGVtU3R5bGU6IHtcclxuICAgICAgICAgICAgY29sb3I6IHBvaW50LmNvbG9yXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZW1waGFzaXM6IHtcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2JvdHRvbScsXHJcbiAgICAgICAgICAgIGFsaWduOiAnbGVmdCcsXHJcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdib3R0b20nLFxyXG4gICAgICAgICAgICBmb3JtYXR0ZXI6ICgpID0+IGAke3BvaW50Lm5hbWUgPz8gJyd9YCxcclxuICAgICAgICAgICAgZm9udFNpemU6IDEzLFxyXG4gICAgICAgICAgICBwYWRkaW5nOiBbMCwgMCwgMCwgMTBdLFxyXG4gICAgICAgICAgICB3aWR0aDogMTAwLFxyXG4gICAgICAgICAgICBvdmVyZmxvdzogJ3RydW5jYXRlJyxcclxuICAgICAgICAgICAgZWxsaXBzaXM6ICcuLi4nLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiAnYm9sZCcsXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLmRhcmtUaGVtZSA/ICcjZmZmJyA6ICcjMDAwJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgZm9ybWF0dGVyOiAoeyB2YWx1ZSB9OiB7IHZhbHVlOiBudW1iZXJbXSB9KSA9PiBgXHJcbiAgICAgICAgICAgICAgPHN0cm9uZz4ke3RoaXMuY2hhcnQ/LnhBeGlzTmFtZX06PC9zdHJvbmc+ICR7dmFsdWVbMF0udG9GaXhlZCgzKS5yZXBsYWNlKC9bLixdMDAwJC8sIFwiXCIpfVxyXG4gICAgICAgICAgICAgIDxicj5cclxuICAgICAgICAgICAgICA8c3Ryb25nPiR7dGhpcy5jaGFydD8ueUF4aXNOYW1lfTo8L3N0cm9uZz4gJHt2YWx1ZVsxXS50b0ZpeGVkKDMpLnJlcGxhY2UoL1suLF0wMDAkLywgXCJcIil9XHJcbiAgICAgICAgICAgIGBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApLFxyXG4gICAgICBjb2xvcjogdHJhY2UuY29sb3IsXHJcbiAgICAgIGxpbmVTdHlsZToge1xyXG4gICAgICAgIHdpZHRoOiB0cmFjZS53aWR0aCxcclxuICAgICAgICB0eXBlOiB0cmFjZS5zdHlsZSxcclxuICAgICAgICBvcGFjaXR5OiB0cmFjZS5vcGFjaXR5ID8/IDFcclxuICAgICAgfSxcclxuICAgICAgc21vb3RoOiB0cmFjZS5zbW9vdGggPz8gZmFsc2VcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRMZWdlbmRJdGVtU2VsZWN0aW9uKHNoYXBlOiBTaGFwZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaXNMZWdlbmRDbGlja2VkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxlZ2VuZFNlbGVjdGVkW3NoYXBlLm5hbWUgYXMgc3RyaW5nXSA/PyB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBzaGFwZS5zZWxlY3RlZEJ5RGVmYXVsdCA/PyB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpbnRlcmNlcHQgYSBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50IG9uIHRoZSBsZWdlbmQgYW5kIHNhdmUgdGhlIHN0YXRlIFxyXG4gICAqIG9mIGFsbCBzZWxlY3Rpb25zIG9uIHRoZSBzdXBwb3J0aW5nIHZhcmlhYmxlIGxlZ2VuZFNlbGVjdGVkXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGVjIFxyXG4gICAqL1xyXG4gIHNldHVwTGVnZW5kRXZlbnRIYW5kbGVyKGVjOiBFQ2hhcnRzKSB7XHJcbiAgICBpZiAodGhpcy5lY2hhcnRzSW5zdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmVjaGFydHNJbnN0YW5jZS5vbignbGVnZW5kc2VsZWN0Y2hhbmdlZCcsIChwYXJhbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNMZWdlbmRDbGlja2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxlZ2VuZFNlbGVjdGVkID0gcGFyYW1zLnNlbGVjdGVkO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBzZXR1cFpyRXZlbnRIYW5kbGVyKGVjOiBFQ2hhcnRzKSB7XHJcbiAgICB0aGlzLnpyID0gZWMuZ2V0WnIoKTtcclxuICAgIC8qKiBcclxuICAgICAqIEludGVyY2VwdHMgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSBjaGFydCAoaWYgdGhlIGNsaWNrVG9BZGRQb2ludCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSlcclxuICAgICAqIGFuZCBlbWl0cyB0aGUgcG9pbnQgY29vcmRpbmF0ZXMgdG8gdGhlIGZhdGhlciBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHRoaXMuenIub24oJ2NsaWNrJywgcGFyYW1zID0+IHtcclxuICAgICAgbGV0IG9wdGlvbjogYW55ID0gZWMuZ2V0T3B0aW9uKCk7XHJcbiAgICAgIGxldCBhY3RpdmUgPSBvcHRpb24/LnRvb2xib3g/LlswXT8uZmVhdHVyZT8ubXlBZGRQb2ludD8uaWNvblN0YXR1cztcclxuICAgICAgaWYgKGFjdGl2ZSAmJiB0aGlzLmNoYXJ0Py5jbGlja1RvQWRkUG9pbnQpIHtcclxuICAgICAgICBjb25zdCBwb2ludEluUGl4ZWwgPSBbcGFyYW1zLm9mZnNldFgsIHBhcmFtcy5vZmZzZXRZXTtcclxuICAgICAgICBjb25zdCBwb2ludEluR3JpZCA9IGVjLmNvbnZlcnRGcm9tUGl4ZWwoJ2dyaWQnLCBwb2ludEluUGl4ZWwpO1xyXG4gICAgICAgIGlmIChlYy5jb250YWluUGl4ZWwoJ2dyaWQnLCBwb2ludEluUGl4ZWwpICYmIHBvaW50SW5HcmlkKSB7XHJcbiAgICAgICAgICBsZXQgbmV3UG9pbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSA9IHtcclxuICAgICAgICAgICAgeDogK3BvaW50SW5HcmlkWzBdLnRvRml4ZWQoMyksXHJcbiAgICAgICAgICAgIHk6ICtwb2ludEluR3JpZFsxXS50b0ZpeGVkKDMpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5hZGRQb2ludC5lbWl0KG5ld1BvaW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyoqIFxyXG4gICAgICogVGhpcyBpcyB1c2VkIHBlcmZvcm0gY3VzdG9tIGFjdGlvbnMgd2hlbiB0aGUgbW91c2UgaXMgaG92ZXJpbmcgdGhlIGNoYXJ0IGFyZWFcclxuICAgICAqL1xyXG4gICAgdGhpcy56ci5vbignbW91c2Vtb3ZlJywgcGFyYW1zID0+IHtcclxuICAgICAgY29uc3QgcG9pbnRJblBpeGVsID0gW3BhcmFtcy5vZmZzZXRYLCBwYXJhbXMub2Zmc2V0WV07XHJcbiAgICAgIGNvbnN0IHBvaW50SW5HcmlkID0gZWMuY29udmVydEZyb21QaXhlbCgnZ3JpZCcsIHBvaW50SW5QaXhlbCk7XHJcbiAgICAgIC8qIFxyXG4gICAgICAgKiBMb2dpYyB0byBlbWl0IHRvIHRoZSBmYXRoZXIgY29tcG9uZW50IHRoZSB4IGFuZCB5IGNkaW5hdGVzIHdoZW4gdGhlXHJcbiAgICAgICAqIGN1cnNvciBpcyBob3ZlcmluZyB0aGUgY2hhcnQgYXJlYSAuXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAoZWMuY29udGFpblBpeGVsKCdncmlkJywgcG9pbnRJblBpeGVsKSAmJiBwb2ludEluR3JpZCkge1xyXG4gICAgICAgIGxldCBuZXdQb2ludDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9ID0ge1xyXG4gICAgICAgICAgeDogK3BvaW50SW5HcmlkWzBdLnRvRml4ZWQoMyksXHJcbiAgICAgICAgICB5OiArcG9pbnRJbkdyaWRbMV0udG9GaXhlZCgzKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jaGFydEhvdmVyLmVtaXQobmV3UG9pbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qIExvZ2ljIHRvIGNoYW5nZSB0aGUgY3Vyc29yIGljb24gd2hlbiB0aGUgXCJDbGljayB0byBBZGQgUG9pbnRcIiBmZWF0dXJlIGlzIGFjdGl2ZSBhbmQgdmljZXZlcnNhLiAqL1xyXG4gICAgICBjb25zdCBvcHRpb246IGFueSA9IGVjLmdldE9wdGlvbigpO1xyXG4gICAgICBjb25zdCBhZGRQb2ludElzQWN0aXZlID0gb3B0aW9uPy50b29sYm94Py5bMF0/LmZlYXR1cmU/Lm15QWRkUG9pbnQ/Lmljb25TdGF0dXM7XHJcbiAgICAgIGlmIChhZGRQb2ludElzQWN0aXZlKSB7XHJcbiAgICAgICAgdGhpcy56cj8uc2V0Q3Vyc29yU3R5bGUoXHJcbiAgICAgICAgICBlYy5jb250YWluUGl4ZWwoJ2dyaWQnLCBwb2ludEluUGl4ZWwpID8gJ2NvcHknIDogJ2RlZmF1bHQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -25,4 +25,4 @@ export var ShapeVariant;
25
25
  (function (ShapeVariant) {
26
26
  ShapeVariant[ShapeVariant["TRACE"] = 0] = "TRACE";
27
27
  })(ShapeVariant || (ShapeVariant = {}));
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l3aWJpdC9jaGFydC9zcmMvbGliL21vZGVscy9jaGFydC5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkpBLE1BQU0sQ0FBTixJQUFZLFNBR1g7QUFIRCxXQUFZLFNBQVM7SUFDakIsMEJBQWEsQ0FBQTtJQUNiLGdDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVELE1BQU0sQ0FBTixJQUFZLFdBTVg7QUFORCxXQUFZLFdBQVc7SUFDbkIsNEJBQWEsQ0FBQTtJQUNiLGdDQUFpQixDQUFBO0lBQ2pCLG9DQUFxQixDQUFBO0lBQ3JCLDBCQUFXLENBQUE7SUFDWCxrQ0FBbUIsQ0FBQTtBQUN2QixDQUFDLEVBTlcsV0FBVyxLQUFYLFdBQVcsUUFNdEI7QUFFRCxNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ2xCLDZCQUFlLENBQUE7SUFDZiwrQkFBaUIsQ0FBQTtJQUNqQiwrQkFBaUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsVUFBVSxLQUFWLFVBQVUsUUFJckI7QUFFRCxNQUFNLENBQU4sSUFBWSxRQUVYO0FBRkQsV0FBWSxRQUFRO0lBQ2hCLDJCQUFlLENBQUE7QUFDbkIsQ0FBQyxFQUZXLFFBQVEsS0FBUixRQUFRLFFBRW5CO0FBRUQsTUFBTSxDQUFOLElBQVksWUFFWDtBQUZELFdBQVksWUFBWTtJQUNwQixpREFBSyxDQUFBO0FBQ1QsQ0FBQyxFQUZXLFlBQVksS0FBWixZQUFZLFFBRXZCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgdGhlIENoYXJ0IG1vZGVsLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBpbnRlcmZhY2UgQ2hhcnRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnQge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIHNob3dMZWdlbmQ/OiBib29sZWFuO1xyXG4gICAgeEF4aXNUeXBlOiBBeGlzVHlwZTtcclxuICAgIHhBeGlzTmFtZTogc3RyaW5nO1xyXG4gICAgeEF4aXNVb20/OiBzdHJpbmc7XHJcbiAgICB4TWluPzogbnVtYmVyO1xyXG4gICAgeE1heD86IG51bWJlcjtcclxuICAgIHlBeGlzVHlwZTogQXhpc1R5cGU7XHJcbiAgICB5QXhpc05hbWU6IHN0cmluZztcclxuICAgIHlBeGlzVW9tPzogc3RyaW5nO1xyXG4gICAgeU1pbj86IG51bWJlcjtcclxuICAgIHlNYXg/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtYXhpbXVtIGRlY2ltYWxzIHRoYXQgY2FuIGhhdmUgdGhlIHZhbHVlcyBvbiB0aGUgeCBhbmQgeSBheGVzLlxyXG4gICAgICogSWYgb21pdHRlZCB0aGUgZGVmYXVsdCBpcyAzIGRlY2ltYWxzLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyb2YgQ2hhcnRcclxuICAgICAqL1xyXG4gICAgbWF4QXhlc0RlY2ltYWxzPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgY2hhcnQgc2hvdWxkIGhhdmUgcmVuZGVyaW5nIGFuaW1hdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyb2YgQ2hhcnRcclxuICAgICAqL1xyXG4gICAgaGFzQW5pbWF0aW9ucz86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIEhvdyBsb25nIHRoZSBhbmltYXRpb24gc2hvdWxkIGxhc3QuXHJcbiAgICAgKiBFeHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzLiBJZiBvbWl0dGVkIHRoZSBEZWZhdWx0IGlzIDUwMCBtcy5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlcm9mIENoYXJ0XHJcbiAgICAgKi9cclxuICAgIGFuaW1hdGlvbkR1cmF0aW9uPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGlzdCBvZiBTaGFwZXMgdGhhdCB0aGUgY2hhcnQgbXVzdCByZW5kZXIuXHJcbiAgICAgKiBFYWNoIFNoYXBlIGNvcnJpc3BvbmRzIHRvIGEgc2luZ2xlIGNoYXJ0IGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7U2hhcGVbXX1cclxuICAgICAqIEBtZW1iZXJvZiBDaGFydFxyXG4gICAgICovXHJcbiAgICBzaGFwZXM6IFNoYXBlW107XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgY2hhcnQsIHNvIHRoYXQgd2hlbiBjbGlja2luZ1xyXG4gICAgICogZXZlcnl3aGVyZSBpbiB0aGUgY2hhcnQgYXJlYSBhIHBvaW50IGdldHMgYWRkZWQgYW5kIGl0J3MgY29vcmRpbmF0ZSBhcmUgXHJcbiAgICAgKiBlbWl0dGVkIHdpdGggYW4gZXZlbnQgdG8gdGhlIHBhcmVudCBjb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyb2YgQ2hhcnRcclxuICAgICAqL1xyXG4gICAgY2xpY2tUb0FkZFBvaW50PzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogQ3VzdG9tIG5hbWUgZm9yIHRoZSBcImNsaWNrVG9BZGRQb2ludFwiIGV2ZW50IHJlbGF0ZWQgYnV0dG9uLiBcclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQG1lbWJlcm9mIENoYXJ0XHJcbiAgICAgKi9cclxuICAgIGFkZFBvaW50Q3VzdG9tTmFtZT86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIHRoZSBzY3JvbGwgXHJcbiAgICAgKiB0byB6b29tIGluL291dCB0aGUgY2hhcnQgYXJlYS5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJvZiBDaGFydFxyXG4gICAgICovXHJcbiAgICBzY3JvbGxUb1pvb20/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyB0aGUgY2hhcnQgdG8gcmVuZGVyIG9yIG5vdCB0aGUgZ3JpZCBsaW5lcy5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJvZiBDaGFydFxyXG4gICAgICovXHJcbiAgICBzaG93R3JpZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNoYXBlID0gVHJhY2U7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNlIHtcclxuICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YXJpYW50IG9mIHRoZSBTaGFwZSwgbXVzdCBiZSBvZiB0eXBlIFRyYWNlLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtTaGFwZVZhcmlhbnR9XHJcbiAgICAgKiBAbWVtYmVyb2YgVHJhY2VcclxuICAgICAqL1xyXG4gICAgdmFyaWFudDogU2hhcGVWYXJpYW50O1xyXG4gICAgY29sb3I/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBUcmFjZSBkcmF3biBieSB0aGUgY2hhcnQuXHJcbiAgICAgKiBDYW4gYmUgYSBsaW5lIG9yIGEgc2NhdHRlci4gXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge1RyYWNlVHlwZX1cclxuICAgICAqIEBtZW1iZXJvZiBUcmFjZVxyXG4gICAgICovXHJcbiAgICB0eXBlOiBUcmFjZVR5cGU7XHJcbiAgICB3aWR0aD86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxpc3Qgb2YgcG9pbnRzIHRoYXQgZGVmaW5lIHRoZSBUcmFjZS5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7UG9pbnRbXX1cclxuICAgICAqIEBtZW1iZXJvZiBUcmFjZVxyXG4gICAgICovXHJcbiAgICBwb2ludHM6IFBvaW50W107XHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyBhIHNtb290aCBjdXJ2ZSBvciBhIHNlZ21lbnRlZCBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJvZiBUcmFjZVxyXG4gICAgICovXHJcbiAgICBzbW9vdGg/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc3R5bGUgb2YgdGhlIFRyYWNlLlxyXG4gICAgICogQ2FuIGJlIHNvbGlkLCBkYXNoZWQgb3IgZG90dGVkLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtUcmFjZVN0eWxlfVxyXG4gICAgICogQG1lbWJlcm9mIFRyYWNlXHJcbiAgICAgKi9cclxuICAgIHN0eWxlPzogVHJhY2VTdHlsZTtcclxuICAgIC8qKlxyXG4gICAgICogT3B0aW9uIHRvIG1ha2UgdGhlIFRyYWNlIHNlbGVjdGVkL2Rlc2VsZWN0ZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEEgZGVzZWxlY3RlZCBUcmFjZSBpcyBvYnNjdXJlZCBmcm9tIHRoZSBjaGFydCBhbmQgY2FuIGJlIHRvZ2dsZWQgZnJvbSB0aGUgbGVnZW5kLiAgIFxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlcm9mIFRyYWNlXHJcbiAgICAgKi9cclxuICAgIHNlbGVjdGVkQnlEZWZhdWx0PzogYm9vbGVhbjtcclxuICAgIG9wYWNpdHk/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnQgZXh0ZW5kcyBCYXNlUG9pbnQge1xyXG4gICAgbmFtZT86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogU3ltYm9sIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBwb2ludCBpbiB0aGUgY2hhcnQuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge1BvaW50U3ltYm9sfVxyXG4gICAgICogQG1lbWJlcm9mIFBvaW50XHJcbiAgICAgKi9cclxuICAgIHN5bWJvbD86IFBvaW50U3ltYm9sO1xyXG4gICAgc3ltYm9sU2l6ZT86IG51bWJlcjtcclxuICAgIGNvbG9yPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VQb2ludCB7XHJcbiAgICB4OiBudW1iZXI7XHJcbiAgICB5OiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVHJhY2VUeXBlIHtcclxuICAgIExJTkUgPSBcImxpbmVcIixcclxuICAgIFNDQVRURVIgPSBcInNjYXR0ZXJcIlxyXG59XHJcblxyXG5leHBvcnQgZW51bSBQb2ludFN5bWJvbCB7XHJcbiAgICBOT05FID0gXCJub25lXCIsXHJcbiAgICBDSVJDTEUgPSBcImNpcmNsZVwiLFxyXG4gICAgVFJJQU5HTEUgPSBcInRyaWFuZ2xlXCIsXHJcbiAgICBQSU4gPSBcInBpblwiLFxyXG4gICAgRElBTU9ORCA9IFwiZGlhbW9uZFwiXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFRyYWNlU3R5bGUge1xyXG4gICAgU09MSUQgPSBcInNvbGlkXCIsXHJcbiAgICBEQVNIRUQgPSBcImRhc2hlZFwiLFxyXG4gICAgRE9UVEVEID0gXCJkb3R0ZWRcIlxyXG59XHJcblxyXG5leHBvcnQgZW51bSBBeGlzVHlwZSB7XHJcbiAgICBWQUxVRSA9IFwidmFsdWVcIlxyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaGFwZVZhcmlhbnQge1xyXG4gICAgVFJBQ0VcclxufSJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l3aWJpdC9jaGFydC9zcmMvbGliL21vZGVscy9jaGFydC5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkpBLE1BQU0sQ0FBTixJQUFZLFNBR1g7QUFIRCxXQUFZLFNBQVM7SUFDakIsMEJBQWEsQ0FBQTtJQUNiLGdDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVELE1BQU0sQ0FBTixJQUFZLFdBTVg7QUFORCxXQUFZLFdBQVc7SUFDbkIsNEJBQWEsQ0FBQTtJQUNiLGdDQUFpQixDQUFBO0lBQ2pCLG9DQUFxQixDQUFBO0lBQ3JCLDBCQUFXLENBQUE7SUFDWCxrQ0FBbUIsQ0FBQTtBQUN2QixDQUFDLEVBTlcsV0FBVyxLQUFYLFdBQVcsUUFNdEI7QUFFRCxNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ2xCLDZCQUFlLENBQUE7SUFDZiwrQkFBaUIsQ0FBQTtJQUNqQiwrQkFBaUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsVUFBVSxLQUFWLFVBQVUsUUFJckI7QUFFRCxNQUFNLENBQU4sSUFBWSxRQUVYO0FBRkQsV0FBWSxRQUFRO0lBQ2hCLDJCQUFlLENBQUE7QUFDbkIsQ0FBQyxFQUZXLFFBQVEsS0FBUixRQUFRLFFBRW5CO0FBRUQsTUFBTSxDQUFOLElBQVksWUFFWDtBQUZELFdBQVksWUFBWTtJQUNwQixpREFBSyxDQUFBO0FBQ1QsQ0FBQyxFQUZXLFlBQVksS0FBWixZQUFZLFFBRXZCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgdGhlIENoYXJ0IG1vZGVsLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBpbnRlcmZhY2UgQ2hhcnRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnQge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIHNob3dMZWdlbmQ/OiBib29sZWFuO1xyXG4gICAgeEF4aXNUeXBlOiBBeGlzVHlwZTtcclxuICAgIHhBeGlzTmFtZTogc3RyaW5nO1xyXG4gICAgeEF4aXNVb20/OiBzdHJpbmc7XHJcbiAgICB4TWluPzogbnVtYmVyO1xyXG4gICAgeE1heD86IG51bWJlcjtcclxuICAgIHlBeGlzVHlwZTogQXhpc1R5cGU7XHJcbiAgICB5QXhpc05hbWU6IHN0cmluZztcclxuICAgIHlBeGlzVW9tPzogc3RyaW5nO1xyXG4gICAgeU1pbj86IG51bWJlcjtcclxuICAgIHlNYXg/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtYXhpbXVtIGRlY2ltYWxzIHRoYXQgY2FuIGhhdmUgdGhlIHZhbHVlcyBvbiB0aGUgeCBhbmQgeSBheGVzLlxyXG4gICAgICogSWYgb21pdHRlZCB0aGUgZGVmYXVsdCBpcyAzIGRlY2ltYWxzLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyb2YgQ2hhcnRcclxuICAgICAqL1xyXG4gICAgbWF4QXhlc0RlY2ltYWxzPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgY2hhcnQgc2hvdWxkIGhhdmUgcmVuZGVyaW5nIGFuaW1hdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyb2YgQ2hhcnRcclxuICAgICAqL1xyXG4gICAgaGFzQW5pbWF0aW9ucz86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIEhvdyBsb25nIHRoZSBhbmltYXRpb24gc2hvdWxkIGxhc3QuXHJcbiAgICAgKiBFeHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzLiBJZiBvbWl0dGVkIHRoZSBEZWZhdWx0IGlzIDUwMCBtcy5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlcm9mIENoYXJ0XHJcbiAgICAgKi9cclxuICAgIGFuaW1hdGlvbkR1cmF0aW9uPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGlzdCBvZiBTaGFwZXMgdGhhdCB0aGUgY2hhcnQgbXVzdCByZW5kZXIuXHJcbiAgICAgKiBFYWNoIFNoYXBlIGNvcnJpc3BvbmRzIHRvIGEgc2luZ2xlIGNoYXJ0IGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7U2hhcGVbXX1cclxuICAgICAqIEBtZW1iZXJvZiBDaGFydFxyXG4gICAgICovXHJcbiAgICBzaGFwZXM6IFNoYXBlW107XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgY2hhcnQsIHNvIHRoYXQgd2hlbiBjbGlja2luZ1xyXG4gICAgICogZXZlcnl3aGVyZSBpbiB0aGUgY2hhcnQgYXJlYSBhIHBvaW50IGdldHMgYWRkZWQgYW5kIGl0J3MgY29vcmRpbmF0ZSBhcmUgXHJcbiAgICAgKiBlbWl0dGVkIHdpdGggYW4gZXZlbnQgdG8gdGhlIHBhcmVudCBjb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyb2YgQ2hhcnRcclxuICAgICAqL1xyXG4gICAgY2xpY2tUb0FkZFBvaW50PzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogQ3VzdG9tIG5hbWUgZm9yIHRoZSBcImNsaWNrVG9BZGRQb2ludFwiIGV2ZW50IHJlbGF0ZWQgYnV0dG9uLiBcclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQG1lbWJlcm9mIENoYXJ0XHJcbiAgICAgKi9cclxuICAgIGFkZFBvaW50Q3VzdG9tTmFtZT86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIHRoZSBzY3JvbGwgXHJcbiAgICAgKiB0byB6b29tIGluL291dCB0aGUgY2hhcnQgYXJlYS5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJvZiBDaGFydFxyXG4gICAgICovXHJcbiAgICBzY3JvbGxUb1pvb20/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyB0aGUgY2hhcnQgdG8gcmVuZGVyIG9yIG5vdCB0aGUgZ3JpZCBsaW5lcy5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJvZiBDaGFydFxyXG4gICAgICovXHJcbiAgICBzaG93R3JpZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNoYXBlID0gVHJhY2U7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNlIHtcclxuICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YXJpYW50IG9mIHRoZSBTaGFwZSwgbXVzdCBiZSBvZiB0eXBlIFRyYWNlLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtTaGFwZVZhcmlhbnR9XHJcbiAgICAgKiBAbWVtYmVyb2YgVHJhY2VcclxuICAgICAqL1xyXG4gICAgdmFyaWFudDogU2hhcGVWYXJpYW50O1xyXG4gICAgY29sb3I/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBUcmFjZSBkcmF3biBieSB0aGUgY2hhcnQuXHJcbiAgICAgKiBDYW4gYmUgYSBsaW5lIG9yIGEgc2NhdHRlci4gXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge1RyYWNlVHlwZX1cclxuICAgICAqIEBtZW1iZXJvZiBUcmFjZVxyXG4gICAgICovXHJcbiAgICB0eXBlOiBUcmFjZVR5cGU7XHJcbiAgICB3aWR0aD86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxpc3Qgb2YgcG9pbnRzIHRoYXQgZGVmaW5lIHRoZSBUcmFjZS5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7UG9pbnRbXX1cclxuICAgICAqIEBtZW1iZXJvZiBUcmFjZVxyXG4gICAgICovXHJcbiAgICBwb2ludHM6IFBvaW50W107XHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyBhIHNtb290aCBjdXJ2ZSBvciBhIHNlZ21lbnRlZCBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJvZiBUcmFjZVxyXG4gICAgICovXHJcbiAgICBzbW9vdGg/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc3R5bGUgb2YgdGhlIFRyYWNlLlxyXG4gICAgICogQ2FuIGJlIHNvbGlkLCBkYXNoZWQgb3IgZG90dGVkLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtUcmFjZVN0eWxlfVxyXG4gICAgICogQG1lbWJlcm9mIFRyYWNlXHJcbiAgICAgKi9cclxuICAgIHN0eWxlPzogVHJhY2VTdHlsZTtcclxuICAgIC8qKlxyXG4gICAgICogT3B0aW9uIHRvIG1ha2UgdGhlIFRyYWNlIHNlbGVjdGVkL2Rlc2VsZWN0ZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEEgZGVzZWxlY3RlZCBUcmFjZSBpcyBvYnNjdXJlZCBmcm9tIHRoZSBjaGFydCBhbmQgY2FuIGJlIHRvZ2dsZWQgZnJvbSB0aGUgbGVnZW5kLiAgIFxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlcm9mIFRyYWNlXHJcbiAgICAgKi9cclxuICAgIHNlbGVjdGVkQnlEZWZhdWx0PzogYm9vbGVhbjtcclxuICAgIG9wYWNpdHk/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnQgZXh0ZW5kcyBCYXNlUG9pbnQge1xyXG4gICAgbmFtZT86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogU3ltYm9sIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBwb2ludCBpbiB0aGUgY2hhcnQuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge1BvaW50U3ltYm9sfVxyXG4gICAgICogQG1lbWJlcm9mIFBvaW50XHJcbiAgICAgKi9cclxuICAgIHN5bWJvbD86IFBvaW50U3ltYm9sO1xyXG4gICAgc3ltYm9sU2l6ZT86IG51bWJlcjtcclxuICAgIGNvbG9yPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VQb2ludCB7XHJcbiAgICB4OiBudW1iZXI7XHJcbiAgICB5OiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVHJhY2VUeXBlIHtcclxuICAgIExJTkUgPSBcImxpbmVcIixcclxuICAgIFNDQVRURVIgPSBcInNjYXR0ZXJcIlxyXG59XHJcblxyXG5leHBvcnQgZW51bSBQb2ludFN5bWJvbCB7XHJcbiAgICBOT05FID0gXCJub25lXCIsXHJcbiAgICBDSVJDTEUgPSBcImNpcmNsZVwiLFxyXG4gICAgVFJJQU5HTEUgPSBcInRyaWFuZ2xlXCIsXHJcbiAgICBQSU4gPSBcInBpblwiLFxyXG4gICAgRElBTU9ORCA9IFwiZGlhbW9uZFwiXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFRyYWNlU3R5bGUge1xyXG4gICAgU09MSUQgPSBcInNvbGlkXCIsXHJcbiAgICBEQVNIRUQgPSBcImRhc2hlZFwiLFxyXG4gICAgRE9UVEVEID0gXCJkb3R0ZWRcIlxyXG59XHJcblxyXG5leHBvcnQgZW51bSBBeGlzVHlwZSB7XHJcbiAgICBWQUxVRSA9IFwidmFsdWVcIlxyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaGFwZVZhcmlhbnQge1xyXG4gICAgVFJBQ0VcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQ2hhcnRUaGVtZSA9ICdkZWZhdWx0JyB8ICdkYXJrJzsiXX0=
@@ -1,8 +1,6 @@
1
1
  /*
2
2
  * Public API Surface of chart
3
3
  */
4
- export * from './lib/chart.component';
5
- export * from './lib/chart.module';
4
+ export * from './lib/components/chart.component';
6
5
  export * from './lib/models/chart.models';
7
- export * from './lib/constants/chart.constants';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2tpd2liaXQvY2hhcnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGNoYXJ0XHJcbiAqL1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hhcnQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hhcnQubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2NoYXJ0Lm1vZGVscyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnN0YW50cy9jaGFydC5jb25zdGFudHMnOyJdfQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2tpd2liaXQvY2hhcnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgY2hhcnRcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NoYXJ0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9jaGFydC5tb2RlbHMnOyJdfQ==