@kepler.gl/reducers 3.3.0-alpha.15 → 3.3.0-alpha.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/column-edit-reconcile.js +100 -0
- package/dist/cjs/column-edit-updaters.spec.js +840 -0
- package/dist/cjs/combined-updaters.js +166 -8
- package/dist/cjs/composers.js +4 -5
- package/dist/cjs/dataset-ops-updaters.js +375 -0
- package/dist/cjs/dataset-ops-updaters.spec.js +382 -0
- package/dist/cjs/export-utils.js +118 -46
- package/dist/cjs/interaction-utils.js +166 -6
- package/dist/cjs/layer-utils.js +135 -9
- package/dist/cjs/ui-state-updaters.js +134 -51
- package/dist/cjs/ui-state.js +2 -2
- package/dist/cjs/vis-state-merger-text-label.spec.js +75 -0
- package/dist/cjs/vis-state-merger.js +99 -25
- package/dist/cjs/vis-state-selectors.js +5 -4
- package/dist/cjs/vis-state-updaters.js +1077 -256
- package/dist/cjs/vis-state.js +2 -2
- package/dist/column-edit-reconcile.d.ts +4 -0
- package/dist/column-edit-updaters.spec.d.ts +1 -0
- package/dist/combined-updaters.d.ts +21 -1
- package/dist/composers.d.ts +3 -0
- package/dist/dataset-ops-updaters.d.ts +21 -0
- package/dist/dataset-ops-updaters.spec.d.ts +1 -0
- package/dist/esm/column-edit-reconcile.js +95 -0
- package/dist/esm/column-edit-updaters.spec.js +839 -0
- package/dist/esm/combined-updaters.js +166 -8
- package/dist/esm/composers.js +3 -2
- package/dist/esm/dataset-ops-updaters.js +357 -0
- package/dist/esm/dataset-ops-updaters.spec.js +381 -0
- package/dist/esm/export-utils.js +117 -45
- package/dist/esm/interaction-utils.js +159 -3
- package/dist/esm/layer-utils.js +133 -9
- package/dist/esm/ui-state-updaters.js +133 -50
- package/dist/esm/ui-state.js +2 -2
- package/dist/esm/vis-state-merger-text-label.spec.js +74 -0
- package/dist/esm/vis-state-merger.js +99 -26
- package/dist/esm/vis-state-selectors.js +5 -4
- package/dist/esm/vis-state-updaters.js +1020 -263
- package/dist/esm/vis-state.js +2 -2
- package/dist/export-utils.d.ts +2 -2
- package/dist/interaction-utils.d.ts +25 -2
- package/dist/layer-utils.d.ts +17 -0
- package/dist/ui-state-updaters.d.ts +30 -0
- package/dist/vis-state-merger-text-label.spec.d.ts +1 -0
- package/dist/vis-state-merger.d.ts +10 -2
- package/dist/vis-state-updaters.d.ts +61 -15
- package/dist/vis-state.d.ts +20 -0
- package/package.json +17 -17
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.addGroupByUpdater = addGroupByUpdater;
|
|
8
|
+
exports.addJoinUpdater = addJoinUpdater;
|
|
9
|
+
exports.addSpatialJoinUpdater = addSpatialJoinUpdater;
|
|
10
|
+
exports.addSuitabilityUpdater = addSuitabilityUpdater;
|
|
11
|
+
exports.executeGroupBy = executeGroupBy;
|
|
12
|
+
exports.executeJoin = executeJoin;
|
|
13
|
+
exports.executeSpatialJoin = executeSpatialJoin;
|
|
14
|
+
exports.executeSuitability = executeSuitability;
|
|
15
|
+
exports.removeDatasetOpUpdater = removeDatasetOpUpdater;
|
|
16
|
+
exports.removeOpsForDatasets = removeOpsForDatasets;
|
|
17
|
+
exports.setGroupByConfigUpdater = setGroupByConfigUpdater;
|
|
18
|
+
exports.setJoinConfigUpdater = setJoinConfigUpdater;
|
|
19
|
+
exports.setSpatialJoinConfigUpdater = setSpatialJoinConfigUpdater;
|
|
20
|
+
exports.setSuitabilityConfigUpdater = setSuitabilityConfigUpdater;
|
|
21
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
22
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
23
|
+
var _commonUtils = require("@kepler.gl/common-utils");
|
|
24
|
+
var _table = require("@kepler.gl/table");
|
|
25
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
26
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
|
27
|
+
// Copyright contributors to the kepler.gl project
|
|
28
|
+
function deactivateOps(ops) {
|
|
29
|
+
return ops.map(function (op) {
|
|
30
|
+
return _objectSpread(_objectSpread({}, op), {}, {
|
|
31
|
+
isConfigActive: false
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function randomTwoDigitSuffix() {
|
|
36
|
+
return String(Math.floor(Math.random() * 100)).padStart(2, '0');
|
|
37
|
+
}
|
|
38
|
+
function defaultGroupByLabel() {
|
|
39
|
+
return "group-by-".concat(randomTwoDigitSuffix());
|
|
40
|
+
}
|
|
41
|
+
function defaultJoinLabel() {
|
|
42
|
+
return "join-dataset-".concat(randomTwoDigitSuffix());
|
|
43
|
+
}
|
|
44
|
+
function defaultSpatialJoinLabel(resultId) {
|
|
45
|
+
return "spatial-join-".concat(resultId);
|
|
46
|
+
}
|
|
47
|
+
function defaultSuitabilityLabel() {
|
|
48
|
+
return "suitability-".concat(randomTwoDigitSuffix());
|
|
49
|
+
}
|
|
50
|
+
function addGroupByUpdater(state, action) {
|
|
51
|
+
var dataset = state.datasets[action.dataId];
|
|
52
|
+
if (!(0, _table.isTabularDatasetForOps)(dataset)) {
|
|
53
|
+
return state;
|
|
54
|
+
}
|
|
55
|
+
var id = (0, _commonUtils.generateHashId)(6);
|
|
56
|
+
var resultId = (0, _commonUtils.generateHashId)(6);
|
|
57
|
+
var op = {
|
|
58
|
+
id: id,
|
|
59
|
+
dataId: action.dataId,
|
|
60
|
+
fieldName: null,
|
|
61
|
+
aggregations: (0, _table.defaultAggregationsForFields)(dataset.fields),
|
|
62
|
+
resultId: resultId,
|
|
63
|
+
resultLabel: defaultGroupByLabel(),
|
|
64
|
+
isConfigActive: true,
|
|
65
|
+
error: null
|
|
66
|
+
};
|
|
67
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
68
|
+
groupBys: [].concat((0, _toConsumableArray2["default"])(deactivateOps(state.groupBys)), [op]),
|
|
69
|
+
joins: deactivateOps(state.joins),
|
|
70
|
+
suitabilities: deactivateOps(state.suitabilities)
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function setGroupByConfigUpdater(state, action) {
|
|
74
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
75
|
+
groupBys: state.groupBys.map(function (op) {
|
|
76
|
+
var _action$config$error;
|
|
77
|
+
return op.id === action.id ? _objectSpread(_objectSpread(_objectSpread({}, op), action.config), {}, {
|
|
78
|
+
error: (_action$config$error = action.config.error) !== null && _action$config$error !== void 0 ? _action$config$error : null
|
|
79
|
+
}) : op;
|
|
80
|
+
})
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function executeGroupBy(state, action) {
|
|
84
|
+
var op = state.groupBys.find(function (item) {
|
|
85
|
+
return item.id === action.id;
|
|
86
|
+
});
|
|
87
|
+
var dataset = op ? state.datasets[op.dataId] : undefined;
|
|
88
|
+
if (!op || !dataset || !op.fieldName) {
|
|
89
|
+
return {
|
|
90
|
+
state: setGroupByConfigUpdater(state, {
|
|
91
|
+
id: action.id,
|
|
92
|
+
config: {
|
|
93
|
+
error: 'Select a grouping field'
|
|
94
|
+
}
|
|
95
|
+
})
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
var proto = (0, _table.groupByDataset)(dataset, {
|
|
100
|
+
fieldName: op.fieldName,
|
|
101
|
+
aggregations: op.aggregations,
|
|
102
|
+
label: op.resultLabel,
|
|
103
|
+
resultId: op.resultId,
|
|
104
|
+
operationId: op.id
|
|
105
|
+
});
|
|
106
|
+
return {
|
|
107
|
+
state: _objectSpread(_objectSpread({}, state), {}, {
|
|
108
|
+
groupBys: state.groupBys.filter(function (item) {
|
|
109
|
+
return item.id !== op.id;
|
|
110
|
+
})
|
|
111
|
+
}),
|
|
112
|
+
proto: proto
|
|
113
|
+
};
|
|
114
|
+
} catch (error) {
|
|
115
|
+
return {
|
|
116
|
+
state: setGroupByConfigUpdater(state, {
|
|
117
|
+
id: action.id,
|
|
118
|
+
config: {
|
|
119
|
+
error: error instanceof Error ? error.message : String(error)
|
|
120
|
+
}
|
|
121
|
+
})
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function addJoinUpdater(state, action) {
|
|
126
|
+
var dataset = state.datasets[action.dataId];
|
|
127
|
+
if (!(0, _table.isTabularDatasetForOps)(dataset)) {
|
|
128
|
+
return state;
|
|
129
|
+
}
|
|
130
|
+
var implementation = action.implementation || 'simple';
|
|
131
|
+
var id = (0, _commonUtils.generateHashId)(6);
|
|
132
|
+
var resultId = (0, _commonUtils.generateHashId)(6);
|
|
133
|
+
var op = {
|
|
134
|
+
id: id,
|
|
135
|
+
implementation: implementation,
|
|
136
|
+
leftDataId: action.dataId,
|
|
137
|
+
rightDataId: null,
|
|
138
|
+
leftField: null,
|
|
139
|
+
rightField: null,
|
|
140
|
+
type: 'LEFT',
|
|
141
|
+
aggregations: {},
|
|
142
|
+
leftGeo: implementation === 'spatial' ? (0, _table.suggestSpatialGeo)(dataset.fields) : null,
|
|
143
|
+
rightGeo: null,
|
|
144
|
+
predicate: implementation === 'spatial' ? 'intersects' : undefined,
|
|
145
|
+
resultId: resultId,
|
|
146
|
+
resultLabel: implementation === 'spatial' ? defaultSpatialJoinLabel(resultId) : defaultJoinLabel(),
|
|
147
|
+
isConfigActive: true,
|
|
148
|
+
error: null
|
|
149
|
+
};
|
|
150
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
151
|
+
joins: [].concat((0, _toConsumableArray2["default"])(deactivateOps(state.joins)), [op]),
|
|
152
|
+
groupBys: deactivateOps(state.groupBys),
|
|
153
|
+
suitabilities: deactivateOps(state.suitabilities)
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function setJoinConfigUpdater(state, action) {
|
|
157
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
158
|
+
joins: state.joins.map(function (op) {
|
|
159
|
+
var _action$config$error2;
|
|
160
|
+
return op.id === action.id ? _objectSpread(_objectSpread(_objectSpread({}, op), action.config), {}, {
|
|
161
|
+
error: (_action$config$error2 = action.config.error) !== null && _action$config$error2 !== void 0 ? _action$config$error2 : null
|
|
162
|
+
}) : op;
|
|
163
|
+
})
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
function executeJoin(state, action) {
|
|
167
|
+
var op = state.joins.find(function (item) {
|
|
168
|
+
return item.id === action.id && item.implementation !== 'spatial';
|
|
169
|
+
});
|
|
170
|
+
var left = op ? state.datasets[op.leftDataId] : undefined;
|
|
171
|
+
var right = op !== null && op !== void 0 && op.rightDataId ? state.datasets[op.rightDataId] : undefined;
|
|
172
|
+
if (!op || !left || !right || !op.leftField || !op.rightField) {
|
|
173
|
+
return {
|
|
174
|
+
state: setJoinConfigUpdater(state, {
|
|
175
|
+
id: action.id,
|
|
176
|
+
config: {
|
|
177
|
+
error: 'Select datasets and join keys'
|
|
178
|
+
}
|
|
179
|
+
})
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
var proto = (0, _table.joinDatasets)(left, right, {
|
|
184
|
+
leftField: op.leftField,
|
|
185
|
+
rightField: op.rightField,
|
|
186
|
+
type: op.type,
|
|
187
|
+
leftColumns: op.leftColumns,
|
|
188
|
+
rightColumns: op.rightColumns,
|
|
189
|
+
label: op.resultLabel,
|
|
190
|
+
resultId: op.resultId,
|
|
191
|
+
operationId: op.id
|
|
192
|
+
});
|
|
193
|
+
return {
|
|
194
|
+
state: _objectSpread(_objectSpread({}, state), {}, {
|
|
195
|
+
joins: state.joins.filter(function (item) {
|
|
196
|
+
return item.id !== op.id;
|
|
197
|
+
})
|
|
198
|
+
}),
|
|
199
|
+
proto: proto
|
|
200
|
+
};
|
|
201
|
+
} catch (error) {
|
|
202
|
+
return {
|
|
203
|
+
state: setJoinConfigUpdater(state, {
|
|
204
|
+
id: action.id,
|
|
205
|
+
config: {
|
|
206
|
+
error: error instanceof Error ? error.message : String(error)
|
|
207
|
+
}
|
|
208
|
+
})
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function addSpatialJoinUpdater(state, action) {
|
|
213
|
+
return addJoinUpdater(state, {
|
|
214
|
+
dataId: action.dataId,
|
|
215
|
+
implementation: 'spatial'
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function setSpatialJoinConfigUpdater(state, action) {
|
|
219
|
+
return setJoinConfigUpdater(state, action);
|
|
220
|
+
}
|
|
221
|
+
function executeSpatialJoin(state, action) {
|
|
222
|
+
var op = state.joins.find(function (item) {
|
|
223
|
+
return item.id === action.id && item.implementation === 'spatial';
|
|
224
|
+
});
|
|
225
|
+
var left = op ? state.datasets[op.leftDataId] : undefined;
|
|
226
|
+
var right = op !== null && op !== void 0 && op.rightDataId ? state.datasets[op.rightDataId] : undefined;
|
|
227
|
+
if (!op || !left || !right || !op.leftGeo || !op.rightGeo) {
|
|
228
|
+
return {
|
|
229
|
+
state: setJoinConfigUpdater(state, {
|
|
230
|
+
id: action.id,
|
|
231
|
+
config: {
|
|
232
|
+
error: 'Select datasets and geometry fields'
|
|
233
|
+
}
|
|
234
|
+
})
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
try {
|
|
238
|
+
var proto = (0, _table.spatialJoinDatasets)(left, right, {
|
|
239
|
+
leftGeo: op.leftGeo,
|
|
240
|
+
rightGeo: op.rightGeo,
|
|
241
|
+
aggregations: op.aggregations,
|
|
242
|
+
leftColumns: op.leftColumns,
|
|
243
|
+
predicate: op.predicate || 'intersects',
|
|
244
|
+
label: op.resultLabel,
|
|
245
|
+
resultId: op.resultId,
|
|
246
|
+
operationId: op.id
|
|
247
|
+
});
|
|
248
|
+
return {
|
|
249
|
+
state: _objectSpread(_objectSpread({}, state), {}, {
|
|
250
|
+
joins: state.joins.filter(function (item) {
|
|
251
|
+
return item.id !== op.id;
|
|
252
|
+
})
|
|
253
|
+
}),
|
|
254
|
+
proto: proto
|
|
255
|
+
};
|
|
256
|
+
} catch (error) {
|
|
257
|
+
return {
|
|
258
|
+
state: setJoinConfigUpdater(state, {
|
|
259
|
+
id: action.id,
|
|
260
|
+
config: {
|
|
261
|
+
error: error instanceof Error ? error.message : String(error)
|
|
262
|
+
}
|
|
263
|
+
})
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
function addSuitabilityUpdater(state, action) {
|
|
268
|
+
var dataset = state.datasets[action.dataId];
|
|
269
|
+
if (!(0, _table.isTabularDatasetForOps)(dataset)) {
|
|
270
|
+
return state;
|
|
271
|
+
}
|
|
272
|
+
var op = {
|
|
273
|
+
id: (0, _commonUtils.generateHashId)(6),
|
|
274
|
+
dataId: action.dataId,
|
|
275
|
+
weights: (0, _table.defaultSuitabilityWeights)(dataset.fields),
|
|
276
|
+
weightStandardization: 'normalize',
|
|
277
|
+
dataStandardization: 'range',
|
|
278
|
+
outputFieldName: _table.DEFAULT_SUITABILITY_SCORE_FIELD,
|
|
279
|
+
resultId: (0, _commonUtils.generateHashId)(6),
|
|
280
|
+
resultLabel: defaultSuitabilityLabel(),
|
|
281
|
+
isConfigActive: true,
|
|
282
|
+
error: null
|
|
283
|
+
};
|
|
284
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
285
|
+
suitabilities: [].concat((0, _toConsumableArray2["default"])(deactivateOps(state.suitabilities)), [op]),
|
|
286
|
+
groupBys: deactivateOps(state.groupBys),
|
|
287
|
+
joins: deactivateOps(state.joins)
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
function setSuitabilityConfigUpdater(state, action) {
|
|
291
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
292
|
+
suitabilities: state.suitabilities.map(function (op) {
|
|
293
|
+
var _action$config$error3;
|
|
294
|
+
return op.id === action.id ? _objectSpread(_objectSpread(_objectSpread({}, op), action.config), {}, {
|
|
295
|
+
error: (_action$config$error3 = action.config.error) !== null && _action$config$error3 !== void 0 ? _action$config$error3 : null
|
|
296
|
+
}) : op;
|
|
297
|
+
})
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
function executeSuitability(state, action) {
|
|
301
|
+
var op = state.suitabilities.find(function (item) {
|
|
302
|
+
return item.id === action.id;
|
|
303
|
+
});
|
|
304
|
+
var dataset = op ? state.datasets[op.dataId] : undefined;
|
|
305
|
+
if (!op || !dataset || !Object.keys(op.weights).length) {
|
|
306
|
+
return {
|
|
307
|
+
state: setSuitabilityConfigUpdater(state, {
|
|
308
|
+
id: action.id,
|
|
309
|
+
config: {
|
|
310
|
+
error: 'Select at least one field to score'
|
|
311
|
+
}
|
|
312
|
+
})
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
try {
|
|
316
|
+
var proto = (0, _table.suitabilityDataset)(dataset, {
|
|
317
|
+
weights: op.weights,
|
|
318
|
+
weightStandardization: op.weightStandardization,
|
|
319
|
+
dataStandardization: op.dataStandardization,
|
|
320
|
+
outputFieldName: op.outputFieldName,
|
|
321
|
+
columns: op.columns,
|
|
322
|
+
label: op.resultLabel,
|
|
323
|
+
resultId: op.resultId,
|
|
324
|
+
operationId: op.id
|
|
325
|
+
});
|
|
326
|
+
return {
|
|
327
|
+
state: _objectSpread(_objectSpread({}, state), {}, {
|
|
328
|
+
suitabilities: state.suitabilities.map(function (item) {
|
|
329
|
+
return item.id === op.id ? _objectSpread(_objectSpread({}, item), {}, {
|
|
330
|
+
isConfigActive: false,
|
|
331
|
+
error: null
|
|
332
|
+
}) : item;
|
|
333
|
+
})
|
|
334
|
+
}),
|
|
335
|
+
proto: proto
|
|
336
|
+
};
|
|
337
|
+
} catch (error) {
|
|
338
|
+
return {
|
|
339
|
+
state: setSuitabilityConfigUpdater(state, {
|
|
340
|
+
id: action.id,
|
|
341
|
+
config: {
|
|
342
|
+
error: error instanceof Error ? error.message : String(error)
|
|
343
|
+
}
|
|
344
|
+
})
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
function removeDatasetOpUpdater(state, action) {
|
|
349
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
350
|
+
groupBys: state.groupBys.filter(function (op) {
|
|
351
|
+
return op.id !== action.id;
|
|
352
|
+
}),
|
|
353
|
+
joins: state.joins.filter(function (op) {
|
|
354
|
+
return op.id !== action.id;
|
|
355
|
+
}),
|
|
356
|
+
suitabilities: state.suitabilities.filter(function (op) {
|
|
357
|
+
return op.id !== action.id;
|
|
358
|
+
})
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
function removeOpsForDatasets(state, dataIds) {
|
|
362
|
+
var ids = new Set(dataIds);
|
|
363
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
364
|
+
groupBys: state.groupBys.filter(function (op) {
|
|
365
|
+
return !ids.has(op.dataId) && !ids.has(op.resultId);
|
|
366
|
+
}),
|
|
367
|
+
joins: state.joins.filter(function (op) {
|
|
368
|
+
return !ids.has(op.leftDataId) && !(op.rightDataId && ids.has(op.rightDataId)) && !ids.has(op.resultId);
|
|
369
|
+
}),
|
|
370
|
+
suitabilities: state.suitabilities.filter(function (op) {
|
|
371
|
+
return !ids.has(op.dataId) && !ids.has(op.resultId);
|
|
372
|
+
})
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tbW9uVXRpbHMiLCJyZXF1aXJlIiwiX3RhYmxlIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJkZWFjdGl2YXRlT3BzIiwib3BzIiwibWFwIiwib3AiLCJpc0NvbmZpZ0FjdGl2ZSIsInJhbmRvbVR3b0RpZ2l0U3VmZml4IiwiU3RyaW5nIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwicGFkU3RhcnQiLCJkZWZhdWx0R3JvdXBCeUxhYmVsIiwiY29uY2F0IiwiZGVmYXVsdEpvaW5MYWJlbCIsImRlZmF1bHRTcGF0aWFsSm9pbkxhYmVsIiwicmVzdWx0SWQiLCJkZWZhdWx0U3VpdGFiaWxpdHlMYWJlbCIsImFkZEdyb3VwQnlVcGRhdGVyIiwic3RhdGUiLCJhY3Rpb24iLCJkYXRhc2V0IiwiZGF0YXNldHMiLCJkYXRhSWQiLCJpc1RhYnVsYXJEYXRhc2V0Rm9yT3BzIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsImZpZWxkTmFtZSIsImFnZ3JlZ2F0aW9ucyIsImRlZmF1bHRBZ2dyZWdhdGlvbnNGb3JGaWVsZHMiLCJmaWVsZHMiLCJyZXN1bHRMYWJlbCIsImVycm9yIiwiZ3JvdXBCeXMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiam9pbnMiLCJzdWl0YWJpbGl0aWVzIiwic2V0R3JvdXBCeUNvbmZpZ1VwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyRlcnJvciIsImNvbmZpZyIsImV4ZWN1dGVHcm91cEJ5IiwiZmluZCIsIml0ZW0iLCJ1bmRlZmluZWQiLCJwcm90byIsImdyb3VwQnlEYXRhc2V0IiwibGFiZWwiLCJvcGVyYXRpb25JZCIsIkVycm9yIiwibWVzc2FnZSIsImFkZEpvaW5VcGRhdGVyIiwiaW1wbGVtZW50YXRpb24iLCJsZWZ0RGF0YUlkIiwicmlnaHREYXRhSWQiLCJsZWZ0RmllbGQiLCJyaWdodEZpZWxkIiwidHlwZSIsImxlZnRHZW8iLCJzdWdnZXN0U3BhdGlhbEdlbyIsInJpZ2h0R2VvIiwicHJlZGljYXRlIiwic2V0Sm9pbkNvbmZpZ1VwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyRlcnJvcjIiLCJleGVjdXRlSm9pbiIsImxlZnQiLCJyaWdodCIsImpvaW5EYXRhc2V0cyIsImxlZnRDb2x1bW5zIiwicmlnaHRDb2x1bW5zIiwiYWRkU3BhdGlhbEpvaW5VcGRhdGVyIiwic2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyIiwiZXhlY3V0ZVNwYXRpYWxKb2luIiwic3BhdGlhbEpvaW5EYXRhc2V0cyIsImFkZFN1aXRhYmlsaXR5VXBkYXRlciIsIndlaWdodHMiLCJkZWZhdWx0U3VpdGFiaWxpdHlXZWlnaHRzIiwid2VpZ2h0U3RhbmRhcmRpemF0aW9uIiwiZGF0YVN0YW5kYXJkaXphdGlvbiIsIm91dHB1dEZpZWxkTmFtZSIsIkRFRkFVTFRfU1VJVEFCSUxJVFlfU0NPUkVfRklFTEQiLCJzZXRTdWl0YWJpbGl0eUNvbmZpZ1VwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyRlcnJvcjMiLCJleGVjdXRlU3VpdGFiaWxpdHkiLCJzdWl0YWJpbGl0eURhdGFzZXQiLCJjb2x1bW5zIiwicmVtb3ZlRGF0YXNldE9wVXBkYXRlciIsInJlbW92ZU9wc0ZvckRhdGFzZXRzIiwiZGF0YUlkcyIsImlkcyIsIlNldCIsImhhcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhc2V0LW9wcy11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2dlbmVyYXRlSGFzaElkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge1xuICBkZWZhdWx0QWdncmVnYXRpb25zRm9yRmllbGRzLFxuICBkZWZhdWx0U3VpdGFiaWxpdHlXZWlnaHRzLFxuICBncm91cEJ5RGF0YXNldCxcbiAgaXNUYWJ1bGFyRGF0YXNldEZvck9wcyxcbiAgam9pbkRhdGFzZXRzLFxuICBzcGF0aWFsSm9pbkRhdGFzZXRzLFxuICBzdWdnZXN0U3BhdGlhbEdlbyxcbiAgc3VpdGFiaWxpdHlEYXRhc2V0LFxuICBERUZBVUxUX1NVSVRBQklMSVRZX1NDT1JFX0ZJRUxELFxuICBHcm91cEJ5T3AsXG4gIEpvaW5PcCxcbiAgU3VpdGFiaWxpdHlPcFxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0fSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7VmlzU3RhdGVBY3Rpb25zfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuZXhwb3J0IHR5cGUgRGVyaXZlZERhdGFzZXRPcFJlc3VsdCA9IHtcbiAgc3RhdGU6IFZpc1N0YXRlO1xuICBwcm90bz86IFByb3RvRGF0YXNldDtcbn07XG5cbmZ1bmN0aW9uIGRlYWN0aXZhdGVPcHM8VCBleHRlbmRzIHtpc0NvbmZpZ0FjdGl2ZT86IGJvb2xlYW59PihvcHM6IFRbXSk6IFRbXSB7XG4gIHJldHVybiBvcHMubWFwKG9wID0+ICh7Li4ub3AsIGlzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tVHdvRGlnaXRTdWZmaXgoKTogc3RyaW5nIHtcbiAgcmV0dXJuIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0R3JvdXBCeUxhYmVsKCk6IHN0cmluZyB7XG4gIHJldHVybiBgZ3JvdXAtYnktJHtyYW5kb21Ud29EaWdpdFN1ZmZpeCgpfWA7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRKb2luTGFiZWwoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBqb2luLWRhdGFzZXQtJHtyYW5kb21Ud29EaWdpdFN1ZmZpeCgpfWA7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRTcGF0aWFsSm9pbkxhYmVsKHJlc3VsdElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHNwYXRpYWwtam9pbi0ke3Jlc3VsdElkfWA7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRTdWl0YWJpbGl0eUxhYmVsKCk6IHN0cmluZyB7XG4gIHJldHVybiBgc3VpdGFiaWxpdHktJHtyYW5kb21Ud29EaWdpdFN1ZmZpeCgpfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRHcm91cEJ5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRHcm91cEJ5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbYWN0aW9uLmRhdGFJZF07XG4gIGlmICghaXNUYWJ1bGFyRGF0YXNldEZvck9wcyhkYXRhc2V0KSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZCA9IGdlbmVyYXRlSGFzaElkKDYpO1xuICBjb25zdCByZXN1bHRJZCA9IGdlbmVyYXRlSGFzaElkKDYpO1xuICBjb25zdCBvcDogR3JvdXBCeU9wID0ge1xuICAgIGlkLFxuICAgIGRhdGFJZDogYWN0aW9uLmRhdGFJZCxcbiAgICBmaWVsZE5hbWU6IG51bGwsXG4gICAgYWdncmVnYXRpb25zOiBkZWZhdWx0QWdncmVnYXRpb25zRm9yRmllbGRzKGRhdGFzZXQuZmllbGRzKSxcbiAgICByZXN1bHRJZCxcbiAgICByZXN1bHRMYWJlbDogZGVmYXVsdEdyb3VwQnlMYWJlbCgpLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgIGVycm9yOiBudWxsXG4gIH07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZ3JvdXBCeXM6IFsuLi5kZWFjdGl2YXRlT3BzKHN0YXRlLmdyb3VwQnlzKSwgb3BdLFxuICAgIGpvaW5zOiBkZWFjdGl2YXRlT3BzKHN0YXRlLmpvaW5zKSxcbiAgICBzdWl0YWJpbGl0aWVzOiBkZWFjdGl2YXRlT3BzKHN0YXRlLnN1aXRhYmlsaXRpZXMpXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHcm91cEJ5Q29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRHcm91cEJ5Q29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGdyb3VwQnlzOiBzdGF0ZS5ncm91cEJ5cy5tYXAob3AgPT5cbiAgICAgIG9wLmlkID09PSBhY3Rpb24uaWQgPyB7Li4ub3AsIC4uLmFjdGlvbi5jb25maWcsIGVycm9yOiBhY3Rpb24uY29uZmlnLmVycm9yID8/IG51bGx9IDogb3BcbiAgICApXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlR3JvdXBCeShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5Hcm91cEJ5VXBkYXRlckFjdGlvblxuKTogRGVyaXZlZERhdGFzZXRPcFJlc3VsdCB7XG4gIGNvbnN0IG9wID0gc3RhdGUuZ3JvdXBCeXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGFjdGlvbi5pZCk7XG4gIGNvbnN0IGRhdGFzZXQgPSBvcCA/IHN0YXRlLmRhdGFzZXRzW29wLmRhdGFJZF0gOiB1bmRlZmluZWQ7XG4gIGlmICghb3AgfHwgIWRhdGFzZXQgfHwgIW9wLmZpZWxkTmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZTogc2V0R3JvdXBCeUNvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgaWQ6IGFjdGlvbi5pZCxcbiAgICAgICAgY29uZmlnOiB7ZXJyb3I6ICdTZWxlY3QgYSBncm91cGluZyBmaWVsZCd9XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHByb3RvID0gZ3JvdXBCeURhdGFzZXQoZGF0YXNldCwge1xuICAgICAgZmllbGROYW1lOiBvcC5maWVsZE5hbWUsXG4gICAgICBhZ2dyZWdhdGlvbnM6IG9wLmFnZ3JlZ2F0aW9ucyxcbiAgICAgIGxhYmVsOiBvcC5yZXN1bHRMYWJlbCxcbiAgICAgIHJlc3VsdElkOiBvcC5yZXN1bHRJZCxcbiAgICAgIG9wZXJhdGlvbklkOiBvcC5pZFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZ3JvdXBCeXM6IHN0YXRlLmdyb3VwQnlzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IG9wLmlkKVxuICAgICAgfSxcbiAgICAgIHByb3RvXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGU6IHNldEdyb3VwQnlDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIGlkOiBhY3Rpb24uaWQsXG4gICAgICAgIGNvbmZpZzoge2Vycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9XG4gICAgICB9KVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEpvaW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEpvaW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1thY3Rpb24uZGF0YUlkXTtcbiAgaWYgKCFpc1RhYnVsYXJEYXRhc2V0Rm9yT3BzKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGltcGxlbWVudGF0aW9uID0gYWN0aW9uLmltcGxlbWVudGF0aW9uIHx8ICdzaW1wbGUnO1xuICBjb25zdCBpZCA9IGdlbmVyYXRlSGFzaElkKDYpO1xuICBjb25zdCByZXN1bHRJZCA9IGdlbmVyYXRlSGFzaElkKDYpO1xuICBjb25zdCBvcDogSm9pbk9wID0ge1xuICAgIGlkLFxuICAgIGltcGxlbWVudGF0aW9uLFxuICAgIGxlZnREYXRhSWQ6IGFjdGlvbi5kYXRhSWQsXG4gICAgcmlnaHREYXRhSWQ6IG51bGwsXG4gICAgbGVmdEZpZWxkOiBudWxsLFxuICAgIHJpZ2h0RmllbGQ6IG51bGwsXG4gICAgdHlwZTogJ0xFRlQnLFxuICAgIGFnZ3JlZ2F0aW9uczoge30sXG4gICAgbGVmdEdlbzogaW1wbGVtZW50YXRpb24gPT09ICdzcGF0aWFsJyA/IHN1Z2dlc3RTcGF0aWFsR2VvKGRhdGFzZXQuZmllbGRzKSA6IG51bGwsXG4gICAgcmlnaHRHZW86IG51bGwsXG4gICAgcHJlZGljYXRlOiBpbXBsZW1lbnRhdGlvbiA9PT0gJ3NwYXRpYWwnID8gJ2ludGVyc2VjdHMnIDogdW5kZWZpbmVkLFxuICAgIHJlc3VsdElkLFxuICAgIHJlc3VsdExhYmVsOlxuICAgICAgaW1wbGVtZW50YXRpb24gPT09ICdzcGF0aWFsJyA/IGRlZmF1bHRTcGF0aWFsSm9pbkxhYmVsKHJlc3VsdElkKSA6IGRlZmF1bHRKb2luTGFiZWwoKSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICBlcnJvcjogbnVsbFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGpvaW5zOiBbLi4uZGVhY3RpdmF0ZU9wcyhzdGF0ZS5qb2lucyksIG9wXSxcbiAgICBncm91cEJ5czogZGVhY3RpdmF0ZU9wcyhzdGF0ZS5ncm91cEJ5cyksXG4gICAgc3VpdGFiaWxpdGllczogZGVhY3RpdmF0ZU9wcyhzdGF0ZS5zdWl0YWJpbGl0aWVzKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Sm9pbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0Sm9pbkNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBqb2luczogc3RhdGUuam9pbnMubWFwKG9wID0+XG4gICAgICBvcC5pZCA9PT0gYWN0aW9uLmlkID8gey4uLm9wLCAuLi5hY3Rpb24uY29uZmlnLCBlcnJvcjogYWN0aW9uLmNvbmZpZy5lcnJvciA/PyBudWxsfSA6IG9wXG4gICAgKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZUpvaW4oXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuSm9pblVwZGF0ZXJBY3Rpb25cbik6IERlcml2ZWREYXRhc2V0T3BSZXN1bHQge1xuICBjb25zdCBvcCA9IHN0YXRlLmpvaW5zLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBhY3Rpb24uaWQgJiYgaXRlbS5pbXBsZW1lbnRhdGlvbiAhPT0gJ3NwYXRpYWwnKTtcbiAgY29uc3QgbGVmdCA9IG9wID8gc3RhdGUuZGF0YXNldHNbb3AubGVmdERhdGFJZF0gOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJpZ2h0ID0gb3A/LnJpZ2h0RGF0YUlkID8gc3RhdGUuZGF0YXNldHNbb3AucmlnaHREYXRhSWRdIDogdW5kZWZpbmVkO1xuICBpZiAoIW9wIHx8ICFsZWZ0IHx8ICFyaWdodCB8fCAhb3AubGVmdEZpZWxkIHx8ICFvcC5yaWdodEZpZWxkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlOiBzZXRKb2luQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBpZDogYWN0aW9uLmlkLFxuICAgICAgICBjb25maWc6IHtlcnJvcjogJ1NlbGVjdCBkYXRhc2V0cyBhbmQgam9pbiBrZXlzJ31cbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdG8gPSBqb2luRGF0YXNldHMobGVmdCwgcmlnaHQsIHtcbiAgICAgIGxlZnRGaWVsZDogb3AubGVmdEZpZWxkLFxuICAgICAgcmlnaHRGaWVsZDogb3AucmlnaHRGaWVsZCxcbiAgICAgIHR5cGU6IG9wLnR5cGUsXG4gICAgICBsZWZ0Q29sdW1uczogb3AubGVmdENvbHVtbnMsXG4gICAgICByaWdodENvbHVtbnM6IG9wLnJpZ2h0Q29sdW1ucyxcbiAgICAgIGxhYmVsOiBvcC5yZXN1bHRMYWJlbCxcbiAgICAgIHJlc3VsdElkOiBvcC5yZXN1bHRJZCxcbiAgICAgIG9wZXJhdGlvbklkOiBvcC5pZFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgam9pbnM6IHN0YXRlLmpvaW5zLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IG9wLmlkKVxuICAgICAgfSxcbiAgICAgIHByb3RvXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGU6IHNldEpvaW5Db25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIGlkOiBhY3Rpb24uaWQsXG4gICAgICAgIGNvbmZpZzoge2Vycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9XG4gICAgICB9KVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFNwYXRpYWxKb2luVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRTcGF0aWFsSm9pblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIGFkZEpvaW5VcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpbXBsZW1lbnRhdGlvbjogJ3NwYXRpYWwnfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTcGF0aWFsSm9pbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRKb2luQ29uZmlnVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVTcGF0aWFsSm9pbihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5TcGF0aWFsSm9pblVwZGF0ZXJBY3Rpb25cbik6IERlcml2ZWREYXRhc2V0T3BSZXN1bHQge1xuICBjb25zdCBvcCA9IHN0YXRlLmpvaW5zLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBhY3Rpb24uaWQgJiYgaXRlbS5pbXBsZW1lbnRhdGlvbiA9PT0gJ3NwYXRpYWwnKTtcbiAgY29uc3QgbGVmdCA9IG9wID8gc3RhdGUuZGF0YXNldHNbb3AubGVmdERhdGFJZF0gOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJpZ2h0ID0gb3A/LnJpZ2h0RGF0YUlkID8gc3RhdGUuZGF0YXNldHNbb3AucmlnaHREYXRhSWRdIDogdW5kZWZpbmVkO1xuICBpZiAoIW9wIHx8ICFsZWZ0IHx8ICFyaWdodCB8fCAhb3AubGVmdEdlbyB8fCAhb3AucmlnaHRHZW8pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGU6IHNldEpvaW5Db25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIGlkOiBhY3Rpb24uaWQsXG4gICAgICAgIGNvbmZpZzoge2Vycm9yOiAnU2VsZWN0IGRhdGFzZXRzIGFuZCBnZW9tZXRyeSBmaWVsZHMnfVxuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwcm90byA9IHNwYXRpYWxKb2luRGF0YXNldHMobGVmdCwgcmlnaHQsIHtcbiAgICAgIGxlZnRHZW86IG9wLmxlZnRHZW8sXG4gICAgICByaWdodEdlbzogb3AucmlnaHRHZW8sXG4gICAgICBhZ2dyZWdhdGlvbnM6IG9wLmFnZ3JlZ2F0aW9ucyxcbiAgICAgIGxlZnRDb2x1bW5zOiBvcC5sZWZ0Q29sdW1ucyxcbiAgICAgIHByZWRpY2F0ZTogb3AucHJlZGljYXRlIHx8ICdpbnRlcnNlY3RzJyxcbiAgICAgIGxhYmVsOiBvcC5yZXN1bHRMYWJlbCxcbiAgICAgIHJlc3VsdElkOiBvcC5yZXN1bHRJZCxcbiAgICAgIG9wZXJhdGlvbklkOiBvcC5pZFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgam9pbnM6IHN0YXRlLmpvaW5zLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IG9wLmlkKVxuICAgICAgfSxcbiAgICAgIHByb3RvXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGU6IHNldEpvaW5Db25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIGlkOiBhY3Rpb24uaWQsXG4gICAgICAgIGNvbmZpZzoge2Vycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9XG4gICAgICB9KVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFN1aXRhYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRTdWl0YWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2FjdGlvbi5kYXRhSWRdO1xuICBpZiAoIWlzVGFidWxhckRhdGFzZXRGb3JPcHMoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb3A6IFN1aXRhYmlsaXR5T3AgPSB7XG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGRhdGFJZDogYWN0aW9uLmRhdGFJZCxcbiAgICB3ZWlnaHRzOiBkZWZhdWx0U3VpdGFiaWxpdHlXZWlnaHRzKGRhdGFzZXQuZmllbGRzKSxcbiAgICB3ZWlnaHRTdGFuZGFyZGl6YXRpb246ICdub3JtYWxpemUnLFxuICAgIGRhdGFTdGFuZGFyZGl6YXRpb246ICdyYW5nZScsXG4gICAgb3V0cHV0RmllbGROYW1lOiBERUZBVUxUX1NVSVRBQklMSVRZX1NDT1JFX0ZJRUxELFxuICAgIHJlc3VsdElkOiBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICByZXN1bHRMYWJlbDogZGVmYXVsdFN1aXRhYmlsaXR5TGFiZWwoKSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICBlcnJvcjogbnVsbFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHN1aXRhYmlsaXRpZXM6IFsuLi5kZWFjdGl2YXRlT3BzKHN0YXRlLnN1aXRhYmlsaXRpZXMpLCBvcF0sXG4gICAgZ3JvdXBCeXM6IGRlYWN0aXZhdGVPcHMoc3RhdGUuZ3JvdXBCeXMpLFxuICAgIGpvaW5zOiBkZWFjdGl2YXRlT3BzKHN0YXRlLmpvaW5zKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U3VpdGFiaWxpdHlDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldFN1aXRhYmlsaXR5Q29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHN1aXRhYmlsaXRpZXM6IHN0YXRlLnN1aXRhYmlsaXRpZXMubWFwKG9wID0+XG4gICAgICBvcC5pZCA9PT0gYWN0aW9uLmlkID8gey4uLm9wLCAuLi5hY3Rpb24uY29uZmlnLCBlcnJvcjogYWN0aW9uLmNvbmZpZy5lcnJvciA/PyBudWxsfSA6IG9wXG4gICAgKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZVN1aXRhYmlsaXR5KFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1blN1aXRhYmlsaXR5VXBkYXRlckFjdGlvblxuKTogRGVyaXZlZERhdGFzZXRPcFJlc3VsdCB7XG4gIGNvbnN0IG9wID0gc3RhdGUuc3VpdGFiaWxpdGllcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gYWN0aW9uLmlkKTtcbiAgY29uc3QgZGF0YXNldCA9IG9wID8gc3RhdGUuZGF0YXNldHNbb3AuZGF0YUlkXSA6IHVuZGVmaW5lZDtcbiAgaWYgKCFvcCB8fCAhZGF0YXNldCB8fCAhT2JqZWN0LmtleXMob3Aud2VpZ2h0cykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlOiBzZXRTdWl0YWJpbGl0eUNvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgaWQ6IGFjdGlvbi5pZCxcbiAgICAgICAgY29uZmlnOiB7ZXJyb3I6ICdTZWxlY3QgYXQgbGVhc3Qgb25lIGZpZWxkIHRvIHNjb3JlJ31cbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdG8gPSBzdWl0YWJpbGl0eURhdGFzZXQoZGF0YXNldCwge1xuICAgICAgd2VpZ2h0czogb3Aud2VpZ2h0cyxcbiAgICAgIHdlaWdodFN0YW5kYXJkaXphdGlvbjogb3Aud2VpZ2h0U3RhbmRhcmRpemF0aW9uLFxuICAgICAgZGF0YVN0YW5kYXJkaXphdGlvbjogb3AuZGF0YVN0YW5kYXJkaXphdGlvbixcbiAgICAgIG91dHB1dEZpZWxkTmFtZTogb3Aub3V0cHV0RmllbGROYW1lLFxuICAgICAgY29sdW1uczogb3AuY29sdW1ucyxcbiAgICAgIGxhYmVsOiBvcC5yZXN1bHRMYWJlbCxcbiAgICAgIHJlc3VsdElkOiBvcC5yZXN1bHRJZCxcbiAgICAgIG9wZXJhdGlvbklkOiBvcC5pZFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3VpdGFiaWxpdGllczogc3RhdGUuc3VpdGFiaWxpdGllcy5tYXAoaXRlbSA9PlxuICAgICAgICAgIGl0ZW0uaWQgPT09IG9wLmlkID8gey4uLml0ZW0sIGlzQ29uZmlnQWN0aXZlOiBmYWxzZSwgZXJyb3I6IG51bGx9IDogaXRlbVxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcHJvdG9cbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZTogc2V0U3VpdGFiaWxpdHlDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIGlkOiBhY3Rpb24uaWQsXG4gICAgICAgIGNvbmZpZzoge2Vycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9XG4gICAgICB9KVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRPcFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldE9wVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGdyb3VwQnlzOiBzdGF0ZS5ncm91cEJ5cy5maWx0ZXIob3AgPT4gb3AuaWQgIT09IGFjdGlvbi5pZCksXG4gICAgam9pbnM6IHN0YXRlLmpvaW5zLmZpbHRlcihvcCA9PiBvcC5pZCAhPT0gYWN0aW9uLmlkKSxcbiAgICBzdWl0YWJpbGl0aWVzOiBzdGF0ZS5zdWl0YWJpbGl0aWVzLmZpbHRlcihvcCA9PiBvcC5pZCAhPT0gYWN0aW9uLmlkKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlT3BzRm9yRGF0YXNldHMoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWRzOiBzdHJpbmdbXSk6IFZpc1N0YXRlIHtcbiAgY29uc3QgaWRzID0gbmV3IFNldChkYXRhSWRzKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBncm91cEJ5czogc3RhdGUuZ3JvdXBCeXMuZmlsdGVyKG9wID0+ICFpZHMuaGFzKG9wLmRhdGFJZCkgJiYgIWlkcy5oYXMob3AucmVzdWx0SWQpKSxcbiAgICBqb2luczogc3RhdGUuam9pbnMuZmlsdGVyKFxuICAgICAgb3AgPT5cbiAgICAgICAgIWlkcy5oYXMob3AubGVmdERhdGFJZCkgJiZcbiAgICAgICAgIShvcC5yaWdodERhdGFJZCAmJiBpZHMuaGFzKG9wLnJpZ2h0RGF0YUlkKSkgJiZcbiAgICAgICAgIWlkcy5oYXMob3AucmVzdWx0SWQpXG4gICAgKSxcbiAgICBzdWl0YWJpbGl0aWVzOiBzdGF0ZS5zdWl0YWJpbGl0aWVzLmZpbHRlcihvcCA9PiAhaWRzLmhhcyhvcC5kYXRhSWQpICYmICFpZHMuaGFzKG9wLnJlc3VsdElkKSlcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQWEwQixTQUFBRSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEs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
|