@kepler.gl/mcp 0.0.0-stage → 3.3.0-alpha.20

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 (73) hide show
  1. package/dist/cjs/commands/add-column-command.js +192 -0
  2. package/dist/cjs/commands/basemap-command.js +80 -0
  3. package/dist/cjs/commands/boundary-command.js +81 -0
  4. package/dist/cjs/commands/command-wrappers.js +122 -0
  5. package/dist/cjs/commands/dataset-context-command.js +87 -0
  6. package/dist/cjs/commands/index.js +230 -0
  7. package/dist/cjs/commands/layer-creation-command.js +534 -0
  8. package/dist/cjs/commands/layer-style-command.js +136 -0
  9. package/dist/cjs/commands/load-data-command.js +270 -0
  10. package/dist/cjs/commands/save-data-command.js +118 -0
  11. package/dist/cjs/commands/split-view-command.js +261 -0
  12. package/dist/cjs/commands/table-command.js +199 -0
  13. package/dist/cjs/commands/time-filter-command.js +289 -0
  14. package/dist/cjs/commands/toggle-time-filter-command.js +155 -0
  15. package/dist/cjs/commands/types.js +6 -0
  16. package/dist/cjs/commands/utils.js +536 -0
  17. package/dist/cjs/commands/view-mode-command.js +94 -0
  18. package/dist/cjs/index.js +39 -0
  19. package/dist/cjs/map-contract.js +6 -0
  20. package/dist/cjs/server/bridge-server.js +435 -0
  21. package/dist/cjs/server/index.js +31 -0
  22. package/dist/cjs/server/stdio.js +201 -0
  23. package/dist/cjs/types.js +30 -0
  24. package/dist/commands/add-column-command.d.ts +4 -0
  25. package/dist/commands/basemap-command.d.ts +4 -0
  26. package/dist/commands/boundary-command.d.ts +4 -0
  27. package/dist/commands/command-wrappers.d.ts +52 -0
  28. package/dist/commands/dataset-context-command.d.ts +4 -0
  29. package/dist/commands/index.d.ts +31 -0
  30. package/dist/commands/layer-creation-command.d.ts +8 -0
  31. package/dist/commands/layer-style-command.d.ts +4 -0
  32. package/dist/commands/load-data-command.d.ts +4 -0
  33. package/dist/commands/save-data-command.d.ts +4 -0
  34. package/dist/commands/split-view-command.d.ts +4 -0
  35. package/dist/commands/table-command.d.ts +4 -0
  36. package/dist/commands/time-filter-command.d.ts +13 -0
  37. package/dist/commands/toggle-time-filter-command.d.ts +4 -0
  38. package/dist/commands/types.d.ts +132 -0
  39. package/dist/commands/utils.d.ts +138 -0
  40. package/dist/commands/view-mode-command.d.ts +4 -0
  41. package/dist/esm/commands/add-column-command.js +185 -0
  42. package/dist/esm/commands/basemap-command.js +72 -0
  43. package/dist/esm/commands/boundary-command.js +73 -0
  44. package/dist/esm/commands/command-wrappers.js +114 -0
  45. package/dist/esm/commands/dataset-context-command.js +79 -0
  46. package/dist/esm/commands/index.js +51 -0
  47. package/dist/esm/commands/layer-creation-command.js +527 -0
  48. package/dist/esm/commands/layer-style-command.js +130 -0
  49. package/dist/esm/commands/load-data-command.js +264 -0
  50. package/dist/esm/commands/save-data-command.js +112 -0
  51. package/dist/esm/commands/split-view-command.js +255 -0
  52. package/dist/esm/commands/table-command.js +194 -0
  53. package/dist/esm/commands/time-filter-command.js +280 -0
  54. package/dist/esm/commands/toggle-time-filter-command.js +147 -0
  55. package/dist/esm/commands/types.js +3 -0
  56. package/dist/esm/commands/utils.js +521 -0
  57. package/dist/esm/commands/view-mode-command.js +86 -0
  58. package/dist/esm/index.js +20 -0
  59. package/dist/esm/map-contract.js +3 -0
  60. package/dist/esm/server/bridge-server.js +428 -0
  61. package/dist/esm/server/index.js +13 -0
  62. package/dist/esm/server/stdio.js +198 -0
  63. package/dist/esm/types.js +24 -0
  64. package/dist/index.d.ts +15 -0
  65. package/dist/map-contract.d.ts +31 -0
  66. package/dist/server/bridge-server.d.ts +53 -0
  67. package/dist/server/index.d.ts +9 -0
  68. package/dist/server/stdio.d.ts +2 -0
  69. package/dist/types.d.ts +24 -0
  70. package/package.json +84 -4
  71. package/skill/kepler/SKILL.md +438 -0
  72. package/skill/kepler/skill.yaml +4 -0
  73. package/README.md +0 -3
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.addTimeFilterCommandId = exports.INTERVAL_MILLIS = void 0;
8
+ exports.detectIntervalFromDomain = detectIntervalFromDomain;
9
+ exports.getAddTimeFilterCommand = getAddTimeFilterCommand;
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
+ var _zod = require("zod");
13
+ var _actions = require("@kepler.gl/actions");
14
+ // SPDX-License-Identifier: MIT
15
+ // Copyright contributors to the kepler.gl project
16
+
17
+ var MILLIS_SECOND = 1000;
18
+ var MILLIS_MINUTE = 60 * MILLIS_SECOND;
19
+ var MILLIS_HOUR = 60 * MILLIS_MINUTE;
20
+ var MILLIS_DAY = 24 * MILLIS_HOUR;
21
+ var MILLIS_WEEK = 7 * MILLIS_DAY;
22
+ var MILLIS_MONTH = 30 * MILLIS_DAY;
23
+ var MILLIS_3_MONTH = 91 * MILLIS_DAY;
24
+ var MILLIS_YEAR = 365 * MILLIS_DAY;
25
+ var INTERVAL_MILLIS = exports.INTERVAL_MILLIS = {
26
+ '1-second': MILLIS_SECOND,
27
+ '1-minute': MILLIS_MINUTE,
28
+ '1-hour': MILLIS_HOUR,
29
+ '1-day': MILLIS_DAY,
30
+ '1-week': MILLIS_WEEK,
31
+ '1-month': MILLIS_MONTH,
32
+ '3-month': MILLIS_3_MONTH,
33
+ '1-year': MILLIS_YEAR
34
+ };
35
+
36
+ /**
37
+ * Infer a sensible animation interval from a time filter's domain and (when
38
+ * available) the actual distinct timestamps in the dataset. Mirrors the logic
39
+ * used by spatial-agent's `detectIntervalFromDomain` so the skill-path behaves
40
+ * identically.
41
+ */
42
+ function detectIntervalFromDomain(domain, mappedValues) {
43
+ var span = domain[1] - domain[0];
44
+ if (span <= 0) return '1-year';
45
+ var numUniqueSteps;
46
+ if (mappedValues && mappedValues.length > 0) {
47
+ var unique = new Set(mappedValues.filter(function (v) {
48
+ return v != null;
49
+ }));
50
+ numUniqueSteps = unique.size;
51
+ } else {
52
+ numUniqueSteps = 2;
53
+ }
54
+ if (numUniqueSteps <= 1) return '1-year';
55
+ var avgGap = span / Math.max(numUniqueSteps - 1, 1);
56
+ if (avgGap >= MILLIS_YEAR * 0.8) return '1-year';
57
+ if (avgGap >= MILLIS_MONTH * 2.5) return '3-month';
58
+ if (avgGap >= MILLIS_MONTH * 0.8) return '1-month';
59
+ if (avgGap >= MILLIS_DAY * 5) return '1-week';
60
+ if (avgGap >= MILLIS_DAY * 0.8) return '1-day';
61
+ if (avgGap >= MILLIS_HOUR * 0.8) return '1-hour';
62
+ if (avgGap >= MILLIS_MINUTE * 0.8) return '1-minute';
63
+ return '1-second';
64
+ }
65
+ var sleep = function sleep(ms) {
66
+ return new Promise(function (resolve) {
67
+ return setTimeout(resolve, ms);
68
+ });
69
+ };
70
+ var addTimeFilterCommandId = exports.addTimeFilterCommandId = 'map.add-time-filter';
71
+ function getAddTimeFilterCommand(ctx) {
72
+ return {
73
+ id: addTimeFilterCommandId,
74
+ name: 'Add time filter',
75
+ group: 'Map',
76
+ description: "Add a time-range filter to animate a NON-trip layer over a TIMESTAMP/DATE column. The time controller appears at the bottom of the map.\n\nDO NOT call this for a trip layer \u2014 trips have built-in time animation.\n\nThe dataset and a layer for it must already exist on the map (e.g. from map.add-layer or map.load-data).\n\nPass the datasetName and the dateTimeColumn to animate over. The interval is auto-detected from the data when omitted; pass it explicitly to override.",
77
+ metadata: {
78
+ readOnly: false,
79
+ riskLevel: 'medium',
80
+ idempotent: false
81
+ },
82
+ inputSchema: _zod.z.object({
83
+ datasetName: _zod.z.string().describe('The name (label) or id of the dataset to animate.'),
84
+ dateTimeColumn: _zod.z.string().describe('A TIMESTAMP or DATE column in the dataset. Do NOT pass an integer/string epoch column — build a real TIMESTAMP column first.'),
85
+ interval: _zod.z["enum"](['1-second', '1-minute', '1-hour', '1-day', '1-week', '1-month', '3-month', '1-year']).optional().describe('Animation step. Auto-detected from the data span and distinct timestamps when omitted.')
86
+ }),
87
+ execute: function () {
88
+ var _execute = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(_execCtx, input) {
89
+ var _ref, datasetName, dateTimeColumn, interval, _dataset$fields, _visState$filters, _ctx$getVisState$filt3, _resolvedInterval, visState, datasets, datasetId, dataset, filterField, _dataset$fields2, filters, existingFilterIdx, filterIdx, filterId, attempt, _ctx$getVisState$filt, _ctx$getVisState$filt2, currentFilters, targetFilter, resolvedInterval, _ctx$getVisState$filt5, _dataset$fields$index, _dataset$fields3, mappedValues, fieldIdx, rows, MAX_SAMPLES, step, i, val, ts, datasetBins, _attempt, _ctx$getVisState$filt4, updatedFilter, _timeBins$datasetId, timeBins, bins, finalFilter, _INTERVAL_MILLIS, domainStart, windowSize;
90
+ return _regenerator["default"].wrap(function _callee$(_context) {
91
+ while (1) switch (_context.prev = _context.next) {
92
+ case 0:
93
+ _ref = input !== null && input !== void 0 ? input : {}, datasetName = _ref.datasetName, dateTimeColumn = _ref.dateTimeColumn, interval = _ref.interval;
94
+ _context.prev = 1;
95
+ if (!(interval !== undefined && (typeof interval !== 'string' || !Object.prototype.hasOwnProperty.call(INTERVAL_MILLIS, interval)))) {
96
+ _context.next = 4;
97
+ break;
98
+ }
99
+ throw new Error("Invalid interval \"".concat(String(interval), "\". Must be one of: ").concat(Object.keys(INTERVAL_MILLIS).join(', '), "."));
100
+ case 4:
101
+ visState = ctx.getVisState();
102
+ datasets = visState.datasets;
103
+ datasetId = Object.keys(datasets).find(function (dataId) {
104
+ return datasets[dataId].label === datasetName || dataId === datasetName;
105
+ });
106
+ if (datasetId) {
107
+ _context.next = 9;
108
+ break;
109
+ }
110
+ throw new Error("Dataset ".concat(datasetName, " not found."));
111
+ case 9:
112
+ dataset = datasets[datasetId];
113
+ filterField = (_dataset$fields = dataset.fields) === null || _dataset$fields === void 0 ? void 0 : _dataset$fields.find(function (f) {
114
+ return f.name === dateTimeColumn;
115
+ });
116
+ if (filterField) {
117
+ _context.next = 13;
118
+ break;
119
+ }
120
+ throw new Error("Column ".concat(dateTimeColumn, " not found in dataset ").concat(datasetName, ". Available: ").concat((_dataset$fields2 = dataset.fields) === null || _dataset$fields2 === void 0 ? void 0 : _dataset$fields2.map(function (f) {
121
+ return f.name;
122
+ }).join(', ')));
123
+ case 13:
124
+ if (!(filterField.type !== 'timestamp' && filterField.type !== 'date')) {
125
+ _context.next = 15;
126
+ break;
127
+ }
128
+ throw new Error("Column ".concat(dateTimeColumn, " is of type \"").concat(filterField.type, "\", not timestamp/date. Build a real TIMESTAMP column first (Kepler.gl cannot animate on integer/string epochs)."));
129
+ case 15:
130
+ // Explicitly typed: `VisState.filters` is untyped (index signature) and
131
+ // strict consumers (e.g. kepler-assistant, which vendors this module)
132
+ // would otherwise flag the `.findIndex(f => …)` callback as implicit any.
133
+ filters = (_visState$filters = visState.filters) !== null && _visState$filters !== void 0 ? _visState$filters : [];
134
+ existingFilterIdx = filters.findIndex(function (f) {
135
+ return (Array.isArray(f.dataId) ? f.dataId.includes(datasetId) : f.dataId === datasetId) && (Array.isArray(f.name) ? f.name.includes(dateTimeColumn) : f.name === dateTimeColumn);
136
+ });
137
+ if (!(existingFilterIdx >= 0)) {
138
+ _context.next = 22;
139
+ break;
140
+ }
141
+ filterIdx = existingFilterIdx;
142
+ filterId = filters[existingFilterIdx].id;
143
+ _context.next = 36;
144
+ break;
145
+ case 22:
146
+ filterIdx = filters.length;
147
+ ctx.dispatch((0, _actions.addFilter)(datasetId));
148
+ ctx.dispatch((0, _actions.setFilter)(filterIdx, 'name', dateTimeColumn));
149
+ // Poll for the filter entry to appear instead of a fixed sleep: on
150
+ // slower devices the filter (and its id) may not be available yet,
151
+ // and a fixed delay would leave filterId as an empty string, making
152
+ // the later setFilterAnimationWindow({id: filterId, ...}) behave
153
+ // unpredictably.
154
+ filterId = '';
155
+ attempt = 0;
156
+ case 27:
157
+ if (!(attempt < 10 && !filterId)) {
158
+ _context.next = 34;
159
+ break;
160
+ }
161
+ _context.next = 30;
162
+ return sleep(100);
163
+ case 30:
164
+ filterId = (_ctx$getVisState$filt = (_ctx$getVisState$filt2 = ctx.getVisState().filters) === null || _ctx$getVisState$filt2 === void 0 || (_ctx$getVisState$filt2 = _ctx$getVisState$filt2[filterIdx]) === null || _ctx$getVisState$filt2 === void 0 ? void 0 : _ctx$getVisState$filt2.id) !== null && _ctx$getVisState$filt !== void 0 ? _ctx$getVisState$filt : '';
165
+ case 31:
166
+ attempt++;
167
+ _context.next = 27;
168
+ break;
169
+ case 34:
170
+ if (filterId) {
171
+ _context.next = 36;
172
+ break;
173
+ }
174
+ throw new Error("Timed out waiting for the time filter on column \"".concat(dateTimeColumn, "\" to be created. Please try again."));
175
+ case 36:
176
+ currentFilters = (_ctx$getVisState$filt3 = ctx.getVisState().filters) !== null && _ctx$getVisState$filt3 !== void 0 ? _ctx$getVisState$filt3 : [];
177
+ targetFilter = currentFilters[filterIdx];
178
+ resolvedInterval = interval;
179
+ if (!(targetFilter !== null && targetFilter !== void 0 && targetFilter.domain && targetFilter.domain.length === 2)) {
180
+ _context.next = 59;
181
+ break;
182
+ }
183
+ if (!resolvedInterval) {
184
+ fieldIdx = (_dataset$fields$index = (_dataset$fields3 = dataset.fields) === null || _dataset$fields3 === void 0 ? void 0 : _dataset$fields3.indexOf(filterField)) !== null && _dataset$fields$index !== void 0 ? _dataset$fields$index : -1;
185
+ if (fieldIdx >= 0 && dataset.dataContainer) {
186
+ rows = dataset.dataContainer.numRows();
187
+ mappedValues = [];
188
+ // Sample a bounded number of rows — iterating every row can freeze
189
+ // the UI thread on large datasets, and a sample is enough for a
190
+ // reasonable interval estimate.
191
+ MAX_SAMPLES = 1000;
192
+ step = Math.max(1, Math.floor(rows / MAX_SAMPLES));
193
+ for (i = 0; i < rows; i += step) {
194
+ val = dataset.dataContainer.valueAt(i, fieldIdx);
195
+ if (val != null) {
196
+ ts = typeof val === 'number' ? val : new Date(val).getTime();
197
+ if (!isNaN(ts)) mappedValues.push(ts);
198
+ }
199
+ }
200
+ }
201
+ resolvedInterval = detectIntervalFromDomain(targetFilter.domain, mappedValues);
202
+ }
203
+ ctx.dispatch((0, _actions.setFilter)(filterIdx, 'plotType', {
204
+ interval: resolvedInterval
205
+ }));
206
+ ctx.dispatch((0, _actions.setFilterAnimationWindow)({
207
+ id: filterId,
208
+ animationWindow: 'free'
209
+ }));
210
+
211
+ // Poll for timeBins to become available (kepler computes them async).
212
+ _attempt = 0;
213
+ case 44:
214
+ if (!(_attempt < 10)) {
215
+ _context.next = 57;
216
+ break;
217
+ }
218
+ _context.next = 47;
219
+ return sleep(200);
220
+ case 47:
221
+ updatedFilter = (_ctx$getVisState$filt4 = ctx.getVisState().filters) === null || _ctx$getVisState$filt4 === void 0 ? void 0 : _ctx$getVisState$filt4[filterIdx];
222
+ if (!(updatedFilter !== null && updatedFilter !== void 0 && updatedFilter.domain && updatedFilter.domain.length === 2)) {
223
+ _context.next = 54;
224
+ break;
225
+ }
226
+ // timeBins is keyed by dataset id, then by interval:
227
+ // {[dataId]: {[interval]: bins[]}}. Look up the bins for THIS
228
+ // filter's dataset — grabbing the first entry via
229
+ // Object.values(timeBins)[0] would pick the wrong dataset's bins
230
+ // when multiple datasets/filters exist, animating against the
231
+ // wrong time window.
232
+ timeBins = updatedFilter.timeBins;
233
+ bins = timeBins === null || timeBins === void 0 || (_timeBins$datasetId = timeBins[datasetId]) === null || _timeBins$datasetId === void 0 ? void 0 : _timeBins$datasetId[resolvedInterval];
234
+ if (!(bins && bins.length > 0)) {
235
+ _context.next = 54;
236
+ break;
237
+ }
238
+ datasetBins = bins;
239
+ return _context.abrupt("break", 57);
240
+ case 54:
241
+ _attempt++;
242
+ _context.next = 44;
243
+ break;
244
+ case 57:
245
+ finalFilter = (_ctx$getVisState$filt5 = ctx.getVisState().filters) === null || _ctx$getVisState$filt5 === void 0 ? void 0 : _ctx$getVisState$filt5[filterIdx];
246
+ if (finalFilter !== null && finalFilter !== void 0 && finalFilter.domain && finalFilter.domain.length === 2) {
247
+ if (datasetBins && datasetBins.length > 0) {
248
+ ctx.dispatch((0, _actions.setFilterAnimationTime)(filterIdx, 'value', [datasetBins[0].x0, datasetBins[0].x1]));
249
+ } else {
250
+ domainStart = finalFilter.domain[0];
251
+ windowSize = (_INTERVAL_MILLIS = INTERVAL_MILLIS[resolvedInterval]) !== null && _INTERVAL_MILLIS !== void 0 ? _INTERVAL_MILLIS : MILLIS_YEAR;
252
+ ctx.dispatch((0, _actions.setFilterAnimationTime)(filterIdx, 'value', [domainStart, domainStart + windowSize]));
253
+ }
254
+ }
255
+ case 59:
256
+ return _context.abrupt("return", {
257
+ success: true,
258
+ commandId: addTimeFilterCommandId,
259
+ data: {
260
+ details: "Time filter added on column \"".concat(dateTimeColumn, "\" for dataset \"").concat(datasetName, "\" (interval: ").concat((_resolvedInterval = resolvedInterval) !== null && _resolvedInterval !== void 0 ? _resolvedInterval : 'auto', ", filter index: ").concat(filterIdx, "). The time controller is now visible at the bottom of the map."),
261
+ filterIndex: filterIdx,
262
+ interval: resolvedInterval
263
+ }
264
+ });
265
+ case 62:
266
+ _context.prev = 62;
267
+ _context.t0 = _context["catch"](1);
268
+ return _context.abrupt("return", {
269
+ success: false,
270
+ commandId: addTimeFilterCommandId,
271
+ error: _context.t0 instanceof Error ? _context.t0.message : 'Unknown error',
272
+ data: {
273
+ instruction: 'Check that the dataset exists, the column is a TIMESTAMP/DATE, and a layer for the dataset is already on the map. Do not retry more than once.'
274
+ }
275
+ });
276
+ case 65:
277
+ case "end":
278
+ return _context.stop();
279
+ }
280
+ }, _callee, null, [[1, 62]]);
281
+ }));
282
+ function execute(_x, _x2) {
283
+ return _execute.apply(this, arguments);
284
+ }
285
+ return execute;
286
+ }()
287
+ };
288
+ }
289
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfem9kIiwicmVxdWlyZSIsIl9hY3Rpb25zIiwiTUlMTElTX1NFQ09ORCIsIk1JTExJU19NSU5VVEUiLCJNSUxMSVNfSE9VUiIsIk1JTExJU19EQVkiLCJNSUxMSVNfV0VFSyIsIk1JTExJU19NT05USCIsIk1JTExJU18zX01PTlRIIiwiTUlMTElTX1lFQVIiLCJJTlRFUlZBTF9NSUxMSVMiLCJleHBvcnRzIiwiZGV0ZWN0SW50ZXJ2YWxGcm9tRG9tYWluIiwiZG9tYWluIiwibWFwcGVkVmFsdWVzIiwic3BhbiIsIm51bVVuaXF1ZVN0ZXBzIiwibGVuZ3RoIiwidW5pcXVlIiwiU2V0IiwiZmlsdGVyIiwidiIsInNpemUiLCJhdmdHYXAiLCJNYXRoIiwibWF4Iiwic2xlZXAiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImFkZFRpbWVGaWx0ZXJDb21tYW5kSWQiLCJnZXRBZGRUaW1lRmlsdGVyQ29tbWFuZCIsImN0eCIsImlkIiwibmFtZSIsImdyb3VwIiwiZGVzY3JpcHRpb24iLCJtZXRhZGF0YSIsInJlYWRPbmx5Iiwicmlza0xldmVsIiwiaWRlbXBvdGVudCIsImlucHV0U2NoZW1hIiwieiIsIm9iamVjdCIsImRhdGFzZXROYW1lIiwic3RyaW5nIiwiZGVzY3JpYmUiLCJkYXRlVGltZUNvbHVtbiIsImludGVydmFsIiwib3B0aW9uYWwiLCJleGVjdXRlIiwiX2V4ZWN1dGUiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9leGVjQ3R4IiwiaW5wdXQiLCJfcmVmIiwiX2RhdGFzZXQkZmllbGRzIiwiX3Zpc1N0YXRlJGZpbHRlcnMiLCJfY3R4JGdldFZpc1N0YXRlJGZpbHQzIiwiX3Jlc29sdmVkSW50ZXJ2YWwiLCJ2aXNTdGF0ZSIsImRhdGFzZXRzIiwiZGF0YXNldElkIiwiZGF0YXNldCIsImZpbHRlckZpZWxkIiwiX2RhdGFzZXQkZmllbGRzMiIsImZpbHRlcnMiLCJleGlzdGluZ0ZpbHRlcklkeCIsImZpbHRlcklkeCIsImZpbHRlcklkIiwiYXR0ZW1wdCIsIl9jdHgkZ2V0VmlzU3RhdGUkZmlsdCIsIl9jdHgkZ2V0VmlzU3RhdGUkZmlsdDIiLCJjdXJyZW50RmlsdGVycyIsInRhcmdldEZpbHRlciIsInJlc29sdmVkSW50ZXJ2YWwiLCJfY3R4JGdldFZpc1N0YXRlJGZpbHQ1IiwiX2RhdGFzZXQkZmllbGRzJGluZGV4IiwiX2RhdGFzZXQkZmllbGRzMyIsImZpZWxkSWR4Iiwicm93cyIsIk1BWF9TQU1QTEVTIiwic3RlcCIsImkiLCJ2YWwiLCJ0cyIsImRhdGFzZXRCaW5zIiwiX2F0dGVtcHQiLCJfY3R4JGdldFZpc1N0YXRlJGZpbHQ0IiwidXBkYXRlZEZpbHRlciIsIl90aW1lQmlucyRkYXRhc2V0SWQiLCJ0aW1lQmlucyIsImJpbnMiLCJmaW5hbEZpbHRlciIsIl9JTlRFUlZBTF9NSUxMSVMiLCJkb21haW5TdGFydCIsIndpbmRvd1NpemUiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwidW5kZWZpbmVkIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiRXJyb3IiLCJjb25jYXQiLCJTdHJpbmciLCJrZXlzIiwiam9pbiIsImdldFZpc1N0YXRlIiwiZmluZCIsImRhdGFJZCIsImxhYmVsIiwiZmllbGRzIiwiZiIsIm1hcCIsInR5cGUiLCJmaW5kSW5kZXgiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlcyIsImRpc3BhdGNoIiwiYWRkRmlsdGVyIiwic2V0RmlsdGVyIiwiaW5kZXhPZiIsImRhdGFDb250YWluZXIiLCJudW1Sb3dzIiwiZmxvb3IiLCJ2YWx1ZUF0IiwiRGF0ZSIsImdldFRpbWUiLCJpc05hTiIsInB1c2giLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3ciLCJhbmltYXRpb25XaW5kb3ciLCJhYnJ1cHQiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lIiwieDAiLCJ4MSIsInN1Y2Nlc3MiLCJjb21tYW5kSWQiLCJkYXRhIiwiZGV0YWlscyIsImZpbHRlckluZGV4IiwidDAiLCJlcnJvciIsIm1lc3NhZ2UiLCJpbnN0cnVjdGlvbiIsInN0b3AiLCJfeCIsIl94MiIsImFwcGx5IiwiYXJndW1lbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3RpbWUtZmlsdGVyLWNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHR5cGUge1Jvb21Db21tYW5kfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB0eXBlIEtlcGxlclRhYmxlIGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHR5cGUge0RhdGFzZXRzfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7XG4gIGFkZEZpbHRlcixcbiAgc2V0RmlsdGVyLFxuICBzZXRGaWx0ZXJBbmltYXRpb25UaW1lLFxuICBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHtLZXBsZXJDb250ZXh0fSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgSW50ZXJ2YWxLZXkgPVxuICB8ICcxLXNlY29uZCdcbiAgfCAnMS1taW51dGUnXG4gIHwgJzEtaG91cidcbiAgfCAnMS1kYXknXG4gIHwgJzEtd2VlaydcbiAgfCAnMS1tb250aCdcbiAgfCAnMy1tb250aCdcbiAgfCAnMS15ZWFyJztcblxuY29uc3QgTUlMTElTX1NFQ09ORCA9IDFfMDAwO1xuY29uc3QgTUlMTElTX01JTlVURSA9IDYwICogTUlMTElTX1NFQ09ORDtcbmNvbnN0IE1JTExJU19IT1VSID0gNjAgKiBNSUxMSVNfTUlOVVRFO1xuY29uc3QgTUlMTElTX0RBWSA9IDI0ICogTUlMTElTX0hPVVI7XG5jb25zdCBNSUxMSVNfV0VFSyA9IDcgKiBNSUxMSVNfREFZO1xuY29uc3QgTUlMTElTX01PTlRIID0gMzAgKiBNSUxMSVNfREFZO1xuY29uc3QgTUlMTElTXzNfTU9OVEggPSA5MSAqIE1JTExJU19EQVk7XG5jb25zdCBNSUxMSVNfWUVBUiA9IDM2NSAqIE1JTExJU19EQVk7XG5cbmV4cG9ydCBjb25zdCBJTlRFUlZBTF9NSUxMSVM6IFJlY29yZDxJbnRlcnZhbEtleSwgbnVtYmVyPiA9IHtcbiAgJzEtc2Vjb25kJzogTUlMTElTX1NFQ09ORCxcbiAgJzEtbWludXRlJzogTUlMTElTX01JTlVURSxcbiAgJzEtaG91cic6IE1JTExJU19IT1VSLFxuICAnMS1kYXknOiBNSUxMSVNfREFZLFxuICAnMS13ZWVrJzogTUlMTElTX1dFRUssXG4gICcxLW1vbnRoJzogTUlMTElTX01PTlRILFxuICAnMy1tb250aCc6IE1JTExJU18zX01PTlRILFxuICAnMS15ZWFyJzogTUlMTElTX1lFQVJcbn07XG5cbi8qKlxuICogSW5mZXIgYSBzZW5zaWJsZSBhbmltYXRpb24gaW50ZXJ2YWwgZnJvbSBhIHRpbWUgZmlsdGVyJ3MgZG9tYWluIGFuZCAod2hlblxuICogYXZhaWxhYmxlKSB0aGUgYWN0dWFsIGRpc3RpbmN0IHRpbWVzdGFtcHMgaW4gdGhlIGRhdGFzZXQuIE1pcnJvcnMgdGhlIGxvZ2ljXG4gKiB1c2VkIGJ5IHNwYXRpYWwtYWdlbnQncyBgZGV0ZWN0SW50ZXJ2YWxGcm9tRG9tYWluYCBzbyB0aGUgc2tpbGwtcGF0aCBiZWhhdmVzXG4gKiBpZGVudGljYWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEludGVydmFsRnJvbURvbWFpbihcbiAgZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBtYXBwZWRWYWx1ZXM/OiBudW1iZXJbXVxuKTogSW50ZXJ2YWxLZXkge1xuICBjb25zdCBzcGFuID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuICBpZiAoc3BhbiA8PSAwKSByZXR1cm4gJzEteWVhcic7XG5cbiAgbGV0IG51bVVuaXF1ZVN0ZXBzOiBudW1iZXI7XG4gIGlmIChtYXBwZWRWYWx1ZXMgJiYgbWFwcGVkVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB1bmlxdWUgPSBuZXcgU2V0KG1hcHBlZFZhbHVlcy5maWx0ZXIodiA9PiB2ICE9IG51bGwpKTtcbiAgICBudW1VbmlxdWVTdGVwcyA9IHVuaXF1ZS5zaXplO1xuICB9IGVsc2Uge1xuICAgIG51bVVuaXF1ZVN0ZXBzID0gMjtcbiAgfVxuXG4gIGlmIChudW1VbmlxdWVTdGVwcyA8PSAxKSByZXR1cm4gJzEteWVhcic7XG5cbiAgY29uc3QgYXZnR2FwID0gc3BhbiAvIE1hdGgubWF4KG51bVVuaXF1ZVN0ZXBzIC0gMSwgMSk7XG5cbiAgaWYgKGF2Z0dhcCA+PSBNSUxMSVNfWUVBUiAqIDAuOCkgcmV0dXJuICcxLXllYXInO1xuICBpZiAoYXZnR2FwID49IE1JTExJU19NT05USCAqIDIuNSkgcmV0dXJuICczLW1vbnRoJztcbiAgaWYgKGF2Z0dhcCA+PSBNSUxMSVNfTU9OVEggKiAwLjgpIHJldHVybiAnMS1tb250aCc7XG4gIGlmIChhdmdHYXAgPj0gTUlMTElTX0RBWSAqIDUpIHJldHVybiAnMS13ZWVrJztcbiAgaWYgKGF2Z0dhcCA+PSBNSUxMSVNfREFZICogMC44KSByZXR1cm4gJzEtZGF5JztcbiAgaWYgKGF2Z0dhcCA+PSBNSUxMSVNfSE9VUiAqIDAuOCkgcmV0dXJuICcxLWhvdXInO1xuICBpZiAoYXZnR2FwID49IE1JTExJU19NSU5VVEUgKiAwLjgpIHJldHVybiAnMS1taW51dGUnO1xuICByZXR1cm4gJzEtc2Vjb25kJztcbn1cblxuY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG5cbmV4cG9ydCBjb25zdCBhZGRUaW1lRmlsdGVyQ29tbWFuZElkID0gJ21hcC5hZGQtdGltZS1maWx0ZXInIGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkVGltZUZpbHRlckNvbW1hbmQoY3R4OiBLZXBsZXJDb250ZXh0KTogUm9vbUNvbW1hbmQge1xuICByZXR1cm4ge1xuICAgIGlkOiBhZGRUaW1lRmlsdGVyQ29tbWFuZElkLFxuICAgIG5hbWU6ICdBZGQgdGltZSBmaWx0ZXInLFxuICAgIGdyb3VwOiAnTWFwJyxcbiAgICBkZXNjcmlwdGlvbjogYEFkZCBhIHRpbWUtcmFuZ2UgZmlsdGVyIHRvIGFuaW1hdGUgYSBOT04tdHJpcCBsYXllciBvdmVyIGEgVElNRVNUQU1QL0RBVEUgY29sdW1uLiBUaGUgdGltZSBjb250cm9sbGVyIGFwcGVhcnMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWFwLlxuXG5ETyBOT1QgY2FsbCB0aGlzIGZvciBhIHRyaXAgbGF5ZXIg4oCUIHRyaXBzIGhhdmUgYnVpbHQtaW4gdGltZSBhbmltYXRpb24uXG5cblRoZSBkYXRhc2V0IGFuZCBhIGxheWVyIGZvciBpdCBtdXN0IGFscmVhZHkgZXhpc3Qgb24gdGhlIG1hcCAoZS5nLiBmcm9tIG1hcC5hZGQtbGF5ZXIgb3IgbWFwLmxvYWQtZGF0YSkuXG5cblBhc3MgdGhlIGRhdGFzZXROYW1lIGFuZCB0aGUgZGF0ZVRpbWVDb2x1bW4gdG8gYW5pbWF0ZSBvdmVyLiBUaGUgaW50ZXJ2YWwgaXMgYXV0by1kZXRlY3RlZCBmcm9tIHRoZSBkYXRhIHdoZW4gb21pdHRlZDsgcGFzcyBpdCBleHBsaWNpdGx5IHRvIG92ZXJyaWRlLmAsXG4gICAgbWV0YWRhdGE6IHtyZWFkT25seTogZmFsc2UsIHJpc2tMZXZlbDogJ21lZGl1bScsIGlkZW1wb3RlbnQ6IGZhbHNlfSxcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgZGF0YXNldE5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ1RoZSBuYW1lIChsYWJlbCkgb3IgaWQgb2YgdGhlIGRhdGFzZXQgdG8gYW5pbWF0ZS4nKSxcbiAgICAgIGRhdGVUaW1lQ29sdW1uOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgJ0EgVElNRVNUQU1QIG9yIERBVEUgY29sdW1uIGluIHRoZSBkYXRhc2V0LiBEbyBOT1QgcGFzcyBhbiBpbnRlZ2VyL3N0cmluZyBlcG9jaCBjb2x1bW4g4oCUIGJ1aWxkIGEgcmVhbCBUSU1FU1RBTVAgY29sdW1uIGZpcnN0LidcbiAgICAgICAgKSxcbiAgICAgIGludGVydmFsOiB6XG4gICAgICAgIC5lbnVtKFsnMS1zZWNvbmQnLCAnMS1taW51dGUnLCAnMS1ob3VyJywgJzEtZGF5JywgJzEtd2VlaycsICcxLW1vbnRoJywgJzMtbW9udGgnLCAnMS15ZWFyJ10pXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICAnQW5pbWF0aW9uIHN0ZXAuIEF1dG8tZGV0ZWN0ZWQgZnJvbSB0aGUgZGF0YSBzcGFuIGFuZCBkaXN0aW5jdCB0aW1lc3RhbXBzIHdoZW4gb21pdHRlZC4nXG4gICAgICAgIClcbiAgICB9KSBhcyBhbnksXG4gICAgZXhlY3V0ZTogYXN5bmMgKF9leGVjQ3R4LCBpbnB1dCkgPT4ge1xuICAgICAgY29uc3Qge2RhdGFzZXROYW1lLCBkYXRlVGltZUNvbHVtbiwgaW50ZXJ2YWx9ID0gKGlucHV0ID8/IHt9KSBhcyB7XG4gICAgICAgIGRhdGFzZXROYW1lOiBzdHJpbmc7XG4gICAgICAgIGRhdGVUaW1lQ29sdW1uOiBzdHJpbmc7XG4gICAgICAgIGludGVydmFsPzogSW50ZXJ2YWxLZXk7XG4gICAgICB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUnVudGltZSBndWFyZDogdGhlIGJyaWRnZS93ZWJNQ1AgY2FsbCBleGVjdXRlIHdpdGhvdXQgem9kIHBhcnNpbmcsXG4gICAgICAgIC8vIHNvIGFuIGludmFsaWQgaW50ZXJ2YWwgbXVzdCBub3QgYmUgd3JpdHRlbiBpbnRvIGtlcGxlciBmaWx0ZXIgc3RhdGVcbiAgICAgICAgLy8gKHBsb3RUeXBlLmludGVydmFsKS4gVXNlIGFuIG93bi1wcm9wZXJ0eSBjaGVjayDigJQgYGluYCBtYXRjaGVzXG4gICAgICAgIC8vIGluaGVyaXRlZCBwcm9wZXJ0aWVzIChlLmcuIFwidG9TdHJpbmdcIiksIHNvIGEgY3JhZnRlZCBpbnRlcnZhbCBjb3VsZFxuICAgICAgICAvLyBvdGhlcndpc2UgYnlwYXNzIHRoZSBndWFyZCDigJQgYW5kIHJlcXVpcmUgYSBzdHJpbmcgdmFsdWUuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbnRlcnZhbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgKHR5cGVvZiBpbnRlcnZhbCAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSU5URVJWQUxfTUlMTElTLCBpbnRlcnZhbCkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGludGVydmFsIFwiJHtTdHJpbmcoaW50ZXJ2YWwpfVwiLiBNdXN0IGJlIG9uZSBvZjogJHtPYmplY3Qua2V5cyhcbiAgICAgICAgICAgICAgSU5URVJWQUxfTUlMTElTXG4gICAgICAgICAgICApLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZpc1N0YXRlID0gY3R4LmdldFZpc1N0YXRlKCk7XG4gICAgICAgIGNvbnN0IGRhdGFzZXRzOiBEYXRhc2V0cyA9IHZpc1N0YXRlLmRhdGFzZXRzO1xuXG4gICAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IE9iamVjdC5rZXlzKGRhdGFzZXRzKS5maW5kKFxuICAgICAgICAgIGRhdGFJZCA9PiBkYXRhc2V0c1tkYXRhSWRdLmxhYmVsID09PSBkYXRhc2V0TmFtZSB8fCBkYXRhSWQgPT09IGRhdGFzZXROYW1lXG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YXNldElkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhc2V0ICR7ZGF0YXNldE5hbWV9IG5vdCBmb3VuZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZGF0YXNldElkXSBhcyBLZXBsZXJUYWJsZTtcblxuICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZCA9IGRhdGFzZXQuZmllbGRzPy5maW5kKGYgPT4gZi5uYW1lID09PSBkYXRlVGltZUNvbHVtbik7XG4gICAgICAgIGlmICghZmlsdGVyRmllbGQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ29sdW1uICR7ZGF0ZVRpbWVDb2x1bW59IG5vdCBmb3VuZCBpbiBkYXRhc2V0ICR7ZGF0YXNldE5hbWV9LiBBdmFpbGFibGU6ICR7ZGF0YXNldC5maWVsZHNcbiAgICAgICAgICAgICAgPy5tYXAoZiA9PiBmLm5hbWUpXG4gICAgICAgICAgICAgIC5qb2luKCcsICcpfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJGaWVsZC50eXBlICE9PSAndGltZXN0YW1wJyAmJiBmaWx0ZXJGaWVsZC50eXBlICE9PSAnZGF0ZScpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ29sdW1uICR7ZGF0ZVRpbWVDb2x1bW59IGlzIG9mIHR5cGUgXCIke2ZpbHRlckZpZWxkLnR5cGV9XCIsIG5vdCB0aW1lc3RhbXAvZGF0ZS4gQnVpbGQgYSByZWFsIFRJTUVTVEFNUCBjb2x1bW4gZmlyc3QgKEtlcGxlci5nbCBjYW5ub3QgYW5pbWF0ZSBvbiBpbnRlZ2VyL3N0cmluZyBlcG9jaHMpLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXhwbGljaXRseSB0eXBlZDogYFZpc1N0YXRlLmZpbHRlcnNgIGlzIHVudHlwZWQgKGluZGV4IHNpZ25hdHVyZSkgYW5kXG4gICAgICAgIC8vIHN0cmljdCBjb25zdW1lcnMgKGUuZy4ga2VwbGVyLWFzc2lzdGFudCwgd2hpY2ggdmVuZG9ycyB0aGlzIG1vZHVsZSlcbiAgICAgICAgLy8gd291bGQgb3RoZXJ3aXNlIGZsYWcgdGhlIGAuZmluZEluZGV4KGYgPT4g4oCmKWAgY2FsbGJhY2sgYXMgaW1wbGljaXQgYW55LlxuICAgICAgICBjb25zdCBmaWx0ZXJzOiBhbnlbXSA9IHZpc1N0YXRlLmZpbHRlcnMgPz8gW107XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRmlsdGVySWR4ID0gZmlsdGVycy5maW5kSW5kZXgoXG4gICAgICAgICAgZiA9PlxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZi5kYXRhSWQpID8gZi5kYXRhSWQuaW5jbHVkZXMoZGF0YXNldElkKSA6IGYuZGF0YUlkID09PSBkYXRhc2V0SWQpICYmXG4gICAgICAgICAgICAoQXJyYXkuaXNBcnJheShmLm5hbWUpID8gZi5uYW1lLmluY2x1ZGVzKGRhdGVUaW1lQ29sdW1uKSA6IGYubmFtZSA9PT0gZGF0ZVRpbWVDb2x1bW4pXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IGZpbHRlcklkeDogbnVtYmVyO1xuICAgICAgICBsZXQgZmlsdGVySWQ6IHN0cmluZztcblxuICAgICAgICBpZiAoZXhpc3RpbmdGaWx0ZXJJZHggPj0gMCkge1xuICAgICAgICAgIGZpbHRlcklkeCA9IGV4aXN0aW5nRmlsdGVySWR4O1xuICAgICAgICAgIGZpbHRlcklkID0gZmlsdGVyc1tleGlzdGluZ0ZpbHRlcklkeF0uaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVySWR4ID0gZmlsdGVycy5sZW5ndGg7XG4gICAgICAgICAgY3R4LmRpc3BhdGNoKGFkZEZpbHRlcihkYXRhc2V0SWQpKTtcbiAgICAgICAgICBjdHguZGlzcGF0Y2goc2V0RmlsdGVyKGZpbHRlcklkeCwgJ25hbWUnLCBkYXRlVGltZUNvbHVtbikpO1xuICAgICAgICAgIC8vIFBvbGwgZm9yIHRoZSBmaWx0ZXIgZW50cnkgdG8gYXBwZWFyIGluc3RlYWQgb2YgYSBmaXhlZCBzbGVlcDogb25cbiAgICAgICAgICAvLyBzbG93ZXIgZGV2aWNlcyB0aGUgZmlsdGVyIChhbmQgaXRzIGlkKSBtYXkgbm90IGJlIGF2YWlsYWJsZSB5ZXQsXG4gICAgICAgICAgLy8gYW5kIGEgZml4ZWQgZGVsYXkgd291bGQgbGVhdmUgZmlsdGVySWQgYXMgYW4gZW1wdHkgc3RyaW5nLCBtYWtpbmdcbiAgICAgICAgICAvLyB0aGUgbGF0ZXIgc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93KHtpZDogZmlsdGVySWQsIC4uLn0pIGJlaGF2ZVxuICAgICAgICAgIC8vIHVucHJlZGljdGFibHkuXG4gICAgICAgICAgZmlsdGVySWQgPSAnJztcbiAgICAgICAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDEwICYmICFmaWx0ZXJJZDsgYXR0ZW1wdCsrKSB7XG4gICAgICAgICAgICBhd2FpdCBzbGVlcCgxMDApO1xuICAgICAgICAgICAgZmlsdGVySWQgPSBjdHguZ2V0VmlzU3RhdGUoKS5maWx0ZXJzPy5bZmlsdGVySWR4XT8uaWQgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlsdGVySWQpIHtcbiAgICAgICAgICAgIC8vIEZhaWwgZmFzdCBpbnN0ZWFkIG9mIHByb2NlZWRpbmcgd2l0aCBhbiBlbXB0eSBpZCDigJQgdGhlIGxhdGVyXG4gICAgICAgICAgICAvLyBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3coe2lkOiBmaWx0ZXJJZCwgLi4ufSkgd291bGQgbm8tb3Agb3JcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgd3JvbmcgZmlsdGVyLlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRoZSB0aW1lIGZpbHRlciBvbiBjb2x1bW4gXCIke2RhdGVUaW1lQ29sdW1ufVwiIHRvIGJlIGNyZWF0ZWQuIFBsZWFzZSB0cnkgYWdhaW4uYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50RmlsdGVycyA9IGN0eC5nZXRWaXNTdGF0ZSgpLmZpbHRlcnMgPz8gW107XG4gICAgICAgIGNvbnN0IHRhcmdldEZpbHRlciA9IGN1cnJlbnRGaWx0ZXJzW2ZpbHRlcklkeF07XG5cbiAgICAgICAgbGV0IHJlc29sdmVkSW50ZXJ2YWw6IEludGVydmFsS2V5IHwgc3RyaW5nIHwgdW5kZWZpbmVkID0gaW50ZXJ2YWw7XG5cbiAgICAgICAgaWYgKHRhcmdldEZpbHRlcj8uZG9tYWluICYmIHRhcmdldEZpbHRlci5kb21haW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgaWYgKCFyZXNvbHZlZEludGVydmFsKSB7XG4gICAgICAgICAgICBsZXQgbWFwcGVkVmFsdWVzOiBudW1iZXJbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHM/LmluZGV4T2YoZmlsdGVyRmllbGQpID8/IC0xO1xuICAgICAgICAgICAgaWYgKGZpZWxkSWR4ID49IDAgJiYgZGF0YXNldC5kYXRhQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBkYXRhc2V0LmRhdGFDb250YWluZXIubnVtUm93cygpO1xuICAgICAgICAgICAgICBtYXBwZWRWYWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgLy8gU2FtcGxlIGEgYm91bmRlZCBudW1iZXIgb2Ygcm93cyDigJQgaXRlcmF0aW5nIGV2ZXJ5IHJvdyBjYW4gZnJlZXplXG4gICAgICAgICAgICAgIC8vIHRoZSBVSSB0aHJlYWQgb24gbGFyZ2UgZGF0YXNldHMsIGFuZCBhIHNhbXBsZSBpcyBlbm91Z2ggZm9yIGFcbiAgICAgICAgICAgICAgLy8gcmVhc29uYWJsZSBpbnRlcnZhbCBlc3RpbWF0ZS5cbiAgICAgICAgICAgICAgY29uc3QgTUFYX1NBTVBMRVMgPSAxMDAwO1xuICAgICAgICAgICAgICBjb25zdCBzdGVwID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihyb3dzIC8gTUFYX1NBTVBMRVMpKTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpICs9IHN0ZXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBkYXRhc2V0LmRhdGFDb250YWluZXIudmFsdWVBdChpLCBmaWVsZElkeCk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cyA9IHR5cGVvZiB2YWwgPT09ICdudW1iZXInID8gdmFsIDogbmV3IERhdGUodmFsIGFzIGFueSkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTih0cykpIG1hcHBlZFZhbHVlcy5wdXNoKHRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmVkSW50ZXJ2YWwgPSBkZXRlY3RJbnRlcnZhbEZyb21Eb21haW4oXG4gICAgICAgICAgICAgIHRhcmdldEZpbHRlci5kb21haW4gYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgbWFwcGVkVmFsdWVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN0eC5kaXNwYXRjaChzZXRGaWx0ZXIoZmlsdGVySWR4LCAncGxvdFR5cGUnLCB7aW50ZXJ2YWw6IHJlc29sdmVkSW50ZXJ2YWx9KSk7XG4gICAgICAgICAgY3R4LmRpc3BhdGNoKHNldEZpbHRlckFuaW1hdGlvbldpbmRvdyh7aWQ6IGZpbHRlcklkLCBhbmltYXRpb25XaW5kb3c6ICdmcmVlJ30pKTtcblxuICAgICAgICAgIC8vIFBvbGwgZm9yIHRpbWVCaW5zIHRvIGJlY29tZSBhdmFpbGFibGUgKGtlcGxlciBjb21wdXRlcyB0aGVtIGFzeW5jKS5cbiAgICAgICAgICBsZXQgZGF0YXNldEJpbnM6IHt4MDogbnVtYmVyOyB4MTogbnVtYmVyfVtdIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgMTA7IGF0dGVtcHQrKykge1xuICAgICAgICAgICAgYXdhaXQgc2xlZXAoMjAwKTtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXIgPSBjdHguZ2V0VmlzU3RhdGUoKS5maWx0ZXJzPy5bZmlsdGVySWR4XTtcbiAgICAgICAgICAgIGlmICh1cGRhdGVkRmlsdGVyPy5kb21haW4gJiYgdXBkYXRlZEZpbHRlci5kb21haW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgIC8vIHRpbWVCaW5zIGlzIGtleWVkIGJ5IGRhdGFzZXQgaWQsIHRoZW4gYnkgaW50ZXJ2YWw6XG4gICAgICAgICAgICAgIC8vIHtbZGF0YUlkXToge1tpbnRlcnZhbF06IGJpbnNbXX19LiBMb29rIHVwIHRoZSBiaW5zIGZvciBUSElTXG4gICAgICAgICAgICAgIC8vIGZpbHRlcidzIGRhdGFzZXQg4oCUIGdyYWJiaW5nIHRoZSBmaXJzdCBlbnRyeSB2aWFcbiAgICAgICAgICAgICAgLy8gT2JqZWN0LnZhbHVlcyh0aW1lQmlucylbMF0gd291bGQgcGljayB0aGUgd3JvbmcgZGF0YXNldCdzIGJpbnNcbiAgICAgICAgICAgICAgLy8gd2hlbiBtdWx0aXBsZSBkYXRhc2V0cy9maWx0ZXJzIGV4aXN0LCBhbmltYXRpbmcgYWdhaW5zdCB0aGVcbiAgICAgICAgICAgICAgLy8gd3JvbmcgdGltZSB3aW5kb3cuXG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVCaW5zID0gKHVwZGF0ZWRGaWx0ZXIgYXMgYW55KS50aW1lQmlucztcbiAgICAgICAgICAgICAgY29uc3QgYmlucyA9IHRpbWVCaW5zPy5bZGF0YXNldElkXT8uW3Jlc29sdmVkSW50ZXJ2YWwgYXMgc3RyaW5nXTtcbiAgICAgICAgICAgICAgaWYgKGJpbnMgJiYgYmlucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZGF0YXNldEJpbnMgPSBiaW5zO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZmluYWxGaWx0ZXIgPSBjdHguZ2V0VmlzU3RhdGUoKS5maWx0ZXJzPy5bZmlsdGVySWR4XTtcbiAgICAgICAgICBpZiAoZmluYWxGaWx0ZXI/LmRvbWFpbiAmJiBmaW5hbEZpbHRlci5kb21haW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBpZiAoZGF0YXNldEJpbnMgJiYgZGF0YXNldEJpbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjdHguZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgc2V0RmlsdGVyQW5pbWF0aW9uVGltZShmaWx0ZXJJZHgsICd2YWx1ZScsIFtkYXRhc2V0Qmluc1swXS54MCwgZGF0YXNldEJpbnNbMF0ueDFdKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9tYWluU3RhcnQgPSAoZmluYWxGaWx0ZXIuZG9tYWluIGFzIG51bWJlcltdKVswXTtcbiAgICAgICAgICAgICAgY29uc3Qgd2luZG93U2l6ZSA9IElOVEVSVkFMX01JTExJU1tyZXNvbHZlZEludGVydmFsIGFzIEludGVydmFsS2V5XSA/PyBNSUxMSVNfWUVBUjtcbiAgICAgICAgICAgICAgY3R4LmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIHNldEZpbHRlckFuaW1hdGlvblRpbWUoZmlsdGVySWR4LCAndmFsdWUnLCBbZG9tYWluU3RhcnQsIGRvbWFpblN0YXJ0ICsgd2luZG93U2l6ZV0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGNvbW1hbmRJZDogYWRkVGltZUZpbHRlckNvbW1hbmRJZCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBkZXRhaWxzOiBgVGltZSBmaWx0ZXIgYWRkZWQgb24gY29sdW1uIFwiJHtkYXRlVGltZUNvbHVtbn1cIiBmb3IgZGF0YXNldCBcIiR7ZGF0YXNldE5hbWV9XCIgKGludGVydmFsOiAke1xuICAgICAgICAgICAgICByZXNvbHZlZEludGVydmFsID8/ICdhdXRvJ1xuICAgICAgICAgICAgfSwgZmlsdGVyIGluZGV4OiAke2ZpbHRlcklkeH0pLiBUaGUgdGltZSBjb250cm9sbGVyIGlzIG5vdyB2aXNpYmxlIGF0IHRoZSBib3R0b20gb2YgdGhlIG1hcC5gLFxuICAgICAgICAgICAgZmlsdGVySW5kZXg6IGZpbHRlcklkeCxcbiAgICAgICAgICAgIGludGVydmFsOiByZXNvbHZlZEludGVydmFsXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBjb21tYW5kSWQ6IGFkZFRpbWVGaWx0ZXJDb21tYW5kSWQsXG4gICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluc3RydWN0aW9uOlxuICAgICAgICAgICAgICAnQ2hlY2sgdGhhdCB0aGUgZGF0YXNldCBleGlzdHMsIHRoZSBjb2x1bW4gaXMgYSBUSU1FU1RBTVAvREFURSwgYW5kIGEgbGF5ZXIgZm9yIHRoZSBkYXRhc2V0IGlzIGFscmVhZHkgb24gdGhlIG1hcC4gRG8gbm90IHJldHJ5IG1vcmUgdGhhbiBvbmNlLidcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUlBLElBQUFBLElBQUEsR0FBQUMsT0FBQTtBQUdBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQVBBO0FBQ0E7O0FBd0JB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
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getToggleTimeFilterCommand = getToggleTimeFilterCommand;
8
+ exports.toggleTimeFilterCommandId = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _zod = require("zod");
12
+ var _actions = require("@kepler.gl/actions");
13
+ // SPDX-License-Identifier: MIT
14
+ // Copyright contributors to the kepler.gl project
15
+
16
+ var toggleTimeFilterCommandId = exports.toggleTimeFilterCommandId = 'map.toggle-time-filter';
17
+ function getToggleTimeFilterCommand(ctx) {
18
+ return {
19
+ id: toggleTimeFilterCommandId,
20
+ name: 'Toggle time controller',
21
+ group: 'Map',
22
+ description: "Show or hide the enlarged time controller at the bottom of the map.\n\nA time filter must already exist on the map (created via map.add-time-filter).\n\n- action: \"show\" \u2014 enlarge the time controller so it is visible at the bottom of the map.\n- action: \"hide\" \u2014 collapse the time controller back to the side panel.",
23
+ metadata: {
24
+ readOnly: false,
25
+ riskLevel: 'low',
26
+ idempotent: true
27
+ },
28
+ inputSchema: _zod.z.object({
29
+ action: _zod.z["enum"](['show', 'hide']).describe('"show" enlarges the time controller at the bottom of the map; "hide" collapses it to the side panel.'),
30
+ filterIndex: _zod.z.number().optional().describe('Index of the time filter to toggle. If omitted, the first time-range filter found is used.')
31
+ }),
32
+ execute: function () {
33
+ var _execute = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(_execCtx, input) {
34
+ var _ref, action, filterIndex, _visState$filters, visState, filters, targetIdx, found, view;
35
+ return _regenerator["default"].wrap(function _callee$(_context) {
36
+ while (1) switch (_context.prev = _context.next) {
37
+ case 0:
38
+ _ref = input !== null && input !== void 0 ? input : {}, action = _ref.action, filterIndex = _ref.filterIndex;
39
+ _context.prev = 1;
40
+ if (!(action !== 'show' && action !== 'hide')) {
41
+ _context.next = 4;
42
+ break;
43
+ }
44
+ return _context.abrupt("return", {
45
+ success: false,
46
+ commandId: toggleTimeFilterCommandId,
47
+ error: "Invalid action \"".concat(String(action), "\". Must be \"show\" or \"hide\"."),
48
+ data: {
49
+ instruction: 'Pass action: "show" to enlarge the time controller, or "hide" to collapse it.'
50
+ }
51
+ });
52
+ case 4:
53
+ if (!(filterIndex !== undefined && (!Number.isInteger(filterIndex) || filterIndex < 0))) {
54
+ _context.next = 6;
55
+ break;
56
+ }
57
+ return _context.abrupt("return", {
58
+ success: false,
59
+ commandId: toggleTimeFilterCommandId,
60
+ error: "Invalid filterIndex \"".concat(String(filterIndex), "\". Must be a non-negative integer."),
61
+ data: {
62
+ instruction: 'Pass filterIndex as a non-negative integer, or omit it to auto-detect the first time filter.'
63
+ }
64
+ });
65
+ case 6:
66
+ visState = ctx.getVisState();
67
+ filters = (_visState$filters = visState.filters) !== null && _visState$filters !== void 0 ? _visState$filters : [];
68
+ if (!(filters.length === 0)) {
69
+ _context.next = 10;
70
+ break;
71
+ }
72
+ return _context.abrupt("return", {
73
+ success: false,
74
+ commandId: toggleTimeFilterCommandId,
75
+ error: 'No filters found on the map. Add a time filter first via map.add-time-filter.',
76
+ data: {
77
+ instruction: 'Call map.add-time-filter before map.toggle-time-filter.'
78
+ }
79
+ });
80
+ case 10:
81
+ if (!(filterIndex === undefined)) {
82
+ _context.next = 17;
83
+ break;
84
+ }
85
+ found = filters.findIndex(function (f) {
86
+ return f.type === 'timeRange' || f.type === 'time';
87
+ }); // Don't fall back to index 0 when no time filter exists — toggling
88
+ // the first (non-time) filter would mutate an unrelated filter,
89
+ // contradicting the "a time filter must already exist" contract.
90
+ if (!(found < 0)) {
91
+ _context.next = 14;
92
+ break;
93
+ }
94
+ return _context.abrupt("return", {
95
+ success: false,
96
+ commandId: toggleTimeFilterCommandId,
97
+ error: 'No time filter found on the map. Add a time filter first via map.add-time-filter.',
98
+ data: {
99
+ instruction: 'Call map.add-time-filter before map.toggle-time-filter.'
100
+ }
101
+ });
102
+ case 14:
103
+ targetIdx = found;
104
+ _context.next = 18;
105
+ break;
106
+ case 17:
107
+ targetIdx = filterIndex;
108
+ case 18:
109
+ if (!(targetIdx < 0 || targetIdx >= filters.length)) {
110
+ _context.next = 20;
111
+ break;
112
+ }
113
+ return _context.abrupt("return", {
114
+ success: false,
115
+ commandId: toggleTimeFilterCommandId,
116
+ error: "Filter index ".concat(targetIdx, " is out of range. There are ").concat(filters.length, " filter(s)."),
117
+ data: {
118
+ instruction: "Use a filterIndex between 0 and ".concat(filters.length - 1, ".")
119
+ }
120
+ });
121
+ case 20:
122
+ view = action === 'show' ? 'enlarged' : 'side';
123
+ ctx.dispatch((0, _actions.setFilterView)(targetIdx, view));
124
+ return _context.abrupt("return", {
125
+ success: true,
126
+ commandId: toggleTimeFilterCommandId,
127
+ data: {
128
+ details: action === 'show' ? "Time filter at index ".concat(targetIdx, " is now enlarged. The time controller is visible at the bottom of the map.") : "Time filter at index ".concat(targetIdx, " has been collapsed back to the side panel.")
129
+ }
130
+ });
131
+ case 25:
132
+ _context.prev = 25;
133
+ _context.t0 = _context["catch"](1);
134
+ return _context.abrupt("return", {
135
+ success: false,
136
+ commandId: toggleTimeFilterCommandId,
137
+ error: _context.t0 instanceof Error ? _context.t0.message : 'Unknown error',
138
+ data: {
139
+ instruction: 'Check that a time filter exists. If the error persists, ask the user to try with different parameters.'
140
+ }
141
+ });
142
+ case 28:
143
+ case "end":
144
+ return _context.stop();
145
+ }
146
+ }, _callee, null, [[1, 25]]);
147
+ }));
148
+ function execute(_x, _x2) {
149
+ return _execute.apply(this, arguments);
150
+ }
151
+ return execute;
152
+ }()
153
+ };
154
+ }
155
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfem9kIiwicmVxdWlyZSIsIl9hY3Rpb25zIiwidG9nZ2xlVGltZUZpbHRlckNvbW1hbmRJZCIsImV4cG9ydHMiLCJnZXRUb2dnbGVUaW1lRmlsdGVyQ29tbWFuZCIsImN0eCIsImlkIiwibmFtZSIsImdyb3VwIiwiZGVzY3JpcHRpb24iLCJtZXRhZGF0YSIsInJlYWRPbmx5Iiwicmlza0xldmVsIiwiaWRlbXBvdGVudCIsImlucHV0U2NoZW1hIiwieiIsIm9iamVjdCIsImFjdGlvbiIsImRlc2NyaWJlIiwiZmlsdGVySW5kZXgiLCJudW1iZXIiLCJvcHRpb25hbCIsImV4ZWN1dGUiLCJfZXhlY3V0ZSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX2V4ZWNDdHgiLCJpbnB1dCIsIl9yZWYiLCJfdmlzU3RhdGUkZmlsdGVycyIsInZpc1N0YXRlIiwiZmlsdGVycyIsInRhcmdldElkeCIsImZvdW5kIiwidmlldyIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJhYnJ1cHQiLCJzdWNjZXNzIiwiY29tbWFuZElkIiwiZXJyb3IiLCJjb25jYXQiLCJTdHJpbmciLCJkYXRhIiwiaW5zdHJ1Y3Rpb24iLCJ1bmRlZmluZWQiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJnZXRWaXNTdGF0ZSIsImxlbmd0aCIsImZpbmRJbmRleCIsImYiLCJ0eXBlIiwiZGlzcGF0Y2giLCJzZXRGaWx0ZXJWaWV3IiwiZGV0YWlscyIsInQwIiwiRXJyb3IiLCJtZXNzYWdlIiwic3RvcCIsIl94IiwiX3gyIiwiYXBwbHkiLCJhcmd1bWVudHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvdG9nZ2xlLXRpbWUtZmlsdGVyLWNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHR5cGUge1Jvb21Db21tYW5kfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB7c2V0RmlsdGVyVmlld30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB0eXBlIHtLZXBsZXJDb250ZXh0fSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IHRvZ2dsZVRpbWVGaWx0ZXJDb21tYW5kSWQgPSAnbWFwLnRvZ2dsZS10aW1lLWZpbHRlcicgYXMgY29uc3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2dnbGVUaW1lRmlsdGVyQ29tbWFuZChjdHg6IEtlcGxlckNvbnRleHQpOiBSb29tQ29tbWFuZCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHRvZ2dsZVRpbWVGaWx0ZXJDb21tYW5kSWQsXG4gICAgbmFtZTogJ1RvZ2dsZSB0aW1lIGNvbnRyb2xsZXInLFxuICAgIGdyb3VwOiAnTWFwJyxcbiAgICBkZXNjcmlwdGlvbjogYFNob3cgb3IgaGlkZSB0aGUgZW5sYXJnZWQgdGltZSBjb250cm9sbGVyIGF0IHRoZSBib3R0b20gb2YgdGhlIG1hcC5cblxuQSB0aW1lIGZpbHRlciBtdXN0IGFscmVhZHkgZXhpc3Qgb24gdGhlIG1hcCAoY3JlYXRlZCB2aWEgbWFwLmFkZC10aW1lLWZpbHRlcikuXG5cbi0gYWN0aW9uOiBcInNob3dcIiDigJQgZW5sYXJnZSB0aGUgdGltZSBjb250cm9sbGVyIHNvIGl0IGlzIHZpc2libGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWFwLlxuLSBhY3Rpb246IFwiaGlkZVwiIOKAlCBjb2xsYXBzZSB0aGUgdGltZSBjb250cm9sbGVyIGJhY2sgdG8gdGhlIHNpZGUgcGFuZWwuYCxcbiAgICBtZXRhZGF0YToge3JlYWRPbmx5OiBmYWxzZSwgcmlza0xldmVsOiAnbG93JywgaWRlbXBvdGVudDogdHJ1ZX0sXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGFjdGlvbjogelxuICAgICAgICAuZW51bShbJ3Nob3cnLCAnaGlkZSddKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgJ1wic2hvd1wiIGVubGFyZ2VzIHRoZSB0aW1lIGNvbnRyb2xsZXIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWFwOyBcImhpZGVcIiBjb2xsYXBzZXMgaXQgdG8gdGhlIHNpZGUgcGFuZWwuJ1xuICAgICAgICApLFxuICAgICAgZmlsdGVySW5kZXg6IHpcbiAgICAgICAgLm51bWJlcigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICAnSW5kZXggb2YgdGhlIHRpbWUgZmlsdGVyIHRvIHRvZ2dsZS4gSWYgb21pdHRlZCwgdGhlIGZpcnN0IHRpbWUtcmFuZ2UgZmlsdGVyIGZvdW5kIGlzIHVzZWQuJ1xuICAgICAgICApXG4gICAgfSkgYXMgYW55LFxuICAgIGV4ZWN1dGU6IGFzeW5jIChfZXhlY0N0eCwgaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHthY3Rpb24sIGZpbHRlckluZGV4fSA9IChpbnB1dCA/PyB7fSkgYXMge1xuICAgICAgICBhY3Rpb246ICdzaG93JyB8ICdoaWRlJztcbiAgICAgICAgZmlsdGVySW5kZXg/OiBudW1iZXI7XG4gICAgICB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUnVudGltZSBndWFyZDogdGhlIGJyaWRnZS93ZWJNQ1AgY2FsbCBleGVjdXRlIGRpcmVjdGx5IHdpdGhvdXQgem9kXG4gICAgICAgIC8vIHBhcnNpbmcsIHNvIGEgbWlzc2luZy9pbnZhbGlkIGFjdGlvbiBtdXN0IG5vdCBzaWxlbnRseSBmYWxsIGJhY2sgdG9cbiAgICAgICAgLy8gJ3NpZGUnICh3aGljaCB3b3VsZCBoaWRlIHRoZSBjb250cm9sbGVyIOKAlCBhIHN1cnByaXNpbmcgbXV0YXRpb24pLlxuICAgICAgICBpZiAoYWN0aW9uICE9PSAnc2hvdycgJiYgYWN0aW9uICE9PSAnaGlkZScpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBjb21tYW5kSWQ6IHRvZ2dsZVRpbWVGaWx0ZXJDb21tYW5kSWQsXG4gICAgICAgICAgICBlcnJvcjogYEludmFsaWQgYWN0aW9uIFwiJHtTdHJpbmcoYWN0aW9uKX1cIi4gTXVzdCBiZSBcInNob3dcIiBvciBcImhpZGVcIi5gLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBpbnN0cnVjdGlvbjpcbiAgICAgICAgICAgICAgICAnUGFzcyBhY3Rpb246IFwic2hvd1wiIHRvIGVubGFyZ2UgdGhlIHRpbWUgY29udHJvbGxlciwgb3IgXCJoaWRlXCIgdG8gY29sbGFwc2UgaXQuJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUnVudGltZSBndWFyZDogdGhlIGJyaWRnZS93ZWJNQ1AgY2FsbCBleGVjdXRlIHdpdGhvdXQgem9kIHBhcnNpbmcsIHNvXG4gICAgICAgIC8vIGEgc3RyaW5nL2Zsb2F0IGZpbHRlckluZGV4IG11c3Qgbm90IHNsaXAgdGhyb3VnaCBhbmQgYmUgZGlzcGF0Y2hlZFxuICAgICAgICAvLyBpbnRvIHNldEZpbHRlclZpZXcgKGJyZWFraW5nIHJlZHVjZXIgbG9naWMgLyB0b2dnbGluZyB0aGUgd3JvbmdcbiAgICAgICAgLy8gZmlsdGVyKS4gUmVqZWN0IGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBub24tbmVnYXRpdmUgaW50ZWdlci5cbiAgICAgICAgaWYgKGZpbHRlckluZGV4ICE9PSB1bmRlZmluZWQgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpbHRlckluZGV4KSB8fCBmaWx0ZXJJbmRleCA8IDApKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgY29tbWFuZElkOiB0b2dnbGVUaW1lRmlsdGVyQ29tbWFuZElkLFxuICAgICAgICAgICAgZXJyb3I6IGBJbnZhbGlkIGZpbHRlckluZGV4IFwiJHtTdHJpbmcoZmlsdGVySW5kZXgpfVwiLiBNdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuYCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb246XG4gICAgICAgICAgICAgICAgJ1Bhc3MgZmlsdGVySW5kZXggYXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgb3Igb21pdCBpdCB0byBhdXRvLWRldGVjdCB0aGUgZmlyc3QgdGltZSBmaWx0ZXIuJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aXNTdGF0ZSA9IGN0eC5nZXRWaXNTdGF0ZSgpO1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdmlzU3RhdGUuZmlsdGVycyA/PyBbXTtcblxuICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBjb21tYW5kSWQ6IHRvZ2dsZVRpbWVGaWx0ZXJDb21tYW5kSWQsXG4gICAgICAgICAgICBlcnJvcjogJ05vIGZpbHRlcnMgZm91bmQgb24gdGhlIG1hcC4gQWRkIGEgdGltZSBmaWx0ZXIgZmlyc3QgdmlhIG1hcC5hZGQtdGltZS1maWx0ZXIuJyxcbiAgICAgICAgICAgIGRhdGE6IHtpbnN0cnVjdGlvbjogJ0NhbGwgbWFwLmFkZC10aW1lLWZpbHRlciBiZWZvcmUgbWFwLnRvZ2dsZS10aW1lLWZpbHRlci4nfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGFyZ2V0SWR4OiBudW1iZXI7XG4gICAgICAgIGlmIChmaWx0ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSBmaWx0ZXJzLmZpbmRJbmRleCgoZjogYW55KSA9PiBmLnR5cGUgPT09ICd0aW1lUmFuZ2UnIHx8IGYudHlwZSA9PT0gJ3RpbWUnKTtcbiAgICAgICAgICAvLyBEb24ndCBmYWxsIGJhY2sgdG8gaW5kZXggMCB3aGVuIG5vIHRpbWUgZmlsdGVyIGV4aXN0cyDigJQgdG9nZ2xpbmdcbiAgICAgICAgICAvLyB0aGUgZmlyc3QgKG5vbi10aW1lKSBmaWx0ZXIgd291bGQgbXV0YXRlIGFuIHVucmVsYXRlZCBmaWx0ZXIsXG4gICAgICAgICAgLy8gY29udHJhZGljdGluZyB0aGUgXCJhIHRpbWUgZmlsdGVyIG11c3QgYWxyZWFkeSBleGlzdFwiIGNvbnRyYWN0LlxuICAgICAgICAgIGlmIChmb3VuZCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBjb21tYW5kSWQ6IHRvZ2dsZVRpbWVGaWx0ZXJDb21tYW5kSWQsXG4gICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICdObyB0aW1lIGZpbHRlciBmb3VuZCBvbiB0aGUgbWFwLiBBZGQgYSB0aW1lIGZpbHRlciBmaXJzdCB2aWEgbWFwLmFkZC10aW1lLWZpbHRlci4nLFxuICAgICAgICAgICAgICBkYXRhOiB7aW5zdHJ1Y3Rpb246ICdDYWxsIG1hcC5hZGQtdGltZS1maWx0ZXIgYmVmb3JlIG1hcC50b2dnbGUtdGltZS1maWx0ZXIuJ31cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhcmdldElkeCA9IGZvdW5kO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldElkeCA9IGZpbHRlckluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldElkeCA8IDAgfHwgdGFyZ2V0SWR4ID49IGZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgY29tbWFuZElkOiB0b2dnbGVUaW1lRmlsdGVyQ29tbWFuZElkLFxuICAgICAgICAgICAgZXJyb3I6IGBGaWx0ZXIgaW5kZXggJHt0YXJnZXRJZHh9IGlzIG91dCBvZiByYW5nZS4gVGhlcmUgYXJlICR7ZmlsdGVycy5sZW5ndGh9IGZpbHRlcihzKS5gLFxuICAgICAgICAgICAgZGF0YToge2luc3RydWN0aW9uOiBgVXNlIGEgZmlsdGVySW5kZXggYmV0d2VlbiAwIGFuZCAke2ZpbHRlcnMubGVuZ3RoIC0gMX0uYH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlldyA9IGFjdGlvbiA9PT0gJ3Nob3cnID8gJ2VubGFyZ2VkJyA6ICdzaWRlJztcbiAgICAgICAgY3R4LmRpc3BhdGNoKHNldEZpbHRlclZpZXcodGFyZ2V0SWR4LCB2aWV3IGFzIGFueSkpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBjb21tYW5kSWQ6IHRvZ2dsZVRpbWVGaWx0ZXJDb21tYW5kSWQsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZGV0YWlsczpcbiAgICAgICAgICAgICAgYWN0aW9uID09PSAnc2hvdydcbiAgICAgICAgICAgICAgICA/IGBUaW1lIGZpbHRlciBhdCBpbmRleCAke3RhcmdldElkeH0gaXMgbm93IGVubGFyZ2VkLiBUaGUgdGltZSBjb250cm9sbGVyIGlzIHZpc2libGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWFwLmBcbiAgICAgICAgICAgICAgICA6IGBUaW1lIGZpbHRlciBhdCBpbmRleCAke3RhcmdldElkeH0gaGFzIGJlZW4gY29sbGFwc2VkIGJhY2sgdG8gdGhlIHNpZGUgcGFuZWwuYFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgY29tbWFuZElkOiB0b2dnbGVUaW1lRmlsdGVyQ29tbWFuZElkLFxuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbjpcbiAgICAgICAgICAgICAgJ0NoZWNrIHRoYXQgYSB0aW1lIGZpbHRlciBleGlzdHMuIElmIHRoZSBlcnJvciBwZXJzaXN0cywgYXNrIHRoZSB1c2VyIHRvIHRyeSB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzLidcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBSUEsSUFBQUEsSUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBTEE7QUFDQTs7QUFPTyxJQUFNRSx5QkFBeUIsR0FBQUMsT0FBQSxDQUFBRCx5QkFBQSxHQUFHLHdCQUFpQztBQUVuRSxTQUFTRSwwQkFBMEJBLENBQUNDLEdBQWtCLEVBQWU7RUFDMUUsT0FBTztJQUNMQyxFQUFFLEVBQUVKLHlCQUF5QjtJQUM3QkssSUFBSSxFQUFFLHdCQUF3QjtJQUM5QkMsS0FBSyxFQUFFLEtBQUs7SUFDWkMsV0FBVyw2VUFLeUQ7SUFDcEVDLFFBQVEsRUFBRTtNQUFDQyxRQUFRLEVBQUUsS0FBSztNQUFFQyxTQUFTLEVBQUUsS0FBSztNQUFFQyxVQUFVLEVBQUU7SUFBSSxDQUFDO0lBQy9EQyxXQUFXLEVBQUVDLE1BQUMsQ0FBQ0MsTUFBTSxDQUFDO01BQ3BCQyxNQUFNLEVBQUVGLE1BQUMsUUFDRixDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQ3RCRyxRQUFRLENBQ1Asc0dBQ0YsQ0FBQztNQUNIQyxXQUFXLEVBQUVKLE1BQUMsQ0FDWEssTUFBTSxDQUFDLENBQUMsQ0FDUkMsUUFBUSxDQUFDLENBQUMsQ0FDVkgsUUFBUSxDQUNQLDRGQUNGO0lBQ0osQ0FBQyxDQUFRO0lBQ1RJLE9BQU87TUFBQSxJQUFBQyxRQUFBLE9BQUFDLGtCQUFBLDBC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
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB0eXBlIHtUYWJsZSBhcyBBcnJvd1RhYmxlfSBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IHR5cGUge1pvZFR5cGV9IGZyb20gJ3pvZCc7XG5pbXBvcnQgdHlwZSB7RGF0YXNldHN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHR5cGUge0tlcGxlckRpc3BhdGNofSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBTdHJ1Y3R1cmFsIHN1YnNldCBvZiBgQHNxbHJvb21zL3Jvb20tc3RvcmVgJ3MgYFJvb21Db21tYW5kYCDigJQgZW5vdWdoIGZvciB0aGVcbiAqIG1hcC4qIGNvbW1hbmQgZmFjdG9yaWVzIGFuZCBmb3IgYSBob3N0IHRvIHJlZ2lzdGVyIHRoZSBidWlsdCBvYmplY3RzLiBEZWZpbmVkXG4gKiBsb2NhbGx5ICh3aXRoIGB6b2RgLCBhbHJlYWR5IGEgZGVwZW5kZW5jeSkgc28gdGhpcyBwYWNrYWdlIHN0YXlzIGZyZWUgb2ZcbiAqIGBAc3Fscm9vbXMvcm9vbS1zdG9yZWA7IHRoZSBvYmplY3RzIHRoZSBmYWN0b3JpZXMgYnVpbGQgYXJlIHN0cnVjdHVyYWxseVxuICogY29tcGF0aWJsZSB3aXRoIHNxbHJvb21zJyBvd24gYFJvb21Db21tYW5kYC5cbiAqL1xuZXhwb3J0IHR5cGUgUm9vbUNvbW1hbmRSZXN1bHQ8VERhdGEgPSB1bmtub3duPiA9IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgY29tbWFuZElkOiBzdHJpbmc7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGRhdGE/OiBURGF0YTtcbiAgZXJyb3I/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBSb29tQ29tbWFuZEV4ZWN1dGVPdXRwdXQ8VERhdGEgPSB1bmtub3duPiA9IFJvb21Db21tYW5kUmVzdWx0PFREYXRhPiB8IFREYXRhIHwgdm9pZDtcblxuZXhwb3J0IHR5cGUgUm9vbUNvbW1hbmRFeGVjdXRpb25Db250ZXh0ID0ge1xuICBzdG9yZTogdW5rbm93bjtcbiAgZ2V0U3RhdGU6ICgpID0+IHVua25vd247XG4gIGludm9jYXRpb246IHVua25vd247XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufTtcblxuZXhwb3J0IHR5cGUgUm9vbUNvbW1hbmRQb2xpY3lNZXRhZGF0YSA9IHtcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpZGVtcG90ZW50PzogYm9vbGVhbjtcbiAgcmlza0xldmVsPzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcbiAgcmVxdWlyZXNDb25maXJtYXRpb24/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUm9vbUNvbW1hbmQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGdyb3VwPzogc3RyaW5nO1xuICBrZXl3b3Jkcz86IHN0cmluZ1tdO1xuICBpbnB1dFNjaGVtYT86IFpvZFR5cGU8dW5rbm93bj47XG4gIG1ldGFkYXRhPzogUm9vbUNvbW1hbmRQb2xpY3lNZXRhZGF0YTtcbiAgZXhlY3V0ZTogKFxuICAgIGNvbnRleHQ6IFJvb21Db21tYW5kRXhlY3V0aW9uQ29udGV4dCxcbiAgICBpbnB1dD86IHVua25vd25cbiAgKSA9PiBSb29tQ29tbWFuZEV4ZWN1dGVPdXRwdXQgfCBQcm9taXNlPFJvb21Db21tYW5kRXhlY3V0ZU91dHB1dD47XG59O1xuXG4vKipcbiAqIEEgY29tbWFuZCdzIG1vZGVsLWZhY2luZyBkZXNjcmlwdG9yOiB0aGUgaWQvbmFtZS9kZXNjcmlwdGlvbi9ncm91cC9rZXl3b3Jkc1xuICogcGx1cyBhIEpTT04tU2NoZW1hLWNvbnZlcnRlZCBgaW5wdXRTY2hlbWFgIGFuZCB0aGUgcG9saWN5IG1ldGFkYXRhLiBUaGlzIGlzXG4gKiB0aGUgc2hhcGUgaG9zdHMgYWR2ZXJ0aXNlIG92ZXIgdGhlIHdpcmUgKGUuZy4gdGhlIGRlbW8tYXBwIGJyaWRnZSdzXG4gKiBgdG9EZXNjcmlwdG9yYCksIHNvIGl0IGxpdmVzIGluIHRoZSBtYXAgc3VyZmFjZSBwYWNrYWdlIHRvIGtlZXAgdGhlIGNvbnRyYWN0XG4gKiBzZWxmLWNvbnRhaW5lZC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9vbERlc2NyaXB0b3IgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGdyb3VwPzogc3RyaW5nO1xuICBrZXl3b3Jkcz86IHN0cmluZ1tdO1xuICBpbnB1dFNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1ldGFkYXRhPzogUm9vbUNvbW1hbmRQb2xpY3lNZXRhZGF0YTtcbn07XG5cbi8qKlxuICogU3RydWN0dXJhbCBzbGljZSBvZiBgQHNxbHJvb21zL2R1Y2tkYmAncyBgRHVja0RiQ29ubmVjdG9yYCDigJQgb25seSB0aGUgbWV0aG9kc1xuICogdGhlIG1hcC4qIGNvbW1hbmRzIGNhbGwsIHR5cGVkIGFnYWluc3QgYXBhY2hlLWFycm93IHNvIHRoZSBxdWVyeSByZXN1bHQgZmxvd3NcbiAqIGludG8gYGFycm93VGFibGVUb09iamVjdHNgIC8gYGFycm93U2NoZW1hVG9GaWVsZHNgIHVuY2hhbmdlZC4gS2VwdCBsb2NhbCBzb1xuICogdGhpcyBwYWNrYWdlIG5lZWRzIG5vIGBAc3Fscm9vbXMvZHVja2RiYCBkZXBlbmRlbmN5OyBhIGhvc3QncyByZWFsIHNxbHJvb21zXG4gKiBjb25uZWN0b3Igc2F0aXNmaWVzIHRoaXMgc2hhcGUuXG4gKi9cbmV4cG9ydCB0eXBlIER1Y2tEYkNvbm5lY3RvciA9IHtcbiAgZXhlY3V0ZShzcWw6IHN0cmluZywgb3B0aW9ucz86IHtzaWduYWw/OiBBYm9ydFNpZ25hbH0pOiBQcm9taXNlTGlrZTx1bmtub3duPjtcbiAgcXVlcnkoc3FsOiBzdHJpbmcsIG9wdGlvbnM/OiB7c2lnbmFsPzogQWJvcnRTaWduYWx9KTogUHJvbWlzZUxpa2U8QXJyb3dUYWJsZT47XG4gIGxvYWRBcnJvdyhcbiAgICB0YWJsZTogQXJyb3dUYWJsZSB8IFVpbnQ4QXJyYXksXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgb3B0cz86IHtzY2hlbWE/OiBzdHJpbmd9XG4gICk6IFByb21pc2U8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBWaXNTdGF0ZSA9IHtcbiAgZGF0YXNldHM6IERhdGFzZXRzO1xuICBsYXllcnM6IGFueVtdO1xuICBsYXllckRhdGE6IGFueVtdO1xuICBsb2FkZXJzOiBhbnlbXTtcbiAgbG9hZE9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG5cbi8qKlxuICogQWNjZXNzb3JzIHRvIHRoZSBrZXBsZXIuZ2wgYXBwbGljYXRpb24gc3RhdGUgdGhlIGFzc2lzdGFudCBuZWVkcy4gVGhlIGhvc3RcbiAqIGFwcCBzdXBwbGllcyB0aGVzZSAodmlhIGBzZXRLZXBsZXJTdGF0ZUFjY2Vzc29yc2ApIHNvIHRoaXMgbW9kdWxlIG5ldmVyXG4gKiBoYXJkLWNvZGVzIGEgcmVkdXggc3RhdGUgc2hhcGUgKGUuZy4gYGRlbW8ua2VwbGVyR2wubWFwLnZpc1N0YXRlYCkuIEFueVxuICogYXBwIGNhbiBwcm92aWRlIGFjY2Vzc29ycyBtYXRjaGluZyBpdHMgb3duIHN0b3JlLlxuICovXG5leHBvcnQgdHlwZSBLZXBsZXJTdGF0ZUFjY2Vzc29ycyA9IHtcbiAgZ2V0VmlzU3RhdGU6ICgpID0+IFZpc1N0YXRlO1xuICBnZXRNYXBCb3VuZGFyeTogKCkgPT5cbiAgICB8IHtcbiAgICAgICAgbnc6IFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgIHNlOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBLZXBsZXJDb250ZXh0IHByb3ZpZGVzIGFjY2VzcyB0byBrZXBsZXIuZ2wgc3RhdGUgYW5kIGRpc3BhdGNoLlxuICogVGhpcyBpcyBwYXNzZWQgaW50byB0b29sIGZhY3RvcmllcyBpbnN0ZWFkIG9mIHVzaW5nIFJlZHV4IGRpcmVjdGx5LlxuICpcbiAqIFRoZSBmb3VyIGdsdWUgbWV0aG9kcyAoYGdldFZhbHVlc0Zyb21EYXRhc2V0YCwgYGdldERhdGFzZXRDb250ZXh0YCxcbiAqIGBsb2FkVGFibGVUb0tlcGxlcmAsIGBsb2FkVGFibGVJbnRvRHVja0RCYCwgYGdldENvbm5lY3RvcmApIGFyZSB0aGVcbiAqIGtlcGxlci1hcHAtYm91bmQgc2VhbSB0aGUgbWFwLiogY29tbWFuZHMgY2FsbC4gVGhleSBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlXG4gKiBob3N0J3MgZ2x1ZSAoa2VwbGVyLWFzc2lzdGFudCkgc28gdGhpcyBwYWNrYWdlIHN0YXlzIGZyZWUgb2YgdGhlIER1Y2tEQiAvXG4gKiBrZXBsZXItYXBwIHdpcmluZy5cbiAqL1xuZXhwb3J0IHR5cGUgS2VwbGVyQ29udGV4dCA9IHtcbiAgZ2V0VmlzU3RhdGU6ICgpID0+IFZpc1N0YXRlO1xuICBnZXRNYXBCb3VuZGFyeTogKCkgPT5cbiAgICB8IHtcbiAgICAgICAgbnc6IFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgIHNlOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xuICBnZXRNYXBib3hUb2tlbjogKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkaXNwYXRjaDogS2VwbGVyRGlzcGF0Y2g7XG4gIC8qKiBSZWFkIGEgY29sdW1uJ3MgdmFsdWVzIGZyb20gYSBrZXBsZXIgZGF0YXNldCAoYnkgbGFiZWwgb3IgaWQpLiAqL1xuICBnZXRWYWx1ZXNGcm9tRGF0YXNldDogKGRhdGFzZXROYW1lOiBzdHJpbmcsIHZhcmlhYmxlTmFtZTogc3RyaW5nKSA9PiB1bmtub3duW107XG4gIC8qKiBCdWlsZCB0aGUgZGF0YXNldCtsYXllciBjb250ZXh0IHN0cmluZyBmb3IgdGhlIExMTS4gKi9cbiAgZ2V0RGF0YXNldENvbnRleHQ6ICgpID0+IHN0cmluZztcbiAgLyoqIExvYWQgYSBEdWNrREIgdGFibGUgaW50byBrZXBsZXIuZ2wgYXMgYSBkYXRhc2V0LiAqL1xuICBsb2FkVGFibGVUb0tlcGxlcjogKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7YXV0b0NyZWF0ZUxheWVycz86IGJvb2xlYW47IGNlbnRlck1hcD86IGJvb2xlYW59XG4gICkgPT4gUHJvbWlzZTx7c3VjY2VzczogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmd9PjtcbiAgLyoqIE1hdGVyaWFsaXplIGEga2VwbGVyIGRhdGFzZXQncyBjb2x1bW5zIGludG8gYSBEdWNrREIgdGFibGUgYW5kIHJldHVybiB0aGUgY29ubmVjdG9yLiAqL1xuICBsb2FkVGFibGVJbnRvRHVja0RCOiAoXG4gICAgZGF0YXNldE5hbWU6IHN0cmluZyxcbiAgICB2YXJpYWJsZU5hbWVzOiBzdHJpbmdbXSxcbiAgICBkYlRhYmxlTmFtZTogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTxEdWNrRGJDb25uZWN0b3I+O1xuICAvKiogVGhlIHNoYXJlZCBEdWNrREIgY29ubmVjdG9yICh0aGUgc3RvcmUncywgd2hlbiB3aXJlZCkuICovXG4gIGdldENvbm5lY3RvcjogKCkgPT4gUHJvbWlzZTxEdWNrRGJDb25uZWN0b3I+O1xufTtcbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==