footprintjs 4.16.0 → 4.17.2
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/AGENTS.md +567 -82
- package/CLAUDE.md +57 -0
- package/README.md +2 -0
- package/dist/advanced.js +4 -2
- package/dist/detach.js +78 -0
- package/dist/esm/advanced.js +2 -1
- package/dist/esm/detach.js +57 -0
- package/dist/esm/lib/builder/FlowChartBuilder.js +171 -61
- package/dist/esm/lib/contract/openapi.js +4 -5
- package/dist/esm/lib/contract/schema.js +115 -4
- package/dist/esm/lib/decide/decide.js +4 -5
- package/dist/esm/lib/decide/evidence.js +3 -2
- package/dist/esm/lib/detach/drivers/immediate.js +66 -0
- package/dist/esm/lib/detach/drivers/microtaskBatch.js +113 -0
- package/dist/esm/lib/detach/drivers/sendBeacon.js +78 -0
- package/dist/esm/lib/detach/drivers/setImmediate.js +81 -0
- package/dist/esm/lib/detach/drivers/setTimeout.js +69 -0
- package/dist/esm/lib/detach/drivers/workerThread.js +117 -0
- package/dist/esm/lib/detach/flush.js +91 -0
- package/dist/esm/lib/detach/handle.js +134 -0
- package/dist/esm/lib/detach/registry.js +97 -0
- package/dist/esm/lib/detach/runChild.js +40 -0
- package/dist/esm/lib/detach/spawn.js +86 -0
- package/dist/esm/lib/detach/types.js +37 -0
- package/dist/esm/lib/engine/errors/errorInfo.js +4 -4
- package/dist/esm/lib/engine/graph/StageNode.js +2 -2
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +9 -8
- package/dist/esm/lib/engine/handlers/ContinuationResolver.js +12 -9
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +7 -8
- package/dist/esm/lib/engine/handlers/ExtractorRunner.js +14 -8
- package/dist/esm/lib/engine/handlers/NodeResolver.js +5 -3
- package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +11 -14
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +9 -9
- package/dist/esm/lib/engine/handlers/StageRunner.js +9 -11
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +13 -12
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +4 -4
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +85 -96
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +18 -36
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +6 -5
- package/dist/esm/lib/engine/narrative/recorders/AdaptiveNarrativeFlowRecorder.js +7 -6
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +10 -10
- package/dist/esm/lib/engine/narrative/recorders/MilestoneNarrativeFlowRecorder.js +5 -3
- package/dist/esm/lib/engine/narrative/recorders/ProgressiveNarrativeFlowRecorder.js +4 -3
- package/dist/esm/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.js +4 -4
- package/dist/esm/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.js +5 -6
- package/dist/esm/lib/engine/narrative/recorders/SilentNarrativeFlowRecorder.js +5 -6
- package/dist/esm/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.js +5 -3
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +97 -71
- package/dist/esm/lib/memory/DiagnosticCollector.js +6 -8
- package/dist/esm/lib/memory/EventLog.js +5 -3
- package/dist/esm/lib/memory/SharedMemory.js +3 -2
- package/dist/esm/lib/memory/StageContext.js +44 -14
- package/dist/esm/lib/memory/TransactionBuffer.js +9 -8
- package/dist/esm/lib/memory/backtrack.js +3 -4
- package/dist/esm/lib/memory/commitLogUtils.js +2 -2
- package/dist/esm/lib/memory/utils.js +2 -3
- package/dist/esm/lib/pause/types.js +33 -14
- package/dist/esm/lib/reactive/createTypedScope.js +10 -8
- package/dist/esm/lib/reactive/types.js +3 -1
- package/dist/esm/lib/recorder/BoundaryStateTracker.js +263 -0
- package/dist/esm/lib/recorder/CompositeRecorder.js +3 -1
- package/dist/esm/lib/recorder/InOutRecorder.js +5 -6
- package/dist/esm/lib/recorder/KeyedRecorder.js +2 -4
- package/dist/esm/lib/recorder/QualityRecorder.js +15 -14
- package/dist/esm/lib/recorder/SequenceRecorder.js +11 -12
- package/dist/esm/lib/recorder/TopologyRecorder.js +36 -40
- package/dist/esm/lib/recorder/index.js +2 -1
- package/dist/esm/lib/recorder/qualityTrace.js +4 -5
- package/dist/esm/lib/runner/ExecutionRuntime.js +20 -4
- package/dist/esm/lib/runner/FlowChartExecutor.js +99 -55
- package/dist/esm/lib/runner/RunContext.js +5 -3
- package/dist/esm/lib/runner/RunnableChart.js +7 -9
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -5
- package/dist/esm/lib/schema/errors.js +4 -3
- package/dist/esm/lib/schema/validate.js +4 -5
- package/dist/esm/lib/scope/ScopeFacade.js +52 -35
- package/dist/esm/lib/scope/providers/baseStateCompatible.js +9 -9
- package/dist/esm/lib/scope/providers/guards.js +2 -2
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +9 -7
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +10 -8
- package/dist/esm/lib/scope/state/zod/defineScopeFromZod.js +2 -3
- package/dist/esm/lib/scope/state/zod/resolver.js +2 -3
- package/dist/esm/lib/scope/state/zod/scopeFactory.js +16 -20
- package/dist/esm/lib/scope/state/zod/utils/validateHelper.js +57 -14
- package/dist/esm/trace.js +4 -1
- package/dist/lib/builder/FlowChartBuilder.js +171 -61
- package/dist/lib/contract/openapi.js +4 -5
- package/dist/lib/contract/schema.js +115 -4
- package/dist/lib/decide/decide.js +4 -5
- package/dist/lib/decide/evidence.js +3 -2
- package/dist/lib/detach/drivers/immediate.js +70 -0
- package/dist/lib/detach/drivers/microtaskBatch.js +117 -0
- package/dist/lib/detach/drivers/sendBeacon.js +82 -0
- package/dist/lib/detach/drivers/setImmediate.js +85 -0
- package/dist/lib/detach/drivers/setTimeout.js +73 -0
- package/dist/lib/detach/drivers/workerThread.js +121 -0
- package/dist/lib/detach/flush.js +95 -0
- package/dist/lib/detach/handle.js +140 -0
- package/dist/lib/detach/registry.js +106 -0
- package/dist/lib/detach/runChild.js +67 -0
- package/dist/lib/detach/spawn.js +92 -0
- package/dist/lib/detach/types.js +38 -0
- package/dist/lib/engine/errors/errorInfo.js +4 -4
- package/dist/lib/engine/graph/StageNode.js +2 -2
- package/dist/lib/engine/handlers/ChildrenExecutor.js +9 -8
- package/dist/lib/engine/handlers/ContinuationResolver.js +12 -9
- package/dist/lib/engine/handlers/DeciderHandler.js +7 -8
- package/dist/lib/engine/handlers/ExtractorRunner.js +14 -8
- package/dist/lib/engine/handlers/NodeResolver.js +5 -3
- package/dist/lib/engine/handlers/RuntimeStructureManager.js +11 -14
- package/dist/lib/engine/handlers/SelectorHandler.js +9 -9
- package/dist/lib/engine/handlers/StageRunner.js +9 -11
- package/dist/lib/engine/handlers/SubflowExecutor.js +13 -12
- package/dist/lib/engine/handlers/SubflowInputMapper.js +4 -4
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +85 -96
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +18 -36
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +6 -5
- package/dist/lib/engine/narrative/recorders/AdaptiveNarrativeFlowRecorder.js +7 -6
- package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +10 -10
- package/dist/lib/engine/narrative/recorders/MilestoneNarrativeFlowRecorder.js +5 -3
- package/dist/lib/engine/narrative/recorders/ProgressiveNarrativeFlowRecorder.js +4 -3
- package/dist/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.js +4 -4
- package/dist/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.js +5 -6
- package/dist/lib/engine/narrative/recorders/SilentNarrativeFlowRecorder.js +5 -6
- package/dist/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.js +5 -3
- package/dist/lib/engine/traversal/FlowchartTraverser.js +97 -71
- package/dist/lib/memory/DiagnosticCollector.js +6 -8
- package/dist/lib/memory/EventLog.js +5 -3
- package/dist/lib/memory/SharedMemory.js +3 -2
- package/dist/lib/memory/StageContext.js +44 -14
- package/dist/lib/memory/TransactionBuffer.js +9 -8
- package/dist/lib/memory/backtrack.js +3 -4
- package/dist/lib/memory/commitLogUtils.js +2 -2
- package/dist/lib/memory/utils.js +2 -3
- package/dist/lib/pause/types.js +33 -14
- package/dist/lib/reactive/createTypedScope.js +10 -8
- package/dist/lib/reactive/types.js +3 -1
- package/dist/lib/recorder/BoundaryStateTracker.js +267 -0
- package/dist/lib/recorder/CompositeRecorder.js +3 -1
- package/dist/lib/recorder/InOutRecorder.js +5 -6
- package/dist/lib/recorder/KeyedRecorder.js +2 -4
- package/dist/lib/recorder/QualityRecorder.js +15 -14
- package/dist/lib/recorder/SequenceRecorder.js +11 -12
- package/dist/lib/recorder/TopologyRecorder.js +36 -40
- package/dist/lib/recorder/index.js +4 -2
- package/dist/lib/recorder/qualityTrace.js +4 -5
- package/dist/lib/runner/ExecutionRuntime.js +20 -4
- package/dist/lib/runner/FlowChartExecutor.js +99 -55
- package/dist/lib/runner/RunContext.js +5 -3
- package/dist/lib/runner/RunnableChart.js +7 -9
- package/dist/lib/runner/getSubtreeSnapshot.js +4 -5
- package/dist/lib/schema/errors.js +4 -3
- package/dist/lib/schema/validate.js +4 -5
- package/dist/lib/scope/ScopeFacade.js +52 -35
- package/dist/lib/scope/providers/baseStateCompatible.js +9 -9
- package/dist/lib/scope/providers/guards.js +2 -2
- package/dist/lib/scope/recorders/DebugRecorder.js +9 -7
- package/dist/lib/scope/recorders/MetricRecorder.js +10 -8
- package/dist/lib/scope/state/zod/defineScopeFromZod.js +2 -3
- package/dist/lib/scope/state/zod/resolver.js +2 -3
- package/dist/lib/scope/state/zod/scopeFactory.js +16 -20
- package/dist/lib/scope/state/zod/utils/validateHelper.js +57 -14
- package/dist/trace.js +6 -2
- package/dist/types/advanced.d.ts +1 -0
- package/dist/types/detach.d.ts +59 -0
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +81 -0
- package/dist/types/lib/detach/drivers/immediate.d.ts +39 -0
- package/dist/types/lib/detach/drivers/microtaskBatch.d.ts +57 -0
- package/dist/types/lib/detach/drivers/sendBeacon.d.ts +38 -0
- package/dist/types/lib/detach/drivers/setImmediate.d.ts +32 -0
- package/dist/types/lib/detach/drivers/setTimeout.d.ts +34 -0
- package/dist/types/lib/detach/drivers/workerThread.d.ts +50 -0
- package/dist/types/lib/detach/flush.d.ts +62 -0
- package/dist/types/lib/detach/handle.d.ts +83 -0
- package/dist/types/lib/detach/registry.d.ts +82 -0
- package/dist/types/lib/detach/runChild.d.ts +41 -0
- package/dist/types/lib/detach/spawn.d.ts +64 -0
- package/dist/types/lib/detach/types.d.ts +200 -0
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +0 -1
- package/dist/types/lib/engine/types.d.ts +0 -1
- package/dist/types/lib/reactive/types.d.ts +4 -0
- package/dist/types/lib/recorder/BoundaryStateTracker.d.ts +215 -0
- package/dist/types/lib/recorder/index.d.ts +1 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +28 -0
- package/dist/types/lib/scope/ScopeFacade.d.ts +4 -0
- package/dist/types/lib/scope/state/zod/utils/validateHelper.d.ts +13 -1
- package/dist/types/trace.d.ts +1 -0
- package/package.json +6 -1
package/dist/lib/memory/utils.js
CHANGED
|
@@ -167,7 +167,6 @@ exports.deepSmartMerge = deepSmartMerge;
|
|
|
167
167
|
* Guarantees "last writer wins" semantics.
|
|
168
168
|
*/
|
|
169
169
|
function applySmartMerge(base, updates, overwrite, trace) {
|
|
170
|
-
var _a;
|
|
171
170
|
const out = structuredClone(base);
|
|
172
171
|
for (const { path, verb } of trace) {
|
|
173
172
|
const segs = path.split(exports.DELIM);
|
|
@@ -175,11 +174,11 @@ function applySmartMerge(base, updates, overwrite, trace) {
|
|
|
175
174
|
(0, pathOps_js_1.nativeSet)(out, segs, structuredClone((0, pathOps_js_1.nativeGet)(overwrite, segs)));
|
|
176
175
|
}
|
|
177
176
|
else {
|
|
178
|
-
const current = (
|
|
177
|
+
const current = (0, pathOps_js_1.nativeGet)(out, segs) ?? {};
|
|
179
178
|
(0, pathOps_js_1.nativeSet)(out, segs, deepSmartMerge(current, (0, pathOps_js_1.nativeGet)(updates, segs)));
|
|
180
179
|
}
|
|
181
180
|
}
|
|
182
181
|
return out;
|
|
183
182
|
}
|
|
184
183
|
exports.applySmartMerge = applySmartMerge;
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQUVILDZDQUF1RjtBQUd2RixpRkFBaUY7QUFDcEUsUUFBQSxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBSTlCOzs7R0FHRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLEtBQWMsRUFBRSxPQUE0QixFQUFFO0lBQ2pGLE9BQU87UUFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNyRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUxELG9EQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLEdBQWlCLEVBQ2pCLEtBQWEsRUFDYixLQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQVEsRUFDUixhQUF1QjtJQUV2QixNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRSxNQUFNLElBQUksR0FBRyxPQUFPLElBQUksVUFBVSxDQUFDO0lBQ25DLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMzQixJQUFJLE9BQU8sR0FBaUIsR0FBRyxDQUFDO0lBQ2hDLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPLENB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RUQ7Ozs7R0FJRztBQUNILFNBQWdCLGVBQWUsQ0FDN0IsSUFBUyxFQUNULE9BQW9CLEVBQ3BCLFNBQXNCLEVBQ3RCLEtBQWdEOztJQUVoRCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsS0FBSyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkIsSUFBQSxzQkFBSSxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUEsc0JBQUksRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxPQUFPLEdBQUcsTUFBQSxJQUFBLHNCQUFJLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxtQ0FBSSxFQUFFLENBQUM7WUFDdEMsSUFBQSxzQkFBSSxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFBLHNCQUFJLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQWpCRCwwQ0FpQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHV0aWxzLnRzIOKAlCBIZWxwZXIgZnVuY3Rpb25zIGZvciBuZXN0ZWQgb2JqZWN0IG1hbmlwdWxhdGlvblxuICpcbiAqIFByb3ZpZGVzIGNvbnNpc3RlbnQgcGF0aCB0cmF2ZXJzYWwgYW5kIHZhbHVlIG1hbmlwdWxhdGlvbiBmb3IgdGhlIG1lbW9yeSBzeXN0ZW0uXG4gKiBaZXJvIGV4dGVybmFsIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5pbXBvcnQgeyBuYXRpdmVHZXQgYXMgX2dldCwgbmF0aXZlSGFzIGFzIF9oYXMsIG5hdGl2ZVNldCBhcyBfc2V0IH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5UGF0Y2ggfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIEFTQ0lJIFVuaXQtU2VwYXJhdG9yIOKAlCBjYW5ub3QgYXBwZWFyIGluIEpTIGlkZW50aWZpZXJzLCBpbnZpc2libGUgaW4gbG9ncy4gKi9cbmV4cG9ydCBjb25zdCBERUxJTSA9ICdcXHUwMDFGJztcblxudHlwZSBOZXN0ZWRPYmplY3QgPSB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4vKipcbiAqIFJlc29sdmVzIHJ1bi1uYW1lc3BhY2VkIGFuZCBnbG9iYWwgcGF0aHMuXG4gKiBFYWNoIGZsb3djaGFydCBleGVjdXRpb24gKHJ1bikgc3RvcmVzIGRhdGEgdW5kZXIgYHJ1bnMve2lkfS9gIHRvIHByZXZlbnQgY29sbGlzaW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bkFuZEdsb2JhbFBhdGhzKHJ1bklkPzogc3RyaW5nLCBwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW10pIHtcbiAgcmV0dXJuIHtcbiAgICBydW5QYXRoOiBydW5JZCA/IFsncnVucycsIHJ1bklkLCAuLi5wYXRoXSA6IHVuZGVmaW5lZCxcbiAgICBnbG9iYWxQYXRoOiBbLi4ucGF0aF0sXG4gIH07XG59XG5cbi8qKlxuICogU2V0cyBhIHZhbHVlIGF0IGEgbmVzdGVkIHBhdGgsIGNyZWF0aW5nIGludGVybWVkaWF0ZSBvYmplY3RzIGFzIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE5lc3RlZFZhbHVlPFQ+KFxuICBvYmo6IE5lc3RlZE9iamVjdCxcbiAgcnVuSWQ6IHN0cmluZyxcbiAgX3BhdGg6IHN0cmluZ1tdLFxuICBmaWVsZDogc3RyaW5nLFxuICB2YWx1ZTogVCxcbiAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4pOiBOZXN0ZWRPYmplY3Qge1xuICBjb25zdCB7IHJ1blBhdGgsIGdsb2JhbFBhdGggfSA9IGdldFJ1bkFuZEdsb2JhbFBhdGhzKHJ1bklkLCBfcGF0aCk7XG4gIGNvbnN0IHBhdGggPSBydW5QYXRoIHx8IGdsb2JhbFBhdGg7XG4gIGNvbnN0IHBhdGhDb3B5ID0gWy4uLnBhdGhdO1xuICBsZXQgY3VycmVudDogTmVzdGVkT2JqZWN0ID0gb2JqO1xuICB3aGlsZSAocGF0aENvcHkubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGtleSA9IHBhdGhDb3B5LnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIGtleSkpIHtcbiAgICAgIGN1cnJlbnRba2V5XSA9IGtleSA9PT0gcnVuSWQgJiYgZGVmYXVsdFZhbHVlcyA/IGRlZmF1bHRWYWx1ZXMgOiB7fTtcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgfVxuICBjdXJyZW50W2ZpZWxkXSA9IHZhbHVlO1xuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIERlZXAtbWVyZ2VzIGEgdmFsdWUgaW50byB0aGUgb2JqZWN0IGF0IHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAqIC0gQXJyYXlzOiBjb25jYXRlbmF0ZVxuICogLSBPYmplY3RzOiBzaGFsbG93IG1lcmdlIGF0IGVhY2ggbGV2ZWxcbiAqIC0gUHJpbWl0aXZlczogcmVwbGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTmVzdGVkVmFsdWU8VD4oXG4gIG9iajogYW55LFxuICBydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBfcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSxcbiAgZmllbGQ6IHN0cmluZyB8IG51bWJlcixcbiAgdmFsdWU6IFQsXG4gIGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLFxuKTogYW55IHtcbiAgY29uc3QgeyBydW5QYXRoLCBnbG9iYWxQYXRoIH0gPSBnZXRSdW5BbmRHbG9iYWxQYXRocyhydW5JZCwgX3BhdGgpO1xuICBjb25zdCBwYXRoID0gcnVuUGF0aCB8fCBnbG9iYWxQYXRoO1xuICBjb25zdCBwYXRoQ29weSA9IFsuLi5wYXRoXTtcbiAgbGV0IGN1cnJlbnQ6IE5lc3RlZE9iamVjdCA9IG9iajtcbiAgd2hpbGUgKHBhdGhDb3B5Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBrZXkgPSBwYXRoQ29weS5zaGlmdCgpIGFzIHN0cmluZztcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXJyZW50LCBrZXkpKSB7XG4gICAgICBjdXJyZW50W2tleV0gPSBrZXkgPT09IHJ1bklkICYmIGRlZmF1bHRWYWx1ZXMgPyBkZWZhdWx0VmFsdWVzIDoge307XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gIH1cbiAgdXBkYXRlVmFsdWUoY3VycmVudCwgZmllbGQsIHZhbHVlKTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJbi1wbGFjZSB2YWx1ZSB1cGRhdGUgd2l0aCBtZXJnZSBzZW1hbnRpY3MuXG4gKiAtIEFycmF5cyAobm9uLWVtcHR5KTogY29uY2F0ZW5hdGUgb250byBleGlzdGluZ1xuICogLSBBcnJheXMgKGVtcHR5KTogICAgIGRpcmVjdCByZXBsYWNlIOKAlCB3cml0aW5nIGBbXWAgY2xlYXJzIHRoZSBmaWVsZFxuICogLSBPYmplY3RzIChub24tZW1wdHkpOiBzaGFsbG93IG1lcmdlIChzcHJlYWQpXG4gKiAtIE9iamVjdHMgKGVtcHR5KTogICAgZGlyZWN0IHJlcGxhY2Ug4oCUIHdyaXRpbmcgYHt9YCBjbGVhcnMgdGhlIGZpZWxkXG4gKiAtIFByaW1pdGl2ZXM6IGRpcmVjdCBhc3NpZ25tZW50XG4gKlxuICogTm90ZSBvbiBlbXB0eSBhcnJheXM6IGJvdGggYHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpYCBhbmRcbiAqIGBBcnJheS5pc0FycmF5KHZhbHVlKWAgZXZhbHVhdGUgdGhlIHNhbWUgZm9yIGFycmF5cyDigJQgYFtdYCBpcyB0cnV0aHkgaW5cbiAqIEphdmFTY3JpcHQsIHNvIHRoZSBgJiZgIGd1YXJkIHdhcyBuZXZlciB0aGUgaXNzdWUuIFRoZSBhY3R1YWwgYnVnIHdhcyB0aGVcbiAqIGNvbmNhdCBwYXRoOiBgWy4uLmN1ciwgLi4uW11dYCBzaWxlbnRseSByZXR1cm5lZCBgY3VyYCB1bmNoYW5nZWQgd2hlbiBgdmFsdWVgXG4gKiB3YXMgYFtdYCwgbWFraW5nIGB1cGRhdGVWYWx1ZShvYmosICd0YWdzJywgW10pYCBhIG5vLW9wIGluc3RlYWQgb2YgYSBjbGVhci5cbiAqIFRoZSBmaXggaXMgdGhlIGV4cGxpY2l0IGB2YWx1ZS5sZW5ndGggPT09IDBgIGVhcmx5LXJldHVybiBicmFuY2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWYWx1ZShvYmplY3Q6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTsgLy8gY2xlYXI6IFtdIHJlcGxhY2VzIHdoYXRldmVyIHdhcyB0aGVyZVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdXIgPSBvYmplY3Rba2V5XSBhcyBhbnk7XG4gICAgICBvYmplY3Rba2V5XSA9IGN1ciA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBbLi4uY3VyLCAuLi52YWx1ZV07XG4gICAgfVxuICB9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCkge1xuICAgIGNvbnN0IGN1ciA9IG9iamVjdFtrZXldIGFzIGFueTtcbiAgICBvYmplY3Rba2V5XSA9IGN1ciA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7IC4uLmN1ciwgLi4udmFsdWUgfTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBhIHZhbHVlIGF0IGEgbmVzdGVkIHBhdGggd2l0aCBwcm90b3R5cGUtcG9sbHV0aW9uIHByb3RlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShyb290OiBhbnksIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sIGZpZWxkPzogc3RyaW5nIHwgbnVtYmVyKTogYW55IHtcbiAgY29uc3Qgbm9kZSA9IHBhdGggJiYgcGF0aC5sZW5ndGggPiAwID8gX2dldChyb290LCBwYXRoKSA6IHJvb3Q7XG4gIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG5vZGU7XG4gIGlmIChub2RlICE9PSBudWxsICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgZmllbGQpKSB7XG4gICAgcmV0dXJuIG5vZGVbZmllbGRdO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVkYWN0cyBzZW5zaXRpdmUgdmFsdWVzIGluIGEgcGF0Y2ggZm9yIGxvZ2dpbmcvZGVidWdnaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkYWN0UGF0Y2gocGF0Y2g6IE1lbW9yeVBhdGNoLCByZWRhY3RlZFNldDogU2V0PHN0cmluZz4pOiBNZW1vcnlQYXRjaCB7XG4gIGNvbnN0IG91dCA9IHN0cnVjdHVyZWRDbG9uZShwYXRjaCk7XG4gIGZvciAoY29uc3QgZmxhdCBvZiByZWRhY3RlZFNldCkge1xuICAgIGNvbnN0IHBhdGhBcnIgPSBmbGF0LnNwbGl0KERFTElNKTtcbiAgICBpZiAoX2hhcyhvdXQsIHBhdGhBcnIpKSB7XG4gICAgICBjb25zdCBjdXJyID0gX2dldChvdXQsIHBhdGhBcnIpO1xuICAgICAgaWYgKHR5cGVvZiBjdXJyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBfc2V0KG91dCwgcGF0aEFyciwgJ1JFREFDVEVEJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogTm9ybWFsaXNlcyBhbiBhcnJheSBwYXRoIGludG8gYSBzdGFibGUgc3RyaW5nIGtleSB1c2luZyBERUxJTS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGlzZVBhdGgocGF0aDogKHN0cmluZyB8IG51bWJlcilbXSk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLm1hcChTdHJpbmcpLmpvaW4oREVMSU0pO1xufVxuXG4vKipcbiAqIERlZXAgdW5pb24gbWVyZ2UgaGVscGVyLlxuICogLSBBcnJheXMgKG5vbi1lbXB0eSk6IHVuaW9uIHdpdGhvdXQgZHVwbGljYXRlcyAoZW5jb3VudGVyIG9yZGVyIHByZXNlcnZlZClcbiAqIC0gQXJyYXlzIChlbXB0eSk6ICAgICByZXBsYWNlIOKAlCBzcmMgYFtdYCBjbGVhcnMgdGhlIGRlc3RpbmF0aW9uIGFycmF5LlxuICogICBSYXRpb25hbGU6IHdyaXRpbmcgYHNjb3BlLnRhZ3MgPSBbXWAgbWVhbnMgXCJjbGVhciB0YWdzXCIsIG5vdCBcImFwcGVuZCBub3RoaW5nXCIuXG4gKiAgIFdpdGhvdXQgdGhpcyBydWxlLCBhbiBlbXB0eS1hcnJheSB3cml0ZSBzaWxlbnRseSBiZWNvbWVzIGEgbm8tb3Agd2hpY2ggaXNcbiAqICAgaW1wb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBmcm9tIGEgYnVnLlxuICogLSBPYmplY3RzOiByZWN1cnNpdmUgbWVyZ2VcbiAqIC0gUHJpbWl0aXZlczogc291cmNlIHdpbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBTbWFydE1lcmdlKGRzdDogYW55LCBzcmM6IGFueSk6IGFueSB7XG4gIGlmIChzcmMgPT09IG51bGwgfHwgdHlwZW9mIHNyYyAhPT0gJ29iamVjdCcpIHJldHVybiBzcmM7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgIGlmIChzcmMubGVuZ3RoID09PSAwKSByZXR1cm4gW107IC8vIGVtcHR5IHNyYyA9IGNsZWFyLCBub3Qgbm8tb3BcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkc3QpKSByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLmRzdCwgLi4uc3JjXSldO1xuICAgIHJldHVybiBbLi4uc3JjXTtcbiAgfVxuXG4gIGNvbnN0IG91dDogYW55ID0geyAuLi4oZHN0ICYmIHR5cGVvZiBkc3QgPT09ICdvYmplY3QnID8gZHN0IDoge30pIH07XG4gIC8vIE9iamVjdC5rZXlzKCkgaXMgb3duLWVudW1lcmFibGUtb25seSBieSBzcGVjIOKAlCBubyBERU5JRUQgY2hlY2sgbmVlZGVkIGhlcmUuXG4gIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhzcmMpKSB7XG4gICAgb3V0W2tdID0gZGVlcFNtYXJ0TWVyZ2Uob3V0W2tdLCBzcmNba10pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQXBwbGllcyBhIGNvbW1pdCBidW5kbGUgdG8gYSBiYXNlIHN0YXRlIGJ5IHJlcGxheWluZyBvcGVyYXRpb25zIGluIG9yZGVyLlxuICogVHdvLXBoYXNlOiBVUERBVEUgKHVuaW9uLW1lcmdlKSB0aGVuIE9WRVJXUklURSAoZGlyZWN0IHNldCkuXG4gKiBHdWFyYW50ZWVzIFwibGFzdCB3cml0ZXIgd2luc1wiIHNlbWFudGljcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U21hcnRNZXJnZShcbiAgYmFzZTogYW55LFxuICB1cGRhdGVzOiBNZW1vcnlQYXRjaCxcbiAgb3ZlcndyaXRlOiBNZW1vcnlQYXRjaCxcbiAgdHJhY2U6IHsgcGF0aDogc3RyaW5nOyB2ZXJiOiAnc2V0JyB8ICdtZXJnZScgfVtdLFxuKTogYW55IHtcbiAgY29uc3Qgb3V0ID0gc3RydWN0dXJlZENsb25lKGJhc2UpO1xuICBmb3IgKGNvbnN0IHsgcGF0aCwgdmVyYiB9IG9mIHRyYWNlKSB7XG4gICAgY29uc3Qgc2VncyA9IHBhdGguc3BsaXQoREVMSU0pO1xuICAgIGlmICh2ZXJiID09PSAnc2V0Jykge1xuICAgICAgX3NldChvdXQsIHNlZ3MsIHN0cnVjdHVyZWRDbG9uZShfZ2V0KG92ZXJ3cml0ZSwgc2VncykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3VycmVudCA9IF9nZXQob3V0LCBzZWdzKSA/PyB7fTtcbiAgICAgIF9zZXQob3V0LCBzZWdzLCBkZWVwU21hcnRNZXJnZShjdXJyZW50LCBfZ2V0KHVwZGF0ZXMsIHNlZ3MpKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iXX0=
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQUVILDZDQUF1RjtBQUd2RixpRkFBaUY7QUFDcEUsUUFBQSxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBSTlCOzs7R0FHRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLEtBQWMsRUFBRSxPQUE0QixFQUFFO0lBQ2pGLE9BQU87UUFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNyRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUxELG9EQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLEdBQWlCLEVBQ2pCLEtBQWEsRUFDYixLQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQVEsRUFDUixhQUF1QjtJQUV2QixNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRSxNQUFNLElBQUksR0FBRyxPQUFPLElBQUksVUFBVSxDQUFDO0lBQ25DLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMzQixJQUFJLE9BQU8sR0FBaUIsR0FBRyxDQUFDO0lBQ2hDLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPLENB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RUQ7Ozs7R0FJRztBQUNILFNBQWdCLGVBQWUsQ0FDN0IsSUFBUyxFQUNULE9BQW9CLEVBQ3BCLFNBQXNCLEVBQ3RCLEtBQWdEO0lBRWhELE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuQixJQUFBLHNCQUFJLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsSUFBQSxzQkFBSSxFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sR0FBRyxJQUFBLHNCQUFJLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxJQUFBLHNCQUFJLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUEsc0JBQUksRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBakJELDBDQWlCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdXRpbHMudHMg4oCUIEhlbHBlciBmdW5jdGlvbnMgZm9yIG5lc3RlZCBvYmplY3QgbWFuaXB1bGF0aW9uXG4gKlxuICogUHJvdmlkZXMgY29uc2lzdGVudCBwYXRoIHRyYXZlcnNhbCBhbmQgdmFsdWUgbWFuaXB1bGF0aW9uIGZvciB0aGUgbWVtb3J5IHN5c3RlbS5cbiAqIFplcm8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBfZ2V0LCBuYXRpdmVIYXMgYXMgX2hhcywgbmF0aXZlU2V0IGFzIF9zZXQgfSBmcm9tICcuL3BhdGhPcHMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlQYXRjaCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiogQVNDSUkgVW5pdC1TZXBhcmF0b3Ig4oCUIGNhbm5vdCBhcHBlYXIgaW4gSlMgaWRlbnRpZmllcnMsIGludmlzaWJsZSBpbiBsb2dzLiAqL1xuZXhwb3J0IGNvbnN0IERFTElNID0gJ1xcdTAwMUYnO1xuXG50eXBlIE5lc3RlZE9iamVjdCA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbi8qKlxuICogUmVzb2x2ZXMgcnVuLW5hbWVzcGFjZWQgYW5kIGdsb2JhbCBwYXRocy5cbiAqIEVhY2ggZmxvd2NoYXJ0IGV4ZWN1dGlvbiAocnVuKSBzdG9yZXMgZGF0YSB1bmRlciBgcnVucy97aWR9L2AgdG8gcHJldmVudCBjb2xsaXNpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVuQW5kR2xvYmFsUGF0aHMocnVuSWQ/OiBzdHJpbmcsIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXSkge1xuICByZXR1cm4ge1xuICAgIHJ1blBhdGg6IHJ1bklkID8gWydydW5zJywgcnVuSWQsIC4uLnBhdGhdIDogdW5kZWZpbmVkLFxuICAgIGdsb2JhbFBhdGg6IFsuLi5wYXRoXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTZXRzIGEgdmFsdWUgYXQgYSBuZXN0ZWQgcGF0aCwgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIG9iamVjdHMgYXMgbmVlZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TmVzdGVkVmFsdWU8VD4oXG4gIG9iajogTmVzdGVkT2JqZWN0LFxuICBydW5JZDogc3RyaW5nLFxuICBfcGF0aDogc3RyaW5nW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHZhbHVlOiBULFxuICBkZWZhdWx0VmFsdWVzPzogdW5rbm93bixcbik6IE5lc3RlZE9iamVjdCB7XG4gIGNvbnN0IHsgcnVuUGF0aCwgZ2xvYmFsUGF0aCB9ID0gZ2V0UnVuQW5kR2xvYmFsUGF0aHMocnVuSWQsIF9wYXRoKTtcbiAgY29uc3QgcGF0aCA9IHJ1blBhdGggfHwgZ2xvYmFsUGF0aDtcbiAgY29uc3QgcGF0aENvcHkgPSBbLi4ucGF0aF07XG4gIGxldCBjdXJyZW50OiBOZXN0ZWRPYmplY3QgPSBvYmo7XG4gIHdoaWxlIChwYXRoQ29weS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qga2V5ID0gcGF0aENvcHkuc2hpZnQoKSBhcyBzdHJpbmc7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VycmVudCwga2V5KSkge1xuICAgICAgY3VycmVudFtrZXldID0ga2V5ID09PSBydW5JZCAmJiBkZWZhdWx0VmFsdWVzID8gZGVmYXVsdFZhbHVlcyA6IHt9O1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICB9XG4gIGN1cnJlbnRbZmllbGRdID0gdmFsdWU7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogRGVlcC1tZXJnZXMgYSB2YWx1ZSBpbnRvIHRoZSBvYmplY3QgYXQgdGhlIHNwZWNpZmllZCBwYXRoLlxuICogLSBBcnJheXM6IGNvbmNhdGVuYXRlXG4gKiAtIE9iamVjdHM6IHNoYWxsb3cgbWVyZ2UgYXQgZWFjaCBsZXZlbFxuICogLSBQcmltaXRpdmVzOiByZXBsYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVOZXN0ZWRWYWx1ZTxUPihcbiAgb2JqOiBhbnksXG4gIHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIF9wYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICBmaWVsZDogc3RyaW5nIHwgbnVtYmVyLFxuICB2YWx1ZTogVCxcbiAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4pOiBhbnkge1xuICBjb25zdCB7IHJ1blBhdGgsIGdsb2JhbFBhdGggfSA9IGdldFJ1bkFuZEdsb2JhbFBhdGhzKHJ1bklkLCBfcGF0aCk7XG4gIGNvbnN0IHBhdGggPSBydW5QYXRoIHx8IGdsb2JhbFBhdGg7XG4gIGNvbnN0IHBhdGhDb3B5ID0gWy4uLnBhdGhdO1xuICBsZXQgY3VycmVudDogTmVzdGVkT2JqZWN0ID0gb2JqO1xuICB3aGlsZSAocGF0aENvcHkubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGtleSA9IHBhdGhDb3B5LnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIGtleSkpIHtcbiAgICAgIGN1cnJlbnRba2V5XSA9IGtleSA9PT0gcnVuSWQgJiYgZGVmYXVsdFZhbHVlcyA/IGRlZmF1bHRWYWx1ZXMgOiB7fTtcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgfVxuICB1cGRhdGVWYWx1ZShjdXJyZW50LCBmaWVsZCwgdmFsdWUpO1xuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEluLXBsYWNlIHZhbHVlIHVwZGF0ZSB3aXRoIG1lcmdlIHNlbWFudGljcy5cbiAqIC0gQXJyYXlzIChub24tZW1wdHkpOiBjb25jYXRlbmF0ZSBvbnRvIGV4aXN0aW5nXG4gKiAtIEFycmF5cyAoZW1wdHkpOiAgICAgZGlyZWN0IHJlcGxhY2Ug4oCUIHdyaXRpbmcgYFtdYCBjbGVhcnMgdGhlIGZpZWxkXG4gKiAtIE9iamVjdHMgKG5vbi1lbXB0eSk6IHNoYWxsb3cgbWVyZ2UgKHNwcmVhZClcbiAqIC0gT2JqZWN0cyAoZW1wdHkpOiAgICBkaXJlY3QgcmVwbGFjZSDigJQgd3JpdGluZyBge31gIGNsZWFycyB0aGUgZmllbGRcbiAqIC0gUHJpbWl0aXZlczogZGlyZWN0IGFzc2lnbm1lbnRcbiAqXG4gKiBOb3RlIG9uIGVtcHR5IGFycmF5czogYm90aCBgdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSlgIGFuZFxuICogYEFycmF5LmlzQXJyYXkodmFsdWUpYCBldmFsdWF0ZSB0aGUgc2FtZSBmb3IgYXJyYXlzIOKAlCBgW11gIGlzIHRydXRoeSBpblxuICogSmF2YVNjcmlwdCwgc28gdGhlIGAmJmAgZ3VhcmQgd2FzIG5ldmVyIHRoZSBpc3N1ZS4gVGhlIGFjdHVhbCBidWcgd2FzIHRoZVxuICogY29uY2F0IHBhdGg6IGBbLi4uY3VyLCAuLi5bXV1gIHNpbGVudGx5IHJldHVybmVkIGBjdXJgIHVuY2hhbmdlZCB3aGVuIGB2YWx1ZWBcbiAqIHdhcyBgW11gLCBtYWtpbmcgYHVwZGF0ZVZhbHVlKG9iaiwgJ3RhZ3MnLCBbXSlgIGEgbm8tb3AgaW5zdGVhZCBvZiBhIGNsZWFyLlxuICogVGhlIGZpeCBpcyB0aGUgZXhwbGljaXQgYHZhbHVlLmxlbmd0aCA9PT0gMGAgZWFybHktcmV0dXJuIGJyYW5jaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZhbHVlKG9iamVjdDogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IGFueSk6IHZvaWQge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICBvYmplY3Rba2V5XSA9IHZhbHVlOyAvLyBjbGVhcjogW10gcmVwbGFjZXMgd2hhdGV2ZXIgd2FzIHRoZXJlXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1ciA9IG9iamVjdFtrZXldIGFzIGFueTtcbiAgICAgIG9iamVjdFtrZXldID0gY3VyID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IFsuLi5jdXIsIC4uLnZhbHVlXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSB7XG4gICAgY29uc3QgY3VyID0gb2JqZWN0W2tleV0gYXMgYW55O1xuICAgIG9iamVjdFtrZXldID0gY3VyID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHsgLi4uY3VyLCAuLi52YWx1ZSB9O1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIGEgdmFsdWUgYXQgYSBuZXN0ZWQgcGF0aCB3aXRoIHByb3RvdHlwZS1wb2xsdXRpb24gcHJvdGVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5lc3RlZFZhbHVlKHJvb3Q6IGFueSwgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSwgZmllbGQ/OiBzdHJpbmcgfCBudW1iZXIpOiBhbnkge1xuICBjb25zdCBub2RlID0gcGF0aCAmJiBwYXRoLmxlbmd0aCA+IDAgPyBfZ2V0KHJvb3QsIHBhdGgpIDogcm9vdDtcbiAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbm9kZTtcbiAgaWYgKG5vZGUgIT09IG51bGwgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBmaWVsZCkpIHtcbiAgICByZXR1cm4gbm9kZVtmaWVsZF07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZWRhY3RzIHNlbnNpdGl2ZSB2YWx1ZXMgaW4gYSBwYXRjaCBmb3IgbG9nZ2luZy9kZWJ1Z2dpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWRhY3RQYXRjaChwYXRjaDogTWVtb3J5UGF0Y2gsIHJlZGFjdGVkU2V0OiBTZXQ8c3RyaW5nPik6IE1lbW9yeVBhdGNoIHtcbiAgY29uc3Qgb3V0ID0gc3RydWN0dXJlZENsb25lKHBhdGNoKTtcbiAgZm9yIChjb25zdCBmbGF0IG9mIHJlZGFjdGVkU2V0KSB7XG4gICAgY29uc3QgcGF0aEFyciA9IGZsYXQuc3BsaXQoREVMSU0pO1xuICAgIGlmIChfaGFzKG91dCwgcGF0aEFycikpIHtcbiAgICAgIGNvbnN0IGN1cnIgPSBfZ2V0KG91dCwgcGF0aEFycik7XG4gICAgICBpZiAodHlwZW9mIGN1cnIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIF9zZXQob3V0LCBwYXRoQXJyLCAnUkVEQUNURUQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpc2VzIGFuIGFycmF5IHBhdGggaW50byBhIHN0YWJsZSBzdHJpbmcga2V5IHVzaW5nIERFTElNLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXNlUGF0aChwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGgubWFwKFN0cmluZykuam9pbihERUxJTSk7XG59XG5cbi8qKlxuICogRGVlcCB1bmlvbiBtZXJnZSBoZWxwZXIuXG4gKiAtIEFycmF5cyAobm9uLWVtcHR5KTogdW5pb24gd2l0aG91dCBkdXBsaWNhdGVzIChlbmNvdW50ZXIgb3JkZXIgcHJlc2VydmVkKVxuICogLSBBcnJheXMgKGVtcHR5KTogICAgIHJlcGxhY2Ug4oCUIHNyYyBgW11gIGNsZWFycyB0aGUgZGVzdGluYXRpb24gYXJyYXkuXG4gKiAgIFJhdGlvbmFsZTogd3JpdGluZyBgc2NvcGUudGFncyA9IFtdYCBtZWFucyBcImNsZWFyIHRhZ3NcIiwgbm90IFwiYXBwZW5kIG5vdGhpbmdcIi5cbiAqICAgV2l0aG91dCB0aGlzIHJ1bGUsIGFuIGVtcHR5LWFycmF5IHdyaXRlIHNpbGVudGx5IGJlY29tZXMgYSBuby1vcCB3aGljaCBpc1xuICogICBpbXBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIGZyb20gYSBidWcuXG4gKiAtIE9iamVjdHM6IHJlY3Vyc2l2ZSBtZXJnZVxuICogLSBQcmltaXRpdmVzOiBzb3VyY2Ugd2luc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcFNtYXJ0TWVyZ2UoZHN0OiBhbnksIHNyYzogYW55KTogYW55IHtcbiAgaWYgKHNyYyA9PT0gbnVsbCB8fCB0eXBlb2Ygc3JjICE9PSAnb2JqZWN0JykgcmV0dXJuIHNyYztcblxuICBpZiAoQXJyYXkuaXNBcnJheShzcmMpKSB7XG4gICAgaWYgKHNyYy5sZW5ndGggPT09IDApIHJldHVybiBbXTsgLy8gZW1wdHkgc3JjID0gY2xlYXIsIG5vdCBuby1vcFxuICAgIGlmIChBcnJheS5pc0FycmF5KGRzdCkpIHJldHVybiBbLi4ubmV3IFNldChbLi4uZHN0LCAuLi5zcmNdKV07XG4gICAgcmV0dXJuIFsuLi5zcmNdO1xuICB9XG5cbiAgY29uc3Qgb3V0OiBhbnkgPSB7IC4uLihkc3QgJiYgdHlwZW9mIGRzdCA9PT0gJ29iamVjdCcgPyBkc3QgOiB7fSkgfTtcbiAgLy8gT2JqZWN0LmtleXMoKSBpcyBvd24tZW51bWVyYWJsZS1vbmx5IGJ5IHNwZWMg4oCUIG5vIERFTklFRCBjaGVjayBuZWVkZWQgaGVyZS5cbiAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHNyYykpIHtcbiAgICBvdXRba10gPSBkZWVwU21hcnRNZXJnZShvdXRba10sIHNyY1trXSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgY29tbWl0IGJ1bmRsZSB0byBhIGJhc2Ugc3RhdGUgYnkgcmVwbGF5aW5nIG9wZXJhdGlvbnMgaW4gb3JkZXIuXG4gKiBUd28tcGhhc2U6IFVQREFURSAodW5pb24tbWVyZ2UpIHRoZW4gT1ZFUldSSVRFIChkaXJlY3Qgc2V0KS5cbiAqIEd1YXJhbnRlZXMgXCJsYXN0IHdyaXRlciB3aW5zXCIgc2VtYW50aWNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTbWFydE1lcmdlKFxuICBiYXNlOiBhbnksXG4gIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLFxuICBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLFxuICB0cmFjZTogeyBwYXRoOiBzdHJpbmc7IHZlcmI6ICdzZXQnIHwgJ21lcmdlJyB9W10sXG4pOiBhbnkge1xuICBjb25zdCBvdXQgPSBzdHJ1Y3R1cmVkQ2xvbmUoYmFzZSk7XG4gIGZvciAoY29uc3QgeyBwYXRoLCB2ZXJiIH0gb2YgdHJhY2UpIHtcbiAgICBjb25zdCBzZWdzID0gcGF0aC5zcGxpdChERUxJTSk7XG4gICAgaWYgKHZlcmIgPT09ICdzZXQnKSB7XG4gICAgICBfc2V0KG91dCwgc2Vncywgc3RydWN0dXJlZENsb25lKF9nZXQob3ZlcndyaXRlLCBzZWdzKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gX2dldChvdXQsIHNlZ3MpID8/IHt9O1xuICAgICAgX3NldChvdXQsIHNlZ3MsIGRlZXBTbWFydE1lcmdlKGN1cnJlbnQsIF9nZXQodXBkYXRlcywgc2VncykpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==
|
package/dist/lib/pause/types.js
CHANGED
|
@@ -28,21 +28,40 @@ exports.isPauseSignal = exports.isPauseResult = exports.PauseSignal = void 0;
|
|
|
28
28
|
* and is caught by FlowchartTraverser/FlowChartExecutor.
|
|
29
29
|
*/
|
|
30
30
|
class PauseSignal extends Error {
|
|
31
|
+
/** Data from $pause() — question, reason, metadata. */
|
|
32
|
+
pauseData;
|
|
33
|
+
/** ID of the stage that called $pause(). */
|
|
34
|
+
stageId;
|
|
35
|
+
/** Path through subflows to the paused stage. Built during bubble-up. */
|
|
36
|
+
_subflowPath;
|
|
37
|
+
/**
|
|
38
|
+
* Invoker context — enriched during bubble-up when a PauseSignal passes
|
|
39
|
+
* through a decider, selector, or fork handler.
|
|
40
|
+
*
|
|
41
|
+
* The invoker is the stage that called executeNode() on the paused child.
|
|
42
|
+
* Captured during traversal (not reconstructed from the tree).
|
|
43
|
+
*
|
|
44
|
+
* `continuationStageId` is the invoker's `.next` node — where execution
|
|
45
|
+
* should continue after resume. Without this, branch children have no
|
|
46
|
+
* `.next` pointer and resume would terminate early.
|
|
47
|
+
*/
|
|
48
|
+
_invokerStageId;
|
|
49
|
+
_continuationStageId;
|
|
50
|
+
/**
|
|
51
|
+
* Subflow scope capture — populated during bubble-up by
|
|
52
|
+
* `SubflowExecutor` right before re-throw. Each entry is one
|
|
53
|
+
* subflow's pre-pause shared state, keyed by the path-prefixed
|
|
54
|
+
* subflow id (matches `subflowPath`).
|
|
55
|
+
*
|
|
56
|
+
* Without this, the nested `SharedMemory` is garbage-collected
|
|
57
|
+
* before the checkpoint is built. On resume, the inner runtime is
|
|
58
|
+
* re-created empty and resume handlers reading pre-pause scope
|
|
59
|
+
* (e.g., an Agent's `scope.history`, `scope.pausedToolCallId`)
|
|
60
|
+
* crash with "X is not iterable" / undefined.
|
|
61
|
+
*/
|
|
62
|
+
_subflowStates = {};
|
|
31
63
|
constructor(data, stageId) {
|
|
32
64
|
super('Execution paused');
|
|
33
|
-
/**
|
|
34
|
-
* Subflow scope capture — populated during bubble-up by
|
|
35
|
-
* `SubflowExecutor` right before re-throw. Each entry is one
|
|
36
|
-
* subflow's pre-pause shared state, keyed by the path-prefixed
|
|
37
|
-
* subflow id (matches `subflowPath`).
|
|
38
|
-
*
|
|
39
|
-
* Without this, the nested `SharedMemory` is garbage-collected
|
|
40
|
-
* before the checkpoint is built. On resume, the inner runtime is
|
|
41
|
-
* re-created empty and resume handlers reading pre-pause scope
|
|
42
|
-
* (e.g., an Agent's `scope.history`, `scope.pausedToolCallId`)
|
|
43
|
-
* crash with "X is not iterable" / undefined.
|
|
44
|
-
*/
|
|
45
|
-
this._subflowStates = {};
|
|
46
65
|
this.name = 'PauseSignal';
|
|
47
66
|
this.pauseData = data;
|
|
48
67
|
this.stageId = stageId;
|
|
@@ -114,4 +133,4 @@ function isPauseSignal(error) {
|
|
|
114
133
|
Object.prototype.hasOwnProperty.call(error, 'stageId')));
|
|
115
134
|
}
|
|
116
135
|
exports.isPauseSignal = isPauseSignal;
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7OztBQUVILCtEQUErRDtBQUUvRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBb0NwQyxZQUFZLElBQWEsRUFBRSxPQUFlO1FBQ3hDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBZjVCOzs7Ozs7Ozs7OztXQVdHO1FBQ0ssbUJBQWMsR0FBNEMsRUFBRSxDQUFDO1FBSW5FLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLHVGQUF1RjtRQUN2RixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsY0FBYyxDQUFDLFNBQWlCO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLGNBQXNCLEVBQUUsbUJBQTRCO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7WUFDdEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxLQUE4QjtRQUNuRSxpRUFBaUU7UUFDakUsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBbkdELGtDQW1HQztBQXVLRCwrREFBK0Q7QUFFL0QsZ0VBQWdFO0FBQ2hFLFNBQWdCLGFBQWEsQ0FBQyxLQUFjO0lBQzFDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUssS0FBcUIsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQzlGLENBQUM7QUFGRCxzQ0FFQztBQUVELHdHQUF3RztBQUN4RyxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyxPQUFPLENBQ0wsS0FBSyxZQUFZLFdBQVc7UUFDNUIsQ0FBQyxLQUFLLFlBQVksS0FBSztZQUNyQixLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWE7WUFDNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7WUFDeEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUMxRCxDQUFDO0FBQ0osQ0FBQztBQVJELHNDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXVzZS9SZXN1bWUg4oCUIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50IGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3MuXG4gKlxuICogQSBzdGFnZSBzaWduYWxzIHBhdXNlIGJ5IGNhbGxpbmcgYHNjb3BlLiRwYXVzZShkYXRhKWAgd2hpY2ggdGhyb3dzIGEgUGF1c2VTaWduYWwuXG4gKiBUaGUgc2lnbmFsIGJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3Ig4oaSIEZsb3djaGFydFRyYXZlcnNlciDihpIgRmxvd0NoYXJ0RXhlY3V0b3IsXG4gKiBlYWNoIGxldmVsIGFkZGluZyBpdHMgc3ViZmxvdyBJRCB0byB0aGUgcGF0aC5cbiAqXG4gKiBUaGUgY2hlY2twb2ludCBjYXB0dXJlczpcbiAqICAgLSBwYXVzZWRQYXRoOiBmdWxsIHBhdGggdG8gdGhlIHBhdXNlZCBzdGFnZSAoZS5nLiwgWydzZi1wYXltZW50JywgJ2FwcHJvdmUnXSlcbiAqICAgLSBzaGFyZWRTdGF0ZTogc2NvcGUgYXQgdGhlIHBhdXNlIHBvaW50XG4gKiAgIC0gZXhlY3V0aW9uVHJlZTogY29tcGxldGVkIHN0YWdlcyBmb3IgQlRTL25hcnJhdGl2ZVxuICogICAtIHBhdXNlRGF0YTogcXVlc3Rpb24sIHJlYXNvbiwgb3IgbWV0YWRhdGEgZnJvbSAkcGF1c2UoKVxuICpcbiAqIFJlc3VtZSByZWJ1aWxkcyB0aGUgZmxvd2NoYXJ0LCByZXN0b3JlcyBzY29wZSwgbmF2aWdhdGVzIHRvIHRoZSBwYXVzZWQgc3RhZ2UsXG4gKiBpbmplY3RzIHJlc3VtZUlucHV0LCBhbmQgY29udGludWVzIHRyYXZlcnNhbC5cbiAqXG4gKiBTdXBwb3J0ZWQgdG9wb2xvZ2llczogbGluZWFyLCBzdWJmbG93LCBsYXp5IHN1YmZsb3csIGxvb3AsIG5lc3RlZCBzdWJmbG93IGluIGxvb3AuXG4gKi9cblxuLy8g4pSA4pSAIFBhdXNlU2lnbmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRocm93biBieSBgc2NvcGUuJHBhdXNlKClgIHRvIHNpZ25hbCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcFxuICogYW5kIGNyZWF0ZSBhIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50LlxuICpcbiAqIEJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3IgKHdoaWNoIHByZXBlbmRzIHN1YmZsb3cgSUQgdG8gcGF0aClcbiAqIGFuZCBpcyBjYXVnaHQgYnkgRmxvd2NoYXJ0VHJhdmVyc2VyL0Zsb3dDaGFydEV4ZWN1dG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF1c2VTaWduYWwgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE6IHVua25vd247XG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgJHBhdXNlKCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlLiBCdWlsdCBkdXJpbmcgYnViYmxlLXVwLiAqL1xuICBwcml2YXRlIF9zdWJmbG93UGF0aDogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludm9rZXIgY29udGV4dCDigJQgZW5yaWNoZWQgZHVyaW5nIGJ1YmJsZS11cCB3aGVuIGEgUGF1c2VTaWduYWwgcGFzc2VzXG4gICAqIHRocm91Z2ggYSBkZWNpZGVyLCBzZWxlY3Rvciwgb3IgZm9yayBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGUgaW52b2tlciBpcyB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgZXhlY3V0ZU5vZGUoKSBvbiB0aGUgcGF1c2VkIGNoaWxkLlxuICAgKiBDYXB0dXJlZCBkdXJpbmcgdHJhdmVyc2FsIChub3QgcmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSB0cmVlKS5cbiAgICpcbiAgICogYGNvbnRpbnVhdGlvblN0YWdlSWRgIGlzIHRoZSBpbnZva2VyJ3MgYC5uZXh0YCBub2RlIOKAlCB3aGVyZSBleGVjdXRpb25cbiAgICogc2hvdWxkIGNvbnRpbnVlIGFmdGVyIHJlc3VtZS4gV2l0aG91dCB0aGlzLCBicmFuY2ggY2hpbGRyZW4gaGF2ZSBub1xuICAgKiBgLm5leHRgIHBvaW50ZXIgYW5kIHJlc3VtZSB3b3VsZCB0ZXJtaW5hdGUgZWFybHkuXG4gICAqL1xuICBwcml2YXRlIF9pbnZva2VyU3RhZ2VJZD86IHN0cmluZztcbiAgcHJpdmF0ZSBfY29udGludWF0aW9uU3RhZ2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogU3ViZmxvdyBzY29wZSBjYXB0dXJlIOKAlCBwb3B1bGF0ZWQgZHVyaW5nIGJ1YmJsZS11cCBieVxuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCByaWdodCBiZWZvcmUgcmUtdGhyb3cuIEVhY2ggZW50cnkgaXMgb25lXG4gICAqIHN1YmZsb3cncyBwcmUtcGF1c2Ugc2hhcmVkIHN0YXRlLCBrZXllZCBieSB0aGUgcGF0aC1wcmVmaXhlZFxuICAgKiBzdWJmbG93IGlkIChtYXRjaGVzIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBXaXRob3V0IHRoaXMsIHRoZSBuZXN0ZWQgYFNoYXJlZE1lbW9yeWAgaXMgZ2FyYmFnZS1jb2xsZWN0ZWRcbiAgICogYmVmb3JlIHRoZSBjaGVja3BvaW50IGlzIGJ1aWx0LiBPbiByZXN1bWUsIHRoZSBpbm5lciBydW50aW1lIGlzXG4gICAqIHJlLWNyZWF0ZWQgZW1wdHkgYW5kIHJlc3VtZSBoYW5kbGVycyByZWFkaW5nIHByZS1wYXVzZSBzY29wZVxuICAgKiAoZS5nLiwgYW4gQWdlbnQncyBgc2NvcGUuaGlzdG9yeWAsIGBzY29wZS5wYXVzZWRUb29sQ2FsbElkYClcbiAgICogY3Jhc2ggd2l0aCBcIlggaXMgbm90IGl0ZXJhYmxlXCIgLyB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIF9zdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiB1bmtub3duLCBzdGFnZUlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRXhlY3V0aW9uIHBhdXNlZCcpO1xuICAgIHRoaXMubmFtZSA9ICdQYXVzZVNpZ25hbCc7XG4gICAgdGhpcy5wYXVzZURhdGEgPSBkYXRhO1xuICAgIHRoaXMuc3RhZ2VJZCA9IHN0YWdlSWQ7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGggPSBbXTtcbiAgICAvLyBQYXVzZVNpZ25hbCBpcyBjb250cm9sIGZsb3csIG5vdCBhIHJlYWwgZXJyb3Ig4oCUIHN0YWNrIHRyYWNlIGhhcyBubyBkaWFnbm9zdGljIHZhbHVlLlxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuXG4gIGdldCBzdWJmbG93UGF0aCgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmZsb3dQYXRoO1xuICB9XG5cbiAgLyoqIFByZXBlbmQgYSBzdWJmbG93IElEIHRvIHRoZSBwYXRoIChjYWxsZWQgZHVyaW5nIGJ1YmJsZS11cCkuICovXG4gIHByZXBlbmRTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICB9XG5cbiAgLyoqIFRoZSBzdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiAqL1xuICBnZXQgaW52b2tlclN0YWdlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW52b2tlclN0YWdlSWQ7XG4gIH1cblxuICAvKiogV2hlcmUgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBhZnRlciByZXN1bWUgKGludm9rZXIncyBuZXh0IG5vZGUpLiAqL1xuICBnZXQgY29udGludWF0aW9uU3RhZ2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jb250aW51YXRpb25TdGFnZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YW1wIHRoZSBpbnZva2VyIGNvbnRleHQgZHVyaW5nIGJ1YmJsZS11cC5cbiAgICogQ2FsbGVkIGJ5IGRlY2lkZXIvc2VsZWN0b3IvZm9yayBoYW5kbGVycyB3aGVuIGNhdGNoaW5nIGEgY2hpbGQncyBQYXVzZVNpZ25hbC5cbiAgICogRmlyc3QgaW52b2tlciB3aW5zIChpbm5lcm1vc3QpIOKAlCBzdWJzZXF1ZW50IGNhbGxzIGFyZSBuby1vcHMuXG4gICAqL1xuICBzZXRJbnZva2VyKGludm9rZXJTdGFnZUlkOiBzdHJpbmcsIGNvbnRpbnVhdGlvblN0YWdlSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2ludm9rZXJTdGFnZUlkKSB7XG4gICAgICB0aGlzLl9pbnZva2VyU3RhZ2VJZCA9IGludm9rZXJTdGFnZUlkO1xuICAgICAgdGhpcy5fY29udGludWF0aW9uU3RhZ2VJZCA9IGNvbnRpbnVhdGlvblN0YWdlSWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgYSBzdWJmbG93J3MgaXNvbGF0ZWQgU2hhcmVkTWVtb3J5IGF0IHRoZSBtb21lbnQgaXRzXG4gICAqIHRyYXZlcnNhbCB0aHJldy4gQ2FsbGVkIGJ5IGBTdWJmbG93RXhlY3V0b3JgIG9uY2UgcGVyIHN1YmZsb3dcbiAgICogYm91bmRhcnkgb24gdGhlIGJ1YmJsZS11cCBwYXRoLiBFYWNoIGNhcHR1cmUgaXMga2V5ZWQgYnkgdGhlXG4gICAqIHBhdGgtcHJlZml4ZWQgc3ViZmxvdyBpZCAodGhlIHNhbWUgaWQgdXNlZCBpbiBgc3ViZmxvd1BhdGhgKS5cbiAgICpcbiAgICogSW5uZXJtb3N0LWZpcnN0OiBhIGRlZXAgYFNlcXVlbmNlKEFnZW50KC4uLikpYCBwYXVzZSBjYXB0dXJlcyB0aGVcbiAgICogYWdlbnQncyBzdWJmbG93IGZpcnN0LCB0aGVuIGl0cyBwYXJlbnQncywgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3RcbiAgICogbW91bnQuIFRoZSBmdWxsIG5lc3Qgc3Vydml2ZXMgaW50byBgY2hlY2twb2ludC5zdWJmbG93U3RhdGVzYC5cbiAgICovXG4gIGNhcHR1cmVTdWJmbG93U2NvcGUoc3ViZmxvd0lkOiBzdHJpbmcsIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIC8vIERlZmVuc2l2ZSBzaGFsbG93IGNsb25lIHNvIGxhdGVyIG11dGF0aW9ucyBvbiB0aGUgc291cmNlIGRvbid0XG4gICAgLy8gYmxlZWQgaW50byB0aGUgY2FwdHVyZWQgc25hcHNob3QuIERlZXAgY2xvbmluZyBpcyB0aGUgY29uc3VtZXInc1xuICAgIC8vIHJlc3BvbnNpYmlsaXR5ICh0aGUgcmVzdW1lIHRhcmdldCBtYXkgbm90IGV2ZW4gYmUgb24gdGhpc1xuICAgIC8vIHByb2Nlc3MpOyBTaGFyZWRNZW1vcnkgdmFsdWVzIGFyZSBjb252ZW50aW9uYWxseSBKU09OLWZyaWVuZGx5LlxuICAgIHRoaXMuX3N1YmZsb3dTdGF0ZXNbc3ViZmxvd0lkXSA9IHsgLi4uc3RhdGUgfTtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlZCBzdWJmbG93IHNjb3BlcyAocmVhZC1vbmx5IHZpZXcpLiAqL1xuICBnZXQgc3ViZmxvd1N0YXRlcygpOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3ViZmxvd1N0YXRlcztcbiAgfVxufVxuXG4vLyDilIDilIAgUGF1c2VSZXN1bHQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUmV0dXJuZWQgYnkgYSBwYXVzYWJsZSBzdGFnZSdzIGV4ZWN1dGUvcmVzdW1lIGZ1bmN0aW9uIHRvIHNpZ25hbCBwYXVzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246ICdBcHByb3ZlIG9yZGVyIDEyMz8nIH0gfTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNlUmVzdWx0IHtcbiAgcmVhZG9ubHkgcGF1c2U6IHRydWU7XG4gIC8qKiBEYXRhIHRvIGluY2x1ZGUgaW4gdGhlIGNoZWNrcG9pbnQg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBkYXRhPzogdW5rbm93bjtcbn1cblxuLy8g4pSA4pSAIEZsb3djaGFydENoZWNrcG9pbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU2VyaWFsaXphYmxlIGNoZWNrcG9pbnQg4oCUIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlc3VtZSBhIHBhdXNlZCBmbG93Y2hhcnQuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gU2F2ZVxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBTZXJpYWxpemFibGUgY2hlY2twb2ludCDigJQgZXZlcnl0aGluZyBuZWVkZWQgdG8gcmVzdW1lIGEgcGF1c2VkIGZsb3djaGFydC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIHRyZWUgSVMgdGhlIHRyYXZlcnNlZCBwYXRoLiBUaGUgbGVhZiBub2RlIHdpdGggc3RhdHVzICdwYXVzZWQnXG4gKiBJUyB0aGUgY3Vyc29yLiBObyBzZXBhcmF0ZSBwYXRoIGFycmF5IG5lZWRlZCDigJQgdGhlIHRyZWUgc3RydWN0dXJlIGNhcHR1cmVzXG4gKiB0aGUgZnVsbCBuZXN0aW5nIChpbmNsdWRpbmcgc3ViZmxvd3MpLlxuICpcbiAqIEpTT04tc2FmZTogbm8gZnVuY3Rpb25zLCBubyBjbGFzcyBpbnN0YW5jZXMsIG5vIFNESyBjbGllbnRzLlxuICogU3RvcmUgYW55d2hlcmU6IFJlZGlzLCBQb3N0Z3JlcywgbG9jYWxTdG9yYWdlLCBhIGZpbGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNoZWNrcG9pbnQgPSBleGVjdXRvci5nZXRDaGVja3BvaW50KCk7IC8vIGFmdGVyIHBhdXNlXG4gKiBhd2FpdCByZWRpcy5zZXQoYHNlc3Npb246JHtpZH1gLCBKU09OLnN0cmluZ2lmeShjaGVja3BvaW50KSk7XG4gKlxuICogLy8gUmVzdW1lIChob3VycyBsYXRlciwgcG9zc2libHkgZGlmZmVyZW50IHNlcnZlcilcbiAqIGNvbnN0IGNoZWNrcG9pbnQgPSBKU09OLnBhcnNlKGF3YWl0IHJlZGlzLmdldChgc2Vzc2lvbjoke2lkfWApKTtcbiAqIGNvbnN0IGV4ZWN1dG9yID0gbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJlc3VtZShjaGVja3BvaW50LCB7IGFwcHJvdmVkOiB0cnVlIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd2NoYXJ0Q2hlY2twb2ludCB7XG4gIC8qKiBTY29wZSBzdGF0ZSBhdCB0aGUgcGF1c2UgcG9pbnQg4oCUIGFsbCBzaGFyZWQgbWVtb3J5IGtleS92YWx1ZXMuICovXG4gIHJlYWRvbmx5IHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogRXhlY3V0aW9uIHRyZWUg4oCUIHRoZSB0cmF2ZXJzZWQgcGF0aC4gVGhlIGxlYWYgd2l0aCBzdGF0dXMgJ3BhdXNlZCcgaXMgdGhlIGN1cnNvci5cbiAgICogIENvbnRhaW5zIHN1YmZsb3cgbmVzdGluZy4gVXNlZCBmb3IgQlRTIHZpc3VhbGl6YXRpb24gYW5kIHRvIGZpbmQgdGhlIHJlc3VtZSBwb2ludC4gKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uVHJlZTogdW5rbm93bjtcblxuICAvKiogSUQgb2YgdGhlIHN0YWdlIHRoYXQgcGF1c2VkLiBVc2VkIGJ5IHJlc3VtZSgpIHRvIGZpbmQgdGhlIG5vZGUgaW4gdGhlIGdyYXBoLiAqL1xuICByZWFkb25seSBwYXVzZWRTdGFnZUlkOiBzdHJpbmc7XG5cbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlIChlLmcuLCBbJ3NmLXBheW1lbnQnLCAnc2YtdmFsaWRhdGlvbiddKS5cbiAgICogIEVtcHR5IGFycmF5IHdoZW4gcGF1c2VkIGF0IHRoZSB0b3AgbGV2ZWwuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogRGF0YSBmcm9tICRwYXVzZSgpIOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VEYXRhPzogdW5rbm93bjtcblxuICAvKiogU3ViZmxvdyByZXN1bHRzIGNvbGxlY3RlZCBiZWZvcmUgdGhlIHBhdXNlLiAqL1xuICByZWFkb25seSBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIG9uZSBlbnRyeSBwZXIgc3ViZmxvdyBib3VuZGFyeSBvbiB0aGUgcGF0aFxuICAgKiB0byB0aGUgcGF1c2VkIHN0YWdlLiBLZXllZCBieSBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKG1hdGNoZXNcbiAgICogYHN1YmZsb3dQYXRoYCBlbnRyaWVzKS4gRWFjaCB2YWx1ZSBpcyB0aGUgc3ViZmxvdydzIHByZS1wYXVzZVxuICAgKiBzaGFyZWQgc3RhdGUuXG4gICAqXG4gICAqIEFsd2F5cyBwcmVzZW50IChlbXB0eSBge31gIGZvciByb290LWxldmVsIHBhdXNlcyB3aGVyZSBubyBzdWJmbG93c1xuICAgKiB3ZXJlIGVudGVyZWQpLiBPbiByZXN1bWUsIGBTdWJmbG93RXhlY3V0b3JgIHNlZWRzIGVhY2ggbmVzdGVkIHJ1bnRpbWVcbiAgICogZnJvbSB0aGlzIG1hcCAoYW5kIHNraXBzIHRoZSBpbnB1dE1hcHBlcikgc28gcmVzdW1lIGhhbmRsZXJzIHNlZVxuICAgKiBwcmUtcGF1c2Ugc2NvcGUgYWNyb3NzIHNhbWUtZXhlY3V0b3IgQU5EIGNyb3NzLWV4ZWN1dG9yIHJlc3RhcnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1N0YXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG4gIC8qKiBTdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuICovXG4gIHJlYWRvbmx5IGludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBXaGVyZSB0byBjb250aW51ZSBhZnRlciByZXN1bWUg4oCUIHRoZSBpbnZva2VyJ3MgbmV4dCBub2RlIElELiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuICovXG4gIHJlYWRvbmx5IGNvbnRpbnVhdGlvblN0YWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFRpbWVzdGFtcCBvZiB3aGVuIHRoZSBwYXVzZSBvY2N1cnJlZC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQXQ6IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFBhdXNhYmxlSGFuZGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBhIHBhdXNhYmxlIHN0YWdlIOKAlCBoYXMgdHdvIHBoYXNlczogZXhlY3V0ZSBhbmQgcmVzdW1lLlxuICpcbiAqIGBleGVjdXRlYCBydW5zIHRoZSBmaXJzdCB0aW1lLiBJdCBjYW4gcmV0dXJuIGB7IHBhdXNlOiB0cnVlIH1gIHRvIHBhdXNlLlxuICogYHJlc3VtZWAgcnVucyB3aGVuIHRoZSBmbG93Y2hhcnQgaXMgcmVzdW1lZC4gSXQgcmVjZWl2ZXMgdGhlIHJlc3VtZSBpbnB1dC5cbiAqXG4gKiBCb3RoIHBoYXNlcyByZWNlaXZlIHRoZSBzYW1lIHNjb3BlLiBBZnRlciBleGVjdXRlIHBhdXNlcywgdGhlIHNjb3BlIHN0YXRlXG4gKiBpcyBwcmVzZXJ2ZWQgaW4gdGhlIGNoZWNrcG9pbnQuIE9uIHJlc3VtZSwgdGhlIHNjb3BlIGlzIHJlc3RvcmVkIGJlZm9yZVxuICogY2FsbGluZyByZXN1bWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC5hZGRQYXVzYWJsZUZ1bmN0aW9uKCdBcHByb3ZlT3JkZXInLCB7XG4gKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgICBzY29wZS5hbW91bnQgPSAyOTk7XG4gKiAgICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246IGBBcHByb3ZlICQke3Njb3BlLmFtb3VudH0gcmVmdW5kP2AgfSB9O1xuICogICB9LFxuICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICogICAgIHNjb3BlLmFwcHJvdmVyID0gaW5wdXQuYXBwcm92ZXI7XG4gKiAgIH0sXG4gKiB9LCAnYXBwcm92ZS1vcmRlcicsICdNYW5hZ2VyIGFwcHJvdmFsIGdhdGUnKVxuICpcbiAqIC8vIExhdGVyIOKAlCByZXN1bWUgd2l0aCBodW1hbidzIGFuc3dlclxuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUsIGFwcHJvdmVyOiAnSmFuZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzYWJsZUhhbmRsZXI8VFNjb3BlID0gYW55LCBUSW5wdXQgPSB1bmtub3duLCBUUGF1c2VEYXRhID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogRmlyc3QtcnVuIHBoYXNlLiBSZXR1cm4gZGF0YSB0byBwYXVzZSwgb3Igdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gICAqXG4gICAqIEFueSBub24tdm9pZCByZXR1cm4gdmFsdWUgYmVjb21lcyB0aGUgYHBhdXNlRGF0YWAgaW4gdGhlIGNoZWNrcG9pbnQuXG4gICAqIFRoZSBjb25zdW1lciBkZWZpbmVzIHRoZSBgVFBhdXNlRGF0YWAgdHlwZSDigJQgdGhlIEZFIHVzZXMgaXQgdG8gcmVuZGVyXG4gICAqIHRoZSByaWdodCBVSSAoZm9ybSBmaWVsZHMsIGFwcHJvdmFsIGJ1dHRvbnMsIGV0Yy4pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFRQYXVzZURhdGEgPSB7IHF1ZXN0aW9uOiBzdHJpbmc7IHJpc2tMZXZlbDogc3RyaW5nIH1cbiAgICogY29uc3QgaGFuZGxlcjogUGF1c2FibGVIYW5kbGVyPE15U3RhdGUsIHsgYXBwcm92ZWQ6IGJvb2xlYW4gfSwgeyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9PiA9IHtcbiAgICogICBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAgICogICAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSBvcmRlciAke3Njb3BlLm9yZGVySWR9P2AsIHJpc2tMZXZlbDogJ2hpZ2gnIH07XG4gICAqICAgfSxcbiAgICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAgICogICAgIHNjb3BlLmFwcHJvdmVkID0gaW5wdXQuYXBwcm92ZWQ7XG4gICAqICAgfSxcbiAgICogfTtcbiAgICogYGBgXG4gICAqL1xuICBleGVjdXRlOiAoc2NvcGU6IFRTY29wZSkgPT4gUHJvbWlzZTxUUGF1c2VEYXRhIHwgdm9pZD4gfCBUUGF1c2VEYXRhIHwgdm9pZDtcbiAgLyoqXG4gICAqIFJlc3VtZSBwaGFzZS4gQ2FsbGVkIHdpdGggdGhlIHJlc3VtZSBpbnB1dCB3aGVuIGV4ZWN1dGlvbiBjb250aW51ZXMuXG4gICAqXG4gICAqIFRoZSBzY29wZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYC4gV3JpdGVzIGR1cmluZ1xuICAgKiBgcmVzdW1lYCBhcmUgY29tbWl0dGVkIGFuZCB2aXNpYmxlIHRvIHN1YnNlcXVlbnQgc3RhZ2VzLlxuICAgKi9cbiAgcmVzdW1lOiAoc2NvcGU6IFRTY29wZSwgaW5wdXQ6IFRJbnB1dCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbi8vIOKUgOKUgCBUeXBlIGd1YXJkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhIFBhdXNlUmVzdWx0IChzdGFnZSB3YW50cyB0byBwYXVzZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVJlc3VsdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhdXNlUmVzdWx0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgKHZhbHVlIGFzIFBhdXNlUmVzdWx0KS5wYXVzZSA9PT0gdHJ1ZTtcbn1cblxuLyoqIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgUGF1c2VTaWduYWwuIFVzZXMgaW5zdGFuY2VvZiArIG5hbWUgYnJhbmQgZmFsbGJhY2sgZm9yIGNyb3NzLXJlYWxtIHNhZmV0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlU2lnbmFsKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgUGF1c2VTaWduYWwge1xuICByZXR1cm4gKFxuICAgIGVycm9yIGluc3RhbmNlb2YgUGF1c2VTaWduYWwgfHxcbiAgICAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgZXJyb3IubmFtZSA9PT0gJ1BhdXNlU2lnbmFsJyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCAncGF1c2VEYXRhJykgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgJ3N0YWdlSWQnKSlcbiAgKTtcbn1cbiJdfQ==
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7OztBQUVILCtEQUErRDtBQUUvRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBQ3BDLHVEQUF1RDtJQUM5QyxTQUFTLENBQVU7SUFDNUIsNENBQTRDO0lBQ25DLE9BQU8sQ0FBUztJQUN6Qix5RUFBeUU7SUFDakUsWUFBWSxDQUFXO0lBRS9COzs7Ozs7Ozs7O09BVUc7SUFDSyxlQUFlLENBQVU7SUFDekIsb0JBQW9CLENBQVU7SUFFdEM7Ozs7Ozs7Ozs7O09BV0c7SUFDSyxjQUFjLEdBQTRDLEVBQUUsQ0FBQztJQUVyRSxZQUFZLElBQWEsRUFBRSxPQUFlO1FBQ3hDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLHVGQUF1RjtRQUN2RixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsY0FBYyxDQUFDLFNBQWlCO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLGNBQXNCLEVBQUUsbUJBQTRCO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7WUFDdEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxLQUE4QjtRQUNuRSxpRUFBaUU7UUFDakUsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBbkdELGtDQW1HQztBQXVLRCwrREFBK0Q7QUFFL0QsZ0VBQWdFO0FBQ2hFLFNBQWdCLGFBQWEsQ0FBQyxLQUFjO0lBQzFDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUssS0FBcUIsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQzlGLENBQUM7QUFGRCxzQ0FFQztBQUVELHdHQUF3RztBQUN4RyxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyxPQUFPLENBQ0wsS0FBSyxZQUFZLFdBQVc7UUFDNUIsQ0FBQyxLQUFLLFlBQVksS0FBSztZQUNyQixLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWE7WUFDNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7WUFDeEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUMxRCxDQUFDO0FBQ0osQ0FBQztBQVJELHNDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXVzZS9SZXN1bWUg4oCUIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50IGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3MuXG4gKlxuICogQSBzdGFnZSBzaWduYWxzIHBhdXNlIGJ5IGNhbGxpbmcgYHNjb3BlLiRwYXVzZShkYXRhKWAgd2hpY2ggdGhyb3dzIGEgUGF1c2VTaWduYWwuXG4gKiBUaGUgc2lnbmFsIGJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3Ig4oaSIEZsb3djaGFydFRyYXZlcnNlciDihpIgRmxvd0NoYXJ0RXhlY3V0b3IsXG4gKiBlYWNoIGxldmVsIGFkZGluZyBpdHMgc3ViZmxvdyBJRCB0byB0aGUgcGF0aC5cbiAqXG4gKiBUaGUgY2hlY2twb2ludCBjYXB0dXJlczpcbiAqICAgLSBwYXVzZWRQYXRoOiBmdWxsIHBhdGggdG8gdGhlIHBhdXNlZCBzdGFnZSAoZS5nLiwgWydzZi1wYXltZW50JywgJ2FwcHJvdmUnXSlcbiAqICAgLSBzaGFyZWRTdGF0ZTogc2NvcGUgYXQgdGhlIHBhdXNlIHBvaW50XG4gKiAgIC0gZXhlY3V0aW9uVHJlZTogY29tcGxldGVkIHN0YWdlcyBmb3IgQlRTL25hcnJhdGl2ZVxuICogICAtIHBhdXNlRGF0YTogcXVlc3Rpb24sIHJlYXNvbiwgb3IgbWV0YWRhdGEgZnJvbSAkcGF1c2UoKVxuICpcbiAqIFJlc3VtZSByZWJ1aWxkcyB0aGUgZmxvd2NoYXJ0LCByZXN0b3JlcyBzY29wZSwgbmF2aWdhdGVzIHRvIHRoZSBwYXVzZWQgc3RhZ2UsXG4gKiBpbmplY3RzIHJlc3VtZUlucHV0LCBhbmQgY29udGludWVzIHRyYXZlcnNhbC5cbiAqXG4gKiBTdXBwb3J0ZWQgdG9wb2xvZ2llczogbGluZWFyLCBzdWJmbG93LCBsYXp5IHN1YmZsb3csIGxvb3AsIG5lc3RlZCBzdWJmbG93IGluIGxvb3AuXG4gKi9cblxuLy8g4pSA4pSAIFBhdXNlU2lnbmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRocm93biBieSBgc2NvcGUuJHBhdXNlKClgIHRvIHNpZ25hbCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcFxuICogYW5kIGNyZWF0ZSBhIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50LlxuICpcbiAqIEJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3IgKHdoaWNoIHByZXBlbmRzIHN1YmZsb3cgSUQgdG8gcGF0aClcbiAqIGFuZCBpcyBjYXVnaHQgYnkgRmxvd2NoYXJ0VHJhdmVyc2VyL0Zsb3dDaGFydEV4ZWN1dG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF1c2VTaWduYWwgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE6IHVua25vd247XG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgJHBhdXNlKCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlLiBCdWlsdCBkdXJpbmcgYnViYmxlLXVwLiAqL1xuICBwcml2YXRlIF9zdWJmbG93UGF0aDogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludm9rZXIgY29udGV4dCDigJQgZW5yaWNoZWQgZHVyaW5nIGJ1YmJsZS11cCB3aGVuIGEgUGF1c2VTaWduYWwgcGFzc2VzXG4gICAqIHRocm91Z2ggYSBkZWNpZGVyLCBzZWxlY3Rvciwgb3IgZm9yayBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGUgaW52b2tlciBpcyB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgZXhlY3V0ZU5vZGUoKSBvbiB0aGUgcGF1c2VkIGNoaWxkLlxuICAgKiBDYXB0dXJlZCBkdXJpbmcgdHJhdmVyc2FsIChub3QgcmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSB0cmVlKS5cbiAgICpcbiAgICogYGNvbnRpbnVhdGlvblN0YWdlSWRgIGlzIHRoZSBpbnZva2VyJ3MgYC5uZXh0YCBub2RlIOKAlCB3aGVyZSBleGVjdXRpb25cbiAgICogc2hvdWxkIGNvbnRpbnVlIGFmdGVyIHJlc3VtZS4gV2l0aG91dCB0aGlzLCBicmFuY2ggY2hpbGRyZW4gaGF2ZSBub1xuICAgKiBgLm5leHRgIHBvaW50ZXIgYW5kIHJlc3VtZSB3b3VsZCB0ZXJtaW5hdGUgZWFybHkuXG4gICAqL1xuICBwcml2YXRlIF9pbnZva2VyU3RhZ2VJZD86IHN0cmluZztcbiAgcHJpdmF0ZSBfY29udGludWF0aW9uU3RhZ2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogU3ViZmxvdyBzY29wZSBjYXB0dXJlIOKAlCBwb3B1bGF0ZWQgZHVyaW5nIGJ1YmJsZS11cCBieVxuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCByaWdodCBiZWZvcmUgcmUtdGhyb3cuIEVhY2ggZW50cnkgaXMgb25lXG4gICAqIHN1YmZsb3cncyBwcmUtcGF1c2Ugc2hhcmVkIHN0YXRlLCBrZXllZCBieSB0aGUgcGF0aC1wcmVmaXhlZFxuICAgKiBzdWJmbG93IGlkIChtYXRjaGVzIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBXaXRob3V0IHRoaXMsIHRoZSBuZXN0ZWQgYFNoYXJlZE1lbW9yeWAgaXMgZ2FyYmFnZS1jb2xsZWN0ZWRcbiAgICogYmVmb3JlIHRoZSBjaGVja3BvaW50IGlzIGJ1aWx0LiBPbiByZXN1bWUsIHRoZSBpbm5lciBydW50aW1lIGlzXG4gICAqIHJlLWNyZWF0ZWQgZW1wdHkgYW5kIHJlc3VtZSBoYW5kbGVycyByZWFkaW5nIHByZS1wYXVzZSBzY29wZVxuICAgKiAoZS5nLiwgYW4gQWdlbnQncyBgc2NvcGUuaGlzdG9yeWAsIGBzY29wZS5wYXVzZWRUb29sQ2FsbElkYClcbiAgICogY3Jhc2ggd2l0aCBcIlggaXMgbm90IGl0ZXJhYmxlXCIgLyB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIF9zdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiB1bmtub3duLCBzdGFnZUlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRXhlY3V0aW9uIHBhdXNlZCcpO1xuICAgIHRoaXMubmFtZSA9ICdQYXVzZVNpZ25hbCc7XG4gICAgdGhpcy5wYXVzZURhdGEgPSBkYXRhO1xuICAgIHRoaXMuc3RhZ2VJZCA9IHN0YWdlSWQ7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGggPSBbXTtcbiAgICAvLyBQYXVzZVNpZ25hbCBpcyBjb250cm9sIGZsb3csIG5vdCBhIHJlYWwgZXJyb3Ig4oCUIHN0YWNrIHRyYWNlIGhhcyBubyBkaWFnbm9zdGljIHZhbHVlLlxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuXG4gIGdldCBzdWJmbG93UGF0aCgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmZsb3dQYXRoO1xuICB9XG5cbiAgLyoqIFByZXBlbmQgYSBzdWJmbG93IElEIHRvIHRoZSBwYXRoIChjYWxsZWQgZHVyaW5nIGJ1YmJsZS11cCkuICovXG4gIHByZXBlbmRTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICB9XG5cbiAgLyoqIFRoZSBzdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiAqL1xuICBnZXQgaW52b2tlclN0YWdlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW52b2tlclN0YWdlSWQ7XG4gIH1cblxuICAvKiogV2hlcmUgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBhZnRlciByZXN1bWUgKGludm9rZXIncyBuZXh0IG5vZGUpLiAqL1xuICBnZXQgY29udGludWF0aW9uU3RhZ2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jb250aW51YXRpb25TdGFnZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YW1wIHRoZSBpbnZva2VyIGNvbnRleHQgZHVyaW5nIGJ1YmJsZS11cC5cbiAgICogQ2FsbGVkIGJ5IGRlY2lkZXIvc2VsZWN0b3IvZm9yayBoYW5kbGVycyB3aGVuIGNhdGNoaW5nIGEgY2hpbGQncyBQYXVzZVNpZ25hbC5cbiAgICogRmlyc3QgaW52b2tlciB3aW5zIChpbm5lcm1vc3QpIOKAlCBzdWJzZXF1ZW50IGNhbGxzIGFyZSBuby1vcHMuXG4gICAqL1xuICBzZXRJbnZva2VyKGludm9rZXJTdGFnZUlkOiBzdHJpbmcsIGNvbnRpbnVhdGlvblN0YWdlSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2ludm9rZXJTdGFnZUlkKSB7XG4gICAgICB0aGlzLl9pbnZva2VyU3RhZ2VJZCA9IGludm9rZXJTdGFnZUlkO1xuICAgICAgdGhpcy5fY29udGludWF0aW9uU3RhZ2VJZCA9IGNvbnRpbnVhdGlvblN0YWdlSWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgYSBzdWJmbG93J3MgaXNvbGF0ZWQgU2hhcmVkTWVtb3J5IGF0IHRoZSBtb21lbnQgaXRzXG4gICAqIHRyYXZlcnNhbCB0aHJldy4gQ2FsbGVkIGJ5IGBTdWJmbG93RXhlY3V0b3JgIG9uY2UgcGVyIHN1YmZsb3dcbiAgICogYm91bmRhcnkgb24gdGhlIGJ1YmJsZS11cCBwYXRoLiBFYWNoIGNhcHR1cmUgaXMga2V5ZWQgYnkgdGhlXG4gICAqIHBhdGgtcHJlZml4ZWQgc3ViZmxvdyBpZCAodGhlIHNhbWUgaWQgdXNlZCBpbiBgc3ViZmxvd1BhdGhgKS5cbiAgICpcbiAgICogSW5uZXJtb3N0LWZpcnN0OiBhIGRlZXAgYFNlcXVlbmNlKEFnZW50KC4uLikpYCBwYXVzZSBjYXB0dXJlcyB0aGVcbiAgICogYWdlbnQncyBzdWJmbG93IGZpcnN0LCB0aGVuIGl0cyBwYXJlbnQncywgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3RcbiAgICogbW91bnQuIFRoZSBmdWxsIG5lc3Qgc3Vydml2ZXMgaW50byBgY2hlY2twb2ludC5zdWJmbG93U3RhdGVzYC5cbiAgICovXG4gIGNhcHR1cmVTdWJmbG93U2NvcGUoc3ViZmxvd0lkOiBzdHJpbmcsIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIC8vIERlZmVuc2l2ZSBzaGFsbG93IGNsb25lIHNvIGxhdGVyIG11dGF0aW9ucyBvbiB0aGUgc291cmNlIGRvbid0XG4gICAgLy8gYmxlZWQgaW50byB0aGUgY2FwdHVyZWQgc25hcHNob3QuIERlZXAgY2xvbmluZyBpcyB0aGUgY29uc3VtZXInc1xuICAgIC8vIHJlc3BvbnNpYmlsaXR5ICh0aGUgcmVzdW1lIHRhcmdldCBtYXkgbm90IGV2ZW4gYmUgb24gdGhpc1xuICAgIC8vIHByb2Nlc3MpOyBTaGFyZWRNZW1vcnkgdmFsdWVzIGFyZSBjb252ZW50aW9uYWxseSBKU09OLWZyaWVuZGx5LlxuICAgIHRoaXMuX3N1YmZsb3dTdGF0ZXNbc3ViZmxvd0lkXSA9IHsgLi4uc3RhdGUgfTtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlZCBzdWJmbG93IHNjb3BlcyAocmVhZC1vbmx5IHZpZXcpLiAqL1xuICBnZXQgc3ViZmxvd1N0YXRlcygpOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3ViZmxvd1N0YXRlcztcbiAgfVxufVxuXG4vLyDilIDilIAgUGF1c2VSZXN1bHQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUmV0dXJuZWQgYnkgYSBwYXVzYWJsZSBzdGFnZSdzIGV4ZWN1dGUvcmVzdW1lIGZ1bmN0aW9uIHRvIHNpZ25hbCBwYXVzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246ICdBcHByb3ZlIG9yZGVyIDEyMz8nIH0gfTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNlUmVzdWx0IHtcbiAgcmVhZG9ubHkgcGF1c2U6IHRydWU7XG4gIC8qKiBEYXRhIHRvIGluY2x1ZGUgaW4gdGhlIGNoZWNrcG9pbnQg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBkYXRhPzogdW5rbm93bjtcbn1cblxuLy8g4pSA4pSAIEZsb3djaGFydENoZWNrcG9pbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU2VyaWFsaXphYmxlIGNoZWNrcG9pbnQg4oCUIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlc3VtZSBhIHBhdXNlZCBmbG93Y2hhcnQuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gU2F2ZVxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBTZXJpYWxpemFibGUgY2hlY2twb2ludCDigJQgZXZlcnl0aGluZyBuZWVkZWQgdG8gcmVzdW1lIGEgcGF1c2VkIGZsb3djaGFydC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIHRyZWUgSVMgdGhlIHRyYXZlcnNlZCBwYXRoLiBUaGUgbGVhZiBub2RlIHdpdGggc3RhdHVzICdwYXVzZWQnXG4gKiBJUyB0aGUgY3Vyc29yLiBObyBzZXBhcmF0ZSBwYXRoIGFycmF5IG5lZWRlZCDigJQgdGhlIHRyZWUgc3RydWN0dXJlIGNhcHR1cmVzXG4gKiB0aGUgZnVsbCBuZXN0aW5nIChpbmNsdWRpbmcgc3ViZmxvd3MpLlxuICpcbiAqIEpTT04tc2FmZTogbm8gZnVuY3Rpb25zLCBubyBjbGFzcyBpbnN0YW5jZXMsIG5vIFNESyBjbGllbnRzLlxuICogU3RvcmUgYW55d2hlcmU6IFJlZGlzLCBQb3N0Z3JlcywgbG9jYWxTdG9yYWdlLCBhIGZpbGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNoZWNrcG9pbnQgPSBleGVjdXRvci5nZXRDaGVja3BvaW50KCk7IC8vIGFmdGVyIHBhdXNlXG4gKiBhd2FpdCByZWRpcy5zZXQoYHNlc3Npb246JHtpZH1gLCBKU09OLnN0cmluZ2lmeShjaGVja3BvaW50KSk7XG4gKlxuICogLy8gUmVzdW1lIChob3VycyBsYXRlciwgcG9zc2libHkgZGlmZmVyZW50IHNlcnZlcilcbiAqIGNvbnN0IGNoZWNrcG9pbnQgPSBKU09OLnBhcnNlKGF3YWl0IHJlZGlzLmdldChgc2Vzc2lvbjoke2lkfWApKTtcbiAqIGNvbnN0IGV4ZWN1dG9yID0gbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJlc3VtZShjaGVja3BvaW50LCB7IGFwcHJvdmVkOiB0cnVlIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd2NoYXJ0Q2hlY2twb2ludCB7XG4gIC8qKiBTY29wZSBzdGF0ZSBhdCB0aGUgcGF1c2UgcG9pbnQg4oCUIGFsbCBzaGFyZWQgbWVtb3J5IGtleS92YWx1ZXMuICovXG4gIHJlYWRvbmx5IHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogRXhlY3V0aW9uIHRyZWUg4oCUIHRoZSB0cmF2ZXJzZWQgcGF0aC4gVGhlIGxlYWYgd2l0aCBzdGF0dXMgJ3BhdXNlZCcgaXMgdGhlIGN1cnNvci5cbiAgICogIENvbnRhaW5zIHN1YmZsb3cgbmVzdGluZy4gVXNlZCBmb3IgQlRTIHZpc3VhbGl6YXRpb24gYW5kIHRvIGZpbmQgdGhlIHJlc3VtZSBwb2ludC4gKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uVHJlZTogdW5rbm93bjtcblxuICAvKiogSUQgb2YgdGhlIHN0YWdlIHRoYXQgcGF1c2VkLiBVc2VkIGJ5IHJlc3VtZSgpIHRvIGZpbmQgdGhlIG5vZGUgaW4gdGhlIGdyYXBoLiAqL1xuICByZWFkb25seSBwYXVzZWRTdGFnZUlkOiBzdHJpbmc7XG5cbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlIChlLmcuLCBbJ3NmLXBheW1lbnQnLCAnc2YtdmFsaWRhdGlvbiddKS5cbiAgICogIEVtcHR5IGFycmF5IHdoZW4gcGF1c2VkIGF0IHRoZSB0b3AgbGV2ZWwuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogRGF0YSBmcm9tICRwYXVzZSgpIOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VEYXRhPzogdW5rbm93bjtcblxuICAvKiogU3ViZmxvdyByZXN1bHRzIGNvbGxlY3RlZCBiZWZvcmUgdGhlIHBhdXNlLiAqL1xuICByZWFkb25seSBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIG9uZSBlbnRyeSBwZXIgc3ViZmxvdyBib3VuZGFyeSBvbiB0aGUgcGF0aFxuICAgKiB0byB0aGUgcGF1c2VkIHN0YWdlLiBLZXllZCBieSBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKG1hdGNoZXNcbiAgICogYHN1YmZsb3dQYXRoYCBlbnRyaWVzKS4gRWFjaCB2YWx1ZSBpcyB0aGUgc3ViZmxvdydzIHByZS1wYXVzZVxuICAgKiBzaGFyZWQgc3RhdGUuXG4gICAqXG4gICAqIEFsd2F5cyBwcmVzZW50IChlbXB0eSBge31gIGZvciByb290LWxldmVsIHBhdXNlcyB3aGVyZSBubyBzdWJmbG93c1xuICAgKiB3ZXJlIGVudGVyZWQpLiBPbiByZXN1bWUsIGBTdWJmbG93RXhlY3V0b3JgIHNlZWRzIGVhY2ggbmVzdGVkIHJ1bnRpbWVcbiAgICogZnJvbSB0aGlzIG1hcCAoYW5kIHNraXBzIHRoZSBpbnB1dE1hcHBlcikgc28gcmVzdW1lIGhhbmRsZXJzIHNlZVxuICAgKiBwcmUtcGF1c2Ugc2NvcGUgYWNyb3NzIHNhbWUtZXhlY3V0b3IgQU5EIGNyb3NzLWV4ZWN1dG9yIHJlc3RhcnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1N0YXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG4gIC8qKiBTdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuICovXG4gIHJlYWRvbmx5IGludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBXaGVyZSB0byBjb250aW51ZSBhZnRlciByZXN1bWUg4oCUIHRoZSBpbnZva2VyJ3MgbmV4dCBub2RlIElELiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuICovXG4gIHJlYWRvbmx5IGNvbnRpbnVhdGlvblN0YWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFRpbWVzdGFtcCBvZiB3aGVuIHRoZSBwYXVzZSBvY2N1cnJlZC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQXQ6IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFBhdXNhYmxlSGFuZGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBhIHBhdXNhYmxlIHN0YWdlIOKAlCBoYXMgdHdvIHBoYXNlczogZXhlY3V0ZSBhbmQgcmVzdW1lLlxuICpcbiAqIGBleGVjdXRlYCBydW5zIHRoZSBmaXJzdCB0aW1lLiBJdCBjYW4gcmV0dXJuIGB7IHBhdXNlOiB0cnVlIH1gIHRvIHBhdXNlLlxuICogYHJlc3VtZWAgcnVucyB3aGVuIHRoZSBmbG93Y2hhcnQgaXMgcmVzdW1lZC4gSXQgcmVjZWl2ZXMgdGhlIHJlc3VtZSBpbnB1dC5cbiAqXG4gKiBCb3RoIHBoYXNlcyByZWNlaXZlIHRoZSBzYW1lIHNjb3BlLiBBZnRlciBleGVjdXRlIHBhdXNlcywgdGhlIHNjb3BlIHN0YXRlXG4gKiBpcyBwcmVzZXJ2ZWQgaW4gdGhlIGNoZWNrcG9pbnQuIE9uIHJlc3VtZSwgdGhlIHNjb3BlIGlzIHJlc3RvcmVkIGJlZm9yZVxuICogY2FsbGluZyByZXN1bWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC5hZGRQYXVzYWJsZUZ1bmN0aW9uKCdBcHByb3ZlT3JkZXInLCB7XG4gKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgICBzY29wZS5hbW91bnQgPSAyOTk7XG4gKiAgICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246IGBBcHByb3ZlICQke3Njb3BlLmFtb3VudH0gcmVmdW5kP2AgfSB9O1xuICogICB9LFxuICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICogICAgIHNjb3BlLmFwcHJvdmVyID0gaW5wdXQuYXBwcm92ZXI7XG4gKiAgIH0sXG4gKiB9LCAnYXBwcm92ZS1vcmRlcicsICdNYW5hZ2VyIGFwcHJvdmFsIGdhdGUnKVxuICpcbiAqIC8vIExhdGVyIOKAlCByZXN1bWUgd2l0aCBodW1hbidzIGFuc3dlclxuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUsIGFwcHJvdmVyOiAnSmFuZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzYWJsZUhhbmRsZXI8VFNjb3BlID0gYW55LCBUSW5wdXQgPSB1bmtub3duLCBUUGF1c2VEYXRhID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogRmlyc3QtcnVuIHBoYXNlLiBSZXR1cm4gZGF0YSB0byBwYXVzZSwgb3Igdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gICAqXG4gICAqIEFueSBub24tdm9pZCByZXR1cm4gdmFsdWUgYmVjb21lcyB0aGUgYHBhdXNlRGF0YWAgaW4gdGhlIGNoZWNrcG9pbnQuXG4gICAqIFRoZSBjb25zdW1lciBkZWZpbmVzIHRoZSBgVFBhdXNlRGF0YWAgdHlwZSDigJQgdGhlIEZFIHVzZXMgaXQgdG8gcmVuZGVyXG4gICAqIHRoZSByaWdodCBVSSAoZm9ybSBmaWVsZHMsIGFwcHJvdmFsIGJ1dHRvbnMsIGV0Yy4pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFRQYXVzZURhdGEgPSB7IHF1ZXN0aW9uOiBzdHJpbmc7IHJpc2tMZXZlbDogc3RyaW5nIH1cbiAgICogY29uc3QgaGFuZGxlcjogUGF1c2FibGVIYW5kbGVyPE15U3RhdGUsIHsgYXBwcm92ZWQ6IGJvb2xlYW4gfSwgeyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9PiA9IHtcbiAgICogICBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAgICogICAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSBvcmRlciAke3Njb3BlLm9yZGVySWR9P2AsIHJpc2tMZXZlbDogJ2hpZ2gnIH07XG4gICAqICAgfSxcbiAgICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAgICogICAgIHNjb3BlLmFwcHJvdmVkID0gaW5wdXQuYXBwcm92ZWQ7XG4gICAqICAgfSxcbiAgICogfTtcbiAgICogYGBgXG4gICAqL1xuICBleGVjdXRlOiAoc2NvcGU6IFRTY29wZSkgPT4gUHJvbWlzZTxUUGF1c2VEYXRhIHwgdm9pZD4gfCBUUGF1c2VEYXRhIHwgdm9pZDtcbiAgLyoqXG4gICAqIFJlc3VtZSBwaGFzZS4gQ2FsbGVkIHdpdGggdGhlIHJlc3VtZSBpbnB1dCB3aGVuIGV4ZWN1dGlvbiBjb250aW51ZXMuXG4gICAqXG4gICAqIFRoZSBzY29wZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYC4gV3JpdGVzIGR1cmluZ1xuICAgKiBgcmVzdW1lYCBhcmUgY29tbWl0dGVkIGFuZCB2aXNpYmxlIHRvIHN1YnNlcXVlbnQgc3RhZ2VzLlxuICAgKi9cbiAgcmVzdW1lOiAoc2NvcGU6IFRTY29wZSwgaW5wdXQ6IFRJbnB1dCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbi8vIOKUgOKUgCBUeXBlIGd1YXJkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhIFBhdXNlUmVzdWx0IChzdGFnZSB3YW50cyB0byBwYXVzZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVJlc3VsdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhdXNlUmVzdWx0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgKHZhbHVlIGFzIFBhdXNlUmVzdWx0KS5wYXVzZSA9PT0gdHJ1ZTtcbn1cblxuLyoqIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgUGF1c2VTaWduYWwuIFVzZXMgaW5zdGFuY2VvZiArIG5hbWUgYnJhbmQgZmFsbGJhY2sgZm9yIGNyb3NzLXJlYWxtIHNhZmV0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlU2lnbmFsKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgUGF1c2VTaWduYWwge1xuICByZXR1cm4gKFxuICAgIGVycm9yIGluc3RhbmNlb2YgUGF1c2VTaWduYWwgfHxcbiAgICAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgZXJyb3IubmFtZSA9PT0gJ1BhdXNlU2lnbmFsJyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCAncGF1c2VEYXRhJykgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgJ3N0YWdlSWQnKSlcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -35,7 +35,7 @@ function unwrapProxy(value) {
|
|
|
35
35
|
// JSON round-trip strips Proxies. Safe because state values must be JSON-serializable.
|
|
36
36
|
return JSON.parse(JSON.stringify(value));
|
|
37
37
|
}
|
|
38
|
-
catch
|
|
38
|
+
catch {
|
|
39
39
|
// Non-serializable (functions, symbols, etc.) — return as-is
|
|
40
40
|
return value;
|
|
41
41
|
}
|
|
@@ -80,6 +80,10 @@ const METHOD_ROUTES = {
|
|
|
80
80
|
// Observability — Emit channel (Phase 3). Routes to ScopeFacade.emitEvent
|
|
81
81
|
// which handles fast-path, enrichment, redaction, and error isolation.
|
|
82
82
|
$emit: (t) => t.emitEvent.bind(t),
|
|
83
|
+
// Detach (T4) — fire-and-forget child flowcharts. Delegates to ScopeFacade
|
|
84
|
+
// which minted refIds from runtimeStageId.
|
|
85
|
+
$detachAndJoinLater: (t) => t.detachAndJoinLater.bind(t),
|
|
86
|
+
$detachAndForget: (t) => t.detachAndForget.bind(t),
|
|
83
87
|
$toRaw: (t) => () => t,
|
|
84
88
|
};
|
|
85
89
|
// -- Guard properties --------------------------------------------------------
|
|
@@ -172,9 +176,8 @@ function createNestedProxy(obj, rootKey, segments, target, readSilent, state, an
|
|
|
172
176
|
// Array -- return array proxy
|
|
173
177
|
if (Array.isArray(value)) {
|
|
174
178
|
return (0, arrayTraps_js_1.createArrayProxy)(() => {
|
|
175
|
-
var _a;
|
|
176
179
|
const current = readSilent(rootKey);
|
|
177
|
-
return (
|
|
180
|
+
return (0, pathOps_js_1.nativeGet)(current, childSegments.join('.')) ?? [];
|
|
178
181
|
}, (newArr) => {
|
|
179
182
|
const patch = (0, pathBuilder_js_1.buildNestedPatch)(childSegments, unwrapProxy(newArr));
|
|
180
183
|
target.updateValue(rootKey, patch);
|
|
@@ -211,13 +214,12 @@ function createNestedProxy(obj, rootKey, segments, target, readSilent, state, an
|
|
|
211
214
|
* @returns A Proxy with typed property access and $-prefixed methods
|
|
212
215
|
*/
|
|
213
216
|
function createTypedScope(target, options) {
|
|
214
|
-
var _a;
|
|
215
217
|
const state = {
|
|
216
|
-
breakFn: options
|
|
218
|
+
breakFn: options?.breakPipeline,
|
|
217
219
|
childCache: new Map(),
|
|
218
220
|
};
|
|
219
221
|
// Bind silent-read method once — avoids per-call ?? + .call() in array proxy getCurrent closures
|
|
220
|
-
const readSilent = (
|
|
222
|
+
const readSilent = (target.getValueSilent ?? target.getValue).bind(target);
|
|
221
223
|
const proxy = new Proxy(target, {
|
|
222
224
|
get(_proxyTarget, prop, _receiver) {
|
|
223
225
|
// 1. Internal symbols (check before other symbols)
|
|
@@ -268,7 +270,7 @@ function createTypedScope(target, options) {
|
|
|
268
270
|
const cached = state.childCache.get(prop);
|
|
269
271
|
if (cached && cached.ref === value)
|
|
270
272
|
return cached.proxy;
|
|
271
|
-
const arrProxy = (0, arrayTraps_js_1.createArrayProxy)(() =>
|
|
273
|
+
const arrProxy = (0, arrayTraps_js_1.createArrayProxy)(() => readSilent(prop) ?? [], (newArr) => {
|
|
272
274
|
target.setValue(prop, unwrapProxy(newArr));
|
|
273
275
|
state.childCache.delete(prop);
|
|
274
276
|
});
|
|
@@ -345,4 +347,4 @@ function createTypedScope(target, options) {
|
|
|
345
347
|
return proxy;
|
|
346
348
|
}
|
|
347
349
|
exports.createTypedScope = createTypedScope;
|
|
348
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7OztBQUVILHFEQUE4RDtBQUM5RCxpREFBcUQ7QUFDckQsbURBQW1EO0FBQ25ELHFEQUFvRDtBQUVwRCx5Q0FBeUc7QUFFekcsK0VBQStFO0FBQy9FLG1FQUFtRTtBQUNuRSwwRUFBMEU7QUFDMUUsMkNBQTJDO0FBRTNDLFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUMsNERBQTREO0lBQzVELElBQUksQ0FBQztRQUNILHVGQUF1RjtRQUN2RixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFBQyxXQUFNLENBQUM7UUFDUCw2REFBNkQ7UUFDN0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQU1ELE1BQU0sYUFBYSxHQUFpQztJQUNsRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyQyxPQUFPLEVBQUUsQ0FB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IFByb3h5IGZhY3RvcnkgZm9yIFR5cGVkU2NvcGU8VD4uXG4gKlxuICogV3JhcHMgYSBSZWFjdGl2ZVRhcmdldCAoU2NvcGVGYWNhZGUpIGluIGEgUHJveHkgdGhhdCBwcm92aWRlczpcbiAqIC0gVHlwZWQgcHJvcGVydHkgYWNjZXNzOiBzY29wZS5jcmVkaXRUaWVyIChyZWFkKSwgc2NvcGUuY3JlZGl0VGllciA9ICdBJyAod3JpdGUpXG4gKiAtIERlZXAgd3JpdGUgaW50ZXJjZXB0aW9uOiBzY29wZS5jdXN0b21lci5hZGRyZXNzLnppcCA9ICc5MDIxMCdcbiAqIC0gQXJyYXkgbXV0YXRpb24gaW50ZXJjZXB0aW9uOiBzY29wZS5pdGVtcy5wdXNoKCduZXcnKVxuICogLSAkLXByZWZpeGVkIGVzY2FwZSBoYXRjaGVzOiAkZ2V0VmFsdWUsICRzZXRWYWx1ZSwgJHJlYWQsICRnZXRBcmdzLCBldGMuXG4gKlxuICogUmVhZCBzZW1hbnRpY3M6IHRvcC1sZXZlbCBnZXQgY2FsbHMgZ2V0VmFsdWUoKSAoZmlyZXMgb25SZWFkIE9OQ0UpLlxuICogICBOZXN0ZWQgZ2V0IHRyYXBzIG5hdmlnYXRlIGluLW1lbW9yeSAtLSBubyBhZGRpdGlvbmFsIG9uUmVhZC5cbiAqXG4gKiBXcml0ZSBzZW1hbnRpY3M6IHRvcC1sZXZlbCBzZXQgY2FsbHMgc2V0VmFsdWUoKS4gTmVzdGVkIHNldCBjYWxsc1xuICogICB1cGRhdGVWYWx1ZSgpIHdpdGggYSBwYXJ0aWFsIG9iamVjdCBidWlsdCBmcm9tIHRoZSBhY2N1bXVsYXRlZCBwYXRoLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBsb2Rhc2hHZXQgfSBmcm9tICcuLi9tZW1vcnkvcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyBzaG91bGRXcmFwV2l0aFByb3h5IH0gZnJvbSAnLi9hbGxvd2xpc3QuanMnO1xuaW1wb3J0IHsgY3JlYXRlQXJyYXlQcm94eSB9IGZyb20gJy4vYXJyYXlUcmFwcy5qcyc7XG5pbXBvcnQgeyBidWlsZE5lc3RlZFBhdGNoIH0gZnJvbSAnLi9wYXRoQnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0aXZlT3B0aW9ucywgUmVhY3RpdmVUYXJnZXQsIFR5cGVkU2NvcGUgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IEJSRUFLX1NFVFRFUiwgRVhFQ1VUT1JfSU5URVJOQUxfTUVUSE9EUywgSVNfVFlQRURfU0NPUEUsIFNDT1BFX01FVEhPRF9OQU1FUyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyAtLSBQcm94eSB1bndyYXBwaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBzdHJ1Y3R1cmVkQ2xvbmUgaW4gVHJhbnNhY3Rpb25CdWZmZXIgY2Fubm90IGNsb25lIFByb3h5IG9iamVjdHMuXG4vLyBXaGVuIGEgdXNlciBkb2VzIGBzY29wZS5iYWNrdXAgPSBzY29wZS5jdXN0b21lcmAsIHRoZSB2YWx1ZSBpcyBhIFByb3h5LlxuLy8gVW53cmFwIHRvIGEgcGxhaW4gb2JqZWN0IGJlZm9yZSBzdG9yaW5nLlxuXG5mdW5jdGlvbiB1bndyYXBQcm94eSh2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbHVlO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICAvLyBGYXN0IHBhdGg6IHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyBkb24ndCBuZWVkIHVud3JhcHBpbmdcbiAgdHJ5IHtcbiAgICAvLyBKU09OIHJvdW5kLXRyaXAgc3RyaXBzIFByb3hpZXMuIFNhZmUgYmVjYXVzZSBzdGF0ZSB2YWx1ZXMgbXVzdCBiZSBKU09OLXNlcmlhbGl6YWJsZS5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBOb24tc2VyaWFsaXphYmxlIChmdW5jdGlvbnMsIHN5bWJvbHMsIGV0Yy4pIOKAlCByZXR1cm4gYXMtaXNcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLy8gLS0gJC1tZXRob2Qgcm91dGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIE1ldGhvZFJvdXRlciA9ICh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRzOiBSZWFjdGl2ZVN0YXRlKSA9PiB1bmtub3duO1xuXG5jb25zdCBNRVRIT0RfUk9VVEVTOiBSZWNvcmQ8c3RyaW5nLCBNZXRob2RSb3V0ZXI+ID0ge1xuICAkZ2V0VmFsdWU6ICh0KSA9PiB0LmdldFZhbHVlLmJpbmQodCksXG4gICRzZXRWYWx1ZTogKHQpID0+IHQuc2V0VmFsdWUuYmluZCh0KSxcbiAgJHVwZGF0ZTogKHQpID0+IHQudXBkYXRlVmFsdWUuYmluZCh0KSxcbiAgJGRlbGV0ZTogKHQpID0+IHQuZGVsZXRlVmFsdWUuYmluZCh0KSxcbiAgJHJlYWQ6ICh0KSA9PiAoZG90UGF0aDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm9vdEtleSA9IGRvdFBhdGguc3BsaXQoJy4nKVswXTtcbiAgICBjb25zdCB2YWx1ZSA9IHQuZ2V0VmFsdWUocm9vdEtleSk7XG4gICAgaWYgKCFkb3RQYXRoLmluY2x1ZGVzKCcuJykpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gbG9kYXNoR2V0KHZhbHVlLCBkb3RQYXRoLnNsaWNlKHJvb3RLZXkubGVuZ3RoICsgMSkpO1xuICB9LFxuICAkZ2V0QXJnczogKHQpID0+IHQuZ2V0QXJncy5iaW5kKHQpLFxuICAkZ2V0RW52OiAodCkgPT4gdC5nZXRFbnYuYmluZCh0KSxcbiAgJGRlYnVnOiAodCkgPT4gdC5hZGREZWJ1Z0luZm8uYmluZCh0KSxcbiAgJGxvZzogKHQpID0+IHQuYWRkRGVidWdNZXNzYWdlLmJpbmQodCksXG4gICRlcnJvcjogKHQpID0+IHQuYWRkRXJyb3JJbmZvLmJpbmQodCksXG4gICRtZXRyaWM6ICh0KSA9PiB0LmFkZE1ldHJpYy5iaW5kKHQpLFxuICAkZXZhbDogKHQpID0+IHQuYWRkRXZhbC5iaW5kKHQpLFxuICAkYXR0YWNoUmVjb3JkZXI6ICh0KSA9PiB0LmF0dGFjaFJlY29yZGVyLmJpbmQodCksXG4gICRkZXRhY2hSZWNvcmRlcjogKHQpID0+IHQuZGV0YWNoUmVjb3JkZXIuYmluZCh0KSxcbiAgJGdldFJlY29yZGVyczogKHQpID0+IHQuZ2V0UmVjb3JkZXJzLmJpbmQodCksXG4gICRiYXRjaEFycmF5OiAodCkgPT4gKGtleTogc3RyaW5nLCBmbjogKGFycjogdW5rbm93bltdKSA9PiB2b2lkKSA9PiB7XG4gICAgLy8gT25lIGdldFZhbHVlIOKAlCBmaXJlcyBvblJlYWQgb25jZVxuICAgIGNvbnN0IGN1cnJlbnQgPSB0LmdldFZhbHVlKGtleSk7XG4gICAgLy8gQ2xvbmUgb25jZSAob3Igc3RhcnQgZW1wdHkgaWYgbWlzc2luZy9ub24tYXJyYXkpXG4gICAgY29uc3QgY2xvbmU6IHVua25vd25bXSA9IEFycmF5LmlzQXJyYXkoY3VycmVudCkgPyBbLi4uY3VycmVudF0gOiBbXTtcbiAgICAvLyBVc2VyIGFwcGxpZXMgYWxsIG11dGF0aW9ucyB0byB0aGUgcGxhaW4gY2xvbmUg4oCUIG5vIFByb3h5LCBubyBwZXItbXV0YXRpb24gY29tbWl0XG4gICAgZm4oY2xvbmUpO1xuICAgIC8vIE9uZSBzZXRWYWx1ZSDigJQgZmlyZXMgb25Xcml0ZSBvbmNlIHdpdGggdGhlIGZpbmFsIGFycmF5XG4gICAgdC5zZXRWYWx1ZShrZXksIGNsb25lKTtcbiAgfSxcbiAgJGJyZWFrOiAoX3QsIG9wdHMpID0+IChyZWFzb24/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIW9wdHMuYnJlYWtGbikgdGhyb3cgbmV3IEVycm9yKCckYnJlYWsoKSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgc3RhZ2UgZXhlY3V0aW9uJyk7XG4gICAgb3B0cy5icmVha0ZuKHJlYXNvbik7XG4gIH0sXG4gIC8vIE9ic2VydmFiaWxpdHkg4oCUIEVtaXQgY2hhbm5lbCAoUGhhc2UgMykuIFJvdXRlcyB0byBTY29wZUZhY2FkZS5lbWl0RXZlbnRcbiAgLy8gd2hpY2ggaGFuZGxlcyBmYXN0LXBhdGgsIGVucmljaG1lbnQsIHJlZGFjdGlvbiwgYW5kIGVycm9yIGlzb2xhdGlvbi5cbiAgJGVtaXQ6ICh0KSA9PiB0LmVtaXRFdmVudC5iaW5kKHQpLFxuICAkdG9SYXc6ICh0KSA9PiAoKSA9PiB0LFxufTtcblxuLy8gLS0gR3VhcmQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhlc2UgbXVzdCBiZSBoYW5kbGVkIHRvIHByZXZlbnQgUHJveHkgZnJvbSBiZWluZyB0cmVhdGVkIGFzIGEgUHJvbWlzZSxcbi8vIGJyZWFraW5nIGluc3RhbmNlb2YgY2hlY2tzLCBvciBjb25mdXNpbmcgdGVzdCBtYXRjaGVycy5cblxuY29uc3QgR1VBUkRfUFJPUFM6IFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+ID0ge1xuICB0aGVuOiB1bmRlZmluZWQsIC8vIHByZXZlbnQgUHJvbWlzZSBkZXRlY3Rpb25cbiAgYXN5bW1ldHJpY01hdGNoOiB1bmRlZmluZWQsIC8vIHByZXZlbnQgdml0ZXN0L2plc3QgbWF0Y2hlciBjb25mdXNpb25cbiAgY29uc3RydWN0b3I6IE9iamVjdCwgLy8gc2FmZSBwcm90b3R5cGVcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106ICdUeXBlZFNjb3BlJyxcbn07XG5cbi8vIC0tIE11dGFibGUgc3RhdGUgcGVyIHByb3h5IGluc3RhbmNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIFJlYWN0aXZlU3RhdGUge1xuICBicmVha0ZuPzogKHJlYXNvbj86IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhY2hlOiB0b3AtbGV2ZWwga2V5IC0+IHsgcmF3IG9iamVjdCByZWYsIGNoaWxkIHByb3h5IH0gKi9cbiAgY2hpbGRDYWNoZTogTWFwPHN0cmluZywgeyByZWY6IG9iamVjdDsgcHJveHk6IG9iamVjdCB9Pjtcbn1cblxuLy8gLS0gTmVzdGVkIGNoaWxkIHByb3h5IChmb3IgZGVlcCB3cml0ZSBpbnRlcmNlcHRpb24pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy9cbi8vIEN5Y2xlIHNhZmV0eTogYW4gaW1tdXRhYmxlIFNldDxvYmplY3Q+IG9mIGFuY2VzdG9yIG9iamVjdHMgaXMgcGFzc2VkIGRvd25cbi8vIGVhY2ggYWNjZXNzIGNoYWluLiBFYWNoIGJyYW5jaCBnZXRzIGl0cyBvd24gY29weSAobmV3IFNldChwYXJlbnQpKSBzb1xuLy8gc2NvcGUueC5mcmllbmQgYW5kIHNjb3BlLnguY293b3JrZXIgZG9uJ3QgcG9sbHV0ZSBlYWNoIG90aGVyJ3MgdHJhY2tpbmcuXG4vLyBXaGVuIGEgY2hpbGQgdmFsdWUgaXMgYWxyZWFkeSBpbiB0aGUgYW5jZXN0b3Igc2V0LCB3ZSd2ZSBoaXQgYSBjeWNsZS5cbi8vIEF0IHRoZSBjeWNsZSBicmVhazogcmV0dXJuIGEgdGVybWluYWwgcHJveHkgdGhhdCB0cmFja3Mgd3JpdGVzIChzZXQgdHJhcFxuLy8gc3RpbGwgYnVpbGRzIHBhdGggKyBjYWxscyB1cGRhdGVWYWx1ZSkgYnV0IGRvZXNuJ3QgcmVjdXJzZSByZWFkcyBmdXJ0aGVyLlxuXG5mdW5jdGlvbiBjcmVhdGVUZXJtaW5hbFByb3h5KFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICByb290S2V5OiBzdHJpbmcsXG4gIHNlZ21lbnRzOiBzdHJpbmdbXSxcbiAgdGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCxcbiAgc3RhdGU6IFJlYWN0aXZlU3RhdGUsXG4gIHZpc2l0ZWQ6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIHZpc2l0ZWQuYWRkKG9iaik7XG5cbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQocmF3LCBwcm9wKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzeW1ib2wnKSByZXR1cm4gKHJhdyBhcyBhbnkpW3Byb3BdO1xuICAgICAgaWYgKHByb3AgPT09ICd0aGVuJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmIChwcm9wID09PSAnYXN5bW1ldHJpY01hdGNoJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmIChwcm9wID09PSAnY29uc3RydWN0b3InKSByZXR1cm4gT2JqZWN0O1xuICAgICAgaWYgKHByb3AgPT09ICd0b0pTT04nKVxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIC8vIFN0cmlwIG9iamVjdC10eXBlZCB2YWx1ZXMgdG8gcHJldmVudCBjaXJjdWxhciBKU09OIGVycm9yc1xuICAgICAgICAgIGNvbnN0IHNhZmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHJhdykpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSAocmF3IGFzIGFueSlba107XG4gICAgICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB0eXBlb2YgdiAhPT0gJ29iamVjdCcpIHNhZmVba10gPSB2O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2FmZTtcbiAgICAgICAgfTtcblxuICAgICAgY29uc3QgdmFsdWUgPSAocmF3IGFzIGFueSlbcHJvcF07XG5cbiAgICAgIC8vIENvbnRpbnVlIHRyYWNraW5nIHdyaXRlcyBhdCBkZWVwZXIgbGV2ZWxzIHZpYSBjaGFpbmVkIHRlcm1pbmFsIHByb3hpZXMuXG4gICAgICAvLyBVc2UgdmlzaXRlZCBzZXQgdG8gcHJldmVudCByZS1lbnRlcmluZyB0aGUgc2FtZSBvYmplY3QgKGN5Y2xlIGluIHRlcm1pbmFsIGNoYWluKS5cbiAgICAgIGlmIChzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgIXZpc2l0ZWQuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVRlcm1pbmFsUHJveHkoXG4gICAgICAgICAgdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgcm9vdEtleSxcbiAgICAgICAgICBbLi4uc2VnbWVudHMsIHByb3AgYXMgc3RyaW5nXSxcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgdmlzaXRlZCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHJhdywgcHJvcCwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgICAgY29uc3QgY2hpbGRTZWdtZW50cyA9IFsuLi5zZWdtZW50cywgcHJvcF07XG4gICAgICBjb25zdCBwYXRjaCA9IGJ1aWxkTmVzdGVkUGF0Y2goY2hpbGRTZWdtZW50cywgdW53cmFwUHJveHkodmFsdWUpKTtcbiAgICAgIHRhcmdldC51cGRhdGVWYWx1ZShyb290S2V5LCBwYXRjaCk7XG4gICAgICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShyb290S2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXN0ZWRQcm94eShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcm9vdEtleTogc3RyaW5nLFxuICBzZWdtZW50czogc3RyaW5nW10sXG4gIHRhcmdldDogUmVhY3RpdmVUYXJnZXQsXG4gIHJlYWRTaWxlbnQ6IChrZXk/OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLFxuICBhbmNlc3RvcnM6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIHJldHVybiBuZXcgUHJveHkob2JqLCB7XG4gICAgZ2V0KHJhdywgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykgcmV0dXJuIChyYXcgYXMgYW55KVtwcm9wXTtcblxuICAgICAgLy8gR3VhcmQgcHJvcGVydGllc1xuICAgICAgaWYgKHByb3AgPT09ICd0aGVuJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmIChwcm9wID09PSAnYXN5bW1ldHJpY01hdGNoJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmIChwcm9wID09PSAnY29uc3RydWN0b3InKSByZXR1cm4gT2JqZWN0O1xuICAgICAgaWYgKHByb3AgPT09ICd0b0pTT04nKVxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIC8vIFN0cmlwIG9iamVjdC10eXBlZCB2YWx1ZXMgdG8gcHJldmVudCBjaXJjdWxhciBKU09OIGVycm9yc1xuICAgICAgICAgIGNvbnN0IHNhZmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHJhdykpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSAocmF3IGFzIGFueSlba107XG4gICAgICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB0eXBlb2YgdiAhPT0gJ29iamVjdCcpIHNhZmVba10gPSB2O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2FmZTtcbiAgICAgICAgfTtcblxuICAgICAgY29uc3QgdmFsdWUgPSAocmF3IGFzIGFueSlbcHJvcF07XG5cbiAgICAgIC8vIFByaW1pdGl2ZSBvciBub24td3JhcHBhYmxlIC0tIHJldHVybiBhcy1pcyAobm8gZGVlcGVyIHByb3h5KVxuICAgICAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuXG4gICAgICBjb25zdCBjaGlsZFNlZ21lbnRzID0gWy4uLnNlZ21lbnRzLCBwcm9wIGFzIHN0cmluZ107XG5cbiAgICAgIC8vIEFycmF5IC0tIHJldHVybiBhcnJheSBwcm94eVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBcnJheVByb3h5KFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSByZWFkU2lsZW50KHJvb3RLZXkpIGFzIGFueTtcbiAgICAgICAgICAgIHJldHVybiBsb2Rhc2hHZXQoY3VycmVudCwgY2hpbGRTZWdtZW50cy5qb2luKCcuJykpID8/IFtdO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKG5ld0FycikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0Y2ggPSBidWlsZE5lc3RlZFBhdGNoKGNoaWxkU2VnbWVudHMsIHVud3JhcFByb3h5KG5ld0FycikpO1xuICAgICAgICAgICAgdGFyZ2V0LnVwZGF0ZVZhbHVlKHJvb3RLZXksIHBhdGNoKTtcbiAgICAgICAgICAgIHN0YXRlLmNoaWxkQ2FjaGUuZGVsZXRlKHJvb3RLZXkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEN5Y2xlIGRldGVjdGlvbjogaWYgdGhpcyB2YWx1ZSBpcyBhbiBhbmNlc3RvciBpbiB0aGUgY3VycmVudCBhY2Nlc3NcbiAgICAgIC8vIGNoYWluLCByZXR1cm4gYSB0ZXJtaW5hbCBwcm94eSAodHJhY2tzIHdyaXRlcywgc3RvcHMgcmVjdXJzaW5nIHJlYWRzKS5cbiAgICAgIGlmIChhbmNlc3RvcnMuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVRlcm1pbmFsUHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJvb3RLZXksIGNoaWxkU2VnbWVudHMsIHRhcmdldCwgc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCBuZXcgYW5jZXN0b3Igc2V0IGZvciB0aGlzIGJyYW5jaCAoaW1tdXRhYmxlIC0tIG5vIGNyb3NzLWJyYW5jaCBwb2xsdXRpb24pXG4gICAgICBjb25zdCBjaGlsZEFuY2VzdG9ycyA9IG5ldyBTZXQoYW5jZXN0b3JzKTtcbiAgICAgIGNoaWxkQW5jZXN0b3JzLmFkZCh2YWx1ZSBhcyBvYmplY3QpO1xuXG4gICAgICByZXR1cm4gY3JlYXRlTmVzdGVkUHJveHkoXG4gICAgICAgIHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICByb290S2V5LFxuICAgICAgICBjaGlsZFNlZ21lbnRzLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHJlYWRTaWxlbnQsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjaGlsZEFuY2VzdG9ycyxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHNldChyYXcsIHByb3AsIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgY29uc3QgY2hpbGRTZWdtZW50cyA9IFsuLi5zZWdtZW50cywgcHJvcF07XG4gICAgICBjb25zdCBwYXRjaCA9IGJ1aWxkTmVzdGVkUGF0Y2goY2hpbGRTZWdtZW50cywgdW53cmFwUHJveHkodmFsdWUpKTtcbiAgICAgIHRhcmdldC51cGRhdGVWYWx1ZShyb290S2V5LCBwYXRjaCk7XG4gICAgICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShyb290S2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vLyAtLSBUb3AtbGV2ZWwgcHJveHkgKHRoZSBtYWluIFR5cGVkU2NvcGUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ3JlYXRlcyBhIFR5cGVkU2NvcGU8VD4gcHJveHkgd3JhcHBpbmcgYSBSZWFjdGl2ZVRhcmdldC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHVuZGVybHlpbmcgc2NvcGUgKFNjb3BlRmFjYWRlIG9yIGFueSBSZWFjdGl2ZVRhcmdldClcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiAoYnJlYWtQaXBlbGluZSBpbmplY3Rpb24pXG4gKiBAcmV0dXJucyBBIFByb3h5IHdpdGggdHlwZWQgcHJvcGVydHkgYWNjZXNzIGFuZCAkLXByZWZpeGVkIG1ldGhvZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR5cGVkU2NvcGU8VCBleHRlbmRzIG9iamVjdD4odGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwgb3B0aW9ucz86IFJlYWN0aXZlT3B0aW9ucyk6IFR5cGVkU2NvcGU8VD4ge1xuICBjb25zdCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSA9IHtcbiAgICBicmVha0ZuOiBvcHRpb25zPy5icmVha1BpcGVsaW5lLFxuICAgIGNoaWxkQ2FjaGU6IG5ldyBNYXAoKSxcbiAgfTtcblxuICAvLyBCaW5kIHNpbGVudC1yZWFkIG1ldGhvZCBvbmNlIOKAlCBhdm9pZHMgcGVyLWNhbGwgPz8gKyAuY2FsbCgpIGluIGFycmF5IHByb3h5IGdldEN1cnJlbnQgY2xvc3VyZXNcbiAgY29uc3QgcmVhZFNpbGVudCA9ICh0YXJnZXQuZ2V0VmFsdWVTaWxlbnQgPz8gdGFyZ2V0LmdldFZhbHVlKS5iaW5kKHRhcmdldCk7XG5cbiAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0IGFzIHVua25vd24gYXMgVHlwZWRTY29wZTxUPiwge1xuICAgIGdldChfcHJveHlUYXJnZXQsIHByb3AsIF9yZWNlaXZlcikge1xuICAgICAgLy8gMS4gSW50ZXJuYWwgc3ltYm9scyAoY2hlY2sgYmVmb3JlIG90aGVyIHN5bWJvbHMpXG4gICAgICBpZiAocHJvcCA9PT0gSVNfVFlQRURfU0NPUEUpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHByb3AgPT09IEJSRUFLX1NFVFRFUikge1xuICAgICAgICByZXR1cm4gKGZuOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgICAgc3RhdGUuYnJlYWtGbiA9IGZuO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBTeW1ib2wgcHJvcGVydGllcyAoZ3VhcmQgKyBpbnNwZWN0aW9uKVxuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdVQVJEX1BST1BTLCBwcm9wKSkgcmV0dXJuIEdVQVJEX1BST1BTW3Byb3BdO1xuICAgICAgICAvLyBOb2RlLmpzIHV0aWwuaW5zcGVjdCDigJQgc2hvdyBzdGF0ZSBzbmFwc2hvdCwgbm90IHByb3h5IGludGVybmFsc1xuICAgICAgICBpZiAocHJvcCA9PT0gU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSkge1xuICAgICAgICAgIHJldHVybiAoKSA9PiB0YXJnZXQuZ2V0VmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBTdHJpbmcgZ3VhcmQgcHJvcGVydGllc1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHVUFSRF9QUk9QUywgcHJvcCkpIHJldHVybiBHVUFSRF9QUk9QU1twcm9wXTtcblxuICAgICAgLy8gNC4gJC1wcmVmaXhlZCBtZXRob2RzIC0tIHJvdXRlIHRvIGZhY2FkZVxuICAgICAgaWYgKFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkpIHtcbiAgICAgICAgY29uc3Qgcm91dGVyID0gTUVUSE9EX1JPVVRFU1twcm9wXTtcbiAgICAgICAgaWYgKHJvdXRlcikgcmV0dXJuIHJvdXRlcih0YXJnZXQsIHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gNS4gRXhlY3V0b3ItaW50ZXJuYWwgbWV0aG9kIHBhc3MtdGhyb3VnaCAoZXhwbGljaXQgYWxsb3dsaXN0KVxuICAgICAgLy8gICAgRmxvd0NoYXJ0RXhlY3V0b3Igd3JhcHBpbmcgY2FsbHMgYXR0YWNoUmVjb3JkZXIsIG5vdGlmeVN0YWdlU3RhcnQsIGV0Yy5cbiAgICAgIC8vICAgIGRpcmVjdGx5IG9uIHRoZSBzY29wZS4gRm9yd2FyZCBvbmx5IGFsbG93bGlzdGVkIG1ldGhvZHMuXG4gICAgICBpZiAoRVhFQ1VUT1JfSU5URVJOQUxfTUVUSE9EUy5oYXMocHJvcCkgJiYgdHlwZW9mICh0YXJnZXQgYXMgYW55KVtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gKHRhcmdldCBhcyBhbnkpW3Byb3BdLmJpbmQodGFyZ2V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gU3RhdGUga2V5IC0tIGNhbGwgZ2V0VmFsdWUgKGZpcmVzIG9uUmVhZCBPTkNFKVxuICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXQuZ2V0VmFsdWUocHJvcCk7XG5cbiAgICAgIC8vIFByaW1pdGl2ZSBvciBudWxsL3VuZGVmaW5lZCAtLSByZXR1cm4gYXMtaXNcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBOb24td3JhcHBhYmxlIChEYXRlLCBNYXAsIGNsYXNzIGluc3RhbmNlLCBldGMuKSAtLSByZXR1cm4gdW53cmFwcGVkXG4gICAgICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG5cbiAgICAgIC8vIEFycmF5IC0tIHJldHVybiBhcnJheSBwcm94eSAoY2FjaGVkIGZvciBpZGVudGl0eSBlcXVhbGl0eSlcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSBzdGF0ZS5jaGlsZENhY2hlLmdldChwcm9wKTtcbiAgICAgICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQucmVmID09PSB2YWx1ZSkgcmV0dXJuIGNhY2hlZC5wcm94eTtcblxuICAgICAgICBjb25zdCBhcnJQcm94eSA9IGNyZWF0ZUFycmF5UHJveHkoXG4gICAgICAgICAgKCkgPT4gKHJlYWRTaWxlbnQocHJvcCkgYXMgdW5rbm93bltdKSA/PyBbXSxcbiAgICAgICAgICAobmV3QXJyKSA9PiB7XG4gICAgICAgICAgICB0YXJnZXQuc2V0VmFsdWUocHJvcCwgdW53cmFwUHJveHkobmV3QXJyKSk7XG4gICAgICAgICAgICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShwcm9wKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICBzdGF0ZS5jaGlsZENhY2hlLnNldChwcm9wLCB7IHJlZjogdmFsdWUgYXMgb2JqZWN0LCBwcm94eTogYXJyUHJveHkgYXMgdW5rbm93biBhcyBvYmplY3QgfSk7XG4gICAgICAgIHJldHVybiBhcnJQcm94eTtcbiAgICAgIH1cblxuICAgICAgLy8gUGxhaW4gb2JqZWN0IC0tIHJldHVybiBuZXN0ZWQgcHJveHkgKGNhY2hlZCBmb3IgaWRlbnRpdHkgZXF1YWxpdHkpXG4gICAgICBjb25zdCBjYWNoZWQgPSBzdGF0ZS5jaGlsZENhY2hlLmdldChwcm9wKTtcbiAgICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLnJlZiA9PT0gdmFsdWUpIHJldHVybiBjYWNoZWQucHJveHk7XG5cbiAgICAgIGNvbnN0IG5lc3RlZCA9IGNyZWF0ZU5lc3RlZFByb3h5KFxuICAgICAgICB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgcHJvcCxcbiAgICAgICAgW10sXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgcmVhZFNpbGVudCxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIG5ldyBTZXQ8b2JqZWN0PihbdmFsdWUgYXMgb2JqZWN0XSksIC8vIHNlZWQgYW5jZXN0b3Igc2V0IHdpdGggcm9vdCBvYmplY3RcbiAgICAgICk7XG4gICAgICBzdGF0ZS5jaGlsZENhY2hlLnNldChwcm9wLCB7IHJlZjogdmFsdWUgYXMgb2JqZWN0LCBwcm94eTogbmVzdGVkIGFzIG9iamVjdCB9KTtcbiAgICAgIHJldHVybiBuZXN0ZWQ7XG4gICAgfSxcblxuICAgIHNldChfcHJveHlUYXJnZXQsIHByb3AsIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IHNldCBzdGF0ZSBrZXkgXCIke3Byb3B9XCIgLS0gaXQgY29uZmxpY3RzIHdpdGggYSByZXNlcnZlZCBUeXBlZFNjb3BlIG1ldGhvZC4gUmVuYW1lIHRoZSBzdGF0ZSBrZXkgdG8gYXZvaWQgJC1wcmVmaXhlZCBuYW1lcy5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gVW53cmFwIFByb3h5IHZhbHVlcyBiZWZvcmUgc3RvcmluZyDigJQgc3RydWN0dXJlZENsb25lIGluIFRyYW5zYWN0aW9uQnVmZmVyXG4gICAgICAvLyBjYW5ub3QgY2xvbmUgUHJveHkgb2JqZWN0cy4gVGhpcyBoYW5kbGVzOiBzY29wZS5iYWNrdXAgPSBzY29wZS5jdXN0b21lclxuICAgICAgY29uc3QgdW53cmFwcGVkID0gdW53cmFwUHJveHkodmFsdWUpO1xuICAgICAgdGFyZ2V0LnNldFZhbHVlKHByb3AsIHVud3JhcHBlZCk7XG4gICAgICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShwcm9wKTsgLy8gaW52YWxpZGF0ZSBjYWNoZVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIGRlbGV0ZVByb3BlcnR5KF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG4gICAgICB0YXJnZXQuZGVsZXRlVmFsdWUocHJvcCk7XG4gICAgICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShwcm9wKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBoYXMoX3Byb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzeW1ib2wnKSByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdVQVJEX1BST1BTLCBwcm9wKTtcbiAgICAgIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSByZXR1cm4gdHJ1ZTtcbiAgICAgIC8vIFVzZSBub24tdHJhY2tpbmcgaGFzS2V5IGlmIGF2YWlsYWJsZSwgZWxzZSBmYWxsYmFjayB0byBnZXRTdGF0ZUtleXNcbiAgICAgIGlmICh0YXJnZXQuaGFzS2V5KSByZXR1cm4gdGFyZ2V0Lmhhc0tleShwcm9wKTtcbiAgICAgIGlmICh0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpLmluY2x1ZGVzKHByb3ApO1xuICAgICAgLy8gRmFsbGJhY2s6IGdldFZhbHVlIGZpcmVzIG9uUmVhZCAoYWNjZXB0YWJsZSBkZWdyYWRhdGlvbilcbiAgICAgIHJldHVybiB0YXJnZXQuZ2V0VmFsdWUocHJvcCkgIT09IHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgb3duS2V5cygpIHtcbiAgICAgIC8vIFVzZSBub24tdHJhY2tpbmcgZ2V0U3RhdGVLZXlzIGlmIGF2YWlsYWJsZSwgZWxzZSBmYWxsYmFja1xuICAgICAgaWYgKHRhcmdldC5nZXRTdGF0ZUtleXMpIHJldHVybiB0YXJnZXQuZ2V0U3RhdGVLZXlzKCk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IHRhcmdldC5nZXRWYWx1ZSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKCFzbmFwc2hvdCB8fCB0eXBlb2Ygc25hcHNob3QgIT09ICdvYmplY3QnKSByZXR1cm4gW107XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoc25hcHNob3QpO1xuICAgIH0sXG5cbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX3Byb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkpIHJldHVybiB1bmRlZmluZWQ7IC8vICQtbWV0aG9kcyBhcmUgbm9uLWVudW1lcmFibGVcbiAgICAgIC8vIENoZWNrIGV4aXN0ZW5jZSB3aXRob3V0IGZpcmluZyBvblJlYWQg4oCUIG5vIGdldFZhbHVlIGNhbGwgaGVyZVxuICAgICAgY29uc3QgZXhpc3RzID0gdGFyZ2V0Lmhhc0tleVxuICAgICAgICA/IHRhcmdldC5oYXNLZXkocHJvcClcbiAgICAgICAgOiB0YXJnZXQuZ2V0U3RhdGVLZXlzXG4gICAgICAgID8gdGFyZ2V0LmdldFN0YXRlS2V5cygpLmluY2x1ZGVzKHByb3ApXG4gICAgICAgIDogdGFyZ2V0LmdldFZhbHVlKHByb3ApICE9PSB1bmRlZmluZWQ7IC8vIGZhbGxiYWNrIG9ubHlcbiAgICAgIGlmICghZXhpc3RzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgLy8gUmV0dXJuIGEgbWluaW1hbCBkZXNjcmlwdG9yIOKAlCBhY3R1YWwgdmFsdWUgaXMgZmV0Y2hlZCB2aWEgdGhlIGdldCB0cmFwXG4gICAgICByZXR1cm4geyBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH07XG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3h5O1xufVxuIl19
|
|
350
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7OztBQUVILHFEQUE4RDtBQUM5RCxpREFBcUQ7QUFDckQsbURBQW1EO0FBQ25ELHFEQUFvRDtBQUVwRCx5Q0FBeUc7QUFFekcsK0VBQStFO0FBQy9FLG1FQUFtRTtBQUNuRSwwRUFBMEU7QUFDMUUsMkNBQTJDO0FBRTNDLFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUMsNERBQTREO0lBQzVELElBQUksQ0FBQztRQUNILHVGQUF1RjtRQUN2RixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCw2REFBNkQ7UUFDN0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQU1ELE1BQU0sYUFBYSxHQUFpQztJQUNsRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyQyxPQUFPLEVBQUUsQ0FB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QUUsQ0FBQztRQUNsRSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBbEpELDRDQWtKQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZSAtLSBDb3JlIFByb3h5IGZhY3RvcnkgZm9yIFR5cGVkU2NvcGU8VD4uXG4gKlxuICogV3JhcHMgYSBSZWFjdGl2ZVRhcmdldCAoU2NvcGVGYWNhZGUpIGluIGEgUHJveHkgdGhhdCBwcm92aWRlczpcbiAqIC0gVHlwZWQgcHJvcGVydHkgYWNjZXNzOiBzY29wZS5jcmVkaXRUaWVyIChyZWFkKSwgc2NvcGUuY3JlZGl0VGllciA9ICdBJyAod3JpdGUpXG4gKiAtIERlZXAgd3JpdGUgaW50ZXJjZXB0aW9uOiBzY29wZS5jdXN0b21lci5hZGRyZXNzLnppcCA9ICc5MDIxMCdcbiAqIC0gQXJyYXkgbXV0YXRpb24gaW50ZXJjZXB0aW9uOiBzY29wZS5pdGVtcy5wdXNoKCduZXcnKVxuICogLSAkLXByZWZpeGVkIGVzY2FwZSBoYXRjaGVzOiAkZ2V0VmFsdWUsICRzZXRWYWx1ZSwgJHJlYWQsICRnZXRBcmdzLCBldGMuXG4gKlxuICogUmVhZCBzZW1hbnRpY3M6IHRvcC1sZXZlbCBnZXQgY2FsbHMgZ2V0VmFsdWUoKSAoZmlyZXMgb25SZWFkIE9OQ0UpLlxuICogICBOZXN0ZWQgZ2V0IHRyYXBzIG5hdmlnYXRlIGluLW1lbW9yeSAtLSBubyBhZGRpdGlvbmFsIG9uUmVhZC5cbiAqXG4gKiBXcml0ZSBzZW1hbnRpY3M6IHRvcC1sZXZlbCBzZXQgY2FsbHMgc2V0VmFsdWUoKS4gTmVzdGVkIHNldCBjYWxsc1xuICogICB1cGRhdGVWYWx1ZSgpIHdpdGggYSBwYXJ0aWFsIG9iamVjdCBidWlsdCBmcm9tIHRoZSBhY2N1bXVsYXRlZCBwYXRoLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBsb2Rhc2hHZXQgfSBmcm9tICcuLi9tZW1vcnkvcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyBzaG91bGRXcmFwV2l0aFByb3h5IH0gZnJvbSAnLi9hbGxvd2xpc3QuanMnO1xuaW1wb3J0IHsgY3JlYXRlQXJyYXlQcm94eSB9IGZyb20gJy4vYXJyYXlUcmFwcy5qcyc7XG5pbXBvcnQgeyBidWlsZE5lc3RlZFBhdGNoIH0gZnJvbSAnLi9wYXRoQnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0aXZlT3B0aW9ucywgUmVhY3RpdmVUYXJnZXQsIFR5cGVkU2NvcGUgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IEJSRUFLX1NFVFRFUiwgRVhFQ1VUT1JfSU5URVJOQUxfTUVUSE9EUywgSVNfVFlQRURfU0NPUEUsIFNDT1BFX01FVEhPRF9OQU1FUyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyAtLSBQcm94eSB1bndyYXBwaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBzdHJ1Y3R1cmVkQ2xvbmUgaW4gVHJhbnNhY3Rpb25CdWZmZXIgY2Fubm90IGNsb25lIFByb3h5IG9iamVjdHMuXG4vLyBXaGVuIGEgdXNlciBkb2VzIGBzY29wZS5iYWNrdXAgPSBzY29wZS5jdXN0b21lcmAsIHRoZSB2YWx1ZSBpcyBhIFByb3h5LlxuLy8gVW53cmFwIHRvIGEgcGxhaW4gb2JqZWN0IGJlZm9yZSBzdG9yaW5nLlxuXG5mdW5jdGlvbiB1bndyYXBQcm94eSh2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbHVlO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICAvLyBGYXN0IHBhdGg6IHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyBkb24ndCBuZWVkIHVud3JhcHBpbmdcbiAgdHJ5IHtcbiAgICAvLyBKU09OIHJvdW5kLXRyaXAgc3RyaXBzIFByb3hpZXMuIFNhZmUgYmVjYXVzZSBzdGF0ZSB2YWx1ZXMgbXVzdCBiZSBKU09OLXNlcmlhbGl6YWJsZS5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBOb24tc2VyaWFsaXphYmxlIChmdW5jdGlvbnMsIHN5bWJvbHMsIGV0Yy4pIOKAlCByZXR1cm4gYXMtaXNcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLy8gLS0gJC1tZXRob2Qgcm91dGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIE1ldGhvZFJvdXRlciA9ICh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRzOiBSZWFjdGl2ZVN0YXRlKSA9PiB1bmtub3duO1xuXG5jb25zdCBNRVRIT0RfUk9VVEVTOiBSZWNvcmQ8c3RyaW5nLCBNZXRob2RSb3V0ZXI+ID0ge1xuICAkZ2V0VmFsdWU6ICh0KSA9PiB0LmdldFZhbHVlLmJpbmQodCksXG4gICRzZXRWYWx1ZTogKHQpID0+IHQuc2V0VmFsdWUuYmluZCh0KSxcbiAgJHVwZGF0ZTogKHQpID0+IHQudXBkYXRlVmFsdWUuYmluZCh0KSxcbiAgJGRlbGV0ZTogKHQpID0+IHQuZGVsZXRlVmFsdWUuYmluZCh0KSxcbiAgJHJlYWQ6ICh0KSA9PiAoZG90UGF0aDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm9vdEtleSA9IGRvdFBhdGguc3BsaXQoJy4nKVswXTtcbiAgICBjb25zdCB2YWx1ZSA9IHQuZ2V0VmFsdWUocm9vdEtleSk7XG4gICAgaWYgKCFkb3RQYXRoLmluY2x1ZGVzKCcuJykpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gbG9kYXNoR2V0KHZhbHVlLCBkb3RQYXRoLnNsaWNlKHJvb3RLZXkubGVuZ3RoICsgMSkpO1xuICB9LFxuICAkZ2V0QXJnczogKHQpID0+IHQuZ2V0QXJncy5iaW5kKHQpLFxuICAkZ2V0RW52OiAodCkgPT4gdC5nZXRFbnYuYmluZCh0KSxcbiAgJGRlYnVnOiAodCkgPT4gdC5hZGREZWJ1Z0luZm8uYmluZCh0KSxcbiAgJGxvZzogKHQpID0+IHQuYWRkRGVidWdNZXNzYWdlLmJpbmQodCksXG4gICRlcnJvcjogKHQpID0+IHQuYWRkRXJyb3JJbmZvLmJpbmQodCksXG4gICRtZXRyaWM6ICh0KSA9PiB0LmFkZE1ldHJpYy5iaW5kKHQpLFxuICAkZXZhbDogKHQpID0+IHQuYWRkRXZhbC5iaW5kKHQpLFxuICAkYXR0YWNoUmVjb3JkZXI6ICh0KSA9PiB0LmF0dGFjaFJlY29yZGVyLmJpbmQodCksXG4gICRkZXRhY2hSZWNvcmRlcjogKHQpID0+IHQuZGV0YWNoUmVjb3JkZXIuYmluZCh0KSxcbiAgJGdldFJlY29yZGVyczogKHQpID0+IHQuZ2V0UmVjb3JkZXJzLmJpbmQodCksXG4gICRiYXRjaEFycmF5OiAodCkgPT4gKGtleTogc3RyaW5nLCBmbjogKGFycjogdW5rbm93bltdKSA9PiB2b2lkKSA9PiB7XG4gICAgLy8gT25lIGdldFZhbHVlIOKAlCBmaXJlcyBvblJlYWQgb25jZVxuICAgIGNvbnN0IGN1cnJlbnQgPSB0LmdldFZhbHVlKGtleSk7XG4gICAgLy8gQ2xvbmUgb25jZSAob3Igc3RhcnQgZW1wdHkgaWYgbWlzc2luZy9ub24tYXJyYXkpXG4gICAgY29uc3QgY2xvbmU6IHVua25vd25bXSA9IEFycmF5LmlzQXJyYXkoY3VycmVudCkgPyBbLi4uY3VycmVudF0gOiBbXTtcbiAgICAvLyBVc2VyIGFwcGxpZXMgYWxsIG11dGF0aW9ucyB0byB0aGUgcGxhaW4gY2xvbmUg4oCUIG5vIFByb3h5LCBubyBwZXItbXV0YXRpb24gY29tbWl0XG4gICAgZm4oY2xvbmUpO1xuICAgIC8vIE9uZSBzZXRWYWx1ZSDigJQgZmlyZXMgb25Xcml0ZSBvbmNlIHdpdGggdGhlIGZpbmFsIGFycmF5XG4gICAgdC5zZXRWYWx1ZShrZXksIGNsb25lKTtcbiAgfSxcbiAgJGJyZWFrOiAoX3QsIG9wdHMpID0+IChyZWFzb24/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIW9wdHMuYnJlYWtGbikgdGhyb3cgbmV3IEVycm9yKCckYnJlYWsoKSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgc3RhZ2UgZXhlY3V0aW9uJyk7XG4gICAgb3B0cy5icmVha0ZuKHJlYXNvbik7XG4gIH0sXG4gIC8vIE9ic2VydmFiaWxpdHkg4oCUIEVtaXQgY2hhbm5lbCAoUGhhc2UgMykuIFJvdXRlcyB0byBTY29wZUZhY2FkZS5lbWl0RXZlbnRcbiAgLy8gd2hpY2ggaGFuZGxlcyBmYXN0LXBhdGgsIGVucmljaG1lbnQsIHJlZGFjdGlvbiwgYW5kIGVycm9yIGlzb2xhdGlvbi5cbiAgJGVtaXQ6ICh0KSA9PiB0LmVtaXRFdmVudC5iaW5kKHQpLFxuICAvLyBEZXRhY2ggKFQ0KSDigJQgZmlyZS1hbmQtZm9yZ2V0IGNoaWxkIGZsb3djaGFydHMuIERlbGVnYXRlcyB0byBTY29wZUZhY2FkZVxuICAvLyB3aGljaCBtaW50ZWQgcmVmSWRzIGZyb20gcnVudGltZVN0YWdlSWQuXG4gICRkZXRhY2hBbmRKb2luTGF0ZXI6ICh0KSA9PiB0LmRldGFjaEFuZEpvaW5MYXRlci5iaW5kKHQpLFxuICAkZGV0YWNoQW5kRm9yZ2V0OiAodCkgPT4gdC5kZXRhY2hBbmRGb3JnZXQuYmluZCh0KSxcbiAgJHRvUmF3OiAodCkgPT4gKCkgPT4gdCxcbn07XG5cbi8vIC0tIEd1YXJkIHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZXNlIG11c3QgYmUgaGFuZGxlZCB0byBwcmV2ZW50IFByb3h5IGZyb20gYmVpbmcgdHJlYXRlZCBhcyBhIFByb21pc2UsXG4vLyBicmVha2luZyBpbnN0YW5jZW9mIGNoZWNrcywgb3IgY29uZnVzaW5nIHRlc3QgbWF0Y2hlcnMuXG5cbmNvbnN0IEdVQVJEX1BST1BTOiBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPiA9IHtcbiAgdGhlbjogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IFByb21pc2UgZGV0ZWN0aW9uXG4gIGFzeW1tZXRyaWNNYXRjaDogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IHZpdGVzdC9qZXN0IG1hdGNoZXIgY29uZnVzaW9uXG4gIGNvbnN0cnVjdG9yOiBPYmplY3QsIC8vIHNhZmUgcHJvdG90eXBlXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnVHlwZWRTY29wZScsXG59O1xuXG4vLyAtLSBNdXRhYmxlIHN0YXRlIHBlciBwcm94eSBpbnN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBSZWFjdGl2ZVN0YXRlIHtcbiAgYnJlYWtGbj86IChyZWFzb24/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWNoZTogdG9wLWxldmVsIGtleSAtPiB7IHJhdyBvYmplY3QgcmVmLCBjaGlsZCBwcm94eSB9ICovXG4gIGNoaWxkQ2FjaGU6IE1hcDxzdHJpbmcsIHsgcmVmOiBvYmplY3Q7IHByb3h5OiBvYmplY3QgfT47XG59XG5cbi8vIC0tIE5lc3RlZCBjaGlsZCBwcm94eSAoZm9yIGRlZXAgd3JpdGUgaW50ZXJjZXB0aW9uKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBDeWNsZSBzYWZldHk6IGFuIGltbXV0YWJsZSBTZXQ8b2JqZWN0PiBvZiBhbmNlc3RvciBvYmplY3RzIGlzIHBhc3NlZCBkb3duXG4vLyBlYWNoIGFjY2VzcyBjaGFpbi4gRWFjaCBicmFuY2ggZ2V0cyBpdHMgb3duIGNvcHkgKG5ldyBTZXQocGFyZW50KSkgc29cbi8vIHNjb3BlLnguZnJpZW5kIGFuZCBzY29wZS54LmNvd29ya2VyIGRvbid0IHBvbGx1dGUgZWFjaCBvdGhlcidzIHRyYWNraW5nLlxuLy8gV2hlbiBhIGNoaWxkIHZhbHVlIGlzIGFscmVhZHkgaW4gdGhlIGFuY2VzdG9yIHNldCwgd2UndmUgaGl0IGEgY3ljbGUuXG4vLyBBdCB0aGUgY3ljbGUgYnJlYWs6IHJldHVybiBhIHRlcm1pbmFsIHByb3h5IHRoYXQgdHJhY2tzIHdyaXRlcyAoc2V0IHRyYXBcbi8vIHN0aWxsIGJ1aWxkcyBwYXRoICsgY2FsbHMgdXBkYXRlVmFsdWUpIGJ1dCBkb2Vzbid0IHJlY3Vyc2UgcmVhZHMgZnVydGhlci5cblxuZnVuY3Rpb24gY3JlYXRlVGVybWluYWxQcm94eShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcm9vdEtleTogc3RyaW5nLFxuICBzZWdtZW50czogc3RyaW5nW10sXG4gIHRhcmdldDogUmVhY3RpdmVUYXJnZXQsXG4gIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLFxuICB2aXNpdGVkOiBTZXQ8b2JqZWN0PiA9IG5ldyBTZXQoKSxcbik6IHVua25vd24ge1xuICB2aXNpdGVkLmFkZChvYmopO1xuXG4gIHJldHVybiBuZXcgUHJveHkob2JqLCB7XG4gICAgZ2V0KHJhdywgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykgcmV0dXJuIChyYXcgYXMgYW55KVtwcm9wXTtcbiAgICAgIGlmIChwcm9wID09PSAndGhlbicpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJvcCA9PT0gJ2FzeW1tZXRyaWNNYXRjaCcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJvcCA9PT0gJ2NvbnN0cnVjdG9yJykgcmV0dXJuIE9iamVjdDtcbiAgICAgIGlmIChwcm9wID09PSAndG9KU09OJylcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAvLyBTdHJpcCBvYmplY3QtdHlwZWQgdmFsdWVzIHRvIHByZXZlbnQgY2lyY3VsYXIgSlNPTiBlcnJvcnNcbiAgICAgICAgICBjb25zdCBzYWZlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhyYXcpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gKHJhdyBhcyBhbnkpW2tdO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwgfHwgdHlwZW9mIHYgIT09ICdvYmplY3QnKSBzYWZlW2tdID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHNhZmU7XG4gICAgICAgIH07XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gKHJhdyBhcyBhbnkpW3Byb3BdO1xuXG4gICAgICAvLyBDb250aW51ZSB0cmFja2luZyB3cml0ZXMgYXQgZGVlcGVyIGxldmVscyB2aWEgY2hhaW5lZCB0ZXJtaW5hbCBwcm94aWVzLlxuICAgICAgLy8gVXNlIHZpc2l0ZWQgc2V0IHRvIHByZXZlbnQgcmUtZW50ZXJpbmcgdGhlIHNhbWUgb2JqZWN0IChjeWNsZSBpbiB0ZXJtaW5hbCBjaGFpbikuXG4gICAgICBpZiAoc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmICF2aXNpdGVkLmhhcyh2YWx1ZSBhcyBvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KFxuICAgICAgICAgIHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgIHJvb3RLZXksXG4gICAgICAgICAgWy4uLnNlZ21lbnRzLCBwcm9wIGFzIHN0cmluZ10sXG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHZpc2l0ZWQsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIHNldChyYXcsIHByb3AsIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGNvbnN0IGNoaWxkU2VnbWVudHMgPSBbLi4uc2VnbWVudHMsIHByb3BdO1xuICAgICAgY29uc3QgcGF0Y2ggPSBidWlsZE5lc3RlZFBhdGNoKGNoaWxkU2VnbWVudHMsIHVud3JhcFByb3h5KHZhbHVlKSk7XG4gICAgICB0YXJnZXQudXBkYXRlVmFsdWUocm9vdEtleSwgcGF0Y2gpO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocm9vdEtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmVzdGVkUHJveHkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHJvb3RLZXk6IHN0cmluZyxcbiAgc2VnbWVudHM6IHN0cmluZ1tdLFxuICB0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5Pzogc3RyaW5nKSA9PiB1bmtub3duLFxuICBzdGF0ZTogUmVhY3RpdmVTdGF0ZSxcbiAgYW5jZXN0b3JzOiBTZXQ8b2JqZWN0PiA9IG5ldyBTZXQoKSxcbik6IHVua25vd24ge1xuICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xuICAgIGdldChyYXcsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHJldHVybiAocmF3IGFzIGFueSlbcHJvcF07XG5cbiAgICAgIC8vIEd1YXJkIHByb3BlcnRpZXNcbiAgICAgIGlmIChwcm9wID09PSAndGhlbicpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJvcCA9PT0gJ2FzeW1tZXRyaWNNYXRjaCcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJvcCA9PT0gJ2NvbnN0cnVjdG9yJykgcmV0dXJuIE9iamVjdDtcbiAgICAgIGlmIChwcm9wID09PSAndG9KU09OJylcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAvLyBTdHJpcCBvYmplY3QtdHlwZWQgdmFsdWVzIHRvIHByZXZlbnQgY2lyY3VsYXIgSlNPTiBlcnJvcnNcbiAgICAgICAgICBjb25zdCBzYWZlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhyYXcpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gKHJhdyBhcyBhbnkpW2tdO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwgfHwgdHlwZW9mIHYgIT09ICdvYmplY3QnKSBzYWZlW2tdID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHNhZmU7XG4gICAgICAgIH07XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gKHJhdyBhcyBhbnkpW3Byb3BdO1xuXG4gICAgICAvLyBQcmltaXRpdmUgb3Igbm9uLXdyYXBwYWJsZSAtLSByZXR1cm4gYXMtaXMgKG5vIGRlZXBlciBwcm94eSlcbiAgICAgIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcblxuICAgICAgY29uc3QgY2hpbGRTZWdtZW50cyA9IFsuLi5zZWdtZW50cywgcHJvcCBhcyBzdHJpbmddO1xuXG4gICAgICAvLyBBcnJheSAtLSByZXR1cm4gYXJyYXkgcHJveHlcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlQcm94eShcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gcmVhZFNpbGVudChyb290S2V5KSBhcyBhbnk7XG4gICAgICAgICAgICByZXR1cm4gbG9kYXNoR2V0KGN1cnJlbnQsIGNoaWxkU2VnbWVudHMuam9pbignLicpKSA/PyBbXTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChuZXdBcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGNoID0gYnVpbGROZXN0ZWRQYXRjaChjaGlsZFNlZ21lbnRzLCB1bndyYXBQcm94eShuZXdBcnIpKTtcbiAgICAgICAgICAgIHRhcmdldC51cGRhdGVWYWx1ZShyb290S2V5LCBwYXRjaCk7XG4gICAgICAgICAgICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShyb290S2V5KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBDeWNsZSBkZXRlY3Rpb246IGlmIHRoaXMgdmFsdWUgaXMgYW4gYW5jZXN0b3IgaW4gdGhlIGN1cnJlbnQgYWNjZXNzXG4gICAgICAvLyBjaGFpbiwgcmV0dXJuIGEgdGVybWluYWwgcHJveHkgKHRyYWNrcyB3cml0ZXMsIHN0b3BzIHJlY3Vyc2luZyByZWFkcykuXG4gICAgICBpZiAoYW5jZXN0b3JzLmhhcyh2YWx1ZSBhcyBvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCByb290S2V5LCBjaGlsZFNlZ21lbnRzLCB0YXJnZXQsIHN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgbmV3IGFuY2VzdG9yIHNldCBmb3IgdGhpcyBicmFuY2ggKGltbXV0YWJsZSAtLSBubyBjcm9zcy1icmFuY2ggcG9sbHV0aW9uKVxuICAgICAgY29uc3QgY2hpbGRBbmNlc3RvcnMgPSBuZXcgU2V0KGFuY2VzdG9ycyk7XG4gICAgICBjaGlsZEFuY2VzdG9ycy5hZGQodmFsdWUgYXMgb2JqZWN0KTtcblxuICAgICAgcmV0dXJuIGNyZWF0ZU5lc3RlZFByb3h5KFxuICAgICAgICB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgcm9vdEtleSxcbiAgICAgICAgY2hpbGRTZWdtZW50cyxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICByZWFkU2lsZW50LFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY2hpbGRBbmNlc3RvcnMsXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBzZXQocmF3LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG5cbiAgICAgIGNvbnN0IGNoaWxkU2VnbWVudHMgPSBbLi4uc2VnbWVudHMsIHByb3BdO1xuICAgICAgY29uc3QgcGF0Y2ggPSBidWlsZE5lc3RlZFBhdGNoKGNoaWxkU2VnbWVudHMsIHVud3JhcFByb3h5KHZhbHVlKSk7XG4gICAgICB0YXJnZXQudXBkYXRlVmFsdWUocm9vdEtleSwgcGF0Y2gpO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocm9vdEtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9KTtcbn1cblxuLy8gLS0gVG9wLWxldmVsIHByb3h5ICh0aGUgbWFpbiBUeXBlZFNjb3BlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENyZWF0ZXMgYSBUeXBlZFNjb3BlPFQ+IHByb3h5IHdyYXBwaW5nIGEgUmVhY3RpdmVUYXJnZXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB1bmRlcmx5aW5nIHNjb3BlIChTY29wZUZhY2FkZSBvciBhbnkgUmVhY3RpdmVUYXJnZXQpXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKGJyZWFrUGlwZWxpbmUgaW5qZWN0aW9uKVxuICogQHJldHVybnMgQSBQcm94eSB3aXRoIHR5cGVkIHByb3BlcnR5IGFjY2VzcyBhbmQgJC1wcmVmaXhlZCBtZXRob2RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUeXBlZFNjb3BlPFQgZXh0ZW5kcyBvYmplY3Q+KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIG9wdGlvbnM/OiBSZWFjdGl2ZU9wdGlvbnMpOiBUeXBlZFNjb3BlPFQ+IHtcbiAgY29uc3Qgc3RhdGU6IFJlYWN0aXZlU3RhdGUgPSB7XG4gICAgYnJlYWtGbjogb3B0aW9ucz8uYnJlYWtQaXBlbGluZSxcbiAgICBjaGlsZENhY2hlOiBuZXcgTWFwKCksXG4gIH07XG5cbiAgLy8gQmluZCBzaWxlbnQtcmVhZCBtZXRob2Qgb25jZSDigJQgYXZvaWRzIHBlci1jYWxsID8/ICsgLmNhbGwoKSBpbiBhcnJheSBwcm94eSBnZXRDdXJyZW50IGNsb3N1cmVzXG4gIGNvbnN0IHJlYWRTaWxlbnQgPSAodGFyZ2V0LmdldFZhbHVlU2lsZW50ID8/IHRhcmdldC5nZXRWYWx1ZSkuYmluZCh0YXJnZXQpO1xuXG4gIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCBhcyB1bmtub3duIGFzIFR5cGVkU2NvcGU8VD4sIHtcbiAgICBnZXQoX3Byb3h5VGFyZ2V0LCBwcm9wLCBfcmVjZWl2ZXIpIHtcbiAgICAgIC8vIDEuIEludGVybmFsIHN5bWJvbHMgKGNoZWNrIGJlZm9yZSBvdGhlciBzeW1ib2xzKVxuICAgICAgaWYgKHByb3AgPT09IElTX1RZUEVEX1NDT1BFKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChwcm9wID09PSBCUkVBS19TRVRURVIpIHtcbiAgICAgICAgcmV0dXJuIChmbjogKCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICAgIHN0YXRlLmJyZWFrRm4gPSBmbjtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU3ltYm9sIHByb3BlcnRpZXMgKGd1YXJkICsgaW5zcGVjdGlvbilcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHVUFSRF9QUk9QUywgcHJvcCkpIHJldHVybiBHVUFSRF9QUk9QU1twcm9wXTtcbiAgICAgICAgLy8gTm9kZS5qcyB1dGlsLmluc3BlY3Qg4oCUIHNob3cgc3RhdGUgc25hcHNob3QsIG5vdCBwcm94eSBpbnRlcm5hbHNcbiAgICAgICAgaWYgKHByb3AgPT09IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykpIHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4gdGFyZ2V0LmdldFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gMy4gU3RyaW5nIGd1YXJkIHByb3BlcnRpZXNcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG5cbiAgICAgIC8vIDQuICQtcHJlZml4ZWQgbWV0aG9kcyAtLSByb3V0ZSB0byBmYWNhZGVcbiAgICAgIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSB7XG4gICAgICAgIGNvbnN0IHJvdXRlciA9IE1FVEhPRF9ST1VURVNbcHJvcF07XG4gICAgICAgIGlmIChyb3V0ZXIpIHJldHVybiByb3V0ZXIodGFyZ2V0LCBzdGF0ZSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDUuIEV4ZWN1dG9yLWludGVybmFsIG1ldGhvZCBwYXNzLXRocm91Z2ggKGV4cGxpY2l0IGFsbG93bGlzdClcbiAgICAgIC8vICAgIEZsb3dDaGFydEV4ZWN1dG9yIHdyYXBwaW5nIGNhbGxzIGF0dGFjaFJlY29yZGVyLCBub3RpZnlTdGFnZVN0YXJ0LCBldGMuXG4gICAgICAvLyAgICBkaXJlY3RseSBvbiB0aGUgc2NvcGUuIEZvcndhcmQgb25seSBhbGxvd2xpc3RlZCBtZXRob2RzLlxuICAgICAgaWYgKEVYRUNVVE9SX0lOVEVSTkFMX01FVEhPRFMuaGFzKHByb3ApICYmIHR5cGVvZiAodGFyZ2V0IGFzIGFueSlbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQgYXMgYW55KVtwcm9wXS5iaW5kKHRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIFN0YXRlIGtleSAtLSBjYWxsIGdldFZhbHVlIChmaXJlcyBvblJlYWQgT05DRSlcbiAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0LmdldFZhbHVlKHByb3ApO1xuXG4gICAgICAvLyBQcmltaXRpdmUgb3IgbnVsbC91bmRlZmluZWQgLS0gcmV0dXJuIGFzLWlzXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gTm9uLXdyYXBwYWJsZSAoRGF0ZSwgTWFwLCBjbGFzcyBpbnN0YW5jZSwgZXRjLikgLS0gcmV0dXJuIHVud3JhcHBlZFxuICAgICAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuXG4gICAgICAvLyBBcnJheSAtLSByZXR1cm4gYXJyYXkgcHJveHkgKGNhY2hlZCBmb3IgaWRlbnRpdHkgZXF1YWxpdHkpXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gc3RhdGUuY2hpbGRDYWNoZS5nZXQocHJvcCk7XG4gICAgICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLnJlZiA9PT0gdmFsdWUpIHJldHVybiBjYWNoZWQucHJveHk7XG5cbiAgICAgICAgY29uc3QgYXJyUHJveHkgPSBjcmVhdGVBcnJheVByb3h5KFxuICAgICAgICAgICgpID0+IChyZWFkU2lsZW50KHByb3ApIGFzIHVua25vd25bXSkgPz8gW10sXG4gICAgICAgICAgKG5ld0FycikgPT4ge1xuICAgICAgICAgICAgdGFyZ2V0LnNldFZhbHVlKHByb3AsIHVud3JhcFByb3h5KG5ld0FycikpO1xuICAgICAgICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocHJvcCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgc3RhdGUuY2hpbGRDYWNoZS5zZXQocHJvcCwgeyByZWY6IHZhbHVlIGFzIG9iamVjdCwgcHJveHk6IGFyclByb3h5IGFzIHVua25vd24gYXMgb2JqZWN0IH0pO1xuICAgICAgICByZXR1cm4gYXJyUHJveHk7XG4gICAgICB9XG5cbiAgICAgIC8vIFBsYWluIG9iamVjdCAtLSByZXR1cm4gbmVzdGVkIHByb3h5IChjYWNoZWQgZm9yIGlkZW50aXR5IGVxdWFsaXR5KVxuICAgICAgY29uc3QgY2FjaGVkID0gc3RhdGUuY2hpbGRDYWNoZS5nZXQocHJvcCk7XG4gICAgICBpZiAoY2FjaGVkICYmIGNhY2hlZC5yZWYgPT09IHZhbHVlKSByZXR1cm4gY2FjaGVkLnByb3h5O1xuXG4gICAgICBjb25zdCBuZXN0ZWQgPSBjcmVhdGVOZXN0ZWRQcm94eShcbiAgICAgICAgdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgIHByb3AsXG4gICAgICAgIFtdLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHJlYWRTaWxlbnQsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBuZXcgU2V0PG9iamVjdD4oW3ZhbHVlIGFzIG9iamVjdF0pLCAvLyBzZWVkIGFuY2VzdG9yIHNldCB3aXRoIHJvb3Qgb2JqZWN0XG4gICAgICApO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5zZXQocHJvcCwgeyByZWY6IHZhbHVlIGFzIG9iamVjdCwgcHJveHk6IG5lc3RlZCBhcyBvYmplY3QgfSk7XG4gICAgICByZXR1cm4gbmVzdGVkO1xuICAgIH0sXG5cbiAgICBzZXQoX3Byb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBzZXQgc3RhdGUga2V5IFwiJHtwcm9wfVwiIC0tIGl0IGNvbmZsaWN0cyB3aXRoIGEgcmVzZXJ2ZWQgVHlwZWRTY29wZSBtZXRob2QuIFJlbmFtZSB0aGUgc3RhdGUga2V5IHRvIGF2b2lkICQtcHJlZml4ZWQgbmFtZXMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIFVud3JhcCBQcm94eSB2YWx1ZXMgYmVmb3JlIHN0b3Jpbmcg4oCUIHN0cnVjdHVyZWRDbG9uZSBpbiBUcmFuc2FjdGlvbkJ1ZmZlclxuICAgICAgLy8gY2Fubm90IGNsb25lIFByb3h5IG9iamVjdHMuIFRoaXMgaGFuZGxlczogc2NvcGUuYmFja3VwID0gc2NvcGUuY3VzdG9tZXJcbiAgICAgIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcFByb3h5KHZhbHVlKTtcbiAgICAgIHRhcmdldC5zZXRWYWx1ZShwcm9wLCB1bndyYXBwZWQpO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocHJvcCk7IC8vIGludmFsaWRhdGUgY2FjaGVcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBkZWxldGVQcm9wZXJ0eShfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgICAgdGFyZ2V0LmRlbGV0ZVZhbHVlKHByb3ApO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocHJvcCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgaGFzKF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHVUFSRF9QUk9QUywgcHJvcCk7XG4gICAgICBpZiAoU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIHRydWU7XG4gICAgICAvLyBVc2Ugbm9uLXRyYWNraW5nIGhhc0tleSBpZiBhdmFpbGFibGUsIGVsc2UgZmFsbGJhY2sgdG8gZ2V0U3RhdGVLZXlzXG4gICAgICBpZiAodGFyZ2V0Lmhhc0tleSkgcmV0dXJuIHRhcmdldC5oYXNLZXkocHJvcCk7XG4gICAgICBpZiAodGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKS5pbmNsdWRlcyhwcm9wKTtcbiAgICAgIC8vIEZhbGxiYWNrOiBnZXRWYWx1ZSBmaXJlcyBvblJlYWQgKGFjY2VwdGFibGUgZGVncmFkYXRpb24pXG4gICAgICByZXR1cm4gdGFyZ2V0LmdldFZhbHVlKHByb3ApICE9PSB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIG93bktleXMoKSB7XG4gICAgICAvLyBVc2Ugbm9uLXRyYWNraW5nIGdldFN0YXRlS2V5cyBpZiBhdmFpbGFibGUsIGVsc2UgZmFsbGJhY2tcbiAgICAgIGlmICh0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSB0YXJnZXQuZ2V0VmFsdWUoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICghc25hcHNob3QgfHwgdHlwZW9mIHNuYXBzaG90ICE9PSAnb2JqZWN0JykgcmV0dXJuIFtdO1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNuYXBzaG90KTtcbiAgICB9LFxuXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSByZXR1cm4gdW5kZWZpbmVkOyAvLyAkLW1ldGhvZHMgYXJlIG5vbi1lbnVtZXJhYmxlXG4gICAgICAvLyBDaGVjayBleGlzdGVuY2Ugd2l0aG91dCBmaXJpbmcgb25SZWFkIOKAlCBubyBnZXRWYWx1ZSBjYWxsIGhlcmVcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHRhcmdldC5oYXNLZXlcbiAgICAgICAgPyB0YXJnZXQuaGFzS2V5KHByb3ApXG4gICAgICAgIDogdGFyZ2V0LmdldFN0YXRlS2V5c1xuICAgICAgICA/IHRhcmdldC5nZXRTdGF0ZUtleXMoKS5pbmNsdWRlcyhwcm9wKVxuICAgICAgICA6IHRhcmdldC5nZXRWYWx1ZShwcm9wKSAhPT0gdW5kZWZpbmVkOyAvLyBmYWxsYmFjayBvbmx5XG4gICAgICBpZiAoIWV4aXN0cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIC8vIFJldHVybiBhIG1pbmltYWwgZGVzY3JpcHRvciDigJQgYWN0dWFsIHZhbHVlIGlzIGZldGNoZWQgdmlhIHRoZSBnZXQgdHJhcFxuICAgICAgcmV0dXJuIHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9O1xuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiBwcm94eTtcbn1cbiJdfQ==
|
|
@@ -31,6 +31,8 @@ exports.SCOPE_METHOD_NAMES = new Set([
|
|
|
31
31
|
'$batchArray',
|
|
32
32
|
'$break',
|
|
33
33
|
'$emit',
|
|
34
|
+
'$detachAndJoinLater',
|
|
35
|
+
'$detachAndForget',
|
|
34
36
|
'$toRaw',
|
|
35
37
|
]);
|
|
36
38
|
// -- Internal: Symbol for deferred break injection ---------------------------
|
|
@@ -55,4 +57,4 @@ exports.EXECUTOR_INTERNAL_METHODS = new Set([
|
|
|
55
57
|
'useSharedRedactedKeys', // FlowChartExecutor.createTraverser() — redaction wrapping
|
|
56
58
|
'useRedactionPolicy', // FlowChartExecutor.createTraverser() — redaction wrapping
|
|
57
59
|
]);
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlYWN0aXZlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRzs7O0FBOE1ILCtFQUErRTtBQUMvRSx1RUFBdUU7QUFFMUQsUUFBQSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBUztJQUNoRCxXQUFXO0lBQ1gsV0FBVztJQUNYLFNBQVM7SUFDVCxTQUFTO0lBQ1QsT0FBTztJQUNQLFVBQVU7SUFDVixTQUFTO0lBQ1QsUUFBUTtJQUNSLE1BQU07SUFDTixRQUFRO0lBQ1IsU0FBUztJQUNULE9BQU87SUFDUCxpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixhQUFhO0lBQ2IsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0NBQ1QsQ0FBQyxDQUFDO0FBRUgsK0VBQStFO0FBQy9FLGdFQUFnRTtBQUNoRSxxRUFBcUU7QUFFeEQsUUFBQSxZQUFZLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFFbEUsK0VBQStFO0FBQy9FLDZFQUE2RTtBQUM3RSwrQ0FBK0M7QUFFbEMsUUFBQSxjQUFjLEdBQUcsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7QUFFeEUsK0VBQStFO0FBQy9FLGdGQUFnRjtBQUNoRiwwRUFBMEU7QUFDMUUsMEVBQTBFO0FBRTdELFFBQUEseUJBQXlCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0Msa0JBQWtCLEVBQUUsNEJBQTRCO0lBQ2hELGdCQUFnQixFQUFFLDRCQUE0QjtJQUM5QyxhQUFhLEVBQUUsc0NBQXNDO0lBQ3JELGdCQUFnQixFQUFFLG1FQUFtRTtJQUNyRixnQkFBZ0IsRUFBRSxxQ0FBcUM7SUFDdkQsY0FBYyxFQUFFLG1DQUFtQztJQUNuRCx1QkFBdUIsRUFBRSwyREFBMkQ7SUFDcEYsb0JBQW9CLEVBQUUsMkRBQTJEO0NBQ2xGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvdHlwZXMgLS0gVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFR5cGVkU2NvcGU8VD4gcmVhY3RpdmUgcHJveHkgc3lzdGVtLlxuICpcbiAqIFR5cGVkU2NvcGU8VD4gd3JhcHMgYSBSZWFjdGl2ZVRhcmdldCAoU2NvcGVGYWNhZGUpIGluIGEgUHJveHkgdGhhdCBwcm92aWRlc1xuICogdHlwZWQgcHJvcGVydHkgYWNjZXNzLiBBbGwgc2NvcGUgaW5mcmFzdHJ1Y3R1cmUgbWV0aG9kcyBhcmUgJC1wcmVmaXhlZCB0b1xuICogYXZvaWQgY29sbGlzaW9ucyB3aXRoIHVzZXIgc3RhdGUga2V5cy5cbiAqXG4gKiBEZXBlbmRlbmN5OiB0eXBlLW9ubHkgaW1wb3J0cyBmcm9tIGVuZ2luZS8gYW5kIHNjb3BlLyAoemVybyBydW50aW1lIGNvc3QpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52IH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5cbi8vIC0tIFJlYWN0aXZlVGFyZ2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1pbmltdW0gcHJvdG9jb2wgcmVxdWlyZWQgYnkgVHlwZWRTY29wZSAtLSBhIGN1cmF0ZWQgc3Vic2V0IG9mIFNjb3BlRmFjYWRlJ3Ncbi8vIHB1YmxpYyBBUEkuIE5vdCBhIGZ1bGwgbWlycm9yOiBleGNsdWRlcyBpbnRlcm5hbC9yZWRhY3Rpb24gbWV0aG9kcyB0aGF0IGFyZVxuLy8gaGFuZGxlZCBhdCB0aGUgZXhlY3V0b3IgbGV2ZWwgKHVzZVJlZGFjdGlvblBvbGljeSwgdXNlU2hhcmVkUmVkYWN0ZWRLZXlzLCBldGMuKVxuLy8gYW5kIGluZnJhc3RydWN0dXJlIG1ldGhvZHMgKGdldFBpcGVsaW5lSWQsIHNldEdsb2JhbCwgZ2V0R2xvYmFsLCBldGMuKS5cblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdGl2ZVRhcmdldCB7XG4gIC8vIFN0YXRlIGFjY2VzcyAodHJhY2tlZCBieSByZWNvcmRlcnMpXG4gIGdldFZhbHVlKGtleT86IHN0cmluZyk6IHVua25vd247XG4gIHNldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuICB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcbiAgZGVsZXRlVmFsdWUoa2V5OiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcblxuICAvLyBOb24tdHJhY2tpbmcgc3RhdGUgaW5zcGVjdGlvbiAoZm9yIHByb3h5IGludGVybmFscyDigJQgbm8gcmVjb3JkZXIgZGlzcGF0Y2gpXG4gIC8qKiBSZXR1cm5zIGFsbCBzdGF0ZSBrZXlzIHdpdGhvdXQgZmlyaW5nIG9uUmVhZC4gVXNlZCBieSBvd25LZXlzL2hhcyB0cmFwcy4gKi9cbiAgZ2V0U3RhdGVLZXlzPygpOiBzdHJpbmdbXTtcbiAgLyoqIENoZWNrIGtleSBleGlzdGVuY2Ugd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IGhhcyB0cmFwLiAqL1xuICBoYXNLZXk/KGtleTogc3RyaW5nKTogYm9vbGVhbjtcbiAgLyoqIFJlYWQgc3RhdGUgd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IGFycmF5IHByb3h5IGdldEN1cnJlbnQoKS4gKi9cbiAgZ2V0VmFsdWVTaWxlbnQ/KGtleT86IHN0cmluZyk6IHVua25vd247XG5cbiAgLy8gSW5wdXQgJiBlbnZpcm9ubWVudCAocmVhZG9ubHksIE5PVCB0cmFja2VkKVxuICBnZXRBcmdzPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTogVDtcbiAgZ2V0RW52KCk6IFJlYWRvbmx5PEV4ZWN1dGlvbkVudj47XG5cbiAgLy8gUmVjb3JkZXIgbWFuYWdlbWVudFxuICBhdHRhY2hSZWNvcmRlcihyZWNvcmRlcjogUmVjb3JkZXIpOiB2b2lkO1xuICBkZXRhY2hSZWNvcmRlcihyZWNvcmRlcklkOiBzdHJpbmcpOiB2b2lkO1xuICBnZXRSZWNvcmRlcnMoKTogUmVjb3JkZXJbXTtcblxuICAvLyBEaWFnbm9zdGljc1xuICBhZGREZWJ1Z0luZm8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgYWRkRGVidWdNZXNzYWdlKHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgYWRkRXJyb3JJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGFkZE1ldHJpYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgYWRkRXZhbChuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcblxuICAvLyBFbWl0IGNoYW5uZWwgKFBoYXNlIDMpIOKAlCBzdHJ1Y3R1cmVkIHVzZXItYXV0aG9yZWQgZXZlbnRzIHRvIEVtaXRSZWNvcmRlcnMuXG4gIGVtaXRFdmVudChuYW1lOiBzdHJpbmcsIHBheWxvYWQ/OiB1bmtub3duKTogdm9pZDtcbn1cblxuLy8gLS0gU2NvcGVNZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gJC1wcmVmaXhlZCBlc2NhcGUgaGF0Y2hlcy4gTm9uLWVudW1lcmFibGUgb24gdGhlIHByb3h5IC0tIGRvbid0IGFwcGVhciBpblxuLy8gT2JqZWN0LmtleXMoKSwgZGVzdHJ1Y3R1cmluZywgb3IgZm9yLi4uaW4uIE9ubHkgc3RhdGUga2V5cyBhcmUgdmlzaWJsZS5cblxuZXhwb3J0IGludGVyZmFjZSBTY29wZU1ldGhvZHMge1xuICAvLyBTdGF0ZSAodW50eXBlZCBlc2NhcGUgaGF0Y2ggLS0gZm9yIGR5bmFtaWMga2V5cywgcmVkYWN0aW9uLCBkZXNjcmlwdGlvbilcbiAgJGdldFZhbHVlKGtleTogc3RyaW5nKTogdW5rbm93bjtcbiAgJHNldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuICAkdXBkYXRlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuICAkZGVsZXRlKGtleTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBQcm94eS1zeW50aGVzaXplZDogY2FsbHMgZ2V0VmFsdWUocm9vdEtleSkgdGhlbiBsb2Rhc2guZ2V0IGZvciBuZXN0ZWQgcGF0aC4gTm90IGEgZGlyZWN0IGRlbGVnYXRpb24uICovXG4gICRyZWFkKGRvdFBhdGg6IHN0cmluZyk6IHVua25vd247XG5cbiAgLy8gSW5wdXQgJiBlbnZpcm9ubWVudCAocmVhZG9ubHkpXG4gICRnZXRBcmdzPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTogVDtcbiAgJGdldEVudigpOiBSZWFkb25seTxFeGVjdXRpb25FbnY+O1xuXG4gIC8vIE9ic2VydmFiaWxpdHkg4oCUIGxlZ2FjeSBkaWFnbm9zdGljIHByaW1pdGl2ZXMuXG4gIC8vXG4gIC8vIEFzIG9mIFBoYXNlIDMgdGhlc2UgQUxTTyBkaXNwYXRjaCBvbiB0aGUgZW1pdCBjaGFubmVsIChpbiBhZGRpdGlvbiB0b1xuICAvLyB0aGVpciBleGlzdGluZyBgRGlhZ25vc3RpY0NvbGxlY3RvcmAgc2lkZS1iYWcgd3JpdGVzIGZvciBzbmFwc2hvdFxuICAvLyBpbmNsdXNpb24pLiBBbnkgYXR0YWNoZWQgYEVtaXRSZWNvcmRlcmAgd2lsbCBzZWUgdGhlc2UgZXZlbnRzIHdpdGhcbiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgbmFtZXNwYWNlZCBuYW1lczpcbiAgLy9cbiAgLy8gICAkZGVidWcoa2V5LCB2YWx1ZSkgICAgLT4gZW1pdHMgYGxvZy5kZWJ1Zy4ke2tleX1gXG4gIC8vICAgJGVycm9yKGtleSwgdmFsdWUpICAgIC0+IGVtaXRzIGBsb2cuZXJyb3IuJHtrZXl9YFxuICAvLyAgICRtZXRyaWMobmFtZSwgdmFsdWUpICAtPiBlbWl0cyBgbWV0cmljLiR7bmFtZX1gXG4gIC8vICAgJGV2YWwgKG5hbWUsIHZhbHVlKSAgIC0+IGVtaXRzIGBldmFsLiR7bmFtZX1gXG4gIC8vICAgJGxvZyh2YWx1ZSkgICAgICAgICAgIC0+IGVtaXRzIGBsb2cuZGVidWcubWVzc2FnZXNgXG4gIC8vXG4gIC8vIFRoaXMgbWFrZXMgdGhlIGNhbGxzIG9ic2VydmFibGUgaW4gcmVhbCB0aW1lIOKAlCBubyBsb3NzIG9mIGJhY2t3YXJkXG4gIC8vIGNvbXBhdDsgdGhlIHNpZGUgYmFnIGNvbnRpbnVlcyB0byBwb3B1bGF0ZSBmb3IgY29uc3VtZXJzIHRoYXQgaW5zcGVjdFxuICAvLyB0aGUgc25hcHNob3QgZGlyZWN0bHkuXG4gICRkZWJ1ZyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICAkbG9nKHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgJGVycm9yKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gICRtZXRyaWMobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gICRldmFsKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuXG4gIC8vIFJlY29yZGVyIG1hbmFnZW1lbnRcbiAgJGF0dGFjaFJlY29yZGVyKHJlY29yZGVyOiBSZWNvcmRlcik6IHZvaWQ7XG4gICRkZXRhY2hSZWNvcmRlcihyZWNvcmRlcklkOiBzdHJpbmcpOiB2b2lkO1xuICAkZ2V0UmVjb3JkZXJzKCk6IFJlY29yZGVyW107XG5cbiAgLyoqXG4gICAqIEJhdGNoLW11dGF0ZSBhbiBhcnJheSBrZXkgaW4gYSBzaW5nbGUgY2xvbmUrd3JpdGUgY3ljbGUuXG4gICAqXG4gICAqIEV2ZXJ5IGBzY29wZS5pdGVtcy5wdXNoKHgpYCBjbG9uZXMgdGhlIGVudGlyZSBhcnJheSBhbmQgY29tbWl0cyBpdCDigJQgTyhOKSBwZXIgY2FsbC5cbiAgICogRm9yIE4gbXV0YXRpb25zIG9uIGFuIE0tbGVuZ3RoIGFycmF5IHRoYXQgaXMgTyhOw5dNKS4gVXNlIGAkYmF0Y2hBcnJheWAgdG8gY2xvbmUgb25jZSxcbiAgICogYXBwbHkgYWxsIG11dGF0aW9ucyBpbnNpZGUgYGZuYCwgdGhlbiBjb21taXQgb25jZSDigJQgTyhNKSB0b3RhbC5cbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBCZWZvcmU6IDEwMDAgY2xvbmVzIMOXIGdyb3dpbmcgYXJyYXkgPSBPKE7CsilcbiAgICogZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHNjb3BlLml0ZW1zLnB1c2goaSk7XG4gICAqXG4gICAqIC8vIEFmdGVyOiAxIGNsb25lICsgMSBjb21taXQgPSBPKE4pXG4gICAqIHNjb3BlLiRiYXRjaEFycmF5KCdpdGVtcycsIChhcnIpID0+IHtcbiAgICogICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgYXJyLnB1c2goaSk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogYGZuYCByZWNlaXZlcyBhIHBsYWluIChub24tcHJveHkpIG11dGFibGUgKipzaGFsbG93IGNvcHkqKiBvZiB0aGUgY3VycmVudCBhcnJheS5cbiAgICogVGhlIGFycmF5IGl0c2VsZiBpcyBhIG5ldyBpbnN0YW5jZSwgYnV0IG9iamVjdCByZWZlcmVuY2VzIGluc2lkZSBpdCBhcmUgc2hhcmVkIHdpdGhcbiAgICogdGhlIG9yaWdpbmFsIHN0YXRlIOKAlCBtdXRhdGlvbnMgdG8gbmVzdGVkIG9iamVjdHMgaW5zaWRlIGBmbmAgYWZmZWN0IHRob3NlIG9yaWdpbmFscy5cbiAgICogT25seSBwdXNoL3BvcC9zb3J0L3NwbGljZSBhbmQgb3RoZXIgb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgYXJyYXkncyBvd24gc2xvdHMgYXJlXG4gICAqIHNhZmVseSBpc29sYXRlZC5cbiAgICpcbiAgICogTXV0YXRpb25zIGluc2lkZSBgZm5gIGFyZSBOT1QgdHJhY2tlZCBpbmRpdmlkdWFsbHkg4oCUIG9ubHkgdGhlIGZpbmFsIGNvbW1pdHRlZCBhcnJheVxuICAgKiBhcHBlYXJzIGluIHRoZSBuYXJyYXRpdmUgYXMgYSBzaW5nbGUgd3JpdGUuIElmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFuXG4gICAqIGFycmF5LCBgZm5gIHJlY2VpdmVzIGFuIGVtcHR5IGFycmF5IGFuZCB0aGUgcmVzdWx0IGlzIGNvbW1pdHRlZCBhcyB0aGUgbmV3IHZhbHVlLlxuICAgKlxuICAgKiBJZiBgZm5gIHRocm93cywgYHNldFZhbHVlYCBpcyBuZXZlciBjYWxsZWQgYW5kIHN0YXRlIHJlbWFpbnMgdW5jaGFuZ2VkIChhdG9taWMgb25cbiAgICogZXJyb3IpLiBUaGUgZXhjZXB0aW9uIHByb3BhZ2F0ZXMgdG8gdGhlIGNhbGxlci5cbiAgICpcbiAgICogYGtleWAgaXMgdW50eXBlZCAoYHN0cmluZ2ApIOKAlCBUeXBlU2NyaXB0IHdpbGwgbm90IGNhdGNoIHR5cG9zLiBgYXJyYCBpcyB0eXBlZCBhc1xuICAgKiBgdW5rbm93bltdYCBiZWNhdXNlIGBTY29wZU1ldGhvZHNgIGlzIG5vdCBwYXJhbWV0ZXJpemVkIGJ5IGBUYDsgY2FzdCBpbnNpZGUgYGZuYFxuICAgKiB3aGVuIGVsZW1lbnQgdHlwZXMgYXJlIGtub3duOiBgKGFyciBhcyBzdHJpbmdbXSkucHVzaCh4KWAuXG4gICAqL1xuICAkYmF0Y2hBcnJheShrZXk6IHN0cmluZywgZm46IChhcnI6IHVua25vd25bXSkgPT4gdm9pZCk6IHZvaWQ7XG5cbiAgLy8gT2JzZXJ2YWJpbGl0eSDigJQgRW1pdCBjaGFubmVsIChQaGFzZSAzKVxuICAvKipcbiAgICogRmlyZSBhIHN0cnVjdHVyZWQgZXZlbnQgdG8gZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIgaW1wbGVtZW50aW5nXG4gICAqIGBvbkVtaXRgLiBUaGUgcHJpbWFyeSBwcmltaXRpdmUgZm9yIGNvbnN1bWVyLWF1dGhvcmVkIG9ic2VydmFiaWxpdHlcbiAgICogZXZlbnRzIChMTE0gdG9rZW5zLCBiaWxsaW5nIG1ldHJpY3MsIGRvbWFpbiBtaWxlc3RvbmVzLCBldGMuKSB0aGF0XG4gICAqIHNob3VsZG4ndCBsaXZlIGluIHNjb3BlIHN0YXRlLlxuICAgKlxuICAgKiBTeW5jaHJvbm91cywgcGFzcy10aHJvdWdoIOKAlCBkZWxpdmVyZWQgdG8gcmVjb3JkZXJzIGltbWVkaWF0ZWx5LCBpblxuICAgKiBjYWxsIG9yZGVyLiBaZXJvLWFsbG9jYXRpb24gd2hlbiBubyByZWNvcmRlcnMgYXJlIGF0dGFjaGVkLlxuICAgKlxuICAgKiAjIyBOYW1pbmcgY29udmVudGlvblxuICAgKlxuICAgKiBVc2UgaGllcmFyY2hpY2FsIGRvdHRlZCBuYW1lczogYCc8bmFtZXNwYWNlPi48Y2F0ZWdvcnk+LjxldmVudD4nYC5cbiAgICogRXhhbXBsZXM6XG4gICAqICAgLSBgJ2FnZW50Zm9vdHByaW50LmxsbS50b2tlbnMnYFxuICAgKiAgIC0gYCdteWFwcC5iaWxsaW5nLnNwZW5kJ2BcbiAgICogICAtIGAnYXV0aC5jaGVjay5kZW5pZWQnYFxuICAgKlxuICAgKiBUaGUgbGlicmFyeSBzdGF5cyB2b2NhYnVsYXJ5LWFnbm9zdGljIOKAlCBubyBjZW50cmFsIHJlZ2lzdHJ5LCBub1xuICAgKiByZXNlcnZlZCBwcmVmaXhlcy4gTmFtZXNwYWNlIHByZWZpeGVzIHByZXZlbnQgY29sbGlzaW9ucyBhY3Jvc3NcbiAgICogbGlicmFyaWVzIGFuZCBhcHBzIG5hdHVyYWxseS5cbiAgICpcbiAgICogIyMgUmVkYWN0aW9uXG4gICAqXG4gICAqIElmIGBSZWRhY3Rpb25Qb2xpY3kuZW1pdFBhdHRlcm5zYCBtYXRjaGVzIHRoZSBuYW1lLCB0aGUgcGF5bG9hZCBpc1xuICAgKiByZXBsYWNlZCB3aXRoIGAnW1JFREFDVEVEXSdgIGJlZm9yZSBkaXNwYXRjaC4gTm8gcmVjb3JkZXIgZXZlciBzZWVzXG4gICAqIHRoZSByYXcgdmFsdWUgZm9yIHJlZGFjdGVkIGV2ZW50IG5hbWVzLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIENvbnN1bWVyLWNob3NlbiBldmVudCBpZGVudGlmaWVyIChzZWUgbmFtaW5nIGNvbnZlbnRpb24pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIFN0cnVjdHVyZWQgZGF0YSB0byBhdHRhY2guIFNoYXBlIGlzIHVwIHRvIHRoZVxuICAgKiAgIGNvbnN1bWVyOyBsaWJyYXJ5IHRyZWF0cyBpdCBhcyBvcGFxdWUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogc2NvcGUuJGVtaXQoJ2FnZW50Zm9vdHByaW50LmxsbS50b2tlbnMnLCB7IGlucHV0OiAxMDAsIG91dHB1dDogNTAgfSk7XG4gICAqIHNjb3BlLiRlbWl0KCdteWFwcC5kZWNpc2lvbicsIHsgYnJhbmNoOiAnYXBwcm92ZWQnLCBjb25maWRlbmNlOiAwLjkyIH0pO1xuICAgKiBgYGBcbiAgICovXG4gICRlbWl0KG5hbWU6IHN0cmluZywgcGF5bG9hZD86IHVua25vd24pOiB2b2lkO1xuXG4gIC8vIFBpcGVsaW5lIGNvbnRyb2xcbiAgLyoqXG4gICAqIFN0b3AgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGNvbnRleHQuXG4gICAqXG4gICAqIC0gKipJbiBhIHRvcC1sZXZlbCBjaGFydDoqKiB0aGUgdHJhdmVyc2VyIGV4aXRzIGNsZWFubHkgYWZ0ZXIgdGhpcyBzdGFnZVxuICAgKiAgIGNvbXBsZXRlcy5cbiAgICogLSAqKkluc2lkZSBhIHN1YmZsb3c6KiogYnkgZGVmYXVsdCwgb25seSB0aGUgc3ViZmxvdydzIG93biBleGVjdXRpb25cbiAgICogICBzdG9wczsgY29udHJvbCByZXR1cm5zIHRvIHRoZSBwYXJlbnQgYXMgbm9ybWFsLiBJZiB0aGUgc3ViZmxvdyBpc1xuICAgKiAgIG1vdW50ZWQgd2l0aCBgcHJvcGFnYXRlQnJlYWs6IHRydWVgLCB0aGUgYnJlYWsgc2lnbmFsIChhbmQgaXRzXG4gICAqICAgb3B0aW9uYWwgcmVhc29uKSBwcm9wYWdhdGVzIHVwIHRvIHRoZSBwYXJlbnQgc2NvcGUsIHRlcm1pbmF0aW5nIHRoZVxuICAgKiAgIG91dGVyIGxvb3AgdG9vLiBTZWUgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgLlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gT3B0aW9uYWwgZnJlZS1mb3JtIHN0cmluZyBkZXNjcmliaW5nIHdoeSB0aGUgYnJlYWtcbiAgICogICBoYXBwZW5lZC4gUHJvcGFnYXRlcyB0byBgRmxvd0JyZWFrRXZlbnQucmVhc29uYCBzbyByZWNvcmRlcnMgYW5kXG4gICAqICAgY3VzdG9tIG5hcnJhdGl2ZXMgY2FuIHN1cmZhY2UgaXQuIERlZmF1bHRzIHRvIHVuZGVmaW5lZC5cbiAgICovXG4gICRicmVhayhyZWFzb24/OiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8vIEVzY2FwZSBoYXRjaCAtLSB1bndyYXAgdG8gdW5kZXJseWluZyBSZWFjdGl2ZVRhcmdldFxuICAkdG9SYXcoKTogUmVhY3RpdmVUYXJnZXQ7XG59XG5cbi8vIC0tIFR5cGVkU2NvcGU8VD4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZSBjb25zdW1lci1mYWNpbmcgdHlwZS4gVCBpcyB0aGUgdXNlcidzIHN0YXRlIGludGVyZmFjZS5cbi8vIFByb3BlcnR5IGFjY2VzcyBpcyB0eXBlZDsgJC1tZXRob2RzIHByb3ZpZGUgZXNjYXBlIGhhdGNoZXMuXG5cbmV4cG9ydCB0eXBlIFR5cGVkU2NvcGU8VCBleHRlbmRzIG9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IFQgJiBTY29wZU1ldGhvZHM7XG5cbi8vIC0tIFJlYWN0aXZlT3B0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbmZpZ3VyYXRpb24gcGFzc2VkIHRvIGNyZWF0ZVR5cGVkU2NvcGUuXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RpdmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBpcGVsaW5lIGJyZWFrIGZ1bmN0aW9uIOKAlCBpbmplY3RlZCBieSBTdGFnZVJ1bm5lciBhZnRlciBzY29wZSBjcmVhdGlvbi5cbiAgICogQWNjZXB0cyBhbiBvcHRpb25hbCByZWFzb24gc3RyaW5nIHRoYXQgcHJvcGFnYXRlcyB0byBgRmxvd0JyZWFrRXZlbnRgXG4gICAqIGFuZCAod2hlbiBgcHJvcGFnYXRlQnJlYWtgIGlzIHNldCBvbiBhIG1vdW50KSB1cCB0byB0aGUgcGFyZW50IHNjb3BlLlxuICAgKi9cbiAgYnJlYWtQaXBlbGluZT86IChyZWFzb24/OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbi8vIC0tIEludGVybmFsOiAkLW1ldGhvZCBuYW1lIHNldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFVzZWQgYnkgdGhlIFByb3h5IGdldCB0cmFwIHRvIGRpc3Rpbmd1aXNoICQtbWV0aG9kcyBmcm9tIHN0YXRlIGtleXMuXG5cbmV4cG9ydCBjb25zdCBTQ09QRV9NRVRIT0RfTkFNRVMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAnJGdldFZhbHVlJyxcbiAgJyRzZXRWYWx1ZScsXG4gICckdXBkYXRlJyxcbiAgJyRkZWxldGUnLFxuICAnJHJlYWQnLFxuICAnJGdldEFyZ3MnLFxuICAnJGdldEVudicsXG4gICckZGVidWcnLFxuICAnJGxvZycsXG4gICckZXJyb3InLFxuICAnJG1ldHJpYycsXG4gICckZXZhbCcsXG4gICckYXR0YWNoUmVjb3JkZXInLFxuICAnJGRldGFjaFJlY29yZGVyJyxcbiAgJyRnZXRSZWNvcmRlcnMnLFxuICAnJGJhdGNoQXJyYXknLFxuICAnJGJyZWFrJyxcbiAgJyRlbWl0JyxcbiAgJyR0b1JhdycsXG5dKTtcblxuLy8gLS0gSW50ZXJuYWw6IFN5bWJvbCBmb3IgZGVmZXJyZWQgYnJlYWsgaW5qZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhZ2VSdW5uZXIgc2V0cyB0aGlzIGFmdGVyIHNjb3BlIGNyZWF0aW9uIHNvICRicmVhaygpIHdvcmtzLlxuLy8gUHJpdmF0ZSBTeW1ib2wgKG5vdCBTeW1ib2wuZm9yKSB0byBwcmV2ZW50IGNyb3NzLW1vZHVsZSB0YW1wZXJpbmcuXG5cbmV4cG9ydCBjb25zdCBCUkVBS19TRVRURVIgPSBTeW1ib2woJ2Zvb3RwcmludDpyZWFjdGl2ZTpzZXRCcmVhaycpO1xuXG4vLyAtLSBJbnRlcm5hbDogU3ltYm9sIGZvciBUeXBlZFNjb3BlIGRldGVjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBVc2VkIGJ5IFN0YWdlUnVubmVyIHRvIHNraXAgY3JlYXRlUHJvdGVjdGVkU2NvcGUgZm9yIFR5cGVkU2NvcGUgaW5zdGFuY2VzLlxuLy8gUHJpdmF0ZSBTeW1ib2wgcHJldmVudHMgc3RyaW5nLXRhZyBzcG9vZmluZy5cblxuZXhwb3J0IGNvbnN0IElTX1RZUEVEX1NDT1BFID0gU3ltYm9sKCdmb290cHJpbnQ6cmVhY3RpdmU6aXNUeXBlZFNjb3BlJyk7XG5cbi8vIC0tIEludGVybmFsOiBleGVjdXRvciBtZXRob2QgYWxsb3dsaXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNjb3BlRmFjYWRlIG1ldGhvZHMgY2FsbGVkIGJ5IEZsb3dDaGFydEV4ZWN1dG9yIHdyYXBwaW5nIGNvZGUgYW5kIFN0YWdlUnVubmVyXG4vLyBUSFJPVUdIIGEgVHlwZWRTY29wZSBwcm94eS4gT25seSBhZGQgbWV0aG9kcyB3aXRoIGNvbmZpcm1lZCBjYWxsIHNpdGVzLlxuLy8gU2hhcmVkIGJldHdlZW4gY3JlYXRlVHlwZWRTY29wZS50cyBhbmQgU3RhZ2VSdW5uZXIudHMgdG8gcHJldmVudCBkcmlmdC5cblxuZXhwb3J0IGNvbnN0IEVYRUNVVE9SX0lOVEVSTkFMX01FVEhPRFMgPSBuZXcgU2V0KFtcbiAgJ25vdGlmeVN0YWdlU3RhcnQnLCAvLyBTdGFnZVJ1bm5lci5ydW4oKSBsaW5lIDU5XG4gICdub3RpZnlTdGFnZUVuZCcsIC8vIFN0YWdlUnVubmVyLnJ1bigpIGxpbmUgNzlcbiAgJ25vdGlmeVBhdXNlJywgLy8gU3RhZ2VSdW5uZXIucnVuKCkg4oCUIHBhdXNlIGRldGVjdGlvblxuICAnYXR0YWNoUmVjb3JkZXInLCAvLyBGbG93Q2hhcnRFeGVjdXRvci5jcmVhdGVUcmF2ZXJzZXIoKSDigJQgbmFycmF0aXZlICsgdXNlciByZWNvcmRlcnNcbiAgJ2RldGFjaFJlY29yZGVyJywgLy8gRmxvd0NoYXJ0RXhlY3V0b3IuZGV0YWNoUmVjb3JkZXIoKVxuICAnZ2V0UmVjb3JkZXJzJywgLy8gRmxvd0NoYXJ0RXhlY3V0b3IuZ2V0UmVjb3JkZXJzKClcbiAgJ3VzZVNoYXJlZFJlZGFjdGVkS2V5cycsIC8vIEZsb3dDaGFydEV4ZWN1dG9yLmNyZWF0ZVRyYXZlcnNlcigpIOKAlCByZWRhY3Rpb24gd3JhcHBpbmdcbiAgJ3VzZVJlZGFjdGlvblBvbGljeScsIC8vIEZsb3dDaGFydEV4ZWN1dG9yLmNyZWF0ZVRyYXZlcnNlcigpIOKAlCByZWRhY3Rpb24gd3JhcHBpbmdcbl0pO1xuIl19
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlYWN0aXZlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRzs7O0FBMFBILCtFQUErRTtBQUMvRSx1RUFBdUU7QUFFMUQsUUFBQSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBUztJQUNoRCxXQUFXO0lBQ1gsV0FBVztJQUNYLFNBQVM7SUFDVCxTQUFTO0lBQ1QsT0FBTztJQUNQLFVBQVU7SUFDVixTQUFTO0lBQ1QsUUFBUTtJQUNSLE1BQU07SUFDTixRQUFRO0lBQ1IsU0FBUztJQUNULE9BQU87SUFDUCxpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixhQUFhO0lBQ2IsUUFBUTtJQUNSLE9BQU87SUFDUCxxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLFFBQVE7Q0FDVCxDQUFDLENBQUM7QUFFSCwrRUFBK0U7QUFDL0UsZ0VBQWdFO0FBQ2hFLHFFQUFxRTtBQUV4RCxRQUFBLFlBQVksR0FBRyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUVsRSwrRUFBK0U7QUFDL0UsNkVBQTZFO0FBQzdFLCtDQUErQztBQUVsQyxRQUFBLGNBQWMsR0FBRyxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUV4RSwrRUFBK0U7QUFDL0UsZ0ZBQWdGO0FBQ2hGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFFN0QsUUFBQSx5QkFBeUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMvQyxrQkFBa0IsRUFBRSw0QkFBNEI7SUFDaEQsZ0JBQWdCLEVBQUUsNEJBQTRCO0lBQzlDLGFBQWEsRUFBRSxzQ0FBc0M7SUFDckQsZ0JBQWdCLEVBQUUsbUVBQW1FO0lBQ3JGLGdCQUFnQixFQUFFLHFDQUFxQztJQUN2RCxjQUFjLEVBQUUsbUNBQW1DO0lBQ25ELHVCQUF1QixFQUFFLDJEQUEyRDtJQUNwRixvQkFBb0IsRUFBRSwyREFBMkQ7Q0FDbEYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWFjdGl2ZS90eXBlcyAtLSBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgVHlwZWRTY29wZTxUPiByZWFjdGl2ZSBwcm94eSBzeXN0ZW0uXG4gKlxuICogVHlwZWRTY29wZTxUPiB3cmFwcyBhIFJlYWN0aXZlVGFyZ2V0IChTY29wZUZhY2FkZSkgaW4gYSBQcm94eSB0aGF0IHByb3ZpZGVzXG4gKiB0eXBlZCBwcm9wZXJ0eSBhY2Nlc3MuIEFsbCBzY29wZSBpbmZyYXN0cnVjdHVyZSBtZXRob2RzIGFyZSAkLXByZWZpeGVkIHRvXG4gKiBhdm9pZCBjb2xsaXNpb25zIHdpdGggdXNlciBzdGF0ZSBrZXlzLlxuICpcbiAqIERlcGVuZGVuY3k6IHR5cGUtb25seSBpbXBvcnRzIGZyb20gZW5naW5lLyBhbmQgc2NvcGUvICh6ZXJvIHJ1bnRpbWUgY29zdCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25FbnYgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcblxuLy8gLS0gUmVhY3RpdmVUYXJnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWluaW11bSBwcm90b2NvbCByZXF1aXJlZCBieSBUeXBlZFNjb3BlIC0tIGEgY3VyYXRlZCBzdWJzZXQgb2YgU2NvcGVGYWNhZGUnc1xuLy8gcHVibGljIEFQSS4gTm90IGEgZnVsbCBtaXJyb3I6IGV4Y2x1ZGVzIGludGVybmFsL3JlZGFjdGlvbiBtZXRob2RzIHRoYXQgYXJlXG4vLyBoYW5kbGVkIGF0IHRoZSBleGVjdXRvciBsZXZlbCAodXNlUmVkYWN0aW9uUG9saWN5LCB1c2VTaGFyZWRSZWRhY3RlZEtleXMsIGV0Yy4pXG4vLyBhbmQgaW5mcmFzdHJ1Y3R1cmUgbWV0aG9kcyAoZ2V0UGlwZWxpbmVJZCwgc2V0R2xvYmFsLCBnZXRHbG9iYWwsIGV0Yy4pLlxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aXZlVGFyZ2V0IHtcbiAgLy8gU3RhdGUgYWNjZXNzICh0cmFja2VkIGJ5IHJlY29yZGVycylcbiAgZ2V0VmFsdWUoa2V5Pzogc3RyaW5nKTogdW5rbm93bjtcbiAgc2V0VmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBzaG91bGRSZWRhY3Q/OiBib29sZWFuLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG4gIHVwZGF0ZVZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuICBkZWxldGVWYWx1ZShrZXk6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8vIE5vbi10cmFja2luZyBzdGF0ZSBpbnNwZWN0aW9uIChmb3IgcHJveHkgaW50ZXJuYWxzIOKAlCBubyByZWNvcmRlciBkaXNwYXRjaClcbiAgLyoqIFJldHVybnMgYWxsIHN0YXRlIGtleXMgd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IG93bktleXMvaGFzIHRyYXBzLiAqL1xuICBnZXRTdGF0ZUtleXM/KCk6IHN0cmluZ1tdO1xuICAvKiogQ2hlY2sga2V5IGV4aXN0ZW5jZSB3aXRob3V0IGZpcmluZyBvblJlYWQuIFVzZWQgYnkgaGFzIHRyYXAuICovXG4gIGhhc0tleT8oa2V5OiBzdHJpbmcpOiBib29sZWFuO1xuICAvKiogUmVhZCBzdGF0ZSB3aXRob3V0IGZpcmluZyBvblJlYWQuIFVzZWQgYnkgYXJyYXkgcHJveHkgZ2V0Q3VycmVudCgpLiAqL1xuICBnZXRWYWx1ZVNpbGVudD8oa2V5Pzogc3RyaW5nKTogdW5rbm93bjtcblxuICAvLyBJbnB1dCAmIGVudmlyb25tZW50IChyZWFkb25seSwgTk9UIHRyYWNrZWQpXG4gIGdldEFyZ3M8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpOiBUO1xuICBnZXRFbnYoKTogUmVhZG9ubHk8RXhlY3V0aW9uRW52PjtcblxuICAvLyBSZWNvcmRlciBtYW5hZ2VtZW50XG4gIGF0dGFjaFJlY29yZGVyKHJlY29yZGVyOiBSZWNvcmRlcik6IHZvaWQ7XG4gIGRldGFjaFJlY29yZGVyKHJlY29yZGVySWQ6IHN0cmluZyk6IHZvaWQ7XG4gIGdldFJlY29yZGVycygpOiBSZWNvcmRlcltdO1xuXG4gIC8vIERpYWdub3N0aWNzXG4gIGFkZERlYnVnSW5mbyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBhZGREZWJ1Z01lc3NhZ2UodmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBhZGRFcnJvckluZm8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgYWRkTWV0cmljKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBhZGRFdmFsKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuXG4gIC8vIEVtaXQgY2hhbm5lbCAoUGhhc2UgMykg4oCUIHN0cnVjdHVyZWQgdXNlci1hdXRob3JlZCBldmVudHMgdG8gRW1pdFJlY29yZGVycy5cbiAgZW1pdEV2ZW50KG5hbWU6IHN0cmluZywgcGF5bG9hZD86IHVua25vd24pOiB2b2lkO1xuXG4gIC8vIERldGFjaCAoVDQpIOKAlCBmaXJlLWFuZC1mb3JnZXQgY2hpbGQgZmxvd2NoYXJ0cy4gU2NvcGVGYWNhZGVcbiAgLy8gZGVsZWdhdGVzIHRvIGBkZXRhY2gvc3Bhd25gLCBtaW50aW5nIHJlZklkcyBmcm9tIHRoaXMgc3RhZ2Unc1xuICAvLyBydW50aW1lU3RhZ2VJZCBmb3IgZGlhZ25vc3RpYyBjb3JyZWxhdGlvbi5cbiAgZGV0YWNoQW5kSm9pbkxhdGVyKFxuICAgIGRyaXZlcjogaW1wb3J0KCcuLi9kZXRhY2gvdHlwZXMuanMnKS5EZXRhY2hEcml2ZXIsXG4gICAgY2hpbGQ6IGltcG9ydCgnLi4vYnVpbGRlci90eXBlcy5qcycpLkZsb3dDaGFydCxcbiAgICBpbnB1dD86IHVua25vd24sXG4gICk6IGltcG9ydCgnLi4vZGV0YWNoL3R5cGVzLmpzJykuRGV0YWNoSGFuZGxlO1xuXG4gIGRldGFjaEFuZEZvcmdldChcbiAgICBkcml2ZXI6IGltcG9ydCgnLi4vZGV0YWNoL3R5cGVzLmpzJykuRGV0YWNoRHJpdmVyLFxuICAgIGNoaWxkOiBpbXBvcnQoJy4uL2J1aWxkZXIvdHlwZXMuanMnKS5GbG93Q2hhcnQsXG4gICAgaW5wdXQ/OiB1bmtub3duLFxuICApOiB2b2lkO1xufVxuXG4vLyAtLSBTY29wZU1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAkLXByZWZpeGVkIGVzY2FwZSBoYXRjaGVzLiBOb24tZW51bWVyYWJsZSBvbiB0aGUgcHJveHkgLS0gZG9uJ3QgYXBwZWFyIGluXG4vLyBPYmplY3Qua2V5cygpLCBkZXN0cnVjdHVyaW5nLCBvciBmb3IuLi5pbi4gT25seSBzdGF0ZSBrZXlzIGFyZSB2aXNpYmxlLlxuXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlTWV0aG9kcyB7XG4gIC8vIFN0YXRlICh1bnR5cGVkIGVzY2FwZSBoYXRjaCAtLSBmb3IgZHluYW1pYyBrZXlzLCByZWRhY3Rpb24sIGRlc2NyaXB0aW9uKVxuICAkZ2V0VmFsdWUoa2V5OiBzdHJpbmcpOiB1bmtub3duO1xuICAkc2V0VmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBzaG91bGRSZWRhY3Q/OiBib29sZWFuLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG4gICR1cGRhdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG4gICRkZWxldGUoa2V5OiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcbiAgLyoqIFByb3h5LXN5bnRoZXNpemVkOiBjYWxscyBnZXRWYWx1ZShyb290S2V5KSB0aGVuIGxvZGFzaC5nZXQgZm9yIG5lc3RlZCBwYXRoLiBOb3QgYSBkaXJlY3QgZGVsZWdhdGlvbi4gKi9cbiAgJHJlYWQoZG90UGF0aDogc3RyaW5nKTogdW5rbm93bjtcblxuICAvLyBJbnB1dCAmIGVudmlyb25tZW50IChyZWFkb25seSlcbiAgJGdldEFyZ3M8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpOiBUO1xuICAkZ2V0RW52KCk6IFJlYWRvbmx5PEV4ZWN1dGlvbkVudj47XG5cbiAgLy8gT2JzZXJ2YWJpbGl0eSDigJQgbGVnYWN5IGRpYWdub3N0aWMgcHJpbWl0aXZlcy5cbiAgLy9cbiAgLy8gQXMgb2YgUGhhc2UgMyB0aGVzZSBBTFNPIGRpc3BhdGNoIG9uIHRoZSBlbWl0IGNoYW5uZWwgKGluIGFkZGl0aW9uIHRvXG4gIC8vIHRoZWlyIGV4aXN0aW5nIGBEaWFnbm9zdGljQ29sbGVjdG9yYCBzaWRlLWJhZyB3cml0ZXMgZm9yIHNuYXBzaG90XG4gIC8vIGluY2x1c2lvbikuIEFueSBhdHRhY2hlZCBgRW1pdFJlY29yZGVyYCB3aWxsIHNlZSB0aGVzZSBldmVudHMgd2l0aFxuICAvLyB0aGUgY29ycmVzcG9uZGluZyBuYW1lc3BhY2VkIG5hbWVzOlxuICAvL1xuICAvLyAgICRkZWJ1ZyhrZXksIHZhbHVlKSAgICAtPiBlbWl0cyBgbG9nLmRlYnVnLiR7a2V5fWBcbiAgLy8gICAkZXJyb3Ioa2V5LCB2YWx1ZSkgICAgLT4gZW1pdHMgYGxvZy5lcnJvci4ke2tleX1gXG4gIC8vICAgJG1ldHJpYyhuYW1lLCB2YWx1ZSkgIC0+IGVtaXRzIGBtZXRyaWMuJHtuYW1lfWBcbiAgLy8gICAkZXZhbCAobmFtZSwgdmFsdWUpICAgLT4gZW1pdHMgYGV2YWwuJHtuYW1lfWBcbiAgLy8gICAkbG9nKHZhbHVlKSAgICAgICAgICAgLT4gZW1pdHMgYGxvZy5kZWJ1Zy5tZXNzYWdlc2BcbiAgLy9cbiAgLy8gVGhpcyBtYWtlcyB0aGUgY2FsbHMgb2JzZXJ2YWJsZSBpbiByZWFsIHRpbWUg4oCUIG5vIGxvc3Mgb2YgYmFja3dhcmRcbiAgLy8gY29tcGF0OyB0aGUgc2lkZSBiYWcgY29udGludWVzIHRvIHBvcHVsYXRlIGZvciBjb25zdW1lcnMgdGhhdCBpbnNwZWN0XG4gIC8vIHRoZSBzbmFwc2hvdCBkaXJlY3RseS5cbiAgJGRlYnVnKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gICRsb2codmFsdWU6IHVua25vd24pOiB2b2lkO1xuICAkZXJyb3Ioa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgJG1ldHJpYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgJGV2YWwobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG5cbiAgLy8gUmVjb3JkZXIgbWFuYWdlbWVudFxuICAkYXR0YWNoUmVjb3JkZXIocmVjb3JkZXI6IFJlY29yZGVyKTogdm9pZDtcbiAgJGRldGFjaFJlY29yZGVyKHJlY29yZGVySWQ6IHN0cmluZyk6IHZvaWQ7XG4gICRnZXRSZWNvcmRlcnMoKTogUmVjb3JkZXJbXTtcblxuICAvKipcbiAgICogQmF0Y2gtbXV0YXRlIGFuIGFycmF5IGtleSBpbiBhIHNpbmdsZSBjbG9uZSt3cml0ZSBjeWNsZS5cbiAgICpcbiAgICogRXZlcnkgYHNjb3BlLml0ZW1zLnB1c2goeClgIGNsb25lcyB0aGUgZW50aXJlIGFycmF5IGFuZCBjb21taXRzIGl0IOKAlCBPKE4pIHBlciBjYWxsLlxuICAgKiBGb3IgTiBtdXRhdGlvbnMgb24gYW4gTS1sZW5ndGggYXJyYXkgdGhhdCBpcyBPKE7Dl00pLiBVc2UgYCRiYXRjaEFycmF5YCB0byBjbG9uZSBvbmNlLFxuICAgKiBhcHBseSBhbGwgbXV0YXRpb25zIGluc2lkZSBgZm5gLCB0aGVuIGNvbW1pdCBvbmNlIOKAlCBPKE0pIHRvdGFsLlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEJlZm9yZTogMTAwMCBjbG9uZXMgw5cgZ3Jvd2luZyBhcnJheSA9IE8oTsKyKVxuICAgKiBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgc2NvcGUuaXRlbXMucHVzaChpKTtcbiAgICpcbiAgICogLy8gQWZ0ZXI6IDEgY2xvbmUgKyAxIGNvbW1pdCA9IE8oTilcbiAgICogc2NvcGUuJGJhdGNoQXJyYXkoJ2l0ZW1zJywgKGFycikgPT4ge1xuICAgKiAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSBhcnIucHVzaChpKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBgZm5gIHJlY2VpdmVzIGEgcGxhaW4gKG5vbi1wcm94eSkgbXV0YWJsZSAqKnNoYWxsb3cgY29weSoqIG9mIHRoZSBjdXJyZW50IGFycmF5LlxuICAgKiBUaGUgYXJyYXkgaXRzZWxmIGlzIGEgbmV3IGluc3RhbmNlLCBidXQgb2JqZWN0IHJlZmVyZW5jZXMgaW5zaWRlIGl0IGFyZSBzaGFyZWQgd2l0aFxuICAgKiB0aGUgb3JpZ2luYWwgc3RhdGUg4oCUIG11dGF0aW9ucyB0byBuZXN0ZWQgb2JqZWN0cyBpbnNpZGUgYGZuYCBhZmZlY3QgdGhvc2Ugb3JpZ2luYWxzLlxuICAgKiBPbmx5IHB1c2gvcG9wL3NvcnQvc3BsaWNlIGFuZCBvdGhlciBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBhcnJheSdzIG93biBzbG90cyBhcmVcbiAgICogc2FmZWx5IGlzb2xhdGVkLlxuICAgKlxuICAgKiBNdXRhdGlvbnMgaW5zaWRlIGBmbmAgYXJlIE5PVCB0cmFja2VkIGluZGl2aWR1YWxseSDigJQgb25seSB0aGUgZmluYWwgY29tbWl0dGVkIGFycmF5XG4gICAqIGFwcGVhcnMgaW4gdGhlIG5hcnJhdGl2ZSBhcyBhIHNpbmdsZSB3cml0ZS4gSWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYW5cbiAgICogYXJyYXksIGBmbmAgcmVjZWl2ZXMgYW4gZW1wdHkgYXJyYXkgYW5kIHRoZSByZXN1bHQgaXMgY29tbWl0dGVkIGFzIHRoZSBuZXcgdmFsdWUuXG4gICAqXG4gICAqIElmIGBmbmAgdGhyb3dzLCBgc2V0VmFsdWVgIGlzIG5ldmVyIGNhbGxlZCBhbmQgc3RhdGUgcmVtYWlucyB1bmNoYW5nZWQgKGF0b21pYyBvblxuICAgKiBlcnJvcikuIFRoZSBleGNlcHRpb24gcHJvcGFnYXRlcyB0byB0aGUgY2FsbGVyLlxuICAgKlxuICAgKiBga2V5YCBpcyB1bnR5cGVkIChgc3RyaW5nYCkg4oCUIFR5cGVTY3JpcHQgd2lsbCBub3QgY2F0Y2ggdHlwb3MuIGBhcnJgIGlzIHR5cGVkIGFzXG4gICAqIGB1bmtub3duW11gIGJlY2F1c2UgYFNjb3BlTWV0aG9kc2AgaXMgbm90IHBhcmFtZXRlcml6ZWQgYnkgYFRgOyBjYXN0IGluc2lkZSBgZm5gXG4gICAqIHdoZW4gZWxlbWVudCB0eXBlcyBhcmUga25vd246IGAoYXJyIGFzIHN0cmluZ1tdKS5wdXNoKHgpYC5cbiAgICovXG4gICRiYXRjaEFycmF5KGtleTogc3RyaW5nLCBmbjogKGFycjogdW5rbm93bltdKSA9PiB2b2lkKTogdm9pZDtcblxuICAvLyBPYnNlcnZhYmlsaXR5IOKAlCBFbWl0IGNoYW5uZWwgKFBoYXNlIDMpXG4gIC8qKlxuICAgKiBGaXJlIGEgc3RydWN0dXJlZCBldmVudCB0byBldmVyeSBhdHRhY2hlZCByZWNvcmRlciBpbXBsZW1lbnRpbmdcbiAgICogYG9uRW1pdGAuIFRoZSBwcmltYXJ5IHByaW1pdGl2ZSBmb3IgY29uc3VtZXItYXV0aG9yZWQgb2JzZXJ2YWJpbGl0eVxuICAgKiBldmVudHMgKExMTSB0b2tlbnMsIGJpbGxpbmcgbWV0cmljcywgZG9tYWluIG1pbGVzdG9uZXMsIGV0Yy4pIHRoYXRcbiAgICogc2hvdWxkbid0IGxpdmUgaW4gc2NvcGUgc3RhdGUuXG4gICAqXG4gICAqIFN5bmNocm9ub3VzLCBwYXNzLXRocm91Z2gg4oCUIGRlbGl2ZXJlZCB0byByZWNvcmRlcnMgaW1tZWRpYXRlbHksIGluXG4gICAqIGNhbGwgb3JkZXIuIFplcm8tYWxsb2NhdGlvbiB3aGVuIG5vIHJlY29yZGVycyBhcmUgYXR0YWNoZWQuXG4gICAqXG4gICAqICMjIE5hbWluZyBjb252ZW50aW9uXG4gICAqXG4gICAqIFVzZSBoaWVyYXJjaGljYWwgZG90dGVkIG5hbWVzOiBgJzxuYW1lc3BhY2U+LjxjYXRlZ29yeT4uPGV2ZW50PidgLlxuICAgKiBFeGFtcGxlczpcbiAgICogICAtIGAnYWdlbnRmb290cHJpbnQubGxtLnRva2VucydgXG4gICAqICAgLSBgJ215YXBwLmJpbGxpbmcuc3BlbmQnYFxuICAgKiAgIC0gYCdhdXRoLmNoZWNrLmRlbmllZCdgXG4gICAqXG4gICAqIFRoZSBsaWJyYXJ5IHN0YXlzIHZvY2FidWxhcnktYWdub3N0aWMg4oCUIG5vIGNlbnRyYWwgcmVnaXN0cnksIG5vXG4gICAqIHJlc2VydmVkIHByZWZpeGVzLiBOYW1lc3BhY2UgcHJlZml4ZXMgcHJldmVudCBjb2xsaXNpb25zIGFjcm9zc1xuICAgKiBsaWJyYXJpZXMgYW5kIGFwcHMgbmF0dXJhbGx5LlxuICAgKlxuICAgKiAjIyBSZWRhY3Rpb25cbiAgICpcbiAgICogSWYgYFJlZGFjdGlvblBvbGljeS5lbWl0UGF0dGVybnNgIG1hdGNoZXMgdGhlIG5hbWUsIHRoZSBwYXlsb2FkIGlzXG4gICAqIHJlcGxhY2VkIHdpdGggYCdbUkVEQUNURURdJ2AgYmVmb3JlIGRpc3BhdGNoLiBObyByZWNvcmRlciBldmVyIHNlZXNcbiAgICogdGhlIHJhdyB2YWx1ZSBmb3IgcmVkYWN0ZWQgZXZlbnQgbmFtZXMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gQ29uc3VtZXItY2hvc2VuIGV2ZW50IGlkZW50aWZpZXIgKHNlZSBuYW1pbmcgY29udmVudGlvbikuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gU3RydWN0dXJlZCBkYXRhIHRvIGF0dGFjaC4gU2hhcGUgaXMgdXAgdG8gdGhlXG4gICAqICAgY29uc3VtZXI7IGxpYnJhcnkgdHJlYXRzIGl0IGFzIG9wYXF1ZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBzY29wZS4kZW1pdCgnYWdlbnRmb290cHJpbnQubGxtLnRva2VucycsIHsgaW5wdXQ6IDEwMCwgb3V0cHV0OiA1MCB9KTtcbiAgICogc2NvcGUuJGVtaXQoJ215YXBwLmRlY2lzaW9uJywgeyBicmFuY2g6ICdhcHByb3ZlZCcsIGNvbmZpZGVuY2U6IDAuOTIgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgJGVtaXQobmFtZTogc3RyaW5nLCBwYXlsb2FkPzogdW5rbm93bik6IHZvaWQ7XG5cbiAgLy8gRGV0YWNoIOKAlCBmaXJlLWFuZC1mb3JnZXQgY2hpbGQgZmxvd2NoYXJ0IGV4ZWN1dGlvbi5cbiAgLy9cbiAgLy8gYCRkZXRhY2hBbmRKb2luTGF0ZXIoZHJpdmVyLCBjaGlsZCwgaW5wdXQ/KWAgc2NoZWR1bGVzIHRoZSBjaGlsZCB2aWFcbiAgLy8gdGhlIGdpdmVuIGRyaXZlciBhbmQgcmV0dXJucyBhIGBEZXRhY2hIYW5kbGVgIHRoZSBjb25zdW1lciBjYW4gcmVhZFxuICAvLyBzeW5jaHJvbm91c2x5IChgLnN0YXR1c2ApIG9yIGF3YWl0IChgLndhaXQoKWApLiBUaGUgcGFyZW50IHN0YWdlXG4gIC8vIGRvZXMgTk9UIGJsb2NrIG9uIHRoZSBjaGlsZCDigJQgaXQgcmV0dXJucyB0byB0aGUgYWdlbnQgbG9vcCB0aGVcbiAgLy8gbW9tZW50IHRoZSBkcml2ZXIncyBgc2NoZWR1bGUoKWAgcmV0dXJucyAocGFzc2l2ZSByZWNvcmRlciBydWxlKS5cbiAgLy9cbiAgLy8gYCRkZXRhY2hBbmRGb3JnZXQoZHJpdmVyLCBjaGlsZCwgaW5wdXQ/KWAgZGlzY2FyZHMgdGhlIGhhbmRsZSDigJRcbiAgLy8gdXNlZnVsIGZvciBmaXJlLWFuZC1mb3JnZXQgdGVsZW1ldHJ5IHdoZXJlIHRoZSBjYWxsZXIgbmV2ZXIgbmVlZHNcbiAgLy8gdG8ga25vdyBob3cgdGhlIGNoaWxkIGZpbmlzaGVkLiBFcnJvcnMgc3RpbGwgbGFuZCBvbiB0aGUgKG5vdy1cbiAgLy8gZHJvcHBlZCkgaGFuZGxlIGFuZCBnbyBzaWxlbnQgdW5sZXNzIGFuIG9ic2VydmVyIHN1cmZhY2VzIHRoZW0uXG4gIC8vXG4gIC8vIERyaXZlciBpcyBSRVFVSVJFRCDigJQgdGhlcmUncyBubyBsaWJyYXJ5LWRlZmF1bHQuIFBhc3MgZS5nLlxuICAvLyBgbWljcm90YXNrQmF0Y2hEcml2ZXJgIChmcm9tICdmb290cHJpbnRqcy9kZXRhY2gnKSBvciB5b3VyIG93blxuICAvLyBjdXN0b20gZHJpdmVyLiBFeHBsaWNpdCBwYXNzaW5nIGF2b2lkcyBnbG9iYWwgc3RhdGUgYW5kIGtlZXBzIHRoZVxuICAvLyBlbmdpbmUgZnJlZSBvZiBkcml2ZXIgaW1wb3J0cy5cbiAgJGRldGFjaEFuZEpvaW5MYXRlcihcbiAgICBkcml2ZXI6IGltcG9ydCgnLi4vZGV0YWNoL3R5cGVzLmpzJykuRGV0YWNoRHJpdmVyLFxuICAgIGNoaWxkOiBpbXBvcnQoJy4uL2J1aWxkZXIvdHlwZXMuanMnKS5GbG93Q2hhcnQsXG4gICAgaW5wdXQ/OiB1bmtub3duLFxuICApOiBpbXBvcnQoJy4uL2RldGFjaC90eXBlcy5qcycpLkRldGFjaEhhbmRsZTtcblxuICAkZGV0YWNoQW5kRm9yZ2V0KFxuICAgIGRyaXZlcjogaW1wb3J0KCcuLi9kZXRhY2gvdHlwZXMuanMnKS5EZXRhY2hEcml2ZXIsXG4gICAgY2hpbGQ6IGltcG9ydCgnLi4vYnVpbGRlci90eXBlcy5qcycpLkZsb3dDaGFydCxcbiAgICBpbnB1dD86IHVua25vd24sXG4gICk6IHZvaWQ7XG5cbiAgLy8gUGlwZWxpbmUgY29udHJvbFxuICAvKipcbiAgICogU3RvcCB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dC5cbiAgICpcbiAgICogLSAqKkluIGEgdG9wLWxldmVsIGNoYXJ0OioqIHRoZSB0cmF2ZXJzZXIgZXhpdHMgY2xlYW5seSBhZnRlciB0aGlzIHN0YWdlXG4gICAqICAgY29tcGxldGVzLlxuICAgKiAtICoqSW5zaWRlIGEgc3ViZmxvdzoqKiBieSBkZWZhdWx0LCBvbmx5IHRoZSBzdWJmbG93J3Mgb3duIGV4ZWN1dGlvblxuICAgKiAgIHN0b3BzOyBjb250cm9sIHJldHVybnMgdG8gdGhlIHBhcmVudCBhcyBub3JtYWwuIElmIHRoZSBzdWJmbG93IGlzXG4gICAqICAgbW91bnRlZCB3aXRoIGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAsIHRoZSBicmVhayBzaWduYWwgKGFuZCBpdHNcbiAgICogICBvcHRpb25hbCByZWFzb24pIHByb3BhZ2F0ZXMgdXAgdG8gdGhlIHBhcmVudCBzY29wZSwgdGVybWluYXRpbmcgdGhlXG4gICAqICAgb3V0ZXIgbG9vcCB0b28uIFNlZSBgU3ViZmxvd01vdW50T3B0aW9ucy5wcm9wYWdhdGVCcmVha2AuXG4gICAqXG4gICAqIEBwYXJhbSByZWFzb24gLSBPcHRpb25hbCBmcmVlLWZvcm0gc3RyaW5nIGRlc2NyaWJpbmcgd2h5IHRoZSBicmVha1xuICAgKiAgIGhhcHBlbmVkLiBQcm9wYWdhdGVzIHRvIGBGbG93QnJlYWtFdmVudC5yZWFzb25gIHNvIHJlY29yZGVycyBhbmRcbiAgICogICBjdXN0b20gbmFycmF0aXZlcyBjYW4gc3VyZmFjZSBpdC4gRGVmYXVsdHMgdG8gdW5kZWZpbmVkLlxuICAgKi9cbiAgJGJyZWFrKHJlYXNvbj86IHN0cmluZyk6IHZvaWQ7XG5cbiAgLy8gRXNjYXBlIGhhdGNoIC0tIHVud3JhcCB0byB1bmRlcmx5aW5nIFJlYWN0aXZlVGFyZ2V0XG4gICR0b1JhdygpOiBSZWFjdGl2ZVRhcmdldDtcbn1cblxuLy8gLS0gVHlwZWRTY29wZTxUPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhlIGNvbnN1bWVyLWZhY2luZyB0eXBlLiBUIGlzIHRoZSB1c2VyJ3Mgc3RhdGUgaW50ZXJmYWNlLlxuLy8gUHJvcGVydHkgYWNjZXNzIGlzIHR5cGVkOyAkLW1ldGhvZHMgcHJvdmlkZSBlc2NhcGUgaGF0Y2hlcy5cblxuZXhwb3J0IHR5cGUgVHlwZWRTY29wZTxUIGV4dGVuZHMgb2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gVCAmIFNjb3BlTWV0aG9kcztcblxuLy8gLS0gUmVhY3RpdmVPcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uZmlndXJhdGlvbiBwYXNzZWQgdG8gY3JlYXRlVHlwZWRTY29wZS5cblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdGl2ZU9wdGlvbnMge1xuICAvKipcbiAgICogUGlwZWxpbmUgYnJlYWsgZnVuY3Rpb24g4oCUIGluamVjdGVkIGJ5IFN0YWdlUnVubmVyIGFmdGVyIHNjb3BlIGNyZWF0aW9uLlxuICAgKiBBY2NlcHRzIGFuIG9wdGlvbmFsIHJlYXNvbiBzdHJpbmcgdGhhdCBwcm9wYWdhdGVzIHRvIGBGbG93QnJlYWtFdmVudGBcbiAgICogYW5kICh3aGVuIGBwcm9wYWdhdGVCcmVha2AgaXMgc2V0IG9uIGEgbW91bnQpIHVwIHRvIHRoZSBwYXJlbnQgc2NvcGUuXG4gICAqL1xuICBicmVha1BpcGVsaW5lPzogKHJlYXNvbj86IHN0cmluZykgPT4gdm9pZDtcbn1cblxuLy8gLS0gSW50ZXJuYWw6ICQtbWV0aG9kIG5hbWUgc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVXNlZCBieSB0aGUgUHJveHkgZ2V0IHRyYXAgdG8gZGlzdGluZ3Vpc2ggJC1tZXRob2RzIGZyb20gc3RhdGUga2V5cy5cblxuZXhwb3J0IGNvbnN0IFNDT1BFX01FVEhPRF9OQU1FUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICckZ2V0VmFsdWUnLFxuICAnJHNldFZhbHVlJyxcbiAgJyR1cGRhdGUnLFxuICAnJGRlbGV0ZScsXG4gICckcmVhZCcsXG4gICckZ2V0QXJncycsXG4gICckZ2V0RW52JyxcbiAgJyRkZWJ1ZycsXG4gICckbG9nJyxcbiAgJyRlcnJvcicsXG4gICckbWV0cmljJyxcbiAgJyRldmFsJyxcbiAgJyRhdHRhY2hSZWNvcmRlcicsXG4gICckZGV0YWNoUmVjb3JkZXInLFxuICAnJGdldFJlY29yZGVycycsXG4gICckYmF0Y2hBcnJheScsXG4gICckYnJlYWsnLFxuICAnJGVtaXQnLFxuICAnJGRldGFjaEFuZEpvaW5MYXRlcicsXG4gICckZGV0YWNoQW5kRm9yZ2V0JyxcbiAgJyR0b1JhdycsXG5dKTtcblxuLy8gLS0gSW50ZXJuYWw6IFN5bWJvbCBmb3IgZGVmZXJyZWQgYnJlYWsgaW5qZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhZ2VSdW5uZXIgc2V0cyB0aGlzIGFmdGVyIHNjb3BlIGNyZWF0aW9uIHNvICRicmVhaygpIHdvcmtzLlxuLy8gUHJpdmF0ZSBTeW1ib2wgKG5vdCBTeW1ib2wuZm9yKSB0byBwcmV2ZW50IGNyb3NzLW1vZHVsZSB0YW1wZXJpbmcuXG5cbmV4cG9ydCBjb25zdCBCUkVBS19TRVRURVIgPSBTeW1ib2woJ2Zvb3RwcmludDpyZWFjdGl2ZTpzZXRCcmVhaycpO1xuXG4vLyAtLSBJbnRlcm5hbDogU3ltYm9sIGZvciBUeXBlZFNjb3BlIGRldGVjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBVc2VkIGJ5IFN0YWdlUnVubmVyIHRvIHNraXAgY3JlYXRlUHJvdGVjdGVkU2NvcGUgZm9yIFR5cGVkU2NvcGUgaW5zdGFuY2VzLlxuLy8gUHJpdmF0ZSBTeW1ib2wgcHJldmVudHMgc3RyaW5nLXRhZyBzcG9vZmluZy5cblxuZXhwb3J0IGNvbnN0IElTX1RZUEVEX1NDT1BFID0gU3ltYm9sKCdmb290cHJpbnQ6cmVhY3RpdmU6aXNUeXBlZFNjb3BlJyk7XG5cbi8vIC0tIEludGVybmFsOiBleGVjdXRvciBtZXRob2QgYWxsb3dsaXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNjb3BlRmFjYWRlIG1ldGhvZHMgY2FsbGVkIGJ5IEZsb3dDaGFydEV4ZWN1dG9yIHdyYXBwaW5nIGNvZGUgYW5kIFN0YWdlUnVubmVyXG4vLyBUSFJPVUdIIGEgVHlwZWRTY29wZSBwcm94eS4gT25seSBhZGQgbWV0aG9kcyB3aXRoIGNvbmZpcm1lZCBjYWxsIHNpdGVzLlxuLy8gU2hhcmVkIGJldHdlZW4gY3JlYXRlVHlwZWRTY29wZS50cyBhbmQgU3RhZ2VSdW5uZXIudHMgdG8gcHJldmVudCBkcmlmdC5cblxuZXhwb3J0IGNvbnN0IEVYRUNVVE9SX0lOVEVSTkFMX01FVEhPRFMgPSBuZXcgU2V0KFtcbiAgJ25vdGlmeVN0YWdlU3RhcnQnLCAvLyBTdGFnZVJ1bm5lci5ydW4oKSBsaW5lIDU5XG4gICdub3RpZnlTdGFnZUVuZCcsIC8vIFN0YWdlUnVubmVyLnJ1bigpIGxpbmUgNzlcbiAgJ25vdGlmeVBhdXNlJywgLy8gU3RhZ2VSdW5uZXIucnVuKCkg4oCUIHBhdXNlIGRldGVjdGlvblxuICAnYXR0YWNoUmVjb3JkZXInLCAvLyBGbG93Q2hhcnRFeGVjdXRvci5jcmVhdGVUcmF2ZXJzZXIoKSDigJQgbmFycmF0aXZlICsgdXNlciByZWNvcmRlcnNcbiAgJ2RldGFjaFJlY29yZGVyJywgLy8gRmxvd0NoYXJ0RXhlY3V0b3IuZGV0YWNoUmVjb3JkZXIoKVxuICAnZ2V0UmVjb3JkZXJzJywgLy8gRmxvd0NoYXJ0RXhlY3V0b3IuZ2V0UmVjb3JkZXJzKClcbiAgJ3VzZVNoYXJlZFJlZGFjdGVkS2V5cycsIC8vIEZsb3dDaGFydEV4ZWN1dG9yLmNyZWF0ZVRyYXZlcnNlcigpIOKAlCByZWRhY3Rpb24gd3JhcHBpbmdcbiAgJ3VzZVJlZGFjdGlvblBvbGljeScsIC8vIEZsb3dDaGFydEV4ZWN1dG9yLmNyZWF0ZVRyYXZlcnNlcigpIOKAlCByZWRhY3Rpb24gd3JhcHBpbmdcbl0pO1xuIl19
|