@hestia-earth/ui-components 0.4.2 → 0.4.3
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/bundles/hestia-earth-ui-components.umd.js +109 -33
- package/bundles/hestia-earth-ui-components.umd.js.map +1 -1
- package/common/common.module.d.ts +9 -8
- package/common/index.d.ts +1 -0
- package/common/is-object.pipe.d.ts +7 -0
- package/esm2015/common/common.module.js +5 -1
- package/esm2015/common/index.js +2 -1
- package/esm2015/common/is-object.pipe.js +16 -0
- package/esm2015/node/node-logs-models/node-logs-models.component.js +28 -21
- package/esm2015/node/node-logs-models/node-logs-models.model.js +61 -16
- package/fesm2015/hestia-earth-ui-components.js +93 -26
- package/fesm2015/hestia-earth-ui-components.js.map +1 -1
- package/node/node-logs-models/node-logs-models.component.d.ts +3 -2
- package/node/node-logs-models/node-logs-models.model.d.ts +2 -0
- package/package.json +1 -1
|
@@ -4,12 +4,12 @@ import { from } from 'rxjs';
|
|
|
4
4
|
import { distinct, toArray, map } from 'rxjs/operators';
|
|
5
5
|
import { fileToExt, SupportedExtensions } from '@hestia-earth/api';
|
|
6
6
|
import { EmissionMethodTier, TermTermType, SchemaType, isTypeNode } from '@hestia-earth/schema';
|
|
7
|
-
import { unique, isUndefined } from '@hestia-earth/utils';
|
|
7
|
+
import { unique, isUndefined, isEmpty } from '@hestia-earth/utils';
|
|
8
8
|
import { propertyValue } from '@hestia-earth/utils/dist/term';
|
|
9
9
|
const get = require('lodash.get');
|
|
10
10
|
const set = require('lodash.set');
|
|
11
11
|
const orderBy = require('lodash.orderby');
|
|
12
|
-
import {
|
|
12
|
+
import { findModels, findMatchingModel, modelParams, modelKeyParams } from '../../engine/engine.service';
|
|
13
13
|
const termTypes = Object.values(TermTermType);
|
|
14
14
|
const blankNodeTypes = Object.values(SchemaType).filter(t => !isTypeNode(t));
|
|
15
15
|
const schemaTypesLowerCase = Object.values(SchemaType).map(v => v.toLowerCase());
|
|
@@ -175,7 +175,6 @@ const reduceValues = (values, termId) => {
|
|
|
175
175
|
return propertyValues.length ? propertyValues.reduce((p, v) => p + v, 0) : undefined;
|
|
176
176
|
};
|
|
177
177
|
const isRunOrchestrator = (log) => !('shouldRunOrchestrator' in log) || log.shouldRunOrchestrator;
|
|
178
|
-
const isBackground = (log) => (log === null || log === void 0 ? void 0 : log.methodTier) === EmissionMethodTier.background;
|
|
179
178
|
const hasLog = (log, withOrchestrator = true) => !!log && ('shouldRun' in log ||
|
|
180
179
|
'runRequired' in log ||
|
|
181
180
|
(withOrchestrator && 'shouldRunOrchestrator' in log));
|
|
@@ -196,6 +195,12 @@ const blankNodeValueByKey = {
|
|
|
196
195
|
? propertyValue((_a = values.find(({ inputs }) => (inputs || []).some(input => input['@id'] === id))) === null || _a === void 0 ? void 0 : _a.value, id)
|
|
197
196
|
: '';
|
|
198
197
|
},
|
|
198
|
+
transformation: (values, _k, id) => {
|
|
199
|
+
var _a;
|
|
200
|
+
return values.length
|
|
201
|
+
? propertyValue((_a = values.find(({ transformation }) => (transformation === null || transformation === void 0 ? void 0 : transformation['@id']) === id)) === null || _a === void 0 ? void 0 : _a.value, id)
|
|
202
|
+
: '';
|
|
203
|
+
},
|
|
199
204
|
default: (blankNodes, key) => {
|
|
200
205
|
const value = (blankNodes === null || blankNodes === void 0 ? void 0 : blankNodes.length) ? blankNodes[0][key] : null;
|
|
201
206
|
return ['string', 'number', 'boolean', 'undefined'].includes(typeof value)
|
|
@@ -206,11 +211,38 @@ const blankNodeValueByKey = {
|
|
|
206
211
|
}
|
|
207
212
|
};
|
|
208
213
|
const blankNodeValue = (blankNodes, key, id) => blankNodeValueByKey[key in blankNodeValueByKey ? key : 'default'](blankNodes, key, id);
|
|
214
|
+
const subValueLogKey = ({ key, id }) => key === 'transformation' ? key : (id || key || null);
|
|
209
215
|
const logSubValue = (logs, key, prop) => logs[key][prop] ? (Array.isArray(logs[key][prop]) ?
|
|
210
216
|
logs[key][prop].map(id => ({ key: prop, id })) :
|
|
211
217
|
{ key: prop, id: logs[key][prop] }) : undefined;
|
|
212
218
|
const logProperties = (nodes, models) => nodes.flatMap(node => (node.properties || []).map(({ term }) => term['@id'])).map(id => ({ key: 'property', id, configModels: findModels(models, id).map(({ model }) => model) }));
|
|
219
|
+
/**
|
|
220
|
+
* Include transformation model (copy Emissions from Transformation to Cycle) as subValue.
|
|
221
|
+
*
|
|
222
|
+
* @param emissions
|
|
223
|
+
* @returns
|
|
224
|
+
*/
|
|
225
|
+
const logEmissionTransformations = (emissions) => emissions.filter(({ transformation }) => !!(transformation === null || transformation === void 0 ? void 0 : transformation['@id'])).map(({ transformation }) => ({
|
|
226
|
+
id: transformation === null || transformation === void 0 ? void 0 : transformation['@id'],
|
|
227
|
+
key: 'transformation',
|
|
228
|
+
configModels: ['cycle']
|
|
229
|
+
}));
|
|
230
|
+
const includeCycleSubValue = (subValues) => subValues.some(v => v.key !== 'property');
|
|
231
|
+
const cycleSubValue = ({ termId, configModels, isRequired, subValues, original, recalculated }) => {
|
|
232
|
+
const originalValue = reduceValues(original.filter((v) => { var _a; return !((_a = v.inputs) === null || _a === void 0 ? void 0 : _a.length) && !v.transformation; }), termId);
|
|
233
|
+
const recalculatedValues = recalculated.filter((v) => { var _a; return !((_a = v.inputs) === null || _a === void 0 ? void 0 : _a.length) && !v.transformation; });
|
|
234
|
+
const recalculatedValue = reduceValues(recalculatedValues, termId);
|
|
235
|
+
return includeCycleSubValue(subValues) && !isEmpty(recalculatedValue) ? {
|
|
236
|
+
key: 'cycle',
|
|
237
|
+
configModels,
|
|
238
|
+
isRequired,
|
|
239
|
+
originalValue,
|
|
240
|
+
recalculatedValue,
|
|
241
|
+
isRecalculated: isRecalculated(recalculatedValues)
|
|
242
|
+
} : null;
|
|
243
|
+
};
|
|
213
244
|
const logSubValues = (allLogs, logs, original, recalculated, models, { nodeType, type, termId }) => mergeSubValues([
|
|
245
|
+
// include properties
|
|
214
246
|
...Object.keys(logs)
|
|
215
247
|
.filter(id => logs[id].isProperty)
|
|
216
248
|
.map(id => ({
|
|
@@ -218,6 +250,7 @@ const logSubValues = (allLogs, logs, original, recalculated, models, { nodeType,
|
|
|
218
250
|
key: 'property',
|
|
219
251
|
configModels: (logs[id].models || []).filter(v => hasLog(logs[id][v]))
|
|
220
252
|
})),
|
|
253
|
+
...(type === SchemaType.Emission ? logEmissionTransformations(recalculated) : []),
|
|
221
254
|
...Object.keys(logs).flatMap(key => [
|
|
222
255
|
logSubValue(logs, key, 'input'),
|
|
223
256
|
logSubValue(logs, key, 'property')
|
|
@@ -228,9 +261,9 @@ const logSubValues = (allLogs, logs, original, recalculated, models, { nodeType,
|
|
|
228
261
|
...logProperties(original, models),
|
|
229
262
|
...logProperties(recalculated, models)
|
|
230
263
|
])
|
|
231
|
-
.map(({ key, id, configModels }) => {
|
|
232
|
-
|
|
233
|
-
|
|
264
|
+
.map(({ key, id, configModels, originalValue, recalculatedValue }) => {
|
|
265
|
+
originalValue = originalValue || blankNodeValue(original, key, id);
|
|
266
|
+
recalculatedValue = recalculatedValue || blankNodeValue(recalculated, key, id);
|
|
234
267
|
return {
|
|
235
268
|
key,
|
|
236
269
|
id,
|
|
@@ -242,10 +275,9 @@ const logSubValues = (allLogs, logs, original, recalculated, models, { nodeType,
|
|
|
242
275
|
};
|
|
243
276
|
})
|
|
244
277
|
.filter(v => v.configModels.length > 0)
|
|
245
|
-
.map(v => v.key === '
|
|
246
|
-
// const hasKey = (blankNodes: blankNode[], key: string) => (blankNodes || []).some(n => key in n);
|
|
278
|
+
.map(v => v.key === 'input' ? dataWithConfigModelLogs(allLogs)(v) : dataWithConfigModelLogs(logs)(v));
|
|
247
279
|
const logKeys = (logs, original, recalculated, models, { nodeType, type, termId }) => Object.keys(logs)
|
|
248
|
-
.filter(key => logs[key].isKey)
|
|
280
|
+
.filter(key => logs[key].isKey && key !== 'transformation')
|
|
249
281
|
.map(key => ({
|
|
250
282
|
key,
|
|
251
283
|
configModels: (logs[key].models || [])
|
|
@@ -298,13 +330,14 @@ const configModelWithDocs = (models, { nodeType, type, termId, termType }, subVa
|
|
|
298
330
|
// handle "input.price"
|
|
299
331
|
findMatchingModel(models, modelKeyParams(node, `${type === null || type === void 0 ? void 0 : type.toLowerCase()}.${subValue === null || subValue === void 0 ? void 0 : subValue.key}`)) ||
|
|
300
332
|
// handle "input.hestiaAggregatedData"
|
|
301
|
-
findMatchingModel(models, modelKeyParams(node, `${type === null || type === void 0 ? void 0 : type.toLowerCase()}.${methodId}`))
|
|
333
|
+
findMatchingModel(models, modelKeyParams(node, `${type === null || type === void 0 ? void 0 : type.toLowerCase()}.${methodId}`)) ||
|
|
334
|
+
// handle "transformation"
|
|
335
|
+
findMatchingModel(models, modelKeyParams(node, subValue === null || subValue === void 0 ? void 0 : subValue.key))
|
|
302
336
|
};
|
|
303
337
|
};
|
|
304
338
|
const configModelWithLogs = (data, logs) => (model) => (Object.assign(Object.assign({}, model), { logs: logs === null || logs === void 0 ? void 0 : logs[model.methodId], status: logStatus(data, logs === null || logs === void 0 ? void 0 : logs[model.methodId]), showLogs: hasLogDetails(data, logs === null || logs === void 0 ? void 0 : logs[model.methodId]) }));
|
|
305
339
|
const dataWithConfigModelLogs = (logs) => (data) => {
|
|
306
|
-
const subLogKey = data
|
|
307
|
-
data.id || data.key : null;
|
|
340
|
+
const subLogKey = subValueLogKey(data);
|
|
308
341
|
const log = subLogKey ? logs[subLogKey] : logs;
|
|
309
342
|
return Object.assign(Object.assign({}, data), { configModels: data.configModels.map(model => Array.isArray(model) ? model.map(configModelWithLogs(data, log)) : configModelWithLogs(data, log)(model)) });
|
|
310
343
|
};
|
|
@@ -352,16 +385,16 @@ export const groupLogsByTerm = (nodeType, logs, models, config, allOriginalValue
|
|
|
352
385
|
const configModelsData = { nodeType, type, termId, termType };
|
|
353
386
|
const configModels = groupParallelModels(config, termId, nodeKey, unique([
|
|
354
387
|
...(termLogs.models || []).filter(key => isModelLog(termLogs[key])),
|
|
355
|
-
...findConfigModels(config, termId, nodeKey
|
|
388
|
+
// ...findConfigModels(config, termId, nodeKey!, models).map(({ model }) => model as string)
|
|
356
389
|
]).map(configModelWithDocs(models, configModelsData)));
|
|
357
390
|
const keys = logKeys(termLogs, original, recalculated, models, configModelsData);
|
|
358
391
|
const subValues = logSubValues(logs, termLogs, original, recalculated, models, configModelsData);
|
|
359
392
|
const isRequired = !Object.values(termLogs)
|
|
360
|
-
.filter(v => typeof v === 'object' && !Array.isArray(v))
|
|
393
|
+
.filter(v => typeof v === 'object' && !Array.isArray(v) && !v.isKey)
|
|
361
394
|
// ignore models that were never going to run
|
|
362
395
|
.filter(isRunOrchestrator)
|
|
363
396
|
.every(v => v.runRequired === false);
|
|
364
|
-
|
|
397
|
+
const nodeLog = dataWithConfigModelLogs(termLogs)({
|
|
365
398
|
isOpen: true,
|
|
366
399
|
canOpen: keys.length > 0 || subValues.length > 0,
|
|
367
400
|
termId,
|
|
@@ -383,6 +416,12 @@ export const groupLogsByTerm = (nodeType, logs, models, config, allOriginalValue
|
|
|
383
416
|
originalValueByMethodId: groupParallelValues(original, configModels[0], termId),
|
|
384
417
|
recalculatedValueByMethodId: groupParallelValues(recalculated, configModels[0], termId)
|
|
385
418
|
});
|
|
419
|
+
const subValue = cycleSubValue(nodeLog);
|
|
420
|
+
return subValue
|
|
421
|
+
? Object.assign(Object.assign({}, nodeLog), { modelsInSubValues: true, subValues: [
|
|
422
|
+
subValue,
|
|
423
|
+
...subValues
|
|
424
|
+
] }) : nodeLog;
|
|
386
425
|
};
|
|
387
426
|
};
|
|
388
427
|
export const modelCount = (blankNodeLogs) => Math.max.apply(Math.max, [
|
|
@@ -393,4 +432,10 @@ export const modelCount = (blankNodeLogs) => Math.max.apply(Math.max, [
|
|
|
393
432
|
...(v.keys.map(s => { var _a; return ((_a = s.configModels) === null || _a === void 0 ? void 0 : _a.length) || 0; }))
|
|
394
433
|
])
|
|
395
434
|
]);
|
|
396
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFDSyxrQkFBa0IsRUFDbEIsWUFBWSxFQUFZLFVBQVUsRUFBRSxVQUFVLEVBQ3pELE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUUxQyxPQUFPLEVBQzBDLGdCQUFnQixFQUFFLFVBQVUsRUFDM0UsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFDL0MsTUFBTSw2QkFBNkIsQ0FBQztBQW9DckMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUU5QyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENB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QUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBQyxPQUFBLENBQUEsTUFBQSxDQUFDLENBQUMsWUFBWSwwQ0FBRSxNQUFNLEtBQUksQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO0tBQ2xELENBQUM7Q0FDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdCwgdG9BcnJheSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZmlsZVRvRXh0LCBTdXBwb3J0ZWRFeHRlbnNpb25zIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHtcbiAgRW1pc3Npb24sIEVtaXNzaW9uTWV0aG9kVGllciwgSVRlcm1KU09OTEQsIFByb2R1Y3QsIElucHV0IGFzIEhlc3RpYUlucHV0LFxuICBOb2RlVHlwZSwgVGVybVRlcm1UeXBlLCBQcm9wZXJ0eSwgU2NoZW1hVHlwZSwgaXNUeXBlTm9kZVxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB1bmlxdWUsIGlzVW5kZWZpbmVkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscy9kaXN0L3Rlcm0nO1xuY29uc3QgZ2V0ID0gcmVxdWlyZSgnbG9kYXNoLmdldCcpO1xuY29uc3Qgc2V0ID0gcmVxdWlyZSgnbG9kYXNoLnNldCcpO1xuY29uc3Qgb3JkZXJCeSA9IHJlcXVpcmUoJ2xvZGFzaC5vcmRlcmJ5Jyk7XG5cbmltcG9ydCB7XG4gIElPcmNoZXN0cmF0b3JDb25maWcsIElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZywgZmluZENvbmZpZ01vZGVscywgZmluZE1vZGVscywgSU1vZGVsLFxuICBmaW5kTWF0Y2hpbmdNb2RlbCwgbW9kZWxQYXJhbXMsIG1vZGVsS2V5UGFyYW1zXG59IGZyb20gJy4uLy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVNaXNzaW5nTG9va3VwTG9nIHtcbiAgZmlsZW5hbWU6IHN0cmluZztcbiAgdGVybUlkOiBzdHJpbmc7XG4gIGNvbHVtbjogc3RyaW5nO1xuICAvLyBhdHRyaWJ1dGVzIGxpbmtlZCB0byB0aGUgbW9kZWxzXG4gIG1vZGVsPzogc3RyaW5nO1xuICB0ZXJtPzogc3RyaW5nO1xuICBrZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVUZXJtTG9nIHtcbiAgcnVuUmVxdWlyZWQ/OiBib29sZWFuO1xuICBzaG91bGRSdW4/OiBib29sZWFuO1xuICBzaG91bGRSdW5PcmNoZXN0cmF0b3I/OiBib29sZWFuO1xuICBtaXNzaW5nTG9va3Vwcz86IElOb2RlTWlzc2luZ0xvb2t1cExvZ1tdO1xuICByZXF1aXJlbWVudHM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICBsb2dzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICAvLyBwb3NzaWJsZSBzdWIgdmFsdWVzXG4gIGlucHV0Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHByb3BlcnR5Pzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVUZXJtTG9ncyB7XG4gIFttb2RlbEtleTogc3RyaW5nXTogYW55IHwgSU5vZGVUZXJtTG9nO1xuICBtb2RlbHM6IHN0cmluZ1tdO1xuICBpc0tleT86IGJvb2xlYW47XG4gIGlzUHJvcGVydHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlTG9ncyB7XG4gIFt0ZXJtOiBzdHJpbmddOiBJTm9kZVRlcm1Mb2dzO1xufVxuXG5jb25zdCB0ZXJtVHlwZXMgPSBPYmplY3QudmFsdWVzKFRlcm1UZXJtVHlwZSk7XG5cbmNvbnN0IGJsYW5rTm9kZVR5cGVzID0gT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKS5maWx0ZXIodCA9PiAhaXNUeXBlTm9kZSh0KSk7XG5cbmNvbnN0IHNjaGVtYVR5cGVzTG93ZXJDYXNlID0gT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKS5tYXAodiA9PiB2LnRvTG93ZXJDYXNlKCkpO1xuXG5jb25zdCBibGFua05vZGVUeXBlc0xvd2VyQ2FzZSA9IGJsYW5rTm9kZVR5cGVzLm1hcCh2ID0+IHYudG9Mb3dlckNhc2UoKSk7XG5cbmNvbnN0IG1pc3NpbmdMb29rdXBQcmVmaXggPSAnTWlzc2luZyBsb29rdXAnO1xuXG5jb25zdCBwYXJzZUZpbGVuYW1lID0gKGZpbGVwYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgW2ZpbGVuYW1lXSA9IGZpbGVwYXRoLnNwbGl0KCcuJyk7XG4gIGNvbnN0IGV4dCA9IHRlcm1UeXBlcy5pbmNsdWRlcyhmaWxlbmFtZSBhcyBhbnkpID8gU3VwcG9ydGVkRXh0ZW5zaW9ucy54bHN4IDogU3VwcG9ydGVkRXh0ZW5zaW9ucy5jc3Y7XG4gIHJldHVybiBmaWxlVG9FeHQoZmlsZW5hbWUsIGV4dCk7XG59O1xuXG5jb25zdCBwYXJzZUxvb2t1cCA9ICh7IGNvbHVtbiwgdGVybWlkLCBbbWlzc2luZ0xvb2t1cFByZWZpeF06IG1pc3NpbmdMb29rdXAgfSkgPT4gKHtcbiAgZmlsZW5hbWU6IHBhcnNlRmlsZW5hbWUobWlzc2luZ0xvb2t1cCksIHRlcm1JZDogdGVybWlkLCBjb2x1bW5cbn0pO1xuXG5jb25zdCBjc3ZWYWx1ZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiAodmFsdWUgfHwgJycpLnJlcGxhY2UoJ1snLCAnJykucmVwbGFjZSgnXScsICcnKTtcblxuY29uc3QgcGFyc2VNZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKG1lc3NhZ2UpO1xuICAgIHJldHVybiBkYXRhLm1lc3NhZ2Uuc3BsaXQoJywnKS5yZWR1Y2UoKHByZXYsIHBhcnRzKSA9PiB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJ0cy5zcGxpdCgnPScpO1xuICAgICAgY29uc3QgdmFsID0gY3N2VmFsdWUodmFsdWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgLi4uKGtleSAmJiB2YWwgPyB7IFtrZXkudHJpbSgpXTogdmFsIH0gOiB7fSlcbiAgICAgIH07XG4gICAgfSwgeyBsb2dnZXI6IGRhdGEubG9nZ2VyIH0pO1xuICB9XG4gIGNhdGNoIChlcnIpIHtcbiAgICAvLyBtYWtlIHN1cmUgaXQgd29ya3MgZXZlbiBpZiBvbmUgbG9nIGlzIG1hbGZvcm1lZFxuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuY29uc3Qgb21pdExvZ0tleXMgPSAobG9nOiBhbnkpID0+XG4gIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhsb2cpLmZpbHRlcigoW2tleV0pID0+ICFzY2hlbWFUeXBlc0xvd2VyQ2FzZS5pbmNsdWRlcyhrZXkpKSk7XG5cbmNvbnN0IGluY2x1ZGVCbGFua05vZGVzID0gKGxvZ3MsIGxvZykgPT5cbiAgT2JqZWN0XG4gICAgLmtleXMobG9nKVxuICAgIC5maWx0ZXIoa2V5ID0+IGJsYW5rTm9kZVR5cGVzTG93ZXJDYXNlLmluY2x1ZGVzKGtleSkpXG4gICAgLnJlZHVjZSgocHJldiwga2V5KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtrZXldOiB1bmlxdWUoW1xuICAgICAgICAuLi4oKHR5cGVvZiBwcmV2W2tleV0gPT09ICdzdHJpbmcnID8gW3ByZXZba2V5XV0gOiBwcmV2W2tleV0pIHx8IFtdKSxcbiAgICAgICAgbG9nW2tleV1cbiAgICAgIF0pXG4gICAgfSksIGxvZ3MpO1xuXG5jb25zdCBncm91cExvZyA9IChncm91cCwgeyBsb2dnZXIsIHRlcm0sIG1vZGVsLCBrZXksIHNob3VsZF9ydW4sIHJ1bl9yZXF1aXJlZCwgcHJvcGVydHksIC4uLmxvZyB9OiBhbnkpID0+IHtcbiAgY29uc3QgaXNPcmNoZXN0cmF0b3IgPSBsb2dnZXIuaW5jbHVkZXMoJ29yY2hlc3RyYXRvcicpO1xuICBjb25zdCBpc0tleSA9ICFpc09yY2hlc3RyYXRvciAmJiAhIWtleTtcbiAgY29uc3QgaXNQcm9wZXJ0eSA9ICFpc09yY2hlc3RyYXRvciAmJiAhIXByb3BlcnR5O1xuICBjb25zdCBwYXJlbnRMb2dLZXkgPSBbYFtcIiR7dGVybX1cIl1gLCAhaXNPcmNoZXN0cmF0b3IgJiYga2V5IHx8IHByb3BlcnR5XS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuICBjb25zdCBsb2dNb2RlbEtleSA9IFtwYXJlbnRMb2dLZXksIG1vZGVsXS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuXG4gIHNldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5tb2RlbHNgLCB1bmlxdWUoW1xuICAgIC4uLmdldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5tb2RlbHNgLCBbXSksXG4gICAgbW9kZWxcbiAgXSkpO1xuICBzZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0uaXNLZXlgLCBpc0tleSk7XG4gIHNldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5pc1Byb3BlcnR5YCwgaXNQcm9wZXJ0eSk7XG5cbiAgbGV0IGRhdGEgPSBnZXQoZ3JvdXAsIGxvZ01vZGVsS2V5LCB7fSk7XG5cbiAgZGF0YSA9IGluY2x1ZGVCbGFua05vZGVzKGRhdGEsIGxvZyk7XG5cbiAgaWYgKHR5cGVvZiBzaG91bGRfcnVuICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHNob3VsZFJ1biA9IHNob3VsZF9ydW4gPT09ICdUcnVlJztcblxuICAgIGRhdGEgPSBpc09yY2hlc3RyYXRvciA/XG4gICAgICB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHNob3VsZFJ1bk9yY2hlc3RyYXRvcjogc2hvdWxkUnVuXG4gICAgICB9IDpcbiAgICAgIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLi4ub21pdExvZ0tleXMobG9nKSxcbiAgICAgICAgc2hvdWxkUnVuXG4gICAgICB9O1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBydW5fcmVxdWlyZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgcnVuUmVxdWlyZWQgPSBydW5fcmVxdWlyZWQgPT09ICdUcnVlJztcblxuICAgIGRhdGEgPSAge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIC4uLihydW5SZXF1aXJlZCA/IHt9IDogb21pdExvZ0tleXMobG9nKSksIC8vIG5vIG5lZWQgdG8gc2F2ZSBsb2dzIGlmIHdlIG5lZWQgdG8gcnVuIHRoZSBtb2RlbFxuICAgICAgcnVuUmVxdWlyZWRcbiAgICB9O1xuICB9XG4gIGVsc2UgaWYgKCdyZXF1aXJlbWVudHMnIGluIGxvZykge1xuICAgIGNvbnN0IHsgcmVxdWlyZW1lbnRzLCAuLi5sb2dEYXRhIH0gPSBsb2c7XG5cbiAgICBkYXRhLnJlcXVpcmVtZW50cyA9IHtcbiAgICAgIC4uLihkYXRhLnJlcXVpcmVtZW50cyB8fCB7fSksXG4gICAgICAuLi5sb2dEYXRhXG4gICAgfTtcbiAgfVxuICBlbHNlIGlmIChtaXNzaW5nTG9va3VwUHJlZml4IGluIGxvZykge1xuICAgIGRhdGEubWlzc2luZ0xvb2t1cHMgPSB1bmlxdWUoW1xuICAgICAgLi4uKGRhdGEubWlzc2luZ0xvb2t1cHMgfHwgW10pLFxuICAgICAgcGFyc2VMb29rdXAobG9nKVxuICAgIF0pO1xuICB9XG4gIGVsc2UgaWYgKCFpc09yY2hlc3RyYXRvcikge1xuICAgIGRhdGEubG9ncyA9IHtcbiAgICAgIC4uLihkYXRhLmxvZ3MgfHwge30pLFxuICAgICAgLi4ub21pdExvZ0tleXMobG9nKVxuICAgIH07XG4gIH1cblxuICBzZXQoZ3JvdXAsIGxvZ01vZGVsS2V5LCBkYXRhKTtcbiAgcmV0dXJuIGdyb3VwO1xufTtcblxuY29uc3QgZ3JvdXBMb2dTdWJWYWx1ZSA9IChncm91cCwgbG9nLCBrZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCBpZCA9IGxvZ1trZXldO1xuICBjb25zdCBkYXRhID0gZ3JvdXBMb2coZ3JvdXBbaWRdIHx8IHt9LCBsb2cpO1xuICBncm91cFtpZF0gPSBkYXRhO1xuXG4gIGlmIChrZXkgPT09ICd0cmFuc2Zvcm1hdGlvbicpIHtcbiAgICAvLyBhZGQgdmFsdWUgdG8gdGhlIHNhbWUgdGVybS9tb2RlbCBvbiBwYXJlbnQgZ3JvdXBcbiAgICBPYmplY3QuZW50cmllcyhncm91cFtpZF0pLm1hcCgoW3Rlcm0sIG1vZGVsc10pID0+XG4gICAgICBPYmplY3Qua2V5cyhtb2RlbHMpLm1hcChtb2RlbCA9PiB7XG4gICAgICAgIGlmIChncm91cD8uW3Rlcm1dPy5bbW9kZWxdKSB7XG4gICAgICAgICAgZ3JvdXBbdGVybV1bbW9kZWxdW2tleV0gPSB1bmlxdWUoW1xuICAgICAgICAgICAgLi4uKGdyb3VwW3Rlcm1dW21vZGVsXVtrZXldIHx8IFtdKSxcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBncm91cDtcbn07XG5cbmNvbnN0IHN1YlZhbHVlS2V5cyA9IFtcbiAgJ3RyYW5zZm9ybWF0aW9uJ1xuXTtcblxuZXhwb3J0IGNvbnN0IGdyb3VwTG9nc0J5TW9kZWwgPSAoZGF0YTogc3RyaW5nKTogSU5vZGVMb2dzID0+XG4gIGRhdGEudHJpbSgpLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAocGFyc2VNZXNzYWdlKVxuICAgIC5maWx0ZXIodiA9PiAhIXY/LnRlcm0gJiYgdj8udGVybSAhPT0gJ05vbmUnICYmICEhdj8ubW9kZWwpXG4gICAgLnJlZHVjZSgoZ3JvdXAsIGxvZykgPT4ge1xuICAgICAgY29uc3Qgc3ViVmFsdWUgPSBzdWJWYWx1ZUtleXMuZmluZCh2ID0+ICEhbG9nW3ZdKTtcbiAgICAgIHJldHVybiBzdWJWYWx1ZSA/XG4gICAgICAgIHN1YlZhbHVlID09PSAndHJhbnNmb3JtYXRpb24nID9cbiAgICAgICAgICAvLyBmb3IgdHJhbnNmb3JtYXRpb24sIGRvIG5vdCBhZGQgdG8gdG9wLWxldmVsIG1vZGVsXG4gICAgICAgICAgZ3JvdXBMb2dTdWJWYWx1ZShncm91cCwgbG9nLCBzdWJWYWx1ZSkgOlxuICAgICAgICAgIGdyb3VwTG9nKGdyb3VwTG9nU3ViVmFsdWUoZ3JvdXAsIGxvZywgc3ViVmFsdWUpLCBsb2cpXG4gICAgICAgIDogZ3JvdXBMb2coZ3JvdXAsIGxvZyk7XG4gICAgfSwge30pO1xuXG5leHBvcnQgY29uc3QgY29tcHV0ZVRlcm1zID0gKFxuICBvcmlnaW5hbFZhbHVlczogYmxhbmtOb2RlW10sIHJlY2FsY3VsYXRlZFZhbHVlczogYmxhbmtOb2RlW10sIHRlcm1zPzogSVRlcm1KU09OTERbXSwgZmlsdGVyVGVybVR5cGVzPzogVGVybVRlcm1UeXBlW11cbikgPT4gZnJvbShcbiAgICB0ZXJtcz8ubGVuZ3RoID9cbiAgICAgIHRlcm1zIDpcbiAgICAgIFtcbiAgICAgICAgLi4uKG9yaWdpbmFsVmFsdWVzIHx8IFtdKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKSxcbiAgICAgICAgLi4uKHJlY2FsY3VsYXRlZFZhbHVlcyB8fCBbXSkubWFwKCh7IHRlcm0gfSkgPT4gdGVybSlcbiAgICAgIF0uZmlsdGVyKG5vZGUgPT4gIWZpbHRlclRlcm1UeXBlcz8ubGVuZ3RoIHx8IGZpbHRlclRlcm1UeXBlcy5pbmNsdWRlcyhub2RlLnRlcm1UeXBlKSlcbiAgKS5waXBlKFxuICAgIGRpc3RpbmN0KHYgPT4gdiFbJ0BpZCddKSxcbiAgICB0b0FycmF5KCksXG4gICAgbWFwKHYgPT4gb3JkZXJCeSh2LCBbJ25hbWUnXSwgWydhc2MnXSkpXG4gICkudG9Qcm9taXNlKCk7XG5cbmV4cG9ydCB0eXBlIGJsYW5rTm9kZSA9IEVtaXNzaW9uIHwgUHJvZHVjdCB8IEhlc3RpYUlucHV0IHwgUHJvcGVydHk7XG5cbmV4cG9ydCBlbnVtIExvZ1N0YXR1cyB7XG4gIHN1Y2Nlc3MgPSAnc3VjY2Vzc2Z1bCcsXG4gIGVycm9yID0gJ2ZhaWxlZCcsXG4gIHNraXBIaWVyYXJjaHkgPSAnbm90IHJ1biAobW9kZWwgaGlnaGVyIHVwIGhpZXJhcmNoeSBydW4gaW5zdGVhZCknLFxuICBkYXRhUHJvdmlkZWQgPSAnbm90IHJ1biAodXNlciBwcm92aWRlZCBkYXRhIHJldGFpbmVkKScsXG4gIG5vdFJlcXVpcmVkID0gJ25vdCByZWxldmFudCdcbn1cblxuY29uc3QgaGFzTG9nRGV0YWlscyA9IChkYXRhOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUgfCBJQmxhbmtOb2RlTG9nLCBsb2dzPzogSU5vZGVUZXJtTG9nKSA9PlxuICBbXG4gICAgTG9nU3RhdHVzLnN1Y2Nlc3MsXG4gICAgTG9nU3RhdHVzLmVycm9yXG4gIF0uaW5jbHVkZXMobG9nU3RhdHVzKGRhdGEsIGxvZ3MpKSAmJiAoXG4gICAgbG9ncz8ucmVxdWlyZW1lbnRzIHx8IGxvZ3M/LmxvZ3MgfHwgbG9ncz8ubWlzc2luZ0xvb2t1cHM/Lmxlbmd0aFxuICApO1xuXG5jb25zdCBsb2dTdGF0dXMgPSAoZGF0YTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIHwgSUJsYW5rTm9kZUxvZywgbG9ncz86IElOb2RlVGVybUxvZykgPT5cbiAgaGFzTG9nKGxvZ3MpXG4gICAgPyAoXG4gICAgICAhZGF0YS5pc1JlcXVpcmVkXG4gICAgICAgID8gTG9nU3RhdHVzLm5vdFJlcXVpcmVkXG4gICAgICAgIDogaXNSdW5PcmNoZXN0cmF0b3IobG9ncylcbiAgICAgICAgICA/IChcbiAgICAgICAgICAgICdzaG91bGRSdW4nIGluIGxvZ3NcbiAgICAgICAgICAgICAgPyBsb2dzLnNob3VsZFJ1blxuICAgICAgICAgICAgICAgID8gZGF0YS5pc1JlY2FsY3VsYXRlZFxuICAgICAgICAgICAgICAgICAgPyBMb2dTdGF0dXMuc3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgICAgICAgICAgICAgOiBMb2dTdGF0dXMuZXJyb3JcbiAgICAgICAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgICAgICAgKVxuICAgICAgICAgIDogZGF0YS5pc1JlY2FsY3VsYXRlZFxuICAgICAgICAgICAgPyBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeVxuICAgICAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgKVxuICAgIDogKFxuICAgICAgW1xuICAgICAgICB0eXBlb2YgZGF0YS5vcmlnaW5hbFZhbHVlID09PSAndW5kZWZpbmVkJywgLy8gbm8gb3JpZ2luYWwgdmFsdWVcbiAgICAgICAgZGF0YS5pc1JlY2FsY3VsYXRlZCAvLyBpcyByZWNhbGN1bGF0ZWRcbiAgICAgIF0uZXZlcnkoQm9vbGVhbilcbiAgICAgICAgPyBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeVxuICAgICAgICA6IExvZ1N0YXR1cy5kYXRhUHJvdmlkZWRcbiAgICApO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWdNb2RlbCB7XG4gIG1ldGhvZElkOiBzdHJpbmc7XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2c7XG4gIGhhc0xvZ3M/OiBib29sZWFuO1xuICBzdGF0dXM/OiBMb2dTdGF0dXM7XG4gIG1vZGVsPzogSU1vZGVsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2dTdWJWYWx1ZSB7XG4gIGtleTogc3RyaW5nO1xuICBvcmlnaW5hbFZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpZD86IGFueTtcbiAgY29uZmlnTW9kZWxzPzogSUNvbmZpZ01vZGVsW107XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2cge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGNhbk9wZW46IGJvb2xlYW47XG4gIHRlcm06IElUZXJtSlNPTkxEO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAgdHlwZT86IFNjaGVtYVR5cGU7XG4gIGNvbmZpZ01vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdO1xuICBvcmlnaW5hbDogYmxhbmtOb2RlW107XG4gIG9yaWdpbmFsVmFsdWU6IG51bWJlcjtcbiAgLy8gd2hlbiBtdWx0aXBsZSBtb2RlbHMgYXJlIHJ1bm5pbmcgaW4gcGFyYWxsZWxcbiAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ/OiB7XG4gICAgW21ldGhvZElkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG4gIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW107XG4gIHJlY2FsY3VsYXRlZFZhbHVlOiBudW1iZXI7XG4gIC8vIHdoZW4gbXVsdGlwbGUgbW9kZWxzIGFyZSBydW5uaW5nIGluIHBhcmFsbGVsXG4gIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZD86IHtcbiAgICBbbWV0aG9kSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgfTtcbiAgaXNPcmlnaW5hbDogYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGhhc0RhdGE6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xuICBrZXlzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgLy8gY29udGFpbnMgbXVsdGlwbGUgbW9kZWxzIGFsbCBydW5uaW5nIGluIHBhcmFsbGVsXG4gIGFsbFBhcmFsbGVsPzogYm9vbGVhbjtcbn1cblxuY29uc3QgbWVyZ2VTdWJWYWx1ZXMgPSAodmFsdWVzOiBhbnlbXSk6IGFueVtdID0+XG4gIE9iamVjdC52YWx1ZXMoXG4gICAgdmFsdWVzLnJlZHVjZSgocHJldiwgeyBpZCwga2V5LCBjb25maWdNb2RlbHMgfSkgPT4ge1xuICAgICAgY29uc3QgdW5pcXVlS2V5ID0gW2tleSwgaWRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG4gICAgICBwcmV2W3VuaXF1ZUtleV0gPSB7XG4gICAgICAgIGlkLCBrZXksIGNvbmZpZ01vZGVsczogWy4uLigocHJldlt1bmlxdWVLZXldIHx8IHt9KS5jb25maWdNb2RlbHMgfHwgW10pLCAuLi4oY29uZmlnTW9kZWxzIHx8IFtdKV1cbiAgICAgIH07XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSlcbiAgKTtcblxuY29uc3QgcmVkdWNlVmFsdWVzID0gKHZhbHVlczogYW55W10sIHRlcm1JZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzID0gdmFsdWVzXG4gICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiBwcm9wZXJ0eVZhbHVlKHZhbHVlLCB0ZXJtSWQpKVxuICAgIC8vIHByb3BlcnR5VmFsdWUgbWF5IHJldHVybiBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gdG90YWxcbiAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG4gIHJldHVybiBwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPyBwcm9wZXJ0eVZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyB2LCAwKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGlzUnVuT3JjaGVzdHJhdG9yID0gKGxvZzogSU5vZGVUZXJtTG9nKSA9PiAhKCdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZykgfHwgbG9nLnNob3VsZFJ1bk9yY2hlc3RyYXRvcjtcblxuY29uc3QgaXNCYWNrZ3JvdW5kID0gKGxvZzogSU5vZGVUZXJtTG9nKSA9PiBsb2c/Lm1ldGhvZFRpZXIgPT09IEVtaXNzaW9uTWV0aG9kVGllci5iYWNrZ3JvdW5kO1xuXG5jb25zdCBoYXNMb2cgPSAobG9nOiBJTm9kZVRlcm1Mb2csIHdpdGhPcmNoZXN0cmF0b3IgPSB0cnVlKSA9PlxuICAhIWxvZyAmJiAoXG4gICAgJ3Nob3VsZFJ1bicgaW4gbG9nIHx8XG4gICAgJ3J1blJlcXVpcmVkJyBpbiBsb2cgfHxcbiAgICAod2l0aE9yY2hlc3RyYXRvciAmJiAnc2hvdWxkUnVuT3JjaGVzdHJhdG9yJyBpbiBsb2cpXG4gICk7XG5cbmNvbnN0IGlzUmVjYWxjdWxhdGVkID0gKHZhbHVlczogYmxhbmtOb2RlW10sIGtleSA9ICd2YWx1ZScpID0+IHZhbHVlcy5zb21lKHYgPT4gKFtcbiAgLi4uKHYuYWRkZWQgfHwgW10pLFxuICAuLi4odi51cGRhdGVkIHx8IFtdKVxuXSkuaW5jbHVkZXMoa2V5KSk7XG5cbmNvbnN0IGJsYW5rTm9kZVZhbHVlQnlLZXk6IHtcbiAgW2tleTogc3RyaW5nXTogKHZhbHVlczogYmxhbmtOb2RlW10sIGtleT86IHN0cmluZywgaWQ/OiBzdHJpbmcpID0+IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW47XG59ID0ge1xuICBwcm9wZXJ0eTogKHZhbHVlczogKEVtaXNzaW9uIHwgUHJvZHVjdCB8IEhlc3RpYUlucHV0KVtdLCBfaywgaWQpID0+ICEhaWQgJiYgdmFsdWVzPy5sZW5ndGhcbiAgICA/ICh2YWx1ZXNbMF0ucHJvcGVydGllcyB8fCBbXSkuZmluZChwID0+IHAudGVybVsnQGlkJ10gPT09IGlkKT8udmFsdWUgfHwgJydcbiAgICA6ICcnLFxuICBpbnB1dDogKHZhbHVlczogRW1pc3Npb25bXSwgX2ssIGlkKSA9PiAhIWlkICYmIHZhbHVlcz8ubGVuZ3RoXG4gICAgPyBwcm9wZXJ0eVZhbHVlKHZhbHVlcy5maW5kKCh7IGlucHV0cyB9KSA9PiAoaW5wdXRzIHx8IFtdKS5zb21lKGlucHV0ID0+IGlucHV0WydAaWQnXSA9PT0gaWQpKT8udmFsdWUsIGlkKVxuICAgIDogJycsXG4gIGRlZmF1bHQ6IChibGFua05vZGVzLCBrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGJsYW5rTm9kZXM/Lmxlbmd0aCA/IGJsYW5rTm9kZXNbMF1ba2V5XSA6IG51bGw7XG4gICAgcmV0dXJuIFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJywgJ3VuZGVmaW5lZCddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSlcbiAgICAgID8gaXNVbmRlZmluZWQodmFsdWUpXG4gICAgICA/ICcnXG4gICAgICA6IHZhbHVlXG4gICAgICA6IG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IGJsYW5rTm9kZVZhbHVlID0gKGJsYW5rTm9kZXM6IGJsYW5rTm9kZVtdLCBrZXk6IHN0cmluZywgaWQ/OiBzdHJpbmcpID0+XG4gIGJsYW5rTm9kZVZhbHVlQnlLZXlba2V5IGluIGJsYW5rTm9kZVZhbHVlQnlLZXkgPyBrZXkgOiAnZGVmYXVsdCddKGJsYW5rTm9kZXMsIGtleSwgaWQpO1xuXG5jb25zdCBsb2dTdWJWYWx1ZSA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZywgcHJvcDogc3RyaW5nKSA9PlxuICBsb2dzW2tleV1bcHJvcF0gPyAoXG4gICAgQXJyYXkuaXNBcnJheShsb2dzW2tleV1bcHJvcF0pID9cbiAgICAgIChsb2dzW2tleV1bcHJvcF0gYXMgc3RyaW5nW10pLm1hcChpZCA9PiAoeyBrZXk6IHByb3AsIGlkIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSkgOlxuICAgICAgeyBrZXk6IHByb3AsIGlkOiBsb2dzW2tleV1bcHJvcF0gfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWVcbiAgKSA6IHVuZGVmaW5lZDtcblxuY29uc3QgbG9nUHJvcGVydGllcyA9IChub2RlczogYmxhbmtOb2RlW10sIG1vZGVsczogSU1vZGVsW10pID0+XG4gIG5vZGVzLmZsYXRNYXAobm9kZSA9PlxuICAgICgobm9kZSBhcyBhbnkpLnByb3BlcnRpZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm1bJ0BpZCddKVxuICApLm1hcChpZCA9PiAoeyBrZXk6ICdwcm9wZXJ0eScsIGlkLCBjb25maWdNb2RlbHM6IGZpbmRNb2RlbHMobW9kZWxzLCBpZCkubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsKSB9KSk7XG5cbmNvbnN0IGxvZ1N1YlZhbHVlcyA9IChcbiAgYWxsTG9nczogSU5vZGVMb2dzLCBsb2dzOiBJTm9kZVRlcm1Mb2dzLCBvcmlnaW5hbDogYmxhbmtOb2RlW10sIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW10sIG1vZGVsczogSU1vZGVsW10sXG4gIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9OiBJQ29uZmlnTW9kZWxEb2NzRGF0YVxuKTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW10gPT5cbiAgbWVyZ2VTdWJWYWx1ZXMoW1xuICAgIC4uLk9iamVjdC5rZXlzKGxvZ3MpXG4gICAgICAuZmlsdGVyKGlkID0+IGxvZ3NbaWRdLmlzUHJvcGVydHkpXG4gICAgICAubWFwKGlkID0+ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBrZXk6ICdwcm9wZXJ0eScsXG4gICAgICAgIGNvbmZpZ01vZGVsczogKGxvZ3NbaWRdLm1vZGVscyB8fCBbXSkuZmlsdGVyKHYgPT4gaGFzTG9nKGxvZ3NbaWRdW3ZdKSlcbiAgICAgIH0pKSxcbiAgICAuLi5PYmplY3Qua2V5cyhsb2dzKS5mbGF0TWFwKGtleSA9PlxuICAgICAgW1xuICAgICAgICBsb2dTdWJWYWx1ZShsb2dzLCBrZXksICdpbnB1dCcpLFxuICAgICAgICBsb2dTdWJWYWx1ZShsb2dzLCBrZXksICdwcm9wZXJ0eScpXG4gICAgICBdXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAubWFwKHYgPT4gKHsgLi4udiwgY29uZmlnTW9kZWxzOiAodi5jb25maWdNb2RlbHMgYXMgYW55W10pIHx8IFtrZXldIH0pKVxuICAgICksXG4gICAgLi4ubG9nUHJvcGVydGllcyhvcmlnaW5hbCwgbW9kZWxzKSxcbiAgICAuLi5sb2dQcm9wZXJ0aWVzKHJlY2FsY3VsYXRlZCwgbW9kZWxzKVxuICBdKVxuICAgIC5tYXAoKHsga2V5LCBpZCwgY29uZmlnTW9kZWxzIH0pID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSBibGFua05vZGVWYWx1ZShvcmlnaW5hbCwga2V5LCBpZCk7XG4gICAgICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZSA9IGJsYW5rTm9kZVZhbHVlKHJlY2FsY3VsYXRlZCwga2V5LCBpZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksXG4gICAgICAgIGlkLFxuICAgICAgICBjb25maWdNb2RlbHM6IGNvbmZpZ01vZGVscy5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9LCB7IGtleSwgaWQgfSBhcyBhbnkpKSxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWUsXG4gICAgICAgIGlzUmVjYWxjdWxhdGVkOiAhaXNVbmRlZmluZWQocmVjYWxjdWxhdGVkVmFsdWUpICYmIHJlY2FsY3VsYXRlZFZhbHVlICE9PSBvcmlnaW5hbFZhbHVlLFxuICAgICAgICBpc1JlcXVpcmVkOiB0cnVlXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcih2ID0+IHYuY29uZmlnTW9kZWxzLmxlbmd0aCA+IDApXG4gICAgLm1hcCh2ID0+IHYua2V5ID09PSAncHJvcGVydHknID8gZGF0YVdpdGhDb25maWdNb2RlbExvZ3MobG9ncykodikgOiBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyhhbGxMb2dzKSh2KSk7XG5cbi8vIGNvbnN0IGhhc0tleSA9IChibGFua05vZGVzOiBibGFua05vZGVbXSwga2V5OiBzdHJpbmcpID0+IChibGFua05vZGVzIHx8IFtdKS5zb21lKG4gPT4ga2V5IGluIG4pO1xuXG5jb25zdCBsb2dLZXlzID0gKFxuICBsb2dzOiBJTm9kZVRlcm1Mb2dzLCBvcmlnaW5hbDogYmxhbmtOb2RlW10sIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW10sIG1vZGVsczogSU1vZGVsW10sIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9XG4pOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXSA9PlxuICBPYmplY3Qua2V5cyhsb2dzKVxuICAgIC5maWx0ZXIoa2V5ID0+IGxvZ3Nba2V5XS5pc0tleSlcbiAgICAubWFwKGtleSA9PiAoe1xuICAgICAga2V5LFxuICAgICAgY29uZmlnTW9kZWxzOiAobG9nc1trZXldLm1vZGVscyB8fCBbXSlcbiAgICAgICAgLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH0sIHsga2V5IH0gYXMgYW55KSlcbiAgICAgICAgLy8gb25seSB0YWtlIHRob3NlIHdlIGZvdW5kIGEgbWF0Y2hpbmcgbW9kZWwgKGF2b2lkIG1hdGNoaW5nIGtleSBvbiB3cm9uZyBub2RlIHR5cGUpXG4gICAgICAgIC5maWx0ZXIodiA9PiAhIXYubW9kZWwpLFxuICAgICAgb3JpZ2luYWxWYWx1ZTogYmxhbmtOb2RlVmFsdWUob3JpZ2luYWwsIGtleSksXG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZTogYmxhbmtOb2RlVmFsdWUocmVjYWxjdWxhdGVkLCBrZXkpLFxuICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKHJlY2FsY3VsYXRlZCwga2V5KSxcbiAgICAgIGlzUmVxdWlyZWQ6IHRydWVcbiAgICB9KSlcbiAgICAuZmlsdGVyKHYgPT4gdi5jb25maWdNb2RlbHMubGVuZ3RoID4gMClcbiAgICAubWFwKGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKTtcblxuY29uc3QgaXNCYWNrZ3JvdW5kTm9JbnB1dCA9IChsb2dzOiBJTm9kZVRlcm1Mb2cpID0+IGxvZ3MubWV0aG9kVGllciA9PT0gRW1pc3Npb25NZXRob2RUaWVyLmJhY2tncm91bmQgJiYgIWxvZ3MuaW5wdXQ7XG5cbmNvbnN0IGlzTW9kZWxMb2cgPSAobG9nczogSU5vZGVUZXJtTG9nKSA9PlxuICBbXG4gICAgIWlzQmFja2dyb3VuZE5vSW5wdXQobG9ncyksXG4gICAgIWxvZ3MuaXNLZXksXG4gICAgIWxvZ3MuaW5wdXQsXG4gICAgIWxvZ3MucHJvcGVydHlcbiAgXS5ldmVyeShCb29sZWFuKSAmJiBbXG4gICAgJ3Nob3VsZFJ1bicgaW4gbG9ncyxcbiAgICAnc2hvdWxkUnVuT3JjaGVzdHJhdG9yJyBpbiBsb2dzLFxuICAgICdydW5SZXF1aXJlZCcgaW4gbG9nc1xuICBdLnNvbWUoQm9vbGVhbik7XG5cbmNvbnN0IG1vZGVsQ29uZmlnT3JkZXIgPSAoXG4gIG1vZGVsczogKElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZyB8IElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZ1tdKVtdLCB0ZXJtSWQ6IHN0cmluZywgbW9kZWxLZXk6IHN0cmluZywgbW9kZWw6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgaW5kZXhlcyA9IG1vZGVscy5tYXAoKG0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgYXJyYXlJbmRleCA9IEFycmF5LmlzQXJyYXkobSkgPyBtb2RlbENvbmZpZ09yZGVyKG0sIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsKSA6ICcnO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG0pXG4gICAgICA/IGFycmF5SW5kZXhcbiAgICAgICAgPyBbaW5kZXgsIGFycmF5SW5kZXhdLmpvaW4oJy4nKVxuICAgICAgICA6ICcnXG4gICAgICA6IFt0ZXJtSWQgPT09IG0udmFsdWUsIG1vZGVsS2V5ID09PSBtLmtleSwgbW9kZWwgPT09IG0ubW9kZWxdLmV2ZXJ5KEJvb2xlYW4pXG4gICAgICAgID8gYCR7aW5kZXh9YFxuICAgICAgICA6ICcnO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBpbmRleGVzLmxlbmd0aCA/IGluZGV4ZXNbMF0gOiAnJztcbn07XG5cbmludGVyZmFjZSBJQ29uZmlnTW9kZWxEb2NzRGF0YSB7XG4gIG5vZGVUeXBlOiBOb2RlVHlwZTtcbiAgdHlwZTogU2NoZW1hVHlwZTtcbiAgdGVybUlkOiBzdHJpbmc7XG4gIHRlcm1UeXBlPzogVGVybVRlcm1UeXBlO1xufVxuXG5jb25zdCBjb25maWdNb2RlbFdpdGhEb2NzID0gKFxuICBtb2RlbHM6IElNb2RlbFtdLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQsIHRlcm1UeXBlIH06IElDb25maWdNb2RlbERvY3NEYXRhLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZVxuKSA9PiAobWV0aG9kSWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBub2RlID0ge1xuICAgICdAdHlwZSc6IG5vZGVUeXBlLFxuICAgIHRlcm06IHsgJ0BpZCc6IHN1YlZhbHVlPy5pZCB8fCB0ZXJtSWQgfSxcbiAgICBtZXRob2RNb2RlbDogeyAnQGlkJzogbWV0aG9kSWQgfVxuICB9IGFzIGFueTtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2RJZCxcbiAgICBtb2RlbDogZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbFBhcmFtcyhub2RlKSkgfHxcbiAgICAgIC8vIGhhbmRsZSBcImxpdmVBbmltYWxcIlxuICAgICAgKHRlcm1UeXBlICYmIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgdGVybVR5cGUpKSkgfHxcbiAgICAgIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgYCR7c3ViVmFsdWU/LmtleX0uJHttZXRob2RJZH1gKSkgfHxcbiAgICAgIC8vIGhhbmRsZSBcImlucHV0LnByaWNlXCJcbiAgICAgIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgYCR7dHlwZT8udG9Mb3dlckNhc2UoKX0uJHtzdWJWYWx1ZT8ua2V5fWApKSB8fFxuICAgICAgLy8gaGFuZGxlIFwiaW5wdXQuaGVzdGlhQWdncmVnYXRlZERhdGFcIlxuICAgICAgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCBgJHt0eXBlPy50b0xvd2VyQ2FzZSgpfS4ke21ldGhvZElkfWApKVxuICB9O1xufTtcblxuY29uc3QgY29uZmlnTW9kZWxXaXRoTG9ncyA9IChkYXRhOiBJQmxhbmtOb2RlTG9nIHwgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlLCBsb2dzOiBJTm9kZVRlcm1Mb2dzKSA9PiAobW9kZWw6IElDb25maWdNb2RlbCkgPT4gKHtcbiAgLi4ubW9kZWwsXG4gIGxvZ3M6IGxvZ3M/Llttb2RlbC5tZXRob2RJZF0sXG4gIHN0YXR1czogbG9nU3RhdHVzKGRhdGEsIGxvZ3M/Llttb2RlbC5tZXRob2RJZF0pLFxuICBzaG93TG9nczogaGFzTG9nRGV0YWlscyhkYXRhLCBsb2dzPy5bbW9kZWwubWV0aG9kSWRdKVxufSBhcyBJQ29uZmlnTW9kZWwpO1xuXG5jb25zdCBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyA9IChcbiAgbG9nczogSU5vZGVMb2dzIHwgSU5vZGVUZXJtTG9nc1xuKSA9PiA8VCBleHRlbmRzIChJQmxhbmtOb2RlTG9nIHwgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKT4oZGF0YTogVCkgPT4ge1xuICBjb25zdCBzdWJMb2dLZXkgPSAoZGF0YSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpLmlkIHx8IChkYXRhIGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZSkua2V5ID9cbiAgICAoZGF0YSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpLmlkIHx8IChkYXRhIGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZSkua2V5IDogbnVsbDtcbiAgY29uc3QgbG9nID0gc3ViTG9nS2V5ID8gbG9nc1tzdWJMb2dLZXldIDogbG9ncztcbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhLFxuICAgIGNvbmZpZ01vZGVsczogZGF0YS5jb25maWdNb2RlbHMubWFwKG1vZGVsID0+XG4gICAgICBBcnJheS5pc0FycmF5KG1vZGVsKSA/IG1vZGVsLm1hcChjb25maWdNb2RlbFdpdGhMb2dzKGRhdGEsIGxvZykpIDogY29uZmlnTW9kZWxXaXRoTG9ncyhkYXRhLCBsb2cpKG1vZGVsKVxuICAgIClcbiAgfSBhcyBUO1xufTtcblxuLyoqXG4gKiBHcm91cCBtb2RlbHMgcnVubmluZyBpbiBwYXJhbGxlbCB1bmRlciB0aGUgc2FtZSBhcnJheSwgYXMgdGhleSBzaG91bGQgYXBwZWFyIHZlcnRpY2FsbHkuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSBtb2RlbHMgVGhlIGxpc3Qgb2YgbW9kZWxzXG4gKi9cbmNvbnN0IGdyb3VwUGFyYWxsZWxNb2RlbHMgPSAoY29uZmlnOiBJT3JjaGVzdHJhdG9yQ29uZmlnLCB0ZXJtSWQ6IHN0cmluZywgbW9kZWxLZXk6IHN0cmluZywgbW9kZWxzOiBJQ29uZmlnTW9kZWxbXSkgPT4ge1xuICBjb25zdCBtb2RlbHNXaXRoT3JkZXIgPSBtb2RlbHMubWFwKG1vZGVsID0+ICh7XG4gICAgbW9kZWwsXG4gICAgb3JkZXI6IG1vZGVsQ29uZmlnT3JkZXIoY29uZmlnLm1vZGVscywgdGVybUlkLCBtb2RlbEtleSwgbW9kZWwubWV0aG9kSWQpXG4gIH0pKTtcbiAgcmV0dXJuIG1vZGVsc1dpdGhPcmRlclxuICAgIC5yZWR1Y2UoKHByZXYsIHsgbW9kZWwsIG9yZGVyIH0pID0+IHtcbiAgICAgIGNvbnN0IGlzQXJyYXkgPSBvcmRlci5pbmNsdWRlcygnLicpO1xuICAgICAgY29uc3QgYXJyYXlJbmRleCA9IGlzQXJyYXkgPyBvcmRlci5zcGxpdCgnLicpWzBdIDogcHJldi5sZW5ndGg7XG4gICAgICBwcmV2W2FycmF5SW5kZXhdID0gaXNBcnJheSA/IFsuLi4ocHJldlthcnJheUluZGV4XSB8fCBbXSksIG1vZGVsXSA6IG1vZGVsO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwgW10gYXMgSUNvbmZpZ01vZGVsW11bXSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLm1hcCh2ID0+IHYubGVuZ3RoID09PSAxID8gdlswXSA6IHYpO1xufTtcblxuY29uc3QgYWxsUGFyYWxsZWwgPSAobW9kZWxzOiAoSUNvbmZpZ01vZGVsIHwgSUNvbmZpZ01vZGVsW10pW10pID0+XG4gIG1vZGVscy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShtb2RlbHNbMF0pICYmIG1vZGVsc1swXS5sZW5ndGggPiAxO1xuXG5jb25zdCB2YWx1ZUJ5TWV0aG9kSWQgPSAodmFsdWVzOiBibGFua05vZGVbXSwgbWV0aG9kSWQ6IHN0cmluZywgdGVybUlkOiBzdHJpbmcpID0+XG4gIHByb3BlcnR5VmFsdWUodmFsdWVzLmZpbmQodiA9PiB2Lm1ldGhvZE1vZGVsPy5bJ0BpZCddID09PSBtZXRob2RJZCk/LnZhbHVlIGFzIG51bWJlcltdLCB0ZXJtSWQpO1xuXG5jb25zdCBncm91cFBhcmFsbGVsVmFsdWVzID0gKHZhbHVlczogYmxhbmtOb2RlW10sIG1vZGVsczogSUNvbmZpZ01vZGVsIHwgSUNvbmZpZ01vZGVsW10sIHRlcm1JZDogc3RyaW5nKSA9PlxuICBBcnJheS5pc0FycmF5KG1vZGVscylcbiAgICA/IE9iamVjdC5mcm9tRW50cmllcyhtb2RlbHMubWFwKG1vZGVsID0+IFttb2RlbC5tZXRob2RJZCwgdmFsdWVCeU1ldGhvZElkKHZhbHVlcywgbW9kZWwubWV0aG9kSWQsIHRlcm1JZCldKSlcbiAgICA6IHt9O1xuXG5leHBvcnQgY29uc3QgZ3JvdXBMb2dzQnlUZXJtID0gKFxuICBub2RlVHlwZTogTm9kZVR5cGUsIGxvZ3M6IElOb2RlTG9ncywgbW9kZWxzOiBJTW9kZWxbXSwgY29uZmlnOiBJT3JjaGVzdHJhdG9yQ29uZmlnLFxuICBhbGxPcmlnaW5hbFZhbHVlczogYmxhbmtOb2RlW10sIGFsbFJlY2FsY3VsYXRlZFZhbHVlczogYmxhbmtOb2RlW10sXG4gIG5vZGVLZXk/OiBzdHJpbmdcbikgPT4ge1xuICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IChhbGxPcmlnaW5hbFZhbHVlcyB8fCBbXSkuZmlsdGVyKHZhbHVlID0+ICEodmFsdWUgYXMgYW55KS5kZWxldGVkKTtcbiAgY29uc3QgcmVjYWxjdWxhdGVkVmFsdWVzID0gKGFsbFJlY2FsY3VsYXRlZFZhbHVlcyB8fCBbXSkuZmlsdGVyKHZhbHVlID0+ICEodmFsdWUgYXMgYW55KS5kZWxldGVkKTtcbiAgY29uc3QgdHlwZTogU2NoZW1hVHlwZSA9IG9yaWdpbmFsVmFsdWVzLmxlbmd0aCA/XG4gICAgb3JpZ2luYWxWYWx1ZXNbMF1bJ0B0eXBlJ10gfHwgb3JpZ2luYWxWYWx1ZXNbMF0udHlwZSA6XG4gICAgcmVjYWxjdWxhdGVkVmFsdWVzLmxlbmd0aCA/XG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZXNbMF1bJ0B0eXBlJ10gfHwgcmVjYWxjdWxhdGVkVmFsdWVzWzBdLnR5cGUgOlxuICAgICAgdW5kZWZpbmVkO1xuXG4gIHJldHVybiAodGVybTogSVRlcm1KU09OTEQpOiBJQmxhbmtOb2RlTG9nID0+IHtcbiAgICBjb25zdCB0ZXJtSWQgPSB0ZXJtWydAaWQnXTtcbiAgICBjb25zdCB0ZXJtVHlwZSA9IHRlcm0udGVybVR5cGU7XG4gICAgY29uc3QgdGVybUxvZ3MgPSBnZXQobG9ncywgdGVybUlkLCB7fSkgYXMgSU5vZGVUZXJtTG9ncztcbiAgICBjb25zdCBvcmlnaW5hbCA9IG9yaWdpbmFsVmFsdWVzLmZpbHRlcih2ID0+IHRlcm1JZCA9PT0gdi50ZXJtIVsnQGlkJ10pO1xuICAgIGNvbnN0IHJlY2FsY3VsYXRlZCA9IHJlY2FsY3VsYXRlZFZhbHVlcy5maWx0ZXIodiA9PiB0ZXJtSWQgPT09IHYudGVybSFbJ0BpZCddKTtcbiAgICBjb25zdCBoYXNEYXRhID0gISFvcmlnaW5hbC5sZW5ndGggfHwgISFyZWNhbGN1bGF0ZWQubGVuZ3RoIHx8IE9iamVjdC5rZXlzKHRlcm1Mb2dzKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGNvbmZpZ01vZGVsc0RhdGEgPSB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQsIHRlcm1UeXBlIH07XG4gICAgY29uc3QgY29uZmlnTW9kZWxzID0gZ3JvdXBQYXJhbGxlbE1vZGVscyhcbiAgICAgIGNvbmZpZywgdGVybUlkLCBub2RlS2V5ISxcbiAgICAgIHVuaXF1ZShbXG4gICAgICAgIC4uLih0ZXJtTG9ncy5tb2RlbHMgfHwgW10pLmZpbHRlcihrZXkgPT4gaXNNb2RlbExvZyh0ZXJtTG9nc1trZXldKSksXG4gICAgICAgIC4uLmZpbmRDb25maWdNb2RlbHMoY29uZmlnLCB0ZXJtSWQsIG5vZGVLZXkhLCBtb2RlbHMpLm1hcCgoeyBtb2RlbCB9KSA9PiBtb2RlbCBhcyBzdHJpbmcpXG4gICAgICBdKS5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIGNvbmZpZ01vZGVsc0RhdGEpKVxuICAgICk7XG4gICAgY29uc3Qga2V5cyA9IGxvZ0tleXModGVybUxvZ3MsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWQsIG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSk7XG4gICAgY29uc3Qgc3ViVmFsdWVzID0gbG9nU3ViVmFsdWVzKGxvZ3MsIHRlcm1Mb2dzLCBvcmlnaW5hbCwgcmVjYWxjdWxhdGVkLCBtb2RlbHMsIGNvbmZpZ01vZGVsc0RhdGEpO1xuICAgIGNvbnN0IGlzUmVxdWlyZWQgPSAhT2JqZWN0LnZhbHVlcyh0ZXJtTG9ncylcbiAgICAgIC5maWx0ZXIodiA9PiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodikpXG4gICAgICAvLyBpZ25vcmUgbW9kZWxzIHRoYXQgd2VyZSBuZXZlciBnb2luZyB0byBydW5cbiAgICAgIC5maWx0ZXIoaXNSdW5PcmNoZXN0cmF0b3IpXG4gICAgICAuZXZlcnkodiA9PiB2LnJ1blJlcXVpcmVkID09PSBmYWxzZSk7XG5cbiAgICByZXR1cm4gZGF0YVdpdGhDb25maWdNb2RlbExvZ3ModGVybUxvZ3MpKHtcbiAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgIGNhbk9wZW46IGtleXMubGVuZ3RoID4gMCB8fCBzdWJWYWx1ZXMubGVuZ3RoID4gMCxcbiAgICAgIHRlcm1JZCxcbiAgICAgIHRlcm0sXG4gICAgICB0eXBlLFxuICAgICAgY29uZmlnTW9kZWxzLFxuICAgICAgb3JpZ2luYWwsXG4gICAgICBvcmlnaW5hbFZhbHVlOiByZWR1Y2VWYWx1ZXMob3JpZ2luYWwsIHRlcm1JZCksXG4gICAgICByZWNhbGN1bGF0ZWQsXG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZTogcmVkdWNlVmFsdWVzKHJlY2FsY3VsYXRlZCwgdGVybUlkKSxcbiAgICAgIGlzT3JpZ2luYWw6ICEhb3JpZ2luYWwubGVuZ3RoLFxuICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKHJlY2FsY3VsYXRlZCksXG4gICAgICBoYXNEYXRhLFxuICAgICAgaXNSZXF1aXJlZCxcbiAgICAgIGxvZ3M6IHRlcm1Mb2dzLFxuICAgICAga2V5cyxcbiAgICAgIHN1YlZhbHVlcyxcbiAgICAgIGFsbFBhcmFsbGVsOiBhbGxQYXJhbGxlbChjb25maWdNb2RlbHMpLFxuICAgICAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ6IGdyb3VwUGFyYWxsZWxWYWx1ZXMob3JpZ2luYWwsIGNvbmZpZ01vZGVsc1swXSwgdGVybUlkKSxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZDogZ3JvdXBQYXJhbGxlbFZhbHVlcyhyZWNhbGN1bGF0ZWQsIGNvbmZpZ01vZGVsc1swXSwgdGVybUlkKVxuICAgIH0pO1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1vZGVsQ291bnQgPSAoYmxhbmtOb2RlTG9nczogSUJsYW5rTm9kZUxvZ1tdKSA9PiBNYXRoLm1heC5hcHBseShNYXRoLm1heCwgW1xuICAwLFxuICAuLi5ibGFua05vZGVMb2dzLmZsYXRNYXAodiA9PiBbXG4gICAgdi5jb25maWdNb2RlbHMubGVuZ3RoLFxuICAgIC4uLih2LnN1YlZhbHVlcy5tYXAocyA9PiBzLmNvbmZpZ01vZGVscz8ubGVuZ3RoIHx8IDApKSxcbiAgICAuLi4odi5rZXlzLm1hcChzID0+IHMuY29uZmlnTW9kZWxzPy5sZW5ndGggfHwgMCkpXG4gIF0pXG5dKTtcbiJdfQ==
|
|
435
|
+
export const logValueArray = (value) => value.includes(';') ?
|
|
436
|
+
value.split(';').flatMap(v => {
|
|
437
|
+
const res = v.split('_').map(vv => vv.split(':'));
|
|
438
|
+
return res.length <= 1 ? res.flat() : Object.fromEntries(res);
|
|
439
|
+
}) :
|
|
440
|
+
null;
|
|
441
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFDSyxrQkFBa0IsRUFDbEIsWUFBWSxFQUFZLFVBQVUsRUFBRSxVQUFVLEVBQ3pELE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFMUMsT0FBTyxFQUM0RCxVQUFVLEVBQzNFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQy9DLE1BQU0sNkJBQTZCLENBQUM7QUFvQ3JDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFOUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFD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LFlBQVksMENBQUUsTUFBTSxLQUFJLENBQUMsQ0FBQSxFQUFBLENBQUMsQ0FBQztRQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBQyxPQUFBLENBQUEsTUFBQSxDQUFDLENBQUMsWUFBWSwwQ0FBRSxNQUFNLEtBQUksQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO0tBQ2xELENBQUM7Q0FDSCxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQVMsRUFBRSxDQUNwRCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkIsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDSixJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdCwgdG9BcnJheSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZmlsZVRvRXh0LCBTdXBwb3J0ZWRFeHRlbnNpb25zIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHtcbiAgRW1pc3Npb24sIEVtaXNzaW9uTWV0aG9kVGllciwgSVRlcm1KU09OTEQsIFByb2R1Y3QsIElucHV0IGFzIEhlc3RpYUlucHV0LFxuICBOb2RlVHlwZSwgVGVybVRlcm1UeXBlLCBQcm9wZXJ0eSwgU2NoZW1hVHlwZSwgaXNUeXBlTm9kZVxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB1bmlxdWUsIGlzVW5kZWZpbmVkLCBpc0VtcHR5IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscy9kaXN0L3Rlcm0nO1xuY29uc3QgZ2V0ID0gcmVxdWlyZSgnbG9kYXNoLmdldCcpO1xuY29uc3Qgc2V0ID0gcmVxdWlyZSgnbG9kYXNoLnNldCcpO1xuY29uc3Qgb3JkZXJCeSA9IHJlcXVpcmUoJ2xvZGFzaC5vcmRlcmJ5Jyk7XG5cbmltcG9ydCB7XG4gIElPcmNoZXN0cmF0b3JDb25maWcsIElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZywgZmluZENvbmZpZ01vZGVscywgZmluZE1vZGVscywgSU1vZGVsLFxuICBmaW5kTWF0Y2hpbmdNb2RlbCwgbW9kZWxQYXJhbXMsIG1vZGVsS2V5UGFyYW1zXG59IGZyb20gJy4uLy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVNaXNzaW5nTG9va3VwTG9nIHtcbiAgZmlsZW5hbWU6IHN0cmluZztcbiAgdGVybUlkOiBzdHJpbmc7XG4gIGNvbHVtbjogc3RyaW5nO1xuICAvLyBhdHRyaWJ1dGVzIGxpbmtlZCB0byB0aGUgbW9kZWxzXG4gIG1vZGVsPzogc3RyaW5nO1xuICB0ZXJtPzogc3RyaW5nO1xuICBrZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVUZXJtTG9nIHtcbiAgcnVuUmVxdWlyZWQ/OiBib29sZWFuO1xuICBzaG91bGRSdW4/OiBib29sZWFuO1xuICBzaG91bGRSdW5PcmNoZXN0cmF0b3I/OiBib29sZWFuO1xuICBtaXNzaW5nTG9va3Vwcz86IElOb2RlTWlzc2luZ0xvb2t1cExvZ1tdO1xuICByZXF1aXJlbWVudHM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICBsb2dzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICAvLyBwb3NzaWJsZSBzdWIgdmFsdWVzXG4gIGlucHV0Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHByb3BlcnR5Pzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVUZXJtTG9ncyB7XG4gIFttb2RlbEtleTogc3RyaW5nXTogYW55IHwgSU5vZGVUZXJtTG9nO1xuICBtb2RlbHM6IHN0cmluZ1tdO1xuICBpc0tleT86IGJvb2xlYW47XG4gIGlzUHJvcGVydHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlTG9ncyB7XG4gIFt0ZXJtOiBzdHJpbmddOiBJTm9kZVRlcm1Mb2dzO1xufVxuXG5jb25zdCB0ZXJtVHlwZXMgPSBPYmplY3QudmFsdWVzKFRlcm1UZXJtVHlwZSk7XG5cbmNvbnN0IGJsYW5rTm9kZVR5cGVzID0gT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKS5maWx0ZXIodCA9PiAhaXNUeXBlTm9kZSh0KSk7XG5cbmNvbnN0IHNjaGVtYVR5cGVzTG93ZXJDYXNlID0gT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKS5tYXAodiA9PiB2LnRvTG93ZXJDYXNlKCkpO1xuXG5jb25zdCBibGFua05vZGVUeXBlc0xvd2VyQ2FzZSA9IGJsYW5rTm9kZVR5cGVzLm1hcCh2ID0+IHYudG9Mb3dlckNhc2UoKSk7XG5cbmNvbnN0IG1pc3NpbmdMb29rdXBQcmVmaXggPSAnTWlzc2luZyBsb29rdXAnO1xuXG5jb25zdCBwYXJzZUZpbGVuYW1lID0gKGZpbGVwYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgW2ZpbGVuYW1lXSA9IGZpbGVwYXRoLnNwbGl0KCcuJyk7XG4gIGNvbnN0IGV4dCA9IHRlcm1UeXBlcy5pbmNsdWRlcyhmaWxlbmFtZSBhcyBhbnkpID8gU3VwcG9ydGVkRXh0ZW5zaW9ucy54bHN4IDogU3VwcG9ydGVkRXh0ZW5zaW9ucy5jc3Y7XG4gIHJldHVybiBmaWxlVG9FeHQoZmlsZW5hbWUsIGV4dCk7XG59O1xuXG5jb25zdCBwYXJzZUxvb2t1cCA9ICh7IGNvbHVtbiwgdGVybWlkLCBbbWlzc2luZ0xvb2t1cFByZWZpeF06IG1pc3NpbmdMb29rdXAgfSkgPT4gKHtcbiAgZmlsZW5hbWU6IHBhcnNlRmlsZW5hbWUobWlzc2luZ0xvb2t1cCksIHRlcm1JZDogdGVybWlkLCBjb2x1bW5cbn0pO1xuXG5jb25zdCBjc3ZWYWx1ZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiAodmFsdWUgfHwgJycpLnJlcGxhY2UoJ1snLCAnJykucmVwbGFjZSgnXScsICcnKTtcblxuY29uc3QgcGFyc2VNZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKG1lc3NhZ2UpO1xuICAgIHJldHVybiBkYXRhLm1lc3NhZ2Uuc3BsaXQoJywnKS5yZWR1Y2UoKHByZXYsIHBhcnRzKSA9PiB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJ0cy5zcGxpdCgnPScpO1xuICAgICAgY29uc3QgdmFsID0gY3N2VmFsdWUodmFsdWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgLi4uKGtleSAmJiB2YWwgPyB7IFtrZXkudHJpbSgpXTogdmFsIH0gOiB7fSlcbiAgICAgIH07XG4gICAgfSwgeyBsb2dnZXI6IGRhdGEubG9nZ2VyIH0pO1xuICB9XG4gIGNhdGNoIChlcnIpIHtcbiAgICAvLyBtYWtlIHN1cmUgaXQgd29ya3MgZXZlbiBpZiBvbmUgbG9nIGlzIG1hbGZvcm1lZFxuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuY29uc3Qgb21pdExvZ0tleXMgPSAobG9nOiBhbnkpID0+XG4gIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhsb2cpLmZpbHRlcigoW2tleV0pID0+ICFzY2hlbWFUeXBlc0xvd2VyQ2FzZS5pbmNsdWRlcyhrZXkpKSk7XG5cbmNvbnN0IGluY2x1ZGVCbGFua05vZGVzID0gKGxvZ3MsIGxvZykgPT5cbiAgT2JqZWN0XG4gICAgLmtleXMobG9nKVxuICAgIC5maWx0ZXIoa2V5ID0+IGJsYW5rTm9kZVR5cGVzTG93ZXJDYXNlLmluY2x1ZGVzKGtleSkpXG4gICAgLnJlZHVjZSgocHJldiwga2V5KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtrZXldOiB1bmlxdWUoW1xuICAgICAgICAuLi4oKHR5cGVvZiBwcmV2W2tleV0gPT09ICdzdHJpbmcnID8gW3ByZXZba2V5XV0gOiBwcmV2W2tleV0pIHx8IFtdKSxcbiAgICAgICAgbG9nW2tleV1cbiAgICAgIF0pXG4gICAgfSksIGxvZ3MpO1xuXG5jb25zdCBncm91cExvZyA9IChncm91cCwgeyBsb2dnZXIsIHRlcm0sIG1vZGVsLCBrZXksIHNob3VsZF9ydW4sIHJ1bl9yZXF1aXJlZCwgcHJvcGVydHksIC4uLmxvZyB9OiBhbnkpID0+IHtcbiAgY29uc3QgaXNPcmNoZXN0cmF0b3IgPSBsb2dnZXIuaW5jbHVkZXMoJ29yY2hlc3RyYXRvcicpO1xuICBjb25zdCBpc0tleSA9ICFpc09yY2hlc3RyYXRvciAmJiAhIWtleTtcbiAgY29uc3QgaXNQcm9wZXJ0eSA9ICFpc09yY2hlc3RyYXRvciAmJiAhIXByb3BlcnR5O1xuICBjb25zdCBwYXJlbnRMb2dLZXkgPSBbYFtcIiR7dGVybX1cIl1gLCAhaXNPcmNoZXN0cmF0b3IgJiYga2V5IHx8IHByb3BlcnR5XS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuICBjb25zdCBsb2dNb2RlbEtleSA9IFtwYXJlbnRMb2dLZXksIG1vZGVsXS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuXG4gIHNldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5tb2RlbHNgLCB1bmlxdWUoW1xuICAgIC4uLmdldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5tb2RlbHNgLCBbXSksXG4gICAgbW9kZWxcbiAgXSkpO1xuICBzZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0uaXNLZXlgLCBpc0tleSk7XG4gIHNldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5pc1Byb3BlcnR5YCwgaXNQcm9wZXJ0eSk7XG5cbiAgbGV0IGRhdGEgPSBnZXQoZ3JvdXAsIGxvZ01vZGVsS2V5LCB7fSk7XG5cbiAgZGF0YSA9IGluY2x1ZGVCbGFua05vZGVzKGRhdGEsIGxvZyk7XG5cbiAgaWYgKHR5cGVvZiBzaG91bGRfcnVuICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHNob3VsZFJ1biA9IHNob3VsZF9ydW4gPT09ICdUcnVlJztcblxuICAgIGRhdGEgPSBpc09yY2hlc3RyYXRvciA/XG4gICAgICB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHNob3VsZFJ1bk9yY2hlc3RyYXRvcjogc2hvdWxkUnVuXG4gICAgICB9IDpcbiAgICAgIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLi4ub21pdExvZ0tleXMobG9nKSxcbiAgICAgICAgc2hvdWxkUnVuXG4gICAgICB9O1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBydW5fcmVxdWlyZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgcnVuUmVxdWlyZWQgPSBydW5fcmVxdWlyZWQgPT09ICdUcnVlJztcblxuICAgIGRhdGEgPSAge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIC4uLihydW5SZXF1aXJlZCA/IHt9IDogb21pdExvZ0tleXMobG9nKSksIC8vIG5vIG5lZWQgdG8gc2F2ZSBsb2dzIGlmIHdlIG5lZWQgdG8gcnVuIHRoZSBtb2RlbFxuICAgICAgcnVuUmVxdWlyZWRcbiAgICB9O1xuICB9XG4gIGVsc2UgaWYgKCdyZXF1aXJlbWVudHMnIGluIGxvZykge1xuICAgIGNvbnN0IHsgcmVxdWlyZW1lbnRzLCAuLi5sb2dEYXRhIH0gPSBsb2c7XG5cbiAgICBkYXRhLnJlcXVpcmVtZW50cyA9IHtcbiAgICAgIC4uLihkYXRhLnJlcXVpcmVtZW50cyB8fCB7fSksXG4gICAgICAuLi5sb2dEYXRhXG4gICAgfTtcbiAgfVxuICBlbHNlIGlmIChtaXNzaW5nTG9va3VwUHJlZml4IGluIGxvZykge1xuICAgIGRhdGEubWlzc2luZ0xvb2t1cHMgPSB1bmlxdWUoW1xuICAgICAgLi4uKGRhdGEubWlzc2luZ0xvb2t1cHMgfHwgW10pLFxuICAgICAgcGFyc2VMb29rdXAobG9nKVxuICAgIF0pO1xuICB9XG4gIGVsc2UgaWYgKCFpc09yY2hlc3RyYXRvcikge1xuICAgIGRhdGEubG9ncyA9IHtcbiAgICAgIC4uLihkYXRhLmxvZ3MgfHwge30pLFxuICAgICAgLi4ub21pdExvZ0tleXMobG9nKVxuICAgIH07XG4gIH1cblxuICBzZXQoZ3JvdXAsIGxvZ01vZGVsS2V5LCBkYXRhKTtcbiAgcmV0dXJuIGdyb3VwO1xufTtcblxuY29uc3QgZ3JvdXBMb2dTdWJWYWx1ZSA9IChncm91cCwgbG9nLCBrZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCBpZCA9IGxvZ1trZXldO1xuICBjb25zdCBkYXRhID0gZ3JvdXBMb2coZ3JvdXBbaWRdIHx8IHt9LCBsb2cpO1xuICBncm91cFtpZF0gPSBkYXRhO1xuXG4gIGlmIChrZXkgPT09ICd0cmFuc2Zvcm1hdGlvbicpIHtcbiAgICAvLyBhZGQgdmFsdWUgdG8gdGhlIHNhbWUgdGVybS9tb2RlbCBvbiBwYXJlbnQgZ3JvdXBcbiAgICBPYmplY3QuZW50cmllcyhncm91cFtpZF0pLm1hcCgoW3Rlcm0sIG1vZGVsc10pID0+XG4gICAgICBPYmplY3Qua2V5cyhtb2RlbHMpLm1hcChtb2RlbCA9PiB7XG4gICAgICAgIGlmIChncm91cD8uW3Rlcm1dPy5bbW9kZWxdKSB7XG4gICAgICAgICAgZ3JvdXBbdGVybV1bbW9kZWxdW2tleV0gPSB1bmlxdWUoW1xuICAgICAgICAgICAgLi4uKGdyb3VwW3Rlcm1dW21vZGVsXVtrZXldIHx8IFtdKSxcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBncm91cDtcbn07XG5cbmNvbnN0IHN1YlZhbHVlS2V5cyA9IFtcbiAgJ3RyYW5zZm9ybWF0aW9uJ1xuXTtcblxuZXhwb3J0IGNvbnN0IGdyb3VwTG9nc0J5TW9kZWwgPSAoZGF0YTogc3RyaW5nKTogSU5vZGVMb2dzID0+XG4gIGRhdGEudHJpbSgpLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAocGFyc2VNZXNzYWdlKVxuICAgIC5maWx0ZXIodiA9PiAhIXY/LnRlcm0gJiYgdj8udGVybSAhPT0gJ05vbmUnICYmICEhdj8ubW9kZWwpXG4gICAgLnJlZHVjZSgoZ3JvdXAsIGxvZykgPT4ge1xuICAgICAgY29uc3Qgc3ViVmFsdWUgPSBzdWJWYWx1ZUtleXMuZmluZCh2ID0+ICEhbG9nW3ZdKTtcbiAgICAgIHJldHVybiBzdWJWYWx1ZSA/XG4gICAgICAgIHN1YlZhbHVlID09PSAndHJhbnNmb3JtYXRpb24nID9cbiAgICAgICAgICAvLyBmb3IgdHJhbnNmb3JtYXRpb24sIGRvIG5vdCBhZGQgdG8gdG9wLWxldmVsIG1vZGVsXG4gICAgICAgICAgZ3JvdXBMb2dTdWJWYWx1ZShncm91cCwgbG9nLCBzdWJWYWx1ZSkgOlxuICAgICAgICAgIGdyb3VwTG9nKGdyb3VwTG9nU3ViVmFsdWUoZ3JvdXAsIGxvZywgc3ViVmFsdWUpLCBsb2cpXG4gICAgICAgIDogZ3JvdXBMb2coZ3JvdXAsIGxvZyk7XG4gICAgfSwge30pO1xuXG5leHBvcnQgY29uc3QgY29tcHV0ZVRlcm1zID0gKFxuICBvcmlnaW5hbFZhbHVlczogYmxhbmtOb2RlW10sIHJlY2FsY3VsYXRlZFZhbHVlczogYmxhbmtOb2RlW10sIHRlcm1zPzogSVRlcm1KU09OTERbXSwgZmlsdGVyVGVybVR5cGVzPzogVGVybVRlcm1UeXBlW11cbikgPT4gZnJvbShcbiAgICB0ZXJtcz8ubGVuZ3RoID9cbiAgICAgIHRlcm1zIDpcbiAgICAgIFtcbiAgICAgICAgLi4uKG9yaWdpbmFsVmFsdWVzIHx8IFtdKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKSxcbiAgICAgICAgLi4uKHJlY2FsY3VsYXRlZFZhbHVlcyB8fCBbXSkubWFwKCh7IHRlcm0gfSkgPT4gdGVybSlcbiAgICAgIF0uZmlsdGVyKG5vZGUgPT4gIWZpbHRlclRlcm1UeXBlcz8ubGVuZ3RoIHx8IGZpbHRlclRlcm1UeXBlcy5pbmNsdWRlcyhub2RlLnRlcm1UeXBlKSlcbiAgKS5waXBlKFxuICAgIGRpc3RpbmN0KHYgPT4gdiFbJ0BpZCddKSxcbiAgICB0b0FycmF5KCksXG4gICAgbWFwKHYgPT4gb3JkZXJCeSh2LCBbJ25hbWUnXSwgWydhc2MnXSkpXG4gICkudG9Qcm9taXNlKCk7XG5cbmV4cG9ydCB0eXBlIGJsYW5rTm9kZSA9IEVtaXNzaW9uIHwgUHJvZHVjdCB8IEhlc3RpYUlucHV0IHwgUHJvcGVydHk7XG5cbmV4cG9ydCBlbnVtIExvZ1N0YXR1cyB7XG4gIHN1Y2Nlc3MgPSAnc3VjY2Vzc2Z1bCcsXG4gIGVycm9yID0gJ2ZhaWxlZCcsXG4gIHNraXBIaWVyYXJjaHkgPSAnbm90IHJ1biAobW9kZWwgaGlnaGVyIHVwIGhpZXJhcmNoeSBydW4gaW5zdGVhZCknLFxuICBkYXRhUHJvdmlkZWQgPSAnbm90IHJ1biAodXNlciBwcm92aWRlZCBkYXRhIHJldGFpbmVkKScsXG4gIG5vdFJlcXVpcmVkID0gJ25vdCByZWxldmFudCdcbn1cblxuY29uc3QgaGFzTG9nRGV0YWlscyA9IChkYXRhOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUgfCBJQmxhbmtOb2RlTG9nLCBsb2dzPzogSU5vZGVUZXJtTG9nKSA9PlxuICBbXG4gICAgTG9nU3RhdHVzLnN1Y2Nlc3MsXG4gICAgTG9nU3RhdHVzLmVycm9yXG4gIF0uaW5jbHVkZXMobG9nU3RhdHVzKGRhdGEsIGxvZ3MpKSAmJiAoXG4gICAgbG9ncz8ucmVxdWlyZW1lbnRzIHx8IGxvZ3M/LmxvZ3MgfHwgbG9ncz8ubWlzc2luZ0xvb2t1cHM/Lmxlbmd0aFxuICApO1xuXG5jb25zdCBsb2dTdGF0dXMgPSAoZGF0YTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIHwgSUJsYW5rTm9kZUxvZywgbG9ncz86IElOb2RlVGVybUxvZykgPT5cbiAgaGFzTG9nKGxvZ3MpXG4gICAgPyAoXG4gICAgICAhZGF0YS5pc1JlcXVpcmVkXG4gICAgICAgID8gTG9nU3RhdHVzLm5vdFJlcXVpcmVkXG4gICAgICAgIDogaXNSdW5PcmNoZXN0cmF0b3IobG9ncylcbiAgICAgICAgICA/IChcbiAgICAgICAgICAgICdzaG91bGRSdW4nIGluIGxvZ3NcbiAgICAgICAgICAgICAgPyBsb2dzLnNob3VsZFJ1blxuICAgICAgICAgICAgICAgID8gZGF0YS5pc1JlY2FsY3VsYXRlZFxuICAgICAgICAgICAgICAgICAgPyBMb2dTdGF0dXMuc3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgICAgICAgICAgICAgOiBMb2dTdGF0dXMuZXJyb3JcbiAgICAgICAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgICAgICAgKVxuICAgICAgICAgIDogZGF0YS5pc1JlY2FsY3VsYXRlZFxuICAgICAgICAgICAgPyBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeVxuICAgICAgICAgICAgOiBMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXG4gICAgKVxuICAgIDogKFxuICAgICAgW1xuICAgICAgICB0eXBlb2YgZGF0YS5vcmlnaW5hbFZhbHVlID09PSAndW5kZWZpbmVkJywgLy8gbm8gb3JpZ2luYWwgdmFsdWVcbiAgICAgICAgZGF0YS5pc1JlY2FsY3VsYXRlZCAvLyBpcyByZWNhbGN1bGF0ZWRcbiAgICAgIF0uZXZlcnkoQm9vbGVhbilcbiAgICAgICAgPyBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeVxuICAgICAgICA6IExvZ1N0YXR1cy5kYXRhUHJvdmlkZWRcbiAgICApO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWdNb2RlbCB7XG4gIG1ldGhvZElkOiBzdHJpbmc7XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2c7XG4gIGhhc0xvZ3M/OiBib29sZWFuO1xuICBzdGF0dXM/OiBMb2dTdGF0dXM7XG4gIG1vZGVsPzogSU1vZGVsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2dTdWJWYWx1ZSB7XG4gIGtleTogc3RyaW5nO1xuICBvcmlnaW5hbFZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpZD86IGFueTtcbiAgY29uZmlnTW9kZWxzPzogSUNvbmZpZ01vZGVsW107XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2cge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGNhbk9wZW46IGJvb2xlYW47XG4gIHRlcm06IElUZXJtSlNPTkxEO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAgdHlwZT86IFNjaGVtYVR5cGU7XG4gIGNvbmZpZ01vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdO1xuICBvcmlnaW5hbDogYmxhbmtOb2RlW107XG4gIG9yaWdpbmFsVmFsdWU6IG51bWJlcjtcbiAgLy8gd2hlbiBtdWx0aXBsZSBtb2RlbHMgYXJlIHJ1bm5pbmcgaW4gcGFyYWxsZWxcbiAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ/OiB7XG4gICAgW21ldGhvZElkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG4gIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW107XG4gIHJlY2FsY3VsYXRlZFZhbHVlOiBudW1iZXI7XG4gIC8vIHdoZW4gbXVsdGlwbGUgbW9kZWxzIGFyZSBydW5uaW5nIGluIHBhcmFsbGVsXG4gIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZD86IHtcbiAgICBbbWV0aG9kSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgfTtcbiAgaXNPcmlnaW5hbDogYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGhhc0RhdGE6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xuICBrZXlzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgLy8gbW9kZWxzIGFyZSBwcmVzZW50IGFzIHdlbGwgaW4gb25lIG9mIHRoZSBTdWJWYWx1ZXMsIGRvIG5vdCBzaG93IHR3aWNlXG4gIG1vZGVsc0luU3ViVmFsdWVzPzogYm9vbGVhbjtcbiAgLy8gY29udGFpbnMgbXVsdGlwbGUgbW9kZWxzIGFsbCBydW5uaW5nIGluIHBhcmFsbGVsXG4gIGFsbFBhcmFsbGVsPzogYm9vbGVhbjtcbn1cblxuY29uc3QgbWVyZ2VTdWJWYWx1ZXMgPSAodmFsdWVzOiBhbnlbXSk6IGFueVtdID0+XG4gIE9iamVjdC52YWx1ZXMoXG4gICAgdmFsdWVzLnJlZHVjZSgocHJldiwgeyBpZCwga2V5LCBjb25maWdNb2RlbHMgfSkgPT4ge1xuICAgICAgY29uc3QgdW5pcXVlS2V5ID0gW2tleSwgaWRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG4gICAgICBwcmV2W3VuaXF1ZUtleV0gPSB7XG4gICAgICAgIGlkLCBrZXksIGNvbmZpZ01vZGVsczogWy4uLigocHJldlt1bmlxdWVLZXldIHx8IHt9KS5jb25maWdNb2RlbHMgfHwgW10pLCAuLi4oY29uZmlnTW9kZWxzIHx8IFtdKV1cbiAgICAgIH07XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSlcbiAgKTtcblxuY29uc3QgcmVkdWNlVmFsdWVzID0gKHZhbHVlczogYW55W10sIHRlcm1JZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzID0gdmFsdWVzXG4gICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiBwcm9wZXJ0eVZhbHVlKHZhbHVlLCB0ZXJtSWQpKVxuICAgIC8vIHByb3BlcnR5VmFsdWUgbWF5IHJldHVybiBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gdG90YWxcbiAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG4gIHJldHVybiBwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPyBwcm9wZXJ0eVZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyB2LCAwKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGlzUnVuT3JjaGVzdHJhdG9yID0gKGxvZzogSU5vZGVUZXJtTG9nKSA9PiAhKCdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZykgfHwgbG9nLnNob3VsZFJ1bk9yY2hlc3RyYXRvcjtcblxuY29uc3QgaGFzTG9nID0gKGxvZzogSU5vZGVUZXJtTG9nLCB3aXRoT3JjaGVzdHJhdG9yID0gdHJ1ZSkgPT5cbiAgISFsb2cgJiYgKFxuICAgICdzaG91bGRSdW4nIGluIGxvZyB8fFxuICAgICdydW5SZXF1aXJlZCcgaW4gbG9nIHx8XG4gICAgKHdpdGhPcmNoZXN0cmF0b3IgJiYgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nKVxuICApO1xuXG5jb25zdCBpc1JlY2FsY3VsYXRlZCA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBrZXkgPSAndmFsdWUnKSA9PiB2YWx1ZXMuc29tZSh2ID0+IChbXG4gIC4uLih2LmFkZGVkIHx8IFtdKSxcbiAgLi4uKHYudXBkYXRlZCB8fCBbXSlcbl0pLmluY2x1ZGVzKGtleSkpO1xuXG5jb25zdCBibGFua05vZGVWYWx1ZUJ5S2V5OiB7XG4gIFtrZXk6IHN0cmluZ106ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBrZXk/OiBzdHJpbmcsIGlkPzogc3RyaW5nKSA9PiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xufSA9IHtcbiAgcHJvcGVydHk6ICh2YWx1ZXM6IChFbWlzc2lvbiB8IFByb2R1Y3QgfCBIZXN0aWFJbnB1dClbXSwgX2ssIGlkKSA9PiAhIWlkICYmIHZhbHVlcz8ubGVuZ3RoXG4gICAgPyAodmFsdWVzWzBdLnByb3BlcnRpZXMgfHwgW10pLmZpbmQocCA9PiBwLnRlcm1bJ0BpZCddID09PSBpZCk/LnZhbHVlIHx8ICcnXG4gICAgOiAnJyxcbiAgaW5wdXQ6ICh2YWx1ZXM6IEVtaXNzaW9uW10sIF9rLCBpZCkgPT4gISFpZCAmJiB2YWx1ZXM/Lmxlbmd0aFxuICAgID8gcHJvcGVydHlWYWx1ZSh2YWx1ZXMuZmluZCgoeyBpbnB1dHMgfSkgPT4gKGlucHV0cyB8fCBbXSkuc29tZShpbnB1dCA9PiBpbnB1dFsnQGlkJ10gPT09IGlkKSk/LnZhbHVlLCBpZClcbiAgICA6ICcnLFxuICB0cmFuc2Zvcm1hdGlvbjogKHZhbHVlczogRW1pc3Npb25bXSwgX2ssIGlkKSA9PiB2YWx1ZXMubGVuZ3RoXG4gICAgPyBwcm9wZXJ0eVZhbHVlKHZhbHVlcy5maW5kKCh7IHRyYW5zZm9ybWF0aW9uIH0pID0+IHRyYW5zZm9ybWF0aW9uPy5bJ0BpZCddID09PSBpZCk/LnZhbHVlLCBpZClcbiAgICA6ICcnLFxuICBkZWZhdWx0OiAoYmxhbmtOb2Rlcywga2V5KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBibGFua05vZGVzPy5sZW5ndGggPyBibGFua05vZGVzWzBdW2tleV0gOiBudWxsO1xuICAgIHJldHVybiBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICd1bmRlZmluZWQnXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpXG4gICAgICA/IGlzVW5kZWZpbmVkKHZhbHVlKVxuICAgICAgPyAnJ1xuICAgICAgOiB2YWx1ZVxuICAgICAgOiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBibGFua05vZGVWYWx1ZSA9IChibGFua05vZGVzOiBibGFua05vZGVbXSwga2V5OiBzdHJpbmcsIGlkPzogc3RyaW5nKSA9PlxuICBibGFua05vZGVWYWx1ZUJ5S2V5W2tleSBpbiBibGFua05vZGVWYWx1ZUJ5S2V5ID8ga2V5IDogJ2RlZmF1bHQnXShibGFua05vZGVzLCBrZXksIGlkKTtcblxuY29uc3Qgc3ViVmFsdWVMb2dLZXkgPSAoeyBrZXksIGlkIH06IElCbGFua05vZGVMb2dTdWJWYWx1ZSk6IHN0cmluZyA9PlxuICBrZXkgPT09ICd0cmFuc2Zvcm1hdGlvbicgPyBrZXkgOiAoaWQgfHwga2V5IHx8IG51bGwpO1xuXG5jb25zdCBsb2dTdWJWYWx1ZSA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZywgcHJvcDogc3RyaW5nKSA9PlxuICBsb2dzW2tleV1bcHJvcF0gPyAoXG4gICAgQXJyYXkuaXNBcnJheShsb2dzW2tleV1bcHJvcF0pID9cbiAgICAgIChsb2dzW2tleV1bcHJvcF0gYXMgc3RyaW5nW10pLm1hcChpZCA9PiAoeyBrZXk6IHByb3AsIGlkIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSkgOlxuICAgICAgeyBrZXk6IHByb3AsIGlkOiBsb2dzW2tleV1bcHJvcF0gfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWVcbiAgKSA6IHVuZGVmaW5lZDtcblxuY29uc3QgbG9nUHJvcGVydGllcyA9IChub2RlczogYmxhbmtOb2RlW10sIG1vZGVsczogSU1vZGVsW10pID0+XG4gIG5vZGVzLmZsYXRNYXAobm9kZSA9PlxuICAgICgobm9kZSBhcyBhbnkpLnByb3BlcnRpZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm1bJ0BpZCddKVxuICApLm1hcChpZCA9PiAoeyBrZXk6ICdwcm9wZXJ0eScsIGlkLCBjb25maWdNb2RlbHM6IGZpbmRNb2RlbHMobW9kZWxzLCBpZCkubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsKSB9KSk7XG5cbi8qKlxuICogSW5jbHVkZSB0cmFuc2Zvcm1hdGlvbiBtb2RlbCAoY29weSBFbWlzc2lvbnMgZnJvbSBUcmFuc2Zvcm1hdGlvbiB0byBDeWNsZSkgYXMgc3ViVmFsdWUuXG4gKlxuICogQHBhcmFtIGVtaXNzaW9uc1xuICogQHJldHVybnNcbiAqL1xuY29uc3QgbG9nRW1pc3Npb25UcmFuc2Zvcm1hdGlvbnMgPSAoZW1pc3Npb25zOiBFbWlzc2lvbltdKSA9PlxuICBlbWlzc2lvbnMuZmlsdGVyKCh7IHRyYW5zZm9ybWF0aW9uIH0pID0+ICEhdHJhbnNmb3JtYXRpb24/LlsnQGlkJ10pLm1hcCgoeyB0cmFuc2Zvcm1hdGlvbiB9KSA9PiAoe1xuICAgIGlkOiB0cmFuc2Zvcm1hdGlvbj8uWydAaWQnXSxcbiAgICBrZXk6ICd0cmFuc2Zvcm1hdGlvbicsXG4gICAgY29uZmlnTW9kZWxzOiBbJ2N5Y2xlJ11cbiAgfSkpO1xuXG5jb25zdCBpbmNsdWRlQ3ljbGVTdWJWYWx1ZSA9IChzdWJWYWx1ZXM6IElCbGFua05vZGVMb2dTdWJWYWx1ZVtdKSA9PlxuICBzdWJWYWx1ZXMuc29tZSh2ID0+IHYua2V5ICE9PSAncHJvcGVydHknKTtcblxuY29uc3QgY3ljbGVTdWJWYWx1ZSA9ICh7XG4gIHRlcm1JZCwgY29uZmlnTW9kZWxzLCBpc1JlcXVpcmVkLCBzdWJWYWx1ZXMsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWRcbn06IElCbGFua05vZGVMb2cpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHJlZHVjZVZhbHVlcyhvcmlnaW5hbC5maWx0ZXIoKHY6IGFueSkgPT4gIXYuaW5wdXRzPy5sZW5ndGggJiYgIXYudHJhbnNmb3JtYXRpb24pLCB0ZXJtSWQpO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZXMgPSByZWNhbGN1bGF0ZWQuZmlsdGVyKCh2OiBhbnkpID0+ICF2LmlucHV0cz8ubGVuZ3RoICYmICF2LnRyYW5zZm9ybWF0aW9uKTtcbiAgY29uc3QgcmVjYWxjdWxhdGVkVmFsdWUgPSByZWR1Y2VWYWx1ZXMocmVjYWxjdWxhdGVkVmFsdWVzLCB0ZXJtSWQpO1xuICByZXR1cm4gaW5jbHVkZUN5Y2xlU3ViVmFsdWUoc3ViVmFsdWVzKSAmJiAhaXNFbXB0eShyZWNhbGN1bGF0ZWRWYWx1ZSkgPyB7XG4gICAga2V5OiAnY3ljbGUnLFxuICAgIGNvbmZpZ01vZGVscyxcbiAgICBpc1JlcXVpcmVkLFxuICAgIG9yaWdpbmFsVmFsdWUsXG4gICAgcmVjYWxjdWxhdGVkVmFsdWUsXG4gICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKHJlY2FsY3VsYXRlZFZhbHVlcylcbiAgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUgOiBudWxsO1xufTtcblxuY29uc3QgbG9nU3ViVmFsdWVzID0gKFxuICBhbGxMb2dzOiBJTm9kZUxvZ3MsIGxvZ3M6IElOb2RlVGVybUxvZ3MsIG9yaWdpbmFsOiBibGFua05vZGVbXSwgcmVjYWxjdWxhdGVkOiBibGFua05vZGVbXSwgbW9kZWxzOiBJTW9kZWxbXSxcbiAgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH06IElDb25maWdNb2RlbERvY3NEYXRhXG4pOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXSA9PlxuICBtZXJnZVN1YlZhbHVlcyhbXG4gICAgLy8gaW5jbHVkZSBwcm9wZXJ0aWVzXG4gICAgLi4uT2JqZWN0LmtleXMobG9ncylcbiAgICAgIC5maWx0ZXIoaWQgPT4gbG9nc1tpZF0uaXNQcm9wZXJ0eSlcbiAgICAgIC5tYXAoaWQgPT4gKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGtleTogJ3Byb3BlcnR5JyxcbiAgICAgICAgY29uZmlnTW9kZWxzOiAobG9nc1tpZF0ubW9kZWxzIHx8IFtdKS5maWx0ZXIodiA9PiBoYXNMb2cobG9nc1tpZF1bdl0pKVxuICAgICAgfSkpLFxuICAgIC4uLih0eXBlID09PSBTY2hlbWFUeXBlLkVtaXNzaW9uID8gbG9nRW1pc3Npb25UcmFuc2Zvcm1hdGlvbnMocmVjYWxjdWxhdGVkIGFzIEVtaXNzaW9uW10pIDogW10pLFxuICAgIC4uLk9iamVjdC5rZXlzKGxvZ3MpLmZsYXRNYXAoa2V5ID0+XG4gICAgICBbXG4gICAgICAgIGxvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ2lucHV0JyksXG4gICAgICAgIGxvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ3Byb3BlcnR5JylcbiAgICAgIF1cbiAgICAgICAgLmZsYXQoKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5tYXAodiA9PiAoeyAuLi52LCBjb25maWdNb2RlbHM6ICh2LmNvbmZpZ01vZGVscyBhcyBhbnlbXSkgfHwgW2tleV0gfSkpXG4gICAgKSxcbiAgICAuLi5sb2dQcm9wZXJ0aWVzKG9yaWdpbmFsLCBtb2RlbHMpLFxuICAgIC4uLmxvZ1Byb3BlcnRpZXMocmVjYWxjdWxhdGVkLCBtb2RlbHMpXG4gIF0pXG4gICAgLm1hcCgoeyBrZXksIGlkLCBjb25maWdNb2RlbHMsIG9yaWdpbmFsVmFsdWUsIHJlY2FsY3VsYXRlZFZhbHVlIH0pID0+IHtcbiAgICAgIG9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlIHx8IGJsYW5rTm9kZVZhbHVlKG9yaWdpbmFsLCBrZXksIGlkKTtcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlID0gcmVjYWxjdWxhdGVkVmFsdWUgfHwgYmxhbmtOb2RlVmFsdWUocmVjYWxjdWxhdGVkLCBrZXksIGlkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleSxcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbmZpZ01vZGVsczogY29uZmlnTW9kZWxzLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH0sIHsga2V5LCBpZCB9IGFzIGFueSkpLFxuICAgICAgICBvcmlnaW5hbFZhbHVlLFxuICAgICAgICByZWNhbGN1bGF0ZWRWYWx1ZSxcbiAgICAgICAgaXNSZWNhbGN1bGF0ZWQ6ICFpc1VuZGVmaW5lZChyZWNhbGN1bGF0ZWRWYWx1ZSkgJiYgcmVjYWxjdWxhdGVkVmFsdWUgIT09IG9yaWdpbmFsVmFsdWUsXG4gICAgICAgIGlzUmVxdWlyZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKHYgPT4gdi5jb25maWdNb2RlbHMubGVuZ3RoID4gMClcbiAgICAubWFwKHYgPT4gdi5rZXkgPT09ICdpbnB1dCcgPyBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyhhbGxMb2dzKSh2KSA6IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKHYpKTtcblxuY29uc3QgbG9nS2V5cyA9IChcbiAgbG9nczogSU5vZGVUZXJtTG9ncywgb3JpZ2luYWw6IGJsYW5rTm9kZVtdLCByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElNb2RlbFtdLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfVxuKTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW10gPT5cbiAgT2JqZWN0LmtleXMobG9ncylcbiAgICAuZmlsdGVyKGtleSA9PiBsb2dzW2tleV0uaXNLZXkgJiYga2V5ICE9PSAndHJhbnNmb3JtYXRpb24nKVxuICAgIC5tYXAoa2V5ID0+ICh7XG4gICAgICBrZXksXG4gICAgICBjb25maWdNb2RlbHM6IChsb2dzW2tleV0ubW9kZWxzIHx8IFtdKVxuICAgICAgICAubWFwKGNvbmZpZ01vZGVsV2l0aERvY3MobW9kZWxzLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfSwgeyBrZXkgfSBhcyBhbnkpKVxuICAgICAgICAvLyBvbmx5IHRha2UgdGhvc2Ugd2UgZm91bmQgYSBtYXRjaGluZyBtb2RlbCAoYXZvaWQgbWF0Y2hpbmcga2V5IG9uIHdyb25nIG5vZGUgdHlwZSlcbiAgICAgICAgLmZpbHRlcih2ID0+ICEhdi5tb2RlbCksXG4gICAgICBvcmlnaW5hbFZhbHVlOiBibGFua05vZGVWYWx1ZShvcmlnaW5hbCwga2V5KSxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiBibGFua05vZGVWYWx1ZShyZWNhbGN1bGF0ZWQsIGtleSksXG4gICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkLCBrZXkpLFxuICAgICAgaXNSZXF1aXJlZDogdHJ1ZVxuICAgIH0pKVxuICAgIC5maWx0ZXIodiA9PiB2LmNvbmZpZ01vZGVscy5sZW5ndGggPiAwKVxuICAgIC5tYXAoZGF0YVdpdGhDb25maWdNb2RlbExvZ3MobG9ncykpO1xuXG5jb25zdCBpc0JhY2tncm91bmROb0lucHV0ID0gKGxvZ3M6IElOb2RlVGVybUxvZykgPT4gbG9ncy5tZXRob2RUaWVyID09PSBFbWlzc2lvbk1ldGhvZFRpZXIuYmFja2dyb3VuZCAmJiAhbG9ncy5pbnB1dDtcblxuY29uc3QgaXNNb2RlbExvZyA9IChsb2dzOiBJTm9kZVRlcm1Mb2cpID0+XG4gIFtcbiAgICAhaXNCYWNrZ3JvdW5kTm9JbnB1dChsb2dzKSxcbiAgICAhbG9ncy5pc0tleSxcbiAgICAhbG9ncy5pbnB1dCxcbiAgICAhbG9ncy5wcm9wZXJ0eVxuICBdLmV2ZXJ5KEJvb2xlYW4pICYmIFtcbiAgICAnc2hvdWxkUnVuJyBpbiBsb2dzLFxuICAgICdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZ3MsXG4gICAgJ3J1blJlcXVpcmVkJyBpbiBsb2dzXG4gIF0uc29tZShCb29sZWFuKTtcblxuY29uc3QgbW9kZWxDb25maWdPcmRlciA9IChcbiAgbW9kZWxzOiAoSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnIHwgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnW10pW10sIHRlcm1JZDogc3RyaW5nLCBtb2RlbEtleTogc3RyaW5nLCBtb2RlbDogc3RyaW5nXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBpbmRleGVzID0gbW9kZWxzLm1hcCgobSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBhcnJheUluZGV4ID0gQXJyYXkuaXNBcnJheShtKSA/IG1vZGVsQ29uZmlnT3JkZXIobSwgdGVybUlkLCBtb2RlbEtleSwgbW9kZWwpIDogJyc7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobSlcbiAgICAgID8gYXJyYXlJbmRleFxuICAgICAgICA/IFtpbmRleCwgYXJyYXlJbmRleF0uam9pbignLicpXG4gICAgICAgIDogJydcbiAgICAgIDogW3Rlcm1JZCA9PT0gbS52YWx1ZSwgbW9kZWxLZXkgPT09IG0ua2V5LCBtb2RlbCA9PT0gbS5tb2RlbF0uZXZlcnkoQm9vbGVhbilcbiAgICAgICAgPyBgJHtpbmRleH1gXG4gICAgICAgIDogJyc7XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIGluZGV4ZXMubGVuZ3RoID8gaW5kZXhlc1swXSA6ICcnO1xufTtcblxuaW50ZXJmYWNlIElDb25maWdNb2RlbERvY3NEYXRhIHtcbiAgbm9kZVR5cGU6IE5vZGVUeXBlO1xuICB0eXBlOiBTY2hlbWFUeXBlO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAgdGVybVR5cGU/OiBUZXJtVGVybVR5cGU7XG59XG5cbmNvbnN0IGNvbmZpZ01vZGVsV2l0aERvY3MgPSAoXG4gIG1vZGVsczogSU1vZGVsW10sIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCwgdGVybVR5cGUgfTogSUNvbmZpZ01vZGVsRG9jc0RhdGEsIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlXG4pID0+IChtZXRob2RJZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG5vZGUgPSB7XG4gICAgJ0B0eXBlJzogbm9kZVR5cGUsXG4gICAgdGVybTogeyAnQGlkJzogc3ViVmFsdWU/LmlkIHx8IHRlcm1JZCB9LFxuICAgIG1ldGhvZE1vZGVsOiB7ICdAaWQnOiBtZXRob2RJZCB9XG4gIH0gYXMgYW55O1xuICByZXR1cm4ge1xuICAgIG1ldGhvZElkLFxuICAgIG1vZGVsOiBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsUGFyYW1zKG5vZGUpKSB8fFxuICAgICAgLy8gaGFuZGxlIFwibGl2ZUFuaW1hbFwiXG4gICAgICAodGVybVR5cGUgJiYgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCB0ZXJtVHlwZSkpKSB8fFxuICAgICAgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCBgJHtzdWJWYWx1ZT8ua2V5fS4ke21ldGhvZElkfWApKSB8fFxuICAgICAgLy8gaGFuZGxlIFwiaW5wdXQucHJpY2VcIlxuICAgICAgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCBgJHt0eXBlPy50b0xvd2VyQ2FzZSgpfS4ke3N1YlZhbHVlPy5rZXl9YCkpIHx8XG4gICAgICAvLyBoYW5kbGUgXCJpbnB1dC5oZXN0aWFBZ2dyZWdhdGVkRGF0YVwiXG4gICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIGAke3R5cGU/LnRvTG93ZXJDYXNlKCl9LiR7bWV0aG9kSWR9YCkpIHx8XG4gICAgICAvLyBoYW5kbGUgXCJ0cmFuc2Zvcm1hdGlvblwiXG4gICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIHN1YlZhbHVlPy5rZXkpKVxuICB9O1xufTtcblxuY29uc3QgY29uZmlnTW9kZWxXaXRoTG9ncyA9IChkYXRhOiBJQmxhbmtOb2RlTG9nIHwgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlLCBsb2dzOiBJTm9kZVRlcm1Mb2dzKSA9PiAobW9kZWw6IElDb25maWdNb2RlbCkgPT5cbiAgKHtcbiAgICAuLi5tb2RlbCxcbiAgICBsb2dzOiBsb2dzPy5bbW9kZWwubWV0aG9kSWRdLFxuICAgIHN0YXR1czogbG9nU3RhdHVzKGRhdGEsIGxvZ3M/Llttb2RlbC5tZXRob2RJZF0pLFxuICAgIHNob3dMb2dzOiBoYXNMb2dEZXRhaWxzKGRhdGEsIGxvZ3M/Llttb2RlbC5tZXRob2RJZF0pXG4gIH0gYXMgSUNvbmZpZ01vZGVsKTtcblxuY29uc3QgZGF0YVdpdGhDb25maWdNb2RlbExvZ3MgPSAoXG4gIGxvZ3M6IElOb2RlTG9ncyB8IElOb2RlVGVybUxvZ3NcbikgPT4gPFQgZXh0ZW5kcyAoSUJsYW5rTm9kZUxvZyB8IElCbGFua05vZGVMb2dTdWJWYWx1ZSk+KGRhdGE6IFQpID0+IHtcbiAgY29uc3Qgc3ViTG9nS2V5ID0gc3ViVmFsdWVMb2dLZXkoZGF0YSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpO1xuICBjb25zdCBsb2cgPSBzdWJMb2dLZXkgPyBsb2dzW3N1YkxvZ0tleV0gOiBsb2dzO1xuICByZXR1cm4ge1xuICAgIC4uLmRhdGEsXG4gICAgY29uZmlnTW9kZWxzOiBkYXRhLmNvbmZpZ01vZGVscy5tYXAobW9kZWwgPT5cbiAgICAgIEFycmF5LmlzQXJyYXkobW9kZWwpID8gbW9kZWwubWFwKGNvbmZpZ01vZGVsV2l0aExvZ3MoZGF0YSwgbG9nKSkgOiBjb25maWdNb2RlbFdpdGhMb2dzKGRhdGEsIGxvZykobW9kZWwpXG4gICAgKVxuICB9IGFzIFQ7XG59O1xuXG4vKipcbiAqIEdyb3VwIG1vZGVscyBydW5uaW5nIGluIHBhcmFsbGVsIHVuZGVyIHRoZSBzYW1lIGFycmF5LCBhcyB0aGV5IHNob3VsZCBhcHBlYXIgdmVydGljYWxseS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIG1vZGVscyBUaGUgbGlzdCBvZiBtb2RlbHNcbiAqL1xuY29uc3QgZ3JvdXBQYXJhbGxlbE1vZGVscyA9IChjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsIHRlcm1JZDogc3RyaW5nLCBtb2RlbEtleTogc3RyaW5nLCBtb2RlbHM6IElDb25maWdNb2RlbFtdKSA9PiB7XG4gIGNvbnN0IG1vZGVsc1dpdGhPcmRlciA9IG1vZGVscy5tYXAobW9kZWwgPT4gKHtcbiAgICBtb2RlbCxcbiAgICBvcmRlcjogbW9kZWxDb25maWdPcmRlcihjb25maWcubW9kZWxzLCB0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbC5tZXRob2RJZClcbiAgfSkpO1xuICByZXR1cm4gbW9kZWxzV2l0aE9yZGVyXG4gICAgLnJlZHVjZSgocHJldiwgeyBtb2RlbCwgb3JkZXIgfSkgPT4ge1xuICAgICAgY29uc3QgaXNBcnJheSA9IG9yZGVyLmluY2x1ZGVzKCcuJyk7XG4gICAgICBjb25zdCBhcnJheUluZGV4ID0gaXNBcnJheSA/IG9yZGVyLnNwbGl0KCcuJylbMF0gOiBwcmV2Lmxlbmd0aDtcbiAgICAgIHByZXZbYXJyYXlJbmRleF0gPSBpc0FycmF5ID8gWy4uLihwcmV2W2FycmF5SW5kZXhdIHx8IFtdKSwgbW9kZWxdIDogbW9kZWw7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCBbXSBhcyBJQ29uZmlnTW9kZWxbXVtdKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAubWFwKHYgPT4gdi5sZW5ndGggPT09IDEgPyB2WzBdIDogdik7XG59O1xuXG5jb25zdCBhbGxQYXJhbGxlbCA9IChtb2RlbHM6IChJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSlbXSkgPT5cbiAgbW9kZWxzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KG1vZGVsc1swXSkgJiYgbW9kZWxzWzBdLmxlbmd0aCA+IDE7XG5cbmNvbnN0IHZhbHVlQnlNZXRob2RJZCA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBtZXRob2RJZDogc3RyaW5nLCB0ZXJtSWQ6IHN0cmluZykgPT5cbiAgcHJvcGVydHlWYWx1ZSh2YWx1ZXMuZmluZCh2ID0+IHYubWV0aG9kTW9kZWw/LlsnQGlkJ10gPT09IG1ldGhvZElkKT8udmFsdWUgYXMgbnVtYmVyW10sIHRlcm1JZCk7XG5cbmNvbnN0IGdyb3VwUGFyYWxsZWxWYWx1ZXMgPSAodmFsdWVzOiBibGFua05vZGVbXSwgbW9kZWxzOiBJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSwgdGVybUlkOiBzdHJpbmcpID0+XG4gIEFycmF5LmlzQXJyYXkobW9kZWxzKVxuICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKG1vZGVscy5tYXAobW9kZWwgPT4gW21vZGVsLm1ldGhvZElkLCB2YWx1ZUJ5TWV0aG9kSWQodmFsdWVzLCBtb2RlbC5tZXRob2RJZCwgdGVybUlkKV0pKVxuICAgIDoge307XG5cbmV4cG9ydCBjb25zdCBncm91cExvZ3NCeVRlcm0gPSAoXG4gIG5vZGVUeXBlOiBOb2RlVHlwZSwgbG9nczogSU5vZGVMb2dzLCBtb2RlbHM6IElNb2RlbFtdLCBjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsXG4gIGFsbE9yaWdpbmFsVmFsdWVzOiBibGFua05vZGVbXSwgYWxsUmVjYWxjdWxhdGVkVmFsdWVzOiBibGFua05vZGVbXSxcbiAgbm9kZUtleT86IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gKGFsbE9yaWdpbmFsVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZXMgPSAoYWxsUmVjYWxjdWxhdGVkVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICBjb25zdCB0eXBlOiBTY2hlbWFUeXBlID0gb3JpZ2luYWxWYWx1ZXMubGVuZ3RoID9cbiAgICBvcmlnaW5hbFZhbHVlc1swXVsnQHR5cGUnXSB8fCBvcmlnaW5hbFZhbHVlc1swXS50eXBlIDpcbiAgICByZWNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoID9cbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlc1swXVsnQHR5cGUnXSB8fCByZWNhbGN1bGF0ZWRWYWx1ZXNbMF0udHlwZSA6XG4gICAgICB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuICh0ZXJtOiBJVGVybUpTT05MRCk6IElCbGFua05vZGVMb2cgPT4ge1xuICAgIGNvbnN0IHRlcm1JZCA9IHRlcm1bJ0BpZCddO1xuICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS50ZXJtVHlwZTtcbiAgICBjb25zdCB0ZXJtTG9ncyA9IGdldChsb2dzLCB0ZXJtSWQsIHt9KSBhcyBJTm9kZVRlcm1Mb2dzO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gb3JpZ2luYWxWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgY29uc3QgcmVjYWxjdWxhdGVkID0gcmVjYWxjdWxhdGVkVmFsdWVzLmZpbHRlcih2ID0+IHRlcm1JZCA9PT0gdi50ZXJtIVsnQGlkJ10pO1xuICAgIGNvbnN0IGhhc0RhdGEgPSAhIW9yaWdpbmFsLmxlbmd0aCB8fCAhIXJlY2FsY3VsYXRlZC5sZW5ndGggfHwgT2JqZWN0LmtleXModGVybUxvZ3MpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgY29uZmlnTW9kZWxzRGF0YSA9IHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCwgdGVybVR5cGUgfTtcbiAgICBjb25zdCBjb25maWdNb2RlbHMgPSBncm91cFBhcmFsbGVsTW9kZWxzKFxuICAgICAgY29uZmlnLCB0ZXJtSWQsIG5vZGVLZXkhLFxuICAgICAgdW5pcXVlKFtcbiAgICAgICAgLi4uKHRlcm1Mb2dzLm1vZGVscyB8fCBbXSkuZmlsdGVyKGtleSA9PiBpc01vZGVsTG9nKHRlcm1Mb2dzW2tleV0pKSxcbiAgICAgICAgLy8gLi4uZmluZENvbmZpZ01vZGVscyhjb25maWcsIHRlcm1JZCwgbm9kZUtleSEsIG1vZGVscykubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsIGFzIHN0cmluZylcbiAgICAgIF0pLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSkpXG4gICAgKTtcbiAgICBjb25zdCBrZXlzID0gbG9nS2V5cyh0ZXJtTG9ncywgb3JpZ2luYWwsIHJlY2FsY3VsYXRlZCwgbW9kZWxzLCBjb25maWdNb2RlbHNEYXRhKTtcbiAgICBjb25zdCBzdWJWYWx1ZXMgPSBsb2dTdWJWYWx1ZXMobG9ncywgdGVybUxvZ3MsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWQsIG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSk7XG4gICAgY29uc3QgaXNSZXF1aXJlZCA9ICFPYmplY3QudmFsdWVzKHRlcm1Mb2dzKVxuICAgICAgLmZpbHRlcih2ID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiAhdi5pc0tleSlcbiAgICAgIC8vIGlnbm9yZSBtb2RlbHMgdGhhdCB3ZXJlIG5ldmVyIGdvaW5nIHRvIHJ1blxuICAgICAgLmZpbHRlcihpc1J1bk9yY2hlc3RyYXRvcilcbiAgICAgIC5ldmVyeSh2ID0+IHYucnVuUmVxdWlyZWQgPT09IGZhbHNlKTtcblxuICAgIGNvbnN0IG5vZGVMb2c6IElCbGFua05vZGVMb2cgPSBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyh0ZXJtTG9ncykoe1xuICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgY2FuT3Blbjoga2V5cy5sZW5ndGggPiAwIHx8IHN1YlZhbHVlcy5sZW5ndGggPiAwLFxuICAgICAgdGVybUlkLFxuICAgICAgdGVybSxcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWdNb2RlbHMsXG4gICAgICBvcmlnaW5hbCxcbiAgICAgIG9yaWdpbmFsVmFsdWU6IHJlZHVjZVZhbHVlcyhvcmlnaW5hbCwgdGVybUlkKSxcbiAgICAgIHJlY2FsY3VsYXRlZCxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiByZWR1Y2VWYWx1ZXMocmVjYWxjdWxhdGVkLCB0ZXJtSWQpLFxuICAgICAgaXNPcmlnaW5hbDogISFvcmlnaW5hbC5sZW5ndGgsXG4gICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkKSxcbiAgICAgIGhhc0RhdGEsXG4gICAgICBpc1JlcXVpcmVkLFxuICAgICAgbG9nczogdGVybUxvZ3MsXG4gICAgICBrZXlzLFxuICAgICAgc3ViVmFsdWVzLFxuICAgICAgYWxsUGFyYWxsZWw6IGFsbFBhcmFsbGVsKGNvbmZpZ01vZGVscyksXG4gICAgICBvcmlnaW5hbFZhbHVlQnlNZXRob2RJZDogZ3JvdXBQYXJhbGxlbFZhbHVlcyhvcmlnaW5hbCwgY29uZmlnTW9kZWxzWzBdLCB0ZXJtSWQpLFxuICAgICAgcmVjYWxjdWxhdGVkVmFsdWVCeU1ldGhvZElkOiBncm91cFBhcmFsbGVsVmFsdWVzKHJlY2FsY3VsYXRlZCwgY29uZmlnTW9kZWxzWzBdLCB0ZXJtSWQpXG4gICAgfSk7XG4gICAgY29uc3Qgc3ViVmFsdWUgPSBjeWNsZVN1YlZhbHVlKG5vZGVMb2cpO1xuXG4gICAgcmV0dXJuIHN1YlZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgLi4ubm9kZUxvZyxcbiAgICAgICAgbW9kZWxzSW5TdWJWYWx1ZXM6IHRydWUsXG4gICAgICAgIHN1YlZhbHVlczogW1xuICAgICAgICAgIHN1YlZhbHVlLFxuICAgICAgICAgIC4uLnN1YlZhbHVlc1xuICAgICAgICBdXG4gICAgICB9IC8vIGlmIHdlIGluY2x1ZGUgdGhlIEN5Y2xlIHZhbHVlLCBpdCBiZWNvbWVzIHRoZSBtYWluIHJlZmVyZW5jZSBvZiB0aGUgbW9kZWxzXG4gICAgICA6IG5vZGVMb2c7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbW9kZWxDb3VudCA9IChibGFua05vZGVMb2dzOiBJQmxhbmtOb2RlTG9nW10pID0+IE1hdGgubWF4LmFwcGx5KE1hdGgubWF4LCBbXG4gIDAsXG4gIC4uLmJsYW5rTm9kZUxvZ3MuZmxhdE1hcCh2ID0+IFtcbiAgICB2LmNvbmZpZ01vZGVscy5sZW5ndGgsXG4gICAgLi4uKHYuc3ViVmFsdWVzLm1hcChzID0+IHMuY29uZmlnTW9kZWxzPy5sZW5ndGggfHwgMCkpLFxuICAgIC4uLih2LmtleXMubWFwKHMgPT4gcy5jb25maWdNb2RlbHM/Lmxlbmd0aCB8fCAwKSlcbiAgXSlcbl0pO1xuXG5leHBvcnQgY29uc3QgbG9nVmFsdWVBcnJheSA9ICh2YWx1ZTogc3RyaW5nKTogYW55W10gPT5cbiAgdmFsdWUuaW5jbHVkZXMoJzsnKSA/XG4gICAgdmFsdWUuc3BsaXQoJzsnKS5mbGF0TWFwKHYgPT4ge1xuICAgICAgY29uc3QgcmVzID0gdi5zcGxpdCgnXycpLm1hcCh2diA9PiB2di5zcGxpdCgnOicpKTtcbiAgICAgIHJldHVybiByZXMubGVuZ3RoIDw9IDEgPyByZXMuZmxhdCgpIDogT2JqZWN0LmZyb21FbnRyaWVzKHJlcyk7XG4gICAgfSkgOlxuICAgIG51bGw7XG4iXX0=
|