footprintjs 5.0.0 → 6.1.0
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/CLAUDE.md +51 -8
- package/README.md +1 -0
- package/dist/advanced.js +2 -3
- package/dist/esm/advanced.js +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/lib/builder/FlowChartBuilder.js +552 -103
- package/dist/esm/lib/builder/index.js +2 -2
- package/dist/esm/lib/builder/structure/StructureRecorder.js +158 -0
- package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +171 -0
- package/dist/esm/lib/builder/types.js +1 -1
- package/dist/esm/lib/engine/errors/errorInfo.js +4 -3
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +14 -3
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +5 -7
- package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +2 -2
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +13 -7
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +7 -1
- package/dist/esm/lib/engine/handlers/index.js +1 -3
- package/dist/esm/lib/engine/handlers/types.js +2 -2
- package/dist/esm/lib/engine/index.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +12 -2
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +17 -3
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/esm/lib/engine/narrative/index.js +1 -1
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/runtimeStageId.js +64 -2
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +35 -57
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/engine/walkSubflowSpec.js +168 -0
- package/dist/esm/lib/recorder/CombinedRecorder.js +8 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +23 -17
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +3 -2
- package/dist/esm/trace.js +3 -2
- package/dist/index.js +3 -2
- package/dist/lib/builder/FlowChartBuilder.js +554 -104
- package/dist/lib/builder/index.js +3 -2
- package/dist/lib/builder/structure/StructureRecorder.js +159 -0
- package/dist/lib/builder/structure/StructureRecorderDispatcher.js +175 -0
- package/dist/lib/builder/types.js +1 -1
- package/dist/lib/engine/errors/errorInfo.js +4 -3
- package/dist/lib/engine/handlers/ChildrenExecutor.js +14 -3
- package/dist/lib/engine/handlers/DeciderHandler.js +5 -7
- package/dist/lib/engine/handlers/RuntimeStructureManager.js +2 -2
- package/dist/lib/engine/handlers/SelectorHandler.js +13 -7
- package/dist/lib/engine/handlers/SubflowExecutor.js +7 -1
- package/dist/lib/engine/handlers/index.js +2 -5
- package/dist/lib/engine/handlers/types.js +2 -2
- package/dist/lib/engine/index.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +12 -2
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +17 -3
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
- package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/lib/engine/narrative/index.js +1 -1
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/runtimeStageId.js +66 -3
- package/dist/lib/engine/traversal/FlowchartTraverser.js +35 -57
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/engine/walkSubflowSpec.js +172 -0
- package/dist/lib/recorder/CombinedRecorder.js +8 -1
- package/dist/lib/runner/FlowChartExecutor.js +23 -17
- package/dist/lib/runner/getSubtreeSnapshot.js +3 -2
- package/dist/trace.js +5 -2
- package/dist/types/advanced.d.ts +4 -4
- package/dist/types/index.d.ts +4 -2
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +202 -17
- package/dist/types/lib/builder/index.d.ts +3 -2
- package/dist/types/lib/builder/structure/StructureRecorder.d.ts +349 -0
- package/dist/types/lib/builder/structure/StructureRecorderDispatcher.d.ts +77 -0
- package/dist/types/lib/builder/types.d.ts +39 -6
- package/dist/types/lib/engine/errors/errorInfo.d.ts +3 -2
- package/dist/types/lib/engine/handlers/ChildrenExecutor.d.ts +1 -1
- package/dist/types/lib/engine/handlers/DeciderHandler.d.ts +3 -3
- package/dist/types/lib/engine/handlers/RuntimeStructureManager.d.ts +1 -1
- package/dist/types/lib/engine/handlers/SelectorHandler.d.ts +2 -2
- package/dist/types/lib/engine/handlers/index.d.ts +1 -2
- package/dist/types/lib/engine/handlers/types.d.ts +2 -9
- package/dist/types/lib/engine/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -2
- package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
- package/dist/types/lib/engine/narrative/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/types.d.ts +59 -2
- package/dist/types/lib/engine/runtimeStageId.d.ts +57 -1
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -6
- package/dist/types/lib/engine/types.d.ts +19 -26
- package/dist/types/lib/engine/walkSubflowSpec.d.ts +95 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +4 -16
- package/dist/types/trace.d.ts +3 -1
- package/package.json +6 -4
- package/dist/esm/lib/engine/handlers/ExtractorRunner.js +0 -122
- package/dist/lib/engine/handlers/ExtractorRunner.js +0 -126
- package/dist/types/lib/engine/handlers/ExtractorRunner.d.ts +0 -41
|
@@ -27,4 +27,4 @@ export var ArrayMergeMode;
|
|
|
27
27
|
/** Overwrite parent array with subflow output. Use for Dynamic loops. */
|
|
28
28
|
ArrayMergeMode["Replace"] = "replace";
|
|
29
29
|
})(ArrayMergeMode || (ArrayMergeMode = {}));
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWFILE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBZTlFLG9DQUFvQztBQUNwQyx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFZO0lBQ3BDLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdkUsR0FBRyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUNyRSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLEtBQUssRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDekUsSUFBSSxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztDQUN4RSxDQUFDO0FBbURGLDhFQUE4RTtBQUM5RSxVQUFVO0FBQ1YsOEVBQThFO0FBRTlFOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN4Qix3RkFBd0Y7SUFDeEYsbUNBQWlCLENBQUE7SUFDakIseUVBQXlFO0lBQ3pFLHFDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxjQUFjLEtBQWQsY0FBYyxRQUt6QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdHlwZXMudHMg4oCUIEFsbCB0eXBlIGRlZmluaXRpb25zIGZvciB0aGUgZW5naW5lIGxpYnJhcnkuXG4gKlxuICogQ2VudHJhbGl6ZXMgdHlwZSBkZWZpbml0aW9ucyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gKiBFdmVyeSBoYW5kbGVyIHJlY2VpdmVzIEhhbmRsZXJEZXBzICh0aGUgREkgYmFnKSBpbnN0ZWFkIG9mIGltcG9ydGluZyB0aGUgdHJhdmVyc2VyLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLy8gUmUtZXhwb3J0IFN0YWdlTm9kZSB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgRGVjaWRlciwgU2VsZWN0b3IsIFN0YWdlTm9kZSB9IGZyb20gJy4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcblxuLy8gUmUtZXhwb3J0IHBhdXNlIHR5cGVzIGZyb20gcGF1c2UvIGxpYnJhcnlcbmV4cG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGF1c2FibGVIYW5kbGVyLCBQYXVzZVJlc3VsdCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcbmV4cG9ydCB7IGlzUGF1c2VSZXN1bHQsIGlzUGF1c2VTaWduYWwsIFBhdXNlU2lnbmFsIH0gZnJvbSAnLi4vcGF1c2UvaW5kZXguanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExvZ2dlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBNaW5pbWFsIGxvZ2dpbmcgY29udHJhY3QuIE1pcnJvcnMgQ29uc29sZSBBUEkgc3Vic2V0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyIHtcbiAgaW5mbyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBsb2cobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZGVidWcobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZXJyb3IobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgd2FybihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xufVxuXG4vKiogRGVmYXVsdCBjb25zb2xlLWJhc2VkIGxvZ2dlci4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0tIHRyaXZpYWwgY29uc29sZSBkZWxlZ2F0aW9uICovXG5leHBvcnQgY29uc3QgZGVmYXVsdExvZ2dlcjogSUxvZ2dlciA9IHtcbiAgaW5mbzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmluZm8obWVzc2FnZSwgLi4uYXJncyksXG4gIGxvZzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgZGVidWc6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgZXJyb3I6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5lcnJvcihtZXNzYWdlLCAuLi5hcmdzKSxcbiAgd2FybjogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLndhcm4obWVzc2FnZSwgLi4uYXJncyksXG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0YWdlIEZ1bmN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIENhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgdG9rZW5zIGR1cmluZyBzdHJlYW1pbmcuICovXG5leHBvcnQgdHlwZSBTdHJlYW1DYWxsYmFjayA9ICh0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIHN0YWdlIGhhbmRsZXJzLlxuICogLSBUT3V0OiByZXR1cm4gdHlwZSBwcm9kdWNlZCBieSB0aGUgc3RhZ2VcbiAqIC0gVFNjb3BlOiB0aGUgc2NvcGUgb2JqZWN0IHBhc3NlZCB0byB0aGUgc3RhZ2VcbiAqIC0gT3B0aW9uYWwgM3JkIHBhcmFtZXRlciBgc3RyZWFtQ2FsbGJhY2tgIGluamVjdGVkIGZvciBzdHJlYW1pbmcgc3RhZ2VzLlxuICovXG5leHBvcnQgdHlwZSBTdGFnZUZ1bmN0aW9uPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4gIHN0cmVhbUNhbGxiYWNrPzogU3RyZWFtQ2FsbGJhY2ssXG4pID0+IFByb21pc2U8VE91dCB8IHZvaWQ+IHwgVE91dCB8IHZvaWQ7XG5cbi8qKlxuICogU3RhZ2UgZnVuY3Rpb24gZm9yIHBhdXNhYmxlIHN0YWdlcyDigJQgcmV0dXJuIHZhbHVlIGlzIHRoZSBwYXVzZSBkYXRhIChhbnkgdHlwZSkuXG4gKiBSZXR1cm4gbm9uLXZvaWQgdG8gcGF1c2UsIHJldHVybiB2b2lkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICovXG5leHBvcnQgdHlwZSBQYXVzYWJsZVN0YWdlRnVuY3Rpb248VFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbikgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd247XG5cbi8qKiBGYWN0b3J5IHRoYXQgY3JlYXRlcyBhIHNjb3BlIGluc3RhbmNlIGZvciBlYWNoIHN0YWdlLiAqL1xuZXhwb3J0IHR5cGUgU2NvcGVGYWN0b3J5PFRTY29wZSA9IGFueT4gPSAoXG4gIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd24sXG4gIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudixcbikgPT4gVFNjb3BlO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0cmVhbWluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRva2VuSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCBmdWxsVGV4dD86IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1IYW5kbGVycyB7XG4gIG9uVG9rZW4/OiBTdHJlYW1Ub2tlbkhhbmRsZXI7XG4gIG9uU3RhcnQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xuICBvbkVuZD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ViZmxvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ29udHJvbHMgaG93IGFycmF5IHZhbHVlcyBmcm9tIG91dHB1dE1hcHBlciBhcmUgbWVyZ2VkIGludG8gcGFyZW50IHNjb3BlLlxuICovXG5leHBvcnQgZW51bSBBcnJheU1lcmdlTW9kZSB7XG4gIC8qKiBBcHBlbmQgc3ViZmxvdyBvdXRwdXQgdG8gZXhpc3RpbmcgcGFyZW50IGFycmF5OiBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXS4gRGVmYXVsdC4gKi9cbiAgQ29uY2F0ID0gJ2NvbmNhdCcsXG4gIC8qKiBPdmVyd3JpdGUgcGFyZW50IGFycmF5IHdpdGggc3ViZmxvdyBvdXRwdXQuIFVzZSBmb3IgRHluYW1pYyBsb29wcy4gKi9cbiAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSA9IGFueSwgVFN1YmZsb3dJbnB1dCA9IGFueSwgVFN1YmZsb3dPdXRwdXQgPSBhbnk+IHtcbiAgaW5wdXRNYXBwZXI/OiAocGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gVFN1YmZsb3dJbnB1dDtcbiAgLyoqXG4gICAqIE1hcHMgc3ViZmxvdyBvdXRwdXQgYmFjayBpbnRvIHBhcmVudCBzY29wZS5cbiAgICpcbiAgICogKipBcnJheSBtZXJnZSBiZWhhdmlvcioqIGlzIGNvbnRyb2xsZWQgYnkgYGFycmF5TWVyZ2VgOlxuICAgKiAtIGAnY29uY2F0J2AgKGRlZmF1bHQpOiBgWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV1gIOKAlCByZXR1cm4gb25seSAqKmRlbHRhKiogaXRlbXNcbiAgICogLSBgJ3JlcGxhY2UnYDogb3ZlcndyaXRlcyB0aGUgcGFyZW50IHZhbHVlIOKAlCByZXR1cm4gdGhlIGZ1bGwgYXJyYXlcbiAgICpcbiAgICogU2NhbGFyIHZhbHVlcyBhcmUgYWx3YXlzIHJlcGxhY2VkIHJlZ2FyZGxlc3Mgb2YgYGFycmF5TWVyZ2VgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIERlbHRhIG1vZGUgKGRlZmF1bHQpIOKAlCByZXR1cm4gb25seSBuZXcgaXRlbXMsIGNvbmNhdCBhcHBlbmRzXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBtZXNzYWdlczogc2YubmV3TWVzc2FnZXMgfSlcbiAgICpcbiAgICogLy8gUmVwbGFjZSBtb2RlIOKAlCByZXR1cm4gZnVsbCBhcnJheSwgcGFyZW50IHZhbHVlIGlzIG92ZXJ3cml0dGVuXG4gICAqIC8vIFVzZWZ1bCBpbiBEeW5hbWljIGxvb3BzIHdoZXJlIHRoZSBzdWJmbG93IHJlY29tcHV0ZXMgdGhlIGZ1bGwgdmFsdWUgZWFjaCBpdGVyYXRpb25cbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IHRvb2xEZXNjcmlwdGlvbnM6IHNmLnRvb2xEZXNjcmlwdGlvbnMgfSksXG4gICAqIGFycmF5TWVyZ2U6IEFycmF5TWVyZ2VNb2RlLlJlcGxhY2UsXG4gICAqXG4gICAqIC8vIFNjYWxhcnMgYXJlIGZpbmUgaW4gYm90aCBtb2RlcyDigJQgYWx3YXlzIHJlcGxhY2VkXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBzdGF0dXM6IHNmLnJlc3VsdCwgY291bnQ6IHNmLnRvdGFsIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAgICogQXBwbGllcyBvbmx5IHRvIHRvcC1sZXZlbCBhcnJheSBrZXlzLiBOZXN0ZWQgYXJyYXlzIGluc2lkZSBvYmplY3RzXG4gICAqIGFsd2F5cyB1c2UgYXBwZW5kIChhcHBlbmRUb0FycmF5KSByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgQXJyYXlNZXJnZU1vZGUuQ29uY2F0XG4gICAqL1xuICBhcnJheU1lcmdlPzogQXJyYXlNZXJnZU1vZGU7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBhbiBpbm5lciBgc2NvcGUuJGJyZWFrKHJlYXNvbilgIGNhbGwgaW5zaWRlIHRoaXMgc3ViZmxvd1xuICAgKiBwcm9wYWdhdGVzIHVwIHRvIHRoZSBwYXJlbnQg4oCUIGkuZS4sIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYCBpcyBzZXRcbiAgICogYWZ0ZXIgdGhlIHN1YmZsb3cgZXhpdHMsIHRlcm1pbmF0aW5nIHRoZSBwYXJlbnQncyBvdXRlciBsb29wIHRvby5cbiAgICpcbiAgICogKipEZWZhdWx0OiBgZmFsc2VgKiogKGN1cnJlbnQgYmVoYXZpb3VyIOKAlCBpbm5lciBicmVhayBzdG9wcyBvbmx5IHRoZVxuICAgKiBzdWJmbG93OyBwYXJlbnQgY29udGludWVzKS5cbiAgICpcbiAgICogIyMgV2hlbiB0byB1c2VcbiAgICpcbiAgICogU2V0IGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgb24gc3ViZmxvdyBtb3VudHMgdGhhdCByZXByZXNlbnRcbiAgICogKip0ZXJtaW5hbCoqIGJyYW5jaGVzIOKAlCBcImlmIHRoaXMgc3ViZmxvdyBmaXJlcywgdGhlIG91dGVyIGxvb3AgaXNcbiAgICogZG9uZVwiLiBFeGFtcGxlczpcbiAgICpcbiAgICogLSBBIGh1bWFuLXJldmlldyBydW5uZXIgdGhhdCB0YWtlcyBvdmVyIGZyb20gYW4gYWdlbnQncyB0b29sLWNhbGxpbmdcbiAgICogICBsb29wIGFuZCBwcm9kdWNlcyB0aGUgZmluYWwgcmVzcG9uc2UuXG4gICAqIC0gQSBzYWZldHktZ2F0ZSBzdWJmbG93IHRoYXQgaGFsdHMgdGhlIG91dGVyIHdvcmtmbG93IHdoZW4gYSBwb2xpY3lcbiAgICogICB2aW9sYXRpb24gaXMgZGV0ZWN0ZWQuXG4gICAqIC0gQW4gZXJyb3ItcmVjb3Zlcnkgc3ViZmxvdyB0aGF0IHJlc3RvcmVzIHN0YXRlIGFuZCB0aGVuIHRlcm1pbmF0ZXMuXG4gICAqXG4gICAqICMjIFNlbWFudGljc1xuICAgKlxuICAgKiAxLiBJbnNpZGUgdGhlIHN1YmZsb3csIGEgc3RhZ2UgY2FsbHMgYHNjb3BlLiRicmVhayhyZWFzb24pYC5cbiAgICogMi4gVGhlIHN1YmZsb3cncyBvd24gZXhlY3V0aW9uIHN0b3BzIChub3JtYWwgYCRicmVha2AgYmVoYXZpb3VyKS5cbiAgICogMy4gYFN1YmZsb3dFeGVjdXRvcmAgaW5zcGVjdHMgdGhlIHN1YmZsb3cncyBleGl0IHN0YXRlLiBJZlxuICAgKiAgICBgcHJvcGFnYXRlQnJlYWsgPT09IHRydWVgIEFORCB0aGUgaW5uZXIgYnJlYWsgZmlyZWQsIGl0IGZvcndhcmRzXG4gICAqICAgIHRoZSBicmVhayAoYW5kIGl0cyByZWFzb24pIHRvIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYC5cbiAgICogNC4gVGhlIHBhcmVudCB0cmF2ZXJzZXIgc2VlcyBgc2hvdWxkQnJlYWtgIG9uIGl0cyBuZXh0IHN0ZXAgYW5kIGV4aXRzLlxuICAgKiA1LiBBIGBGbG93UmVjb3JkZXIub25CcmVha2AgZXZlbnQgZmlyZXMgYXQgdGhlIHBhcmVudC1tb3VudCBsZXZlbCB3aXRoXG4gICAqICAgIGBwcm9wYWdhdGVkRnJvbVN1YmZsb3dgID0gdGhlIHN1YmZsb3cncyBpZCBhbmQgdGhlIGlubmVyIHJlYXNvbi5cbiAgICpcbiAgICogIyMgUGFyYWxsZWwvZmFuLW91dFxuICAgKlxuICAgKiBGb2xsb3dzIHRoZSBleGlzdGluZyBsaWJyYXJ5IHJ1bGUgaW4gYENoaWxkcmVuRXhlY3V0b3JgOiB0aGUgcGFyZW50XG4gICAqIGJyZWFrcyBvbmx5IHdoZW4gKipldmVyeSoqIGNoaWxkIG9mIGEgZm9yayBicm9rZS4gQSBzaW5nbGVcbiAgICogYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCBzdWJmbG93IGNvbnRyaWJ1dGluZyBpdHMgYnJlYWsgdG8gdGhlIGNvdW50XG4gICAqIGRvZXMgbm90IG9uIGl0cyBvd24gdGVybWluYXRlIHRoZSBwYXJlbnQgZmFuLW91dC5cbiAgICpcbiAgICogIyMgb3V0cHV0TWFwcGVyIHN0aWxsIHJ1bnNcbiAgICpcbiAgICogVGhlIHN1YmZsb3cncyBgb3V0cHV0TWFwcGVyYCAoaWYgc3VwcGxpZWQpIEFMV0FZUyBydW5zIGJlZm9yZSB0aGVcbiAgICogYnJlYWsgcHJvcGFnYXRlcywgc28gdGhlIHN1YmZsb3cncyBwYXJ0aWFsIHN0YXRlIGlzIHN0aWxsIHdyaXR0ZW4gdG9cbiAgICogdGhlIHBhcmVudCBzY29wZS4gVGhpcyBpcyBpbnRlbnRpb25hbCDigJQgdGhlIHR5cGljYWwgdXNlIGNhc2UgaXMgYW5cbiAgICogXCJlc2NhbGF0aW9uXCIgc3ViZmxvdyB3aG9zZSBvdXRwdXQgSVMgdGhlIGZpbmFsIGFuc3dlciB0aGF0IG5lZWRzIHRvXG4gICAqIGxhbmQgaW4gdGhlIHBhcmVudCBzY29wZSBiZWZvcmUgdGhlIG91dGVyIGxvb3AgdGVybWluYXRlcy4gSWYgeW91XG4gICAqIHdhbnQgdG8gc3VwcHJlc3Mgb3V0cHV0IG1hcHBpbmcgb24gYnJlYWssIGNoZWNrIHRoZSBicmVhayBzdGF0ZVxuICAgKiBpbnNpZGUgeW91ciBgb3V0cHV0TWFwcGVyYCBhbmQgcmV0dXJuIGB7fWAgZWFybHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwcm9wYWdhdGVCcmVhaz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1Jlc3VsdCB7XG4gIHN1YmZsb3dJZDogc3RyaW5nO1xuICBzdWJmbG93TmFtZTogc3RyaW5nO1xuICB0cmVlQ29udGV4dDoge1xuICAgIGdsb2JhbENvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHN0YWdlQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGhpc3Rvcnk6IHVua25vd25bXTtcbiAgfTtcbiAgcGFyZW50U3RhZ2VJZDogc3RyaW5nO1xuICBwaXBlbGluZVN0cnVjdHVyZT86IHVua25vd247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ViZmxvdyBUcmF2ZXJzZXIgRmFjdG9yeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogU3ViZmxvd1RyYXZlcnNlckZhY3Rvcnkg4oCUIENyZWF0ZXMgYSBGbG93Y2hhcnRUcmF2ZXJzZXIgZm9yIHN1YmZsb3cgZXhlY3V0aW9uLlxuICpcbiAqIEluamVjdGVkIGludG8gU3ViZmxvd0V4ZWN1dG9yIHRvIGJyZWFrIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5OlxuICogRmxvd2NoYXJ0VHJhdmVyc2VyIOKGkiBTdWJmbG93RXhlY3V0b3Ig4oaSIEZsb3djaGFydFRyYXZlcnNlci5cbiAqXG4gKiBUaGUgZmFjdG9yeSBjYXB0dXJlcyBwYXJlbnQgdHJhdmVyc2VyIGNvbmZpZyAoc3RhZ2VNYXAsIHNjb3BlRmFjdG9yeSwgbmFycmF0aXZlLCBldGMuKVxuICogaW4gYSBjbG9zdXJlLiBTdWJmbG93RXhlY3V0b3IgY2FsbHMgaXQgd2l0aCBzdWJmbG93LXNwZWNpZmljIG92ZXJyaWRlcyAocm9vdCwgcnVudGltZSwgaW5wdXQpLlxuICogVGhlIHJldHVybmVkIHRyYXZlcnNlciB1c2VzIHRoZSBTQU1FIDctcGhhc2UgYWxnb3JpdGhtIGFzIHRoZSB0b3AtbGV2ZWwgdHJhdmVyc2VyLFxuICogc28gZGVjaWRlcnMsIHNlbGVjdG9ycywgbG9vcHMsIGxhenkgc3ViZmxvd3MsIGFuZCBhYm9ydCBzaWduYWxzIGFsbCB3b3JrIGluc2lkZSBzdWJmbG93cy5cbiAqL1xuZXhwb3J0IHR5cGUgU3ViZmxvd1RyYXZlcnNlckZhY3Rvcnk8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChvcHRpb25zOiB7XG4gIC8qKiBSb290IG5vZGUgb2YgdGhlIHN1YmZsb3cgKHdpdGggaXNTdWJmbG93Um9vdCBzdHJpcHBlZCkuICovXG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKiogSXNvbGF0ZWQgZXhlY3V0aW9uIHJ1bnRpbWUgZm9yIHRoZSBzdWJmbG93LiAqL1xuICBleGVjdXRpb25SdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZTtcbiAgLyoqIE1hcHBlZCBpbnB1dCBmcm9tIHBhcmVudCBzY29wZSAoYmVjb21lcyByZWFkT25seUNvbnRleHQgZm9yIHN0YWdlcykuICovXG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIg4oCUIHVzZWQgYXMgYnJhbmNoUGF0aCBmb3IgbmFycmF0aXZlIGNvbnRleHQuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbn0pID0+IFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCwgVFNjb3BlPjtcblxuLyoqXG4gKiBIYW5kbGUgcmV0dXJuZWQgYnkgU3ViZmxvd1RyYXZlcnNlckZhY3RvcnkuXG4gKiBQcm92aWRlcyBleGVjdXRlKCkgKyBhY2Nlc3MgdG8gbmVzdGVkIHN1YmZsb3cgcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKiogRXhlY3V0ZSB0aGUgc3ViZmxvdydzIGdyYXBoIHVzaW5nIHRoZSBmdWxsIDctcGhhc2UgdHJhdmVyc2FsIGFsZ29yaXRobS4gKi9cbiAgZXhlY3V0ZSgpOiBQcm9taXNlPFRyYXZlcnNhbFJlc3VsdD47XG4gIC8qKiBDb2xsZWN0IG5lc3RlZCBzdWJmbG93IHJlc3VsdHMgKGZyb20gc3ViZmxvd3MgbW91bnRlZCBpbnNpZGUgdGhpcyBzdWJmbG93KS4gKi9cbiAgZ2V0U3ViZmxvd1Jlc3VsdHMoKTogTWFwPHN0cmluZywgU3ViZmxvd1Jlc3VsdD47XG4gIC8qKlxuICAgKiBGaW5hbCBicmVhayBzdGF0ZSBvZiB0aGUgc3ViZmxvdyBhZnRlciBgZXhlY3V0ZSgpYCByZXR1cm5zLlxuICAgKlxuICAgKiAgIC0gYHNob3VsZEJyZWFrOiB0cnVlYCAg4oaSIGEgc3RhZ2UgaW5zaWRlIHRoZSBzdWJmbG93IGNhbGxlZFxuICAgKiAgICAgYHNjb3BlLiRicmVhayhyZWFzb24pYCwgc3RvcHBpbmcgdGhlIHN1YmZsb3cncyBvd24gdHJhdmVyc2FsLlxuICAgKiAgIC0gYHJlYXNvbmAgICAgICAgICAgICAg4oaSIHRoZSBvcHRpb25hbCBzdHJpbmcgcGFzc2VkIHRvIGAkYnJlYWtgLlxuICAgKlxuICAgKiBVc2VkIGJ5IGBTdWJmbG93RXhlY3V0b3JgIHRvIGltcGxlbWVudCBgU3ViZmxvd01vdW50T3B0aW9ucy5wcm9wYWdhdGVCcmVha2A6XG4gICAqIGlmIHRoZSBtb3VudCBvcHRzIGluIEFORCB0aGUgc3ViZmxvdyBicm9rZSwgdGhlIHBhcmVudCdzIGJyZWFrIGZsYWcgaXNcbiAgICogZm9yd2FyZGVkLlxuICAgKi9cbiAgZ2V0QnJlYWtTdGF0ZSgpOiB7IHNob3VsZEJyZWFrOiBib29sZWFuOyByZWFzb24/OiBzdHJpbmcgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUnVudGltZSBJbnRlcmZhY2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIElFeGVjdXRpb25SdW50aW1lIOKAlCBJbnRlcmZhY2UgZm9yIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIERlZmluZXMgdGhlIGNvbnRyYWN0IHRoYXQgZW5naW5lIGhhbmRsZXJzIG5lZWQgZnJvbSB0aGUgcnVubmVyIGxheWVyLFxuICogYXZvaWRpbmcgY2lyY3VsYXIgaW1wb3J0cyBiZXR3ZWVuIGVuZ2luZS8gYW5kIHJ1bm5lci8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUV4ZWN1dGlvblJ1bnRpbWUge1xuICBnbG9iYWxTdG9yZTogeyBnZXRTdGF0ZSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIGV4ZWN1dGlvbkhpc3Rvcnk6IHsgbGlzdCgpOiB1bmtub3duW10gfTtcbiAgZ2V0U25hcHNob3Qob3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9KToge1xuICAgIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuICAgIGNvbW1pdExvZzogdW5rbm93bltdO1xuICAgIHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmVjb3JkZXJzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT47XG4gIH07XG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gRW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSwgcHJvcGFnYXRlcyB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV4ZWN1dGlvbkVudiDigJQgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzIHRoYXQgcHJvcGFnYXRlIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycy5cbiAqXG4gKiBMaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHM6IHJlYWQtb25seSwgaW5oZXJpdGVkIGJ5IGNoaWxkIGV4ZWN1dG9ycyxcbiAqIGluZnJhc3RydWN0dXJlLW9ubHkgKG5vdCBidXNpbmVzcyBsb2dpYykuXG4gKlxuICogTGl0bXVzIHRlc3Q6IENyZWF0ZWQgZXh0ZXJuYWwgdG8gdGhlIGZsb3djaGFydCArIHBhc3NlZCBpbiBmb3IgZXhlY3V0aW9uID0gZW52LlxuICogQnVzaW5lc3MgY29uZmlnIGZvciBhIHNwZWNpZmljIGZsb3djaGFydCA9IGFyZ3MgKGdldEFyZ3MoKSkuXG4gKlxuICogSW50ZW50aW9uYWxseSBhIGNsb3NlZCB0eXBlIOKAlCBub3QgZXh0ZW5zaWJsZSB0byBwcmV2ZW50IGNvdXBsaW5nIGJldHdlZW5cbiAqIHBhcmVudCBhbmQgY2hpbGQgZmxvd2NoYXJ0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25FbnYge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbiBhY3Jvc3MgbmVzdGVkIGV4ZWN1dG9ycy4gKi9cbiAgcmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGJ1ZGdldCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIFRyYWNlIGlkZW50aWZpZXIgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmcgLyBvYnNlcnZhYmlsaXR5LiAqL1xuICByZWFkb25seSB0cmFjZUlkPzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhhbmRsZXIgRGVwZW5kZW5jaWVzIChESSBiYWcpIOKAlCB3YXMgUGlwZWxpbmVDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBIYW5kbGVyRGVwcyDigJQgRGVwZW5kZW5jeSBpbmplY3Rpb24gYmFnIHBhc3NlZCB0byBhbGwgaGFuZGxlciBtb2R1bGVzLlxuICpcbiAqIFByb3ZpZGVzIHNoYXJlZCBzdGF0ZSAoc3RhZ2VNYXAsIHJ1bnRpbWUsIHNjb3BlRmFjdG9yeSwgZXRjLikgd2l0aG91dFxuICogaGFuZGxlcnMgbmVlZGluZyB0byBpbXBvcnQgdGhlIHRyYXZlcnNlciBkaXJlY3RseS4gQXZvaWRzIGNpcmN1bGFyIGRlcHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlckRlcHM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIHNjb3BlRmFjdG9yeTogU2NvcGVGYWN0b3J5PFRTY29wZT47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlcnJvcjogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgc3RyZWFtSGFuZGxlcnM/OiBTdHJlYW1IYW5kbGVycztcbiAgc2NvcGVQcm90ZWN0aW9uTW9kZTogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcHJvcGFnYXRlcyB0byBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LiAqL1xuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnY7XG4gIG5hcnJhdGl2ZUdlbmVyYXRvcjogSUNvbnRyb2xGbG93TmFycmF0aXZlO1xuICBsb2dnZXI6IElMb2dnZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKipcbiAgICogT24gcmVzdW1lLCB0aGUgcGVyLXN1YmZsb3cgc2NvcGUgY2FwdHVyZXMgZnJvbSB0aGUgY2hlY2twb2ludC5cbiAgICogS2V5ZWQgYnkgcGF0aC1wcmVmaXhlZCBgc3ViZmxvd0lkYCAobWF0Y2hlcyBgUGF1c2VTaWduYWwuc3ViZmxvd1BhdGhgKS5cbiAgICpcbiAgICogYFN1YmZsb3dFeGVjdXRvcmAgY29uc3VsdHMgdGhpcyBvbiBlbnRyeTogaWYgYSBrZXkgbWF0Y2hlcyB0aGVcbiAgICogY3VycmVudCBzdWJmbG93IGlkLCB0aGUgbmVzdGVkIHJ1bnRpbWUgaXMgc2VlZGVkIGZyb20gdGhpcyBzdGF0ZVxuICAgKiBhbmQgdGhlIGlucHV0TWFwcGVyIGlzIFNLSVBQRUQgKHRoZSBjYXB0dXJlZCBzdGF0ZSBhbHJlYWR5XG4gICAqIHJlZmxlY3RzIHBvc3QtaW5wdXQgcHJlLXBhdXNlIG1lbW9yeSkuIFRoaXMgaXMgd2hhdCBtYWtlc1xuICAgKiBjcm9zcy1leGVjdXRvciByZXN1bWUgd29yayBmb3IgcGF1c2VzIElOU0lERSBhIHN1YmZsb3cuXG4gICAqXG4gICAqIFVuZGVmaW5lZCBvbiBub3JtYWwgYHJ1bigpYCBwYXRocyDigJQgb25seSB0aGUgcmVzdW1lIHBhdGggc2V0cyBpdC5cbiAgICovXG4gIHN1YmZsb3dTdGF0ZXNGb3JSZXN1bWU/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG59XG5cbi8qKiBPcHRpb25zIGZvciBGbG93Q2hhcnRFeGVjdXRvci5ydW4oKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuT3B0aW9ucyB7XG4gIC8qKiBBYm9ydFNpZ25hbCBmb3IgY29vcGVyYXRpdmUgY2FuY2VsbGF0aW9uLiAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBDcmVhdGVzIGFuIGludGVybmFsIEFib3J0Q29udHJvbGxlci4gKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogUnVudGltZSBpbnB1dCBkYXRhIGZvciB0aGUgcGlwZWxpbmUuXG4gICAqIEJlY29tZXMgdGhlIHJlYWRPbmx5Q29udGV4dCBhY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0QXJncygpYC5cbiAgICogU3RhZ2VzIGNhbm5vdCBvdmVyd3JpdGUgdGhlc2Uga2V5cyB3aXRoIGBzZXRWYWx1ZSgpYC5cbiAgICovXG4gIGlucHV0PzogdW5rbm93bjtcbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5IGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZVxuICAgKiB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMgKGxpa2UgYHByb2Nlc3MuZW52YCBmb3IgZmxvd2NoYXJ0cykuXG4gICAqIEFjY2Vzc2libGUgdmlhIGBzY29wZS5nZXRFbnYoKWAuIEluaGVyaXRlZCBieSBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgZW52PzogRXhlY3V0aW9uRW52O1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIG1heGltdW0gcmVjdXJzaXZlIGBleGVjdXRlTm9kZWAgZGVwdGggZm9yIHRoaXMgcnVuLlxuICAgKiBEZWZhdWx0cyB0byBgRmxvd2NoYXJ0VHJhdmVyc2VyLk1BWF9FWEVDVVRFX0RFUFRIYCAoNTAwKS5cbiAgICogVXNlZnVsIHdoZW4gZGVlcGx5IG5lc3RlZCBzdWJmbG93cyBvciBsb25nIGNoYWlucyBuZWVkIG1vcmUgaGVhZHJvb20uXG4gICAqIE11c3QgYmUgPj0gMS5cbiAgICovXG4gIG1heERlcHRoPzogbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3cgQ29udHJvbCBOYXJyYXRpdmUg4oCUIGNhbm9uaWNhbCBkZWZpbml0aW9ucyBsaXZlIGluIG1lbW9yeS90eXBlcy50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIHsgRmxvd0NvbnRyb2xUeXBlLCBGbG93TWVzc2FnZSB9O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRyYXZlcnNhbCBFeHRyYWN0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTdHJ1Y3R1cmVNZXRhZGF0YSB7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlU25hcHNob3Q8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBjb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHN0ZXBOdW1iZXI6IG51bWJlcjtcbiAgc3RydWN0dXJlTWV0YWRhdGE6IFJ1bnRpbWVTdHJ1Y3R1cmVNZXRhZGF0YTtcbiAgc2NvcGVTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBkZWJ1Z0luZm8/OiB7XG4gICAgbG9nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBtZXRyaWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBldmFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZmxvd01lc3NhZ2VzPzogRmxvd01lc3NhZ2VbXTtcbiAgfTtcbiAgc3RhZ2VPdXRwdXQ/OiB1bmtub3duO1xuICBlcnJvckluZm8/OiB7IHR5cGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH07XG4gIGhpc3RvcnlJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgVHJhdmVyc2FsRXh0cmFjdG9yPFRSZXN1bHQgPSB1bmtub3duPiA9IChzbmFwc2hvdDogU3RhZ2VTbmFwc2hvdCkgPT4gVFJlc3VsdCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdG9yRXJyb3Ige1xuICBzdGFnZVBhdGg6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBlcnJvcjogdW5rbm93bjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBOb2RlIFJlc3VsdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIE5vZGVSZXN1bHRUeXBlID0ge1xuICBpZDogc3RyaW5nO1xuICByZXN1bHQ6IHVua25vd247XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUmVzcG9uc2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHQgPSB7XG4gIHJlc3VsdDogc3RyaW5nIHwgRXJyb3I7XG4gIGlzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHRzID0geyBbYnJhbmNoSWQ6IHN0cmluZ106IEJyYW5jaFJlc3VsdCB9O1xuZXhwb3J0IHR5cGUgVHJhdmVyc2FsUmVzdWx0ID0gQnJhbmNoUmVzdWx0cyB8IHN0cmluZyB8IEVycm9yO1xuXG4vKiogUmV0dXJuZWQgYnkgcnVuKCkvcmVzdW1lKCkgd2hlbiBleGVjdXRpb24gcGF1c2VzLiAqL1xuZXhwb3J0IHR5cGUgUGF1c2VkUmVzdWx0ID0ge1xuICByZWFkb25seSBwYXVzZWQ6IHRydWU7XG4gIHJlYWRvbmx5IGNoZWNrcG9pbnQ6IGltcG9ydCgnLi4vcGF1c2UvdHlwZXMuanMnKS5GbG93Y2hhcnRDaGVja3BvaW50O1xufTtcblxuLyoqIEZ1bGwgcmV0dXJuIHR5cGUgb2YgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkgYW5kIHJlc3VtZSgpLiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0b3JSZXN1bHQgPSBUcmF2ZXJzYWxSZXN1bHQgfCBQYXVzZWRSZXN1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKGZvciB2aXN1YWxpemF0aW9uKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnZGVjaWRlcidcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdmb3JrJ1xuICAgIHwgJ3N0cmVhbWluZydcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAndXNlcidcbiAgICB8ICd0b29sJ1xuICAgIHwgJ2Z1bmN0aW9uJ1xuICAgIHwgJ3NlcXVlbmNlJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZTtcbiAgYnJhbmNoZXM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVkUGlwZWxpbmVOb2RlPjtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgaGFzU3VidHJlZT86IGJvb2xlYW47XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93Q2hhcnQgaXMgZGVmaW5lZCBpbiBgLi4vYnVpbGRlci90eXBlcy50c2AuIFRoZSBlbmdpbmUgbGF5ZXIgY29uc3VtZXMgaXRcbi8vIHZpYSBpbXBvcnQgZnJvbSB0aGVyZS4gQSBkdXBsaWNhdGUgbWluaW1hbCBkZWZpbml0aW9uIHByZXZpb3VzbHkgbGl2ZWQgaGVyZVxuLy8gYW5kIGNhdXNlZCBUUyBjb25mdXNpb24gYXQgY29tcG9zaXRpb24gYm91bmRhcmllcyAoQ29tcG9zYWJsZVJ1bm5lciB2c1xuLy8gYWRkU3ViRmxvd0NoYXJ0IHBhcmFtZXRlcikuIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggbm93IGxpdmVzIGluIGJ1aWxkZXIvLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBbGlhcyBmb3IgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB1c2VkIGFzIGZ1bGwgc3RydWN0dXJlICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlICYge1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG59O1xuIl19
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWFILE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBZTlFLG9DQUFvQztBQUNwQyx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFZO0lBQ3BDLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdkUsR0FBRyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUNyRSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLEtBQUssRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDekUsSUFBSSxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztDQUN4RSxDQUFDO0FBbURGLDhFQUE4RTtBQUM5RSxVQUFVO0FBQ1YsOEVBQThFO0FBRTlFOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN4Qix3RkFBd0Y7SUFDeEYsbUNBQWlCLENBQUE7SUFDakIseUVBQXlFO0lBQ3pFLHFDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxjQUFjLEtBQWQsY0FBYyxRQUt6QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdHlwZXMudHMg4oCUIEFsbCB0eXBlIGRlZmluaXRpb25zIGZvciB0aGUgZW5naW5lIGxpYnJhcnkuXG4gKlxuICogQ2VudHJhbGl6ZXMgdHlwZSBkZWZpbml0aW9ucyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gKiBFdmVyeSBoYW5kbGVyIHJlY2VpdmVzIEhhbmRsZXJEZXBzICh0aGUgREkgYmFnKSBpbnN0ZWFkIG9mIGltcG9ydGluZyB0aGUgdHJhdmVyc2VyLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLy8gUmUtZXhwb3J0IFN0YWdlTm9kZSB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgRGVjaWRlciwgU2VsZWN0b3IsIFN0YWdlTm9kZSB9IGZyb20gJy4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcblxuLy8gUmUtZXhwb3J0IHBhdXNlIHR5cGVzIGZyb20gcGF1c2UvIGxpYnJhcnlcbmV4cG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGF1c2FibGVIYW5kbGVyLCBQYXVzZVJlc3VsdCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcbmV4cG9ydCB7IGlzUGF1c2VSZXN1bHQsIGlzUGF1c2VTaWduYWwsIFBhdXNlU2lnbmFsIH0gZnJvbSAnLi4vcGF1c2UvaW5kZXguanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExvZ2dlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBNaW5pbWFsIGxvZ2dpbmcgY29udHJhY3QuIE1pcnJvcnMgQ29uc29sZSBBUEkgc3Vic2V0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyIHtcbiAgaW5mbyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBsb2cobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZGVidWcobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZXJyb3IobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgd2FybihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xufVxuXG4vKiogRGVmYXVsdCBjb25zb2xlLWJhc2VkIGxvZ2dlci4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0tIHRyaXZpYWwgY29uc29sZSBkZWxlZ2F0aW9uICovXG5leHBvcnQgY29uc3QgZGVmYXVsdExvZ2dlcjogSUxvZ2dlciA9IHtcbiAgaW5mbzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmluZm8obWVzc2FnZSwgLi4uYXJncyksXG4gIGxvZzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgZGVidWc6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgZXJyb3I6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5lcnJvcihtZXNzYWdlLCAuLi5hcmdzKSxcbiAgd2FybjogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLndhcm4obWVzc2FnZSwgLi4uYXJncyksXG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0YWdlIEZ1bmN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIENhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgdG9rZW5zIGR1cmluZyBzdHJlYW1pbmcuICovXG5leHBvcnQgdHlwZSBTdHJlYW1DYWxsYmFjayA9ICh0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIHN0YWdlIGhhbmRsZXJzLlxuICogLSBUT3V0OiByZXR1cm4gdHlwZSBwcm9kdWNlZCBieSB0aGUgc3RhZ2VcbiAqIC0gVFNjb3BlOiB0aGUgc2NvcGUgb2JqZWN0IHBhc3NlZCB0byB0aGUgc3RhZ2VcbiAqIC0gT3B0aW9uYWwgM3JkIHBhcmFtZXRlciBgc3RyZWFtQ2FsbGJhY2tgIGluamVjdGVkIGZvciBzdHJlYW1pbmcgc3RhZ2VzLlxuICovXG5leHBvcnQgdHlwZSBTdGFnZUZ1bmN0aW9uPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4gIHN0cmVhbUNhbGxiYWNrPzogU3RyZWFtQ2FsbGJhY2ssXG4pID0+IFByb21pc2U8VE91dCB8IHZvaWQ+IHwgVE91dCB8IHZvaWQ7XG5cbi8qKlxuICogU3RhZ2UgZnVuY3Rpb24gZm9yIHBhdXNhYmxlIHN0YWdlcyDigJQgcmV0dXJuIHZhbHVlIGlzIHRoZSBwYXVzZSBkYXRhIChhbnkgdHlwZSkuXG4gKiBSZXR1cm4gbm9uLXZvaWQgdG8gcGF1c2UsIHJldHVybiB2b2lkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICovXG5leHBvcnQgdHlwZSBQYXVzYWJsZVN0YWdlRnVuY3Rpb248VFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbikgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd247XG5cbi8qKiBGYWN0b3J5IHRoYXQgY3JlYXRlcyBhIHNjb3BlIGluc3RhbmNlIGZvciBlYWNoIHN0YWdlLiAqL1xuZXhwb3J0IHR5cGUgU2NvcGVGYWN0b3J5PFRTY29wZSA9IGFueT4gPSAoXG4gIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd24sXG4gIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudixcbikgPT4gVFNjb3BlO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0cmVhbWluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRva2VuSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCBmdWxsVGV4dD86IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1IYW5kbGVycyB7XG4gIG9uVG9rZW4/OiBTdHJlYW1Ub2tlbkhhbmRsZXI7XG4gIG9uU3RhcnQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xuICBvbkVuZD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ViZmxvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ29udHJvbHMgaG93IGFycmF5IHZhbHVlcyBmcm9tIG91dHB1dE1hcHBlciBhcmUgbWVyZ2VkIGludG8gcGFyZW50IHNjb3BlLlxuICovXG5leHBvcnQgZW51bSBBcnJheU1lcmdlTW9kZSB7XG4gIC8qKiBBcHBlbmQgc3ViZmxvdyBvdXRwdXQgdG8gZXhpc3RpbmcgcGFyZW50IGFycmF5OiBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXS4gRGVmYXVsdC4gKi9cbiAgQ29uY2F0ID0gJ2NvbmNhdCcsXG4gIC8qKiBPdmVyd3JpdGUgcGFyZW50IGFycmF5IHdpdGggc3ViZmxvdyBvdXRwdXQuIFVzZSBmb3IgRHluYW1pYyBsb29wcy4gKi9cbiAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSA9IGFueSwgVFN1YmZsb3dJbnB1dCA9IGFueSwgVFN1YmZsb3dPdXRwdXQgPSBhbnk+IHtcbiAgaW5wdXRNYXBwZXI/OiAocGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gVFN1YmZsb3dJbnB1dDtcbiAgLyoqXG4gICAqIE1hcHMgc3ViZmxvdyBvdXRwdXQgYmFjayBpbnRvIHBhcmVudCBzY29wZS5cbiAgICpcbiAgICogKipBcnJheSBtZXJnZSBiZWhhdmlvcioqIGlzIGNvbnRyb2xsZWQgYnkgYGFycmF5TWVyZ2VgOlxuICAgKiAtIGAnY29uY2F0J2AgKGRlZmF1bHQpOiBgWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV1gIOKAlCByZXR1cm4gb25seSAqKmRlbHRhKiogaXRlbXNcbiAgICogLSBgJ3JlcGxhY2UnYDogb3ZlcndyaXRlcyB0aGUgcGFyZW50IHZhbHVlIOKAlCByZXR1cm4gdGhlIGZ1bGwgYXJyYXlcbiAgICpcbiAgICogU2NhbGFyIHZhbHVlcyBhcmUgYWx3YXlzIHJlcGxhY2VkIHJlZ2FyZGxlc3Mgb2YgYGFycmF5TWVyZ2VgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIERlbHRhIG1vZGUgKGRlZmF1bHQpIOKAlCByZXR1cm4gb25seSBuZXcgaXRlbXMsIGNvbmNhdCBhcHBlbmRzXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBtZXNzYWdlczogc2YubmV3TWVzc2FnZXMgfSlcbiAgICpcbiAgICogLy8gUmVwbGFjZSBtb2RlIOKAlCByZXR1cm4gZnVsbCBhcnJheSwgcGFyZW50IHZhbHVlIGlzIG92ZXJ3cml0dGVuXG4gICAqIC8vIFVzZWZ1bCBpbiBEeW5hbWljIGxvb3BzIHdoZXJlIHRoZSBzdWJmbG93IHJlY29tcHV0ZXMgdGhlIGZ1bGwgdmFsdWUgZWFjaCBpdGVyYXRpb25cbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IHRvb2xEZXNjcmlwdGlvbnM6IHNmLnRvb2xEZXNjcmlwdGlvbnMgfSksXG4gICAqIGFycmF5TWVyZ2U6IEFycmF5TWVyZ2VNb2RlLlJlcGxhY2UsXG4gICAqXG4gICAqIC8vIFNjYWxhcnMgYXJlIGZpbmUgaW4gYm90aCBtb2RlcyDigJQgYWx3YXlzIHJlcGxhY2VkXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBzdGF0dXM6IHNmLnJlc3VsdCwgY291bnQ6IHNmLnRvdGFsIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAgICogQXBwbGllcyBvbmx5IHRvIHRvcC1sZXZlbCBhcnJheSBrZXlzLiBOZXN0ZWQgYXJyYXlzIGluc2lkZSBvYmplY3RzXG4gICAqIGFsd2F5cyB1c2UgYXBwZW5kIChhcHBlbmRUb0FycmF5KSByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgQXJyYXlNZXJnZU1vZGUuQ29uY2F0XG4gICAqL1xuICBhcnJheU1lcmdlPzogQXJyYXlNZXJnZU1vZGU7XG5cbiAgLyoqXG4gICAqIFNUUlVDVFVSRS1PTkxZOiB0aGUgZG93bnN0cmVhbSBzdGFnZSBpZCB0aGlzIGJyYW5jaCdzIGNvbnZlcmdlbmNlIGVkZ2VcbiAgICogcG9pbnRzIHRvLCBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IFwiY29udmVyZ2UgYXQgdGhlIG5leHQgbGluZWFyIHN0YWdlLlwiXG4gICAqXG4gICAqIFdoZW4gYSBmb3JrL3NlbGVjdG9yL2RlY2lkZXIgYnJhbmNoIGNhcnJpZXMgYGNvbnZlcmdlQXRgLCBpdHMgdmlzdWFsaXplZFxuICAgKiBgbmV4dGAgZWRnZSBpcyBmaXJlZCB0byB0aGUgbmFtZWQgc3RhZ2UgaW5zdGVhZCBvZiB0byB0aGUgc2hhcmVkXG4gICAqIGNvbnZlcmdlbmNlIG5vZGUgaXRzIHNpYmxpbmdzIHVzZS4gVGhpcyBleHByZXNzZXMgYW4gdW5lcXVhbC1kZXB0aCBtZXJnZVxuICAgKiDigJQgZS5nLiBhIGB0b29sc2Agc2xvdCB0aGF0IGJ5cGFzc2VzIHRoZSBgbWVzc2FnZUFQSWAgYXNzZW1ibHkgbm9kZSBhbmRcbiAgICogcGFpcnMgd2l0aCBpdHMgb3V0cHV0IGF0IGBjYWxsLWxsbWAgKHNvIGBjYWxsLWxsbWAgcmVhZHMgYXMgYSAyLXBhcmVudFxuICAgKiBtZXJnZSksIGZhaXRoZnVsIHRvIHRoZSBBbnRocm9waWMgd2lyZSBwcm90b2NvbCAoc3lzdGVtK21lc3NhZ2VzID0gdGhlXG4gICAqIG1lc3NhZ2UgcGF5bG9hZDsgdG9vbHMgPSBhIHNlcGFyYXRlIHRvcC1sZXZlbCBmaWVsZCkuXG4gICAqXG4gICAqICoqVGhpcyBhZmZlY3RzIHRoZSBTVFJVQ1RVUkUvdG9wb2xvZ3kgZ3JhcGggb25seSoqIOKAlCB0aGUgcnVudGltZSBpc1xuICAgKiB1bmNoYW5nZWQgKHRoZSBicmFuY2gncyBvdXRwdXRzIHJpZGUgc2hhcmVkIHNjb3BlOyB0aGUgbmFtZWQgdGFyZ2V0IHJlYWRzXG4gICAqIHRoZW0gd2hlbiBpdCBydW5zKS4gSXQgZG9lcyBOT1QgaW50cm9kdWNlIGEgam9pbiBiYXJyaWVyLiBUaGUgdGFyZ2V0IGlzIGFcbiAgICogRk9SV0FSRCBzdGFnZSAoYWRkZWQgbGF0ZXIgaW4gdGhlIGNoYWluKSwgc28gaXQgaXMgbm90IHZhbGlkYXRlZCBhdFxuICAgKiBicmFuY2gtZGVjbGFyYXRpb24gdGltZS5cbiAgICovXG4gIGNvbnZlcmdlQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBhbiBpbm5lciBgc2NvcGUuJGJyZWFrKHJlYXNvbilgIGNhbGwgaW5zaWRlIHRoaXMgc3ViZmxvd1xuICAgKiBwcm9wYWdhdGVzIHVwIHRvIHRoZSBwYXJlbnQg4oCUIGkuZS4sIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYCBpcyBzZXRcbiAgICogYWZ0ZXIgdGhlIHN1YmZsb3cgZXhpdHMsIHRlcm1pbmF0aW5nIHRoZSBwYXJlbnQncyBvdXRlciBsb29wIHRvby5cbiAgICpcbiAgICogKipEZWZhdWx0OiBgZmFsc2VgKiogKGN1cnJlbnQgYmVoYXZpb3VyIOKAlCBpbm5lciBicmVhayBzdG9wcyBvbmx5IHRoZVxuICAgKiBzdWJmbG93OyBwYXJlbnQgY29udGludWVzKS5cbiAgICpcbiAgICogIyMgV2hlbiB0byB1c2VcbiAgICpcbiAgICogU2V0IGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgb24gc3ViZmxvdyBtb3VudHMgdGhhdCByZXByZXNlbnRcbiAgICogKip0ZXJtaW5hbCoqIGJyYW5jaGVzIOKAlCBcImlmIHRoaXMgc3ViZmxvdyBmaXJlcywgdGhlIG91dGVyIGxvb3AgaXNcbiAgICogZG9uZVwiLiBFeGFtcGxlczpcbiAgICpcbiAgICogLSBBIGh1bWFuLXJldmlldyBydW5uZXIgdGhhdCB0YWtlcyBvdmVyIGZyb20gYW4gYWdlbnQncyB0b29sLWNhbGxpbmdcbiAgICogICBsb29wIGFuZCBwcm9kdWNlcyB0aGUgZmluYWwgcmVzcG9uc2UuXG4gICAqIC0gQSBzYWZldHktZ2F0ZSBzdWJmbG93IHRoYXQgaGFsdHMgdGhlIG91dGVyIHdvcmtmbG93IHdoZW4gYSBwb2xpY3lcbiAgICogICB2aW9sYXRpb24gaXMgZGV0ZWN0ZWQuXG4gICAqIC0gQW4gZXJyb3ItcmVjb3Zlcnkgc3ViZmxvdyB0aGF0IHJlc3RvcmVzIHN0YXRlIGFuZCB0aGVuIHRlcm1pbmF0ZXMuXG4gICAqXG4gICAqICMjIFNlbWFudGljc1xuICAgKlxuICAgKiAxLiBJbnNpZGUgdGhlIHN1YmZsb3csIGEgc3RhZ2UgY2FsbHMgYHNjb3BlLiRicmVhayhyZWFzb24pYC5cbiAgICogMi4gVGhlIHN1YmZsb3cncyBvd24gZXhlY3V0aW9uIHN0b3BzIChub3JtYWwgYCRicmVha2AgYmVoYXZpb3VyKS5cbiAgICogMy4gYFN1YmZsb3dFeGVjdXRvcmAgaW5zcGVjdHMgdGhlIHN1YmZsb3cncyBleGl0IHN0YXRlLiBJZlxuICAgKiAgICBgcHJvcGFnYXRlQnJlYWsgPT09IHRydWVgIEFORCB0aGUgaW5uZXIgYnJlYWsgZmlyZWQsIGl0IGZvcndhcmRzXG4gICAqICAgIHRoZSBicmVhayAoYW5kIGl0cyByZWFzb24pIHRvIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYC5cbiAgICogNC4gVGhlIHBhcmVudCB0cmF2ZXJzZXIgc2VlcyBgc2hvdWxkQnJlYWtgIG9uIGl0cyBuZXh0IHN0ZXAgYW5kIGV4aXRzLlxuICAgKiA1LiBBIGBGbG93UmVjb3JkZXIub25CcmVha2AgZXZlbnQgZmlyZXMgYXQgdGhlIHBhcmVudC1tb3VudCBsZXZlbCB3aXRoXG4gICAqICAgIGBwcm9wYWdhdGVkRnJvbVN1YmZsb3dgID0gdGhlIHN1YmZsb3cncyBpZCBhbmQgdGhlIGlubmVyIHJlYXNvbi5cbiAgICpcbiAgICogIyMgUGFyYWxsZWwvZmFuLW91dFxuICAgKlxuICAgKiBGb2xsb3dzIHRoZSBleGlzdGluZyBsaWJyYXJ5IHJ1bGUgaW4gYENoaWxkcmVuRXhlY3V0b3JgOiB0aGUgcGFyZW50XG4gICAqIGJyZWFrcyBvbmx5IHdoZW4gKipldmVyeSoqIGNoaWxkIG9mIGEgZm9yayBicm9rZS4gQSBzaW5nbGVcbiAgICogYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCBzdWJmbG93IGNvbnRyaWJ1dGluZyBpdHMgYnJlYWsgdG8gdGhlIGNvdW50XG4gICAqIGRvZXMgbm90IG9uIGl0cyBvd24gdGVybWluYXRlIHRoZSBwYXJlbnQgZmFuLW91dC5cbiAgICpcbiAgICogIyMgb3V0cHV0TWFwcGVyIHN0aWxsIHJ1bnNcbiAgICpcbiAgICogVGhlIHN1YmZsb3cncyBgb3V0cHV0TWFwcGVyYCAoaWYgc3VwcGxpZWQpIEFMV0FZUyBydW5zIGJlZm9yZSB0aGVcbiAgICogYnJlYWsgcHJvcGFnYXRlcywgc28gdGhlIHN1YmZsb3cncyBwYXJ0aWFsIHN0YXRlIGlzIHN0aWxsIHdyaXR0ZW4gdG9cbiAgICogdGhlIHBhcmVudCBzY29wZS4gVGhpcyBpcyBpbnRlbnRpb25hbCDigJQgdGhlIHR5cGljYWwgdXNlIGNhc2UgaXMgYW5cbiAgICogXCJlc2NhbGF0aW9uXCIgc3ViZmxvdyB3aG9zZSBvdXRwdXQgSVMgdGhlIGZpbmFsIGFuc3dlciB0aGF0IG5lZWRzIHRvXG4gICAqIGxhbmQgaW4gdGhlIHBhcmVudCBzY29wZSBiZWZvcmUgdGhlIG91dGVyIGxvb3AgdGVybWluYXRlcy4gSWYgeW91XG4gICAqIHdhbnQgdG8gc3VwcHJlc3Mgb3V0cHV0IG1hcHBpbmcgb24gYnJlYWssIGNoZWNrIHRoZSBicmVhayBzdGF0ZVxuICAgKiBpbnNpZGUgeW91ciBgb3V0cHV0TWFwcGVyYCBhbmQgcmV0dXJuIGB7fWAgZWFybHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwcm9wYWdhdGVCcmVhaz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1Jlc3VsdCB7XG4gIHN1YmZsb3dJZDogc3RyaW5nO1xuICBzdWJmbG93TmFtZTogc3RyaW5nO1xuICB0cmVlQ29udGV4dDoge1xuICAgIGdsb2JhbENvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHN0YWdlQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGhpc3Rvcnk6IHVua25vd25bXTtcbiAgfTtcbiAgcGFyZW50U3RhZ2VJZDogc3RyaW5nO1xuICBwaXBlbGluZVN0cnVjdHVyZT86IHVua25vd247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ViZmxvdyBUcmF2ZXJzZXIgRmFjdG9yeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogU3ViZmxvd1RyYXZlcnNlckZhY3Rvcnkg4oCUIENyZWF0ZXMgYSBGbG93Y2hhcnRUcmF2ZXJzZXIgZm9yIHN1YmZsb3cgZXhlY3V0aW9uLlxuICpcbiAqIEluamVjdGVkIGludG8gU3ViZmxvd0V4ZWN1dG9yIHRvIGJyZWFrIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5OlxuICogRmxvd2NoYXJ0VHJhdmVyc2VyIOKGkiBTdWJmbG93RXhlY3V0b3Ig4oaSIEZsb3djaGFydFRyYXZlcnNlci5cbiAqXG4gKiBUaGUgZmFjdG9yeSBjYXB0dXJlcyBwYXJlbnQgdHJhdmVyc2VyIGNvbmZpZyAoc3RhZ2VNYXAsIHNjb3BlRmFjdG9yeSwgbmFycmF0aXZlLCBldGMuKVxuICogaW4gYSBjbG9zdXJlLiBTdWJmbG93RXhlY3V0b3IgY2FsbHMgaXQgd2l0aCBzdWJmbG93LXNwZWNpZmljIG92ZXJyaWRlcyAocm9vdCwgcnVudGltZSwgaW5wdXQpLlxuICogVGhlIHJldHVybmVkIHRyYXZlcnNlciB1c2VzIHRoZSBTQU1FIDctcGhhc2UgYWxnb3JpdGhtIGFzIHRoZSB0b3AtbGV2ZWwgdHJhdmVyc2VyLFxuICogc28gZGVjaWRlcnMsIHNlbGVjdG9ycywgbG9vcHMsIGxhenkgc3ViZmxvd3MsIGFuZCBhYm9ydCBzaWduYWxzIGFsbCB3b3JrIGluc2lkZSBzdWJmbG93cy5cbiAqL1xuZXhwb3J0IHR5cGUgU3ViZmxvd1RyYXZlcnNlckZhY3Rvcnk8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChvcHRpb25zOiB7XG4gIC8qKiBSb290IG5vZGUgb2YgdGhlIHN1YmZsb3cgKHdpdGggaXNTdWJmbG93Um9vdCBzdHJpcHBlZCkuICovXG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKiogSXNvbGF0ZWQgZXhlY3V0aW9uIHJ1bnRpbWUgZm9yIHRoZSBzdWJmbG93LiAqL1xuICBleGVjdXRpb25SdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZTtcbiAgLyoqIE1hcHBlZCBpbnB1dCBmcm9tIHBhcmVudCBzY29wZSAoYmVjb21lcyByZWFkT25seUNvbnRleHQgZm9yIHN0YWdlcykuICovXG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIg4oCUIHVzZWQgYXMgYnJhbmNoUGF0aCBmb3IgbmFycmF0aXZlIGNvbnRleHQuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbn0pID0+IFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCwgVFNjb3BlPjtcblxuLyoqXG4gKiBIYW5kbGUgcmV0dXJuZWQgYnkgU3ViZmxvd1RyYXZlcnNlckZhY3RvcnkuXG4gKiBQcm92aWRlcyBleGVjdXRlKCkgKyBhY2Nlc3MgdG8gbmVzdGVkIHN1YmZsb3cgcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKiogRXhlY3V0ZSB0aGUgc3ViZmxvdydzIGdyYXBoIHVzaW5nIHRoZSBmdWxsIDctcGhhc2UgdHJhdmVyc2FsIGFsZ29yaXRobS4gKi9cbiAgZXhlY3V0ZSgpOiBQcm9taXNlPFRyYXZlcnNhbFJlc3VsdD47XG4gIC8qKiBDb2xsZWN0IG5lc3RlZCBzdWJmbG93IHJlc3VsdHMgKGZyb20gc3ViZmxvd3MgbW91bnRlZCBpbnNpZGUgdGhpcyBzdWJmbG93KS4gKi9cbiAgZ2V0U3ViZmxvd1Jlc3VsdHMoKTogTWFwPHN0cmluZywgU3ViZmxvd1Jlc3VsdD47XG4gIC8qKlxuICAgKiBGaW5hbCBicmVhayBzdGF0ZSBvZiB0aGUgc3ViZmxvdyBhZnRlciBgZXhlY3V0ZSgpYCByZXR1cm5zLlxuICAgKlxuICAgKiAgIC0gYHNob3VsZEJyZWFrOiB0cnVlYCAg4oaSIGEgc3RhZ2UgaW5zaWRlIHRoZSBzdWJmbG93IGNhbGxlZFxuICAgKiAgICAgYHNjb3BlLiRicmVhayhyZWFzb24pYCwgc3RvcHBpbmcgdGhlIHN1YmZsb3cncyBvd24gdHJhdmVyc2FsLlxuICAgKiAgIC0gYHJlYXNvbmAgICAgICAgICAgICAg4oaSIHRoZSBvcHRpb25hbCBzdHJpbmcgcGFzc2VkIHRvIGAkYnJlYWtgLlxuICAgKlxuICAgKiBVc2VkIGJ5IGBTdWJmbG93RXhlY3V0b3JgIHRvIGltcGxlbWVudCBgU3ViZmxvd01vdW50T3B0aW9ucy5wcm9wYWdhdGVCcmVha2A6XG4gICAqIGlmIHRoZSBtb3VudCBvcHRzIGluIEFORCB0aGUgc3ViZmxvdyBicm9rZSwgdGhlIHBhcmVudCdzIGJyZWFrIGZsYWcgaXNcbiAgICogZm9yd2FyZGVkLlxuICAgKi9cbiAgZ2V0QnJlYWtTdGF0ZSgpOiB7IHNob3VsZEJyZWFrOiBib29sZWFuOyByZWFzb24/OiBzdHJpbmcgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUnVudGltZSBJbnRlcmZhY2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIElFeGVjdXRpb25SdW50aW1lIOKAlCBJbnRlcmZhY2UgZm9yIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIERlZmluZXMgdGhlIGNvbnRyYWN0IHRoYXQgZW5naW5lIGhhbmRsZXJzIG5lZWQgZnJvbSB0aGUgcnVubmVyIGxheWVyLFxuICogYXZvaWRpbmcgY2lyY3VsYXIgaW1wb3J0cyBiZXR3ZWVuIGVuZ2luZS8gYW5kIHJ1bm5lci8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUV4ZWN1dGlvblJ1bnRpbWUge1xuICBnbG9iYWxTdG9yZTogeyBnZXRTdGF0ZSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIGV4ZWN1dGlvbkhpc3Rvcnk6IHsgbGlzdCgpOiB1bmtub3duW10gfTtcbiAgZ2V0U25hcHNob3Qob3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9KToge1xuICAgIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuICAgIGNvbW1pdExvZzogdW5rbm93bltdO1xuICAgIHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmVjb3JkZXJzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT47XG4gIH07XG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gRW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSwgcHJvcGFnYXRlcyB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV4ZWN1dGlvbkVudiDigJQgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzIHRoYXQgcHJvcGFnYXRlIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycy5cbiAqXG4gKiBMaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHM6IHJlYWQtb25seSwgaW5oZXJpdGVkIGJ5IGNoaWxkIGV4ZWN1dG9ycyxcbiAqIGluZnJhc3RydWN0dXJlLW9ubHkgKG5vdCBidXNpbmVzcyBsb2dpYykuXG4gKlxuICogTGl0bXVzIHRlc3Q6IENyZWF0ZWQgZXh0ZXJuYWwgdG8gdGhlIGZsb3djaGFydCArIHBhc3NlZCBpbiBmb3IgZXhlY3V0aW9uID0gZW52LlxuICogQnVzaW5lc3MgY29uZmlnIGZvciBhIHNwZWNpZmljIGZsb3djaGFydCA9IGFyZ3MgKGdldEFyZ3MoKSkuXG4gKlxuICogSW50ZW50aW9uYWxseSBhIGNsb3NlZCB0eXBlIOKAlCBub3QgZXh0ZW5zaWJsZSB0byBwcmV2ZW50IGNvdXBsaW5nIGJldHdlZW5cbiAqIHBhcmVudCBhbmQgY2hpbGQgZmxvd2NoYXJ0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25FbnYge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbiBhY3Jvc3MgbmVzdGVkIGV4ZWN1dG9ycy4gKi9cbiAgcmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGJ1ZGdldCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIFRyYWNlIGlkZW50aWZpZXIgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmcgLyBvYnNlcnZhYmlsaXR5LiAqL1xuICByZWFkb25seSB0cmFjZUlkPzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhhbmRsZXIgRGVwZW5kZW5jaWVzIChESSBiYWcpIOKAlCB3YXMgUGlwZWxpbmVDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBIYW5kbGVyRGVwcyDigJQgRGVwZW5kZW5jeSBpbmplY3Rpb24gYmFnIHBhc3NlZCB0byBhbGwgaGFuZGxlciBtb2R1bGVzLlxuICpcbiAqIFByb3ZpZGVzIHNoYXJlZCBzdGF0ZSAoc3RhZ2VNYXAsIHJ1bnRpbWUsIHNjb3BlRmFjdG9yeSwgZXRjLikgd2l0aG91dFxuICogaGFuZGxlcnMgbmVlZGluZyB0byBpbXBvcnQgdGhlIHRyYXZlcnNlciBkaXJlY3RseS4gQXZvaWRzIGNpcmN1bGFyIGRlcHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlckRlcHM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIHNjb3BlRmFjdG9yeTogU2NvcGVGYWN0b3J5PFRTY29wZT47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlcnJvcjogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgc3RyZWFtSGFuZGxlcnM/OiBTdHJlYW1IYW5kbGVycztcbiAgc2NvcGVQcm90ZWN0aW9uTW9kZTogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcHJvcGFnYXRlcyB0byBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LiAqL1xuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnY7XG4gIG5hcnJhdGl2ZUdlbmVyYXRvcjogSUNvbnRyb2xGbG93TmFycmF0aXZlO1xuICBsb2dnZXI6IElMb2dnZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKipcbiAgICogT24gcmVzdW1lLCB0aGUgcGVyLXN1YmZsb3cgc2NvcGUgY2FwdHVyZXMgZnJvbSB0aGUgY2hlY2twb2ludC5cbiAgICogS2V5ZWQgYnkgcGF0aC1wcmVmaXhlZCBgc3ViZmxvd0lkYCAobWF0Y2hlcyBgUGF1c2VTaWduYWwuc3ViZmxvd1BhdGhgKS5cbiAgICpcbiAgICogYFN1YmZsb3dFeGVjdXRvcmAgY29uc3VsdHMgdGhpcyBvbiBlbnRyeTogaWYgYSBrZXkgbWF0Y2hlcyB0aGVcbiAgICogY3VycmVudCBzdWJmbG93IGlkLCB0aGUgbmVzdGVkIHJ1bnRpbWUgaXMgc2VlZGVkIGZyb20gdGhpcyBzdGF0ZVxuICAgKiBhbmQgdGhlIGlucHV0TWFwcGVyIGlzIFNLSVBQRUQgKHRoZSBjYXB0dXJlZCBzdGF0ZSBhbHJlYWR5XG4gICAqIHJlZmxlY3RzIHBvc3QtaW5wdXQgcHJlLXBhdXNlIG1lbW9yeSkuIFRoaXMgaXMgd2hhdCBtYWtlc1xuICAgKiBjcm9zcy1leGVjdXRvciByZXN1bWUgd29yayBmb3IgcGF1c2VzIElOU0lERSBhIHN1YmZsb3cuXG4gICAqXG4gICAqIFVuZGVmaW5lZCBvbiBub3JtYWwgYHJ1bigpYCBwYXRocyDigJQgb25seSB0aGUgcmVzdW1lIHBhdGggc2V0cyBpdC5cbiAgICovXG4gIHN1YmZsb3dTdGF0ZXNGb3JSZXN1bWU/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG59XG5cbi8qKiBPcHRpb25zIGZvciBGbG93Q2hhcnRFeGVjdXRvci5ydW4oKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuT3B0aW9ucyB7XG4gIC8qKiBBYm9ydFNpZ25hbCBmb3IgY29vcGVyYXRpdmUgY2FuY2VsbGF0aW9uLiAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBDcmVhdGVzIGFuIGludGVybmFsIEFib3J0Q29udHJvbGxlci4gKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogUnVudGltZSBpbnB1dCBkYXRhIGZvciB0aGUgcGlwZWxpbmUuXG4gICAqIEJlY29tZXMgdGhlIHJlYWRPbmx5Q29udGV4dCBhY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0QXJncygpYC5cbiAgICogU3RhZ2VzIGNhbm5vdCBvdmVyd3JpdGUgdGhlc2Uga2V5cyB3aXRoIGBzZXRWYWx1ZSgpYC5cbiAgICovXG4gIGlucHV0PzogdW5rbm93bjtcbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5IGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZVxuICAgKiB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMgKGxpa2UgYHByb2Nlc3MuZW52YCBmb3IgZmxvd2NoYXJ0cykuXG4gICAqIEFjY2Vzc2libGUgdmlhIGBzY29wZS5nZXRFbnYoKWAuIEluaGVyaXRlZCBieSBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgZW52PzogRXhlY3V0aW9uRW52O1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIG1heGltdW0gcmVjdXJzaXZlIGBleGVjdXRlTm9kZWAgZGVwdGggZm9yIHRoaXMgcnVuLlxuICAgKiBEZWZhdWx0cyB0byBgRmxvd2NoYXJ0VHJhdmVyc2VyLk1BWF9FWEVDVVRFX0RFUFRIYCAoNTAwKS5cbiAgICogVXNlZnVsIHdoZW4gZGVlcGx5IG5lc3RlZCBzdWJmbG93cyBvciBsb25nIGNoYWlucyBuZWVkIG1vcmUgaGVhZHJvb20uXG4gICAqIE11c3QgYmUgPj0gMS5cbiAgICovXG4gIG1heERlcHRoPzogbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3cgQ29udHJvbCBOYXJyYXRpdmUg4oCUIGNhbm9uaWNhbCBkZWZpbml0aW9ucyBsaXZlIGluIG1lbW9yeS90eXBlcy50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIHsgRmxvd0NvbnRyb2xUeXBlLCBGbG93TWVzc2FnZSB9O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bnRpbWUgU3RydWN0dXJlIE1ldGFkYXRhICh1c2VkIGJ5IFJ1bnRpbWVTdHJ1Y3R1cmVNYW5hZ2VyKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVN0cnVjdHVyZU1ldGFkYXRhIHtcbiAgdHlwZTogJ3N0YWdlJyB8ICdkZWNpZGVyJyB8ICdzZWxlY3RvcicgfCAnZm9yaycgfCAnc3RyZWFtaW5nJyB8ICdzdWJmbG93JyB8ICdsb29wJztcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNEeW5hbWljPzogYm9vbGVhbjtcbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTm9kZSBSZXN1bHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBOb2RlUmVzdWx0VHlwZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcmVzdWx0OiB1bmtub3duO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJlc3BvbnNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0ID0ge1xuICByZXN1bHQ6IHN0cmluZyB8IEVycm9yO1xuICBpc0Vycm9yOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0cyA9IHsgW2JyYW5jaElkOiBzdHJpbmddOiBCcmFuY2hSZXN1bHQgfTtcbmV4cG9ydCB0eXBlIFRyYXZlcnNhbFJlc3VsdCA9IEJyYW5jaFJlc3VsdHMgfCBzdHJpbmcgfCBFcnJvcjtcblxuLyoqIFJldHVybmVkIGJ5IHJ1bigpL3Jlc3VtZSgpIHdoZW4gZXhlY3V0aW9uIHBhdXNlcy4gKi9cbmV4cG9ydCB0eXBlIFBhdXNlZFJlc3VsdCA9IHtcbiAgcmVhZG9ubHkgcGF1c2VkOiB0cnVlO1xuICByZWFkb25seSBjaGVja3BvaW50OiBpbXBvcnQoJy4uL3BhdXNlL3R5cGVzLmpzJykuRmxvd2NoYXJ0Q2hlY2twb2ludDtcbn07XG5cbi8qKiBGdWxsIHJldHVybiB0eXBlIG9mIEZsb3dDaGFydEV4ZWN1dG9yLnJ1bigpIGFuZCByZXN1bWUoKS4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dG9yUmVzdWx0ID0gVHJhdmVyc2FsUmVzdWx0IHwgUGF1c2VkUmVzdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlcmlhbGl6ZWQgUGlwZWxpbmUgU3RydWN0dXJlIChmb3IgdmlzdWFsaXphdGlvbilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU/OlxuICAgIHwgJ3N0YWdlJ1xuICAgIHwgJ2RlY2lkZXInXG4gICAgfCAnc2VsZWN0b3InXG4gICAgfCAnZm9yaydcbiAgICB8ICdzdHJlYW1pbmcnXG4gICAgfCAnc3ViZmxvdydcbiAgICB8ICdsb29wJ1xuICAgIHwgJ3VzZXInXG4gICAgfCAndG9vbCdcbiAgICB8ICdmdW5jdGlvbidcbiAgICB8ICdzZXF1ZW5jZSc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGU7XG4gIGJyYW5jaGVzPzogUmVjb3JkPHN0cmluZywgU2VyaWFsaXplZFBpcGVsaW5lTm9kZT47XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGhhc1N1YnRyZWU/OiBib29sZWFuO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCB0aGlzIHN0YWdlIGNhbiBwYXVzZSBleGVjdXRpb24gKFBhdXNhYmxlSGFuZGxlciBwYXR0ZXJuKS4gKi9cbiAgaXNQYXVzYWJsZT86IGJvb2xlYW47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmxvd0NoYXJ0IGlzIGRlZmluZWQgaW4gYC4uL2J1aWxkZXIvdHlwZXMudHNgLiBUaGUgZW5naW5lIGxheWVyIGNvbnN1bWVzIGl0XG4vLyB2aWEgaW1wb3J0IGZyb20gdGhlcmUuIEEgZHVwbGljYXRlIG1pbmltYWwgZGVmaW5pdGlvbiBwcmV2aW91c2x5IGxpdmVkIGhlcmVcbi8vIGFuZCBjYXVzZWQgVFMgY29uZnVzaW9uIGF0IGNvbXBvc2l0aW9uIGJvdW5kYXJpZXMgKENvbXBvc2FibGVSdW5uZXIgdnNcbi8vIGFkZFN1YkZsb3dDaGFydCBwYXJhbWV0ZXIpLiBTaW5nbGUgc291cmNlIG9mIHRydXRoIG5vdyBsaXZlcyBpbiBidWlsZGVyLy5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQWxpYXMgZm9yIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgdXNlZCBhcyBmdWxsIHN0cnVjdHVyZSAqL1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0gU2VyaWFsaXplZFBpcGVsaW5lTm9kZSAmIHtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIHN1YmZsb3dTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGl0ZXJhdGlvbkNvdW50PzogbnVtYmVyO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* walkSubflowSpec — yield the structural shape of a subflow spec as a
|
|
3
|
+
* flat ordered stream of items, with `subflowPath` already composed
|
|
4
|
+
* for nested subflows.
|
|
5
|
+
*
|
|
6
|
+
* This is the public contract for traversing the structure delivered
|
|
7
|
+
* via `StructureSubflowMountedEvent.subflowSpec`. Item shapes mirror
|
|
8
|
+
* the corresponding Structure event payloads so consumers can route
|
|
9
|
+
* walker items through the same handlers they use for live events.
|
|
10
|
+
*
|
|
11
|
+
* Walker contract (LOCKED):
|
|
12
|
+
* 1. AUTO-RECURSE by default into nested subflows, with composed
|
|
13
|
+
* paths (`parent/child/...`). Pass `{ recurse: false }` to walk
|
|
14
|
+
* only one level.
|
|
15
|
+
* 2. ENTRY-STAGE MARKER FIRST: for each subflow (top-level and
|
|
16
|
+
* nested), yields a `{ kind: 'subflow-start', ... }` item BEFORE
|
|
17
|
+
* any stage/edge items from that subflow. Lets consumers draw the
|
|
18
|
+
* boundary edge from the mount node to the entry stage.
|
|
19
|
+
* 3. COMPOSED PATHS: nested subflows get `parentPath + '/' + localId`.
|
|
20
|
+
* Top-level mount paths are local-only (`'auth'`, NOT `'__root__/auth'`).
|
|
21
|
+
* 4. SHAPE MIRRORING: stage/edge/loop items have the same payload
|
|
22
|
+
* shape as Structure events, with `subflowPath` added.
|
|
23
|
+
* 5. SOURCE DISCRIMINATOR: every walker item carries `source: 'walker'`
|
|
24
|
+
* (Structure events do NOT). Lets consumers distinguish event vs
|
|
25
|
+
* walker in logs/debuggers while still sharing handler code paths.
|
|
26
|
+
* 6. STAGE-ID PREFIXING: stage IDs in nested subflows are already
|
|
27
|
+
* prefixed by the spec (e.g. `'auth/verify/check'`). Walker
|
|
28
|
+
* preserves this; `subflowPath` field is redundant-but-explicit.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Walk a subflow spec, yielding its structure as flat ordered items.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* import { walkSubflowSpec } from 'footprintjs/trace';
|
|
36
|
+
*
|
|
37
|
+
* onSubflowMounted(event) {
|
|
38
|
+
* if (!event.subflowSpec) return; // lazy mount — no spec yet
|
|
39
|
+
* for (const item of walkSubflowSpec(event.subflowSpec, event.subflowPath)) {
|
|
40
|
+
* switch (item.kind) {
|
|
41
|
+
* case 'subflow-start': break; // entry boundary
|
|
42
|
+
* case 'stage': break; // inner stage
|
|
43
|
+
* case 'edge': break; // inner edge
|
|
44
|
+
* case 'loop': break; // inner loop back-edge
|
|
45
|
+
* case 'subflow': break; // nested mount marker
|
|
46
|
+
* }
|
|
47
|
+
* }
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function* walkSubflowSpec(spec, subflowPath, options = {}) {
|
|
52
|
+
const recurse = options.recurse !== false;
|
|
53
|
+
// Entry marker first — consumer draws the boundary edge from this.
|
|
54
|
+
yield {
|
|
55
|
+
kind: 'subflow-start',
|
|
56
|
+
stageId: spec.id,
|
|
57
|
+
subflowPath,
|
|
58
|
+
source: 'walker',
|
|
59
|
+
};
|
|
60
|
+
yield* walkNode(spec, subflowPath, recurse, new Set());
|
|
61
|
+
}
|
|
62
|
+
function* walkNode(node, subflowPath, recurse, visited) {
|
|
63
|
+
if (visited.has(node.id))
|
|
64
|
+
return;
|
|
65
|
+
visited.add(node.id);
|
|
66
|
+
// Loop reference — yield as a loop edge from previous-in-context to
|
|
67
|
+
// the target; the caller (caller of walkNode for the parent) is
|
|
68
|
+
// responsible for emitting the loop edge with the correct `from`.
|
|
69
|
+
// We never re-yield a stage for a loop reference.
|
|
70
|
+
if (node.isLoopReference)
|
|
71
|
+
return;
|
|
72
|
+
// Nested subflow mount — yield the marker, optionally recurse.
|
|
73
|
+
if (node.isSubflowRoot && node.subflowId !== undefined) {
|
|
74
|
+
const nestedPath = `${subflowPath}/${node.subflowId}`;
|
|
75
|
+
const nestedSpec = node.subflowStructure;
|
|
76
|
+
if (nestedSpec) {
|
|
77
|
+
yield {
|
|
78
|
+
kind: 'subflow',
|
|
79
|
+
mountStageId: node.id,
|
|
80
|
+
subflowId: node.subflowId,
|
|
81
|
+
subflowName: node.subflowName ?? node.subflowId,
|
|
82
|
+
subflowSpec: nestedSpec,
|
|
83
|
+
subflowPath: nestedPath,
|
|
84
|
+
source: 'walker',
|
|
85
|
+
};
|
|
86
|
+
if (recurse) {
|
|
87
|
+
yield* walkSubflowSpec(nestedSpec, nestedPath, { recurse });
|
|
88
|
+
}
|
|
89
|
+
// Fall through to next/children — the mount node still has a
|
|
90
|
+
// mount-side stage representation that may have outgoing edges.
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Yield the stage itself.
|
|
94
|
+
yield {
|
|
95
|
+
kind: 'stage',
|
|
96
|
+
stageId: node.id,
|
|
97
|
+
name: node.name,
|
|
98
|
+
type: node.type,
|
|
99
|
+
...(node.isPausable === true && { isPausable: true }),
|
|
100
|
+
spec: node,
|
|
101
|
+
subflowPath,
|
|
102
|
+
source: 'walker',
|
|
103
|
+
};
|
|
104
|
+
// A FAN-OUT (selector/fork) — every branch runs, then the node's `next`
|
|
105
|
+
// runs (the join). This is engine semantics, so we always render the true
|
|
106
|
+
// topology: each branch → that join, and the node's own direct → next
|
|
107
|
+
// "skip" edge suppressed (flow goes fork → branches → join, never fork →
|
|
108
|
+
// join directly). Deciders (ONE branch chosen, branches genuinely diverge)
|
|
109
|
+
// are NOT fan-outs and are left alone. `next` must be a real stage (not a
|
|
110
|
+
// loop back-edge).
|
|
111
|
+
const isFanOut = node.type === 'fork' || node.hasSelector === true;
|
|
112
|
+
const fanOutJoinId = isFanOut && node.next && node.next.isLoopReference !== true ? node.next.id : undefined;
|
|
113
|
+
// Children (decider/selector/fork branches).
|
|
114
|
+
if (node.children && node.children.length > 0) {
|
|
115
|
+
const edgeKind = node.type === 'fork' ? 'fork-branch' : 'decision-branch';
|
|
116
|
+
for (const child of node.children) {
|
|
117
|
+
yield {
|
|
118
|
+
kind: 'edge',
|
|
119
|
+
from: node.id,
|
|
120
|
+
to: child.id,
|
|
121
|
+
edgeKind,
|
|
122
|
+
...(edgeKind === 'decision-branch' && child.id !== undefined && { label: child.id }),
|
|
123
|
+
subflowPath,
|
|
124
|
+
source: 'walker',
|
|
125
|
+
};
|
|
126
|
+
// Convergence edge: this branch merges into the fan-out's join stage.
|
|
127
|
+
if (fanOutJoinId !== undefined) {
|
|
128
|
+
yield {
|
|
129
|
+
kind: 'edge',
|
|
130
|
+
from: child.id,
|
|
131
|
+
to: fanOutJoinId,
|
|
132
|
+
edgeKind: 'next',
|
|
133
|
+
subflowPath,
|
|
134
|
+
source: 'walker',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
yield* walkNode(child, subflowPath, recurse, visited);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Linear next.
|
|
141
|
+
if (node.next) {
|
|
142
|
+
if (node.next.isLoopReference && node.loopTarget) {
|
|
143
|
+
yield {
|
|
144
|
+
kind: 'loop',
|
|
145
|
+
from: node.id,
|
|
146
|
+
to: node.loopTarget,
|
|
147
|
+
subflowPath,
|
|
148
|
+
source: 'walker',
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// Suppress the direct node → next edge when the branches already carry
|
|
153
|
+
// the convergence to it (fanOutJoinId); still walk next so it's emitted.
|
|
154
|
+
if (fanOutJoinId === undefined) {
|
|
155
|
+
yield {
|
|
156
|
+
kind: 'edge',
|
|
157
|
+
from: node.id,
|
|
158
|
+
to: node.next.id,
|
|
159
|
+
edgeKind: 'next',
|
|
160
|
+
subflowPath,
|
|
161
|
+
source: 'walker',
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
yield* walkNode(node.next, subflowPath, recurse, visited);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Fsa1N1YmZsb3dTcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvd2Fsa1N1YmZsb3dTcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBc0RIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsZUFBZSxDQUM5QixJQUFpQyxFQUNqQyxXQUFtQixFQUNuQixVQUF5QixFQUFFO0lBRTNCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDO0lBRTFDLG1FQUFtRTtJQUNuRSxNQUFNO1FBQ0osSUFBSSxFQUFFLGVBQWU7UUFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ2hCLFdBQVc7UUFDWCxNQUFNLEVBQUUsUUFBUTtLQUNqQixDQUFDO0lBRUYsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksR0FBRyxFQUFVLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUNoQixJQUFpQyxFQUNqQyxXQUFtQixFQUNuQixPQUFnQixFQUNoQixPQUFvQjtJQUVwQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUFFLE9BQU87SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFckIsb0VBQW9FO0lBQ3BFLGdFQUFnRTtJQUNoRSxrRUFBa0U7SUFDbEUsa0RBQWtEO0lBQ2xELElBQUksSUFBSSxDQUFDLGVBQWU7UUFBRSxPQUFPO0lBRWpDLCtEQUErRDtJQUMvRCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN2RCxNQUFNLFVBQVUsR0FBRyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNO2dCQUNKLElBQUksRUFBRSxTQUFTO2dCQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDckIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUztnQkFDL0MsV0FBVyxFQUFFLFVBQVU7Z0JBQ3ZCLFdBQVcsRUFBRSxVQUFVO2dCQUN2QixNQUFNLEVBQUUsUUFBUTthQUNqQixDQUFDO1lBQ0YsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUNELDZEQUE2RDtZQUM3RCxnRUFBZ0U7UUFDbEUsQ0FBQztJQUNILENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsTUFBTTtRQUNKLElBQUksRUFBRSxPQUFPO1FBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtRQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtRQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNyRCxJQUFJLEVBQUUsSUFBSTtRQUNWLFdBQVc7UUFDWCxNQUFNLEVBQUUsUUFBUTtLQUNqQixDQUFDO0lBRUYsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSxzRUFBc0U7SUFDdEUseUVBQXlFO0lBQ3pFLDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDMUUsbUJBQW1CO0lBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDO0lBQ25FLE1BQU0sWUFBWSxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUU1Ryw2Q0FBNkM7SUFDN0MsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFzQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUM3RyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxNQUFNO2dCQUNKLElBQUksRUFBRSxNQUFNO2dCQUNaLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDYixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1osUUFBUTtnQkFDUixHQUFHLENBQUMsUUFBUSxLQUFLLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDcEYsV0FBVztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQixDQUFDO1lBQ0Ysc0VBQXNFO1lBQ3RFLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixNQUFNO29CQUNKLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDZCxFQUFFLEVBQUUsWUFBWTtvQkFDaEIsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLFdBQVc7b0JBQ1gsTUFBTSxFQUFFLFFBQVE7aUJBQ2pCLENBQUM7WUFDSixDQUFDO1lBQ0QsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtJQUNmLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakQsTUFBTTtnQkFDSixJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2IsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUNuQixXQUFXO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLHVFQUF1RTtZQUN2RSx5RUFBeUU7WUFDekUsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQy9CLE1BQU07b0JBQ0osSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNiLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2hCLFFBQVEsRUFBRSxNQUFNO29CQUNoQixXQUFXO29CQUNYLE1BQU0sRUFBRSxRQUFRO2lCQUNqQixDQUFDO1lBQ0osQ0FBQztZQUNELEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB3YWxrU3ViZmxvd1NwZWMg4oCUIHlpZWxkIHRoZSBzdHJ1Y3R1cmFsIHNoYXBlIG9mIGEgc3ViZmxvdyBzcGVjIGFzIGFcbiAqIGZsYXQgb3JkZXJlZCBzdHJlYW0gb2YgaXRlbXMsIHdpdGggYHN1YmZsb3dQYXRoYCBhbHJlYWR5IGNvbXBvc2VkXG4gKiBmb3IgbmVzdGVkIHN1YmZsb3dzLlxuICpcbiAqIFRoaXMgaXMgdGhlIHB1YmxpYyBjb250cmFjdCBmb3IgdHJhdmVyc2luZyB0aGUgc3RydWN0dXJlIGRlbGl2ZXJlZFxuICogdmlhIGBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LnN1YmZsb3dTcGVjYC4gSXRlbSBzaGFwZXMgbWlycm9yXG4gKiB0aGUgY29ycmVzcG9uZGluZyBTdHJ1Y3R1cmUgZXZlbnQgcGF5bG9hZHMgc28gY29uc3VtZXJzIGNhbiByb3V0ZVxuICogd2Fsa2VyIGl0ZW1zIHRocm91Z2ggdGhlIHNhbWUgaGFuZGxlcnMgdGhleSB1c2UgZm9yIGxpdmUgZXZlbnRzLlxuICpcbiAqIFdhbGtlciBjb250cmFjdCAoTE9DS0VEKTpcbiAqICAgMS4gQVVUTy1SRUNVUlNFIGJ5IGRlZmF1bHQgaW50byBuZXN0ZWQgc3ViZmxvd3MsIHdpdGggY29tcG9zZWRcbiAqICAgICAgcGF0aHMgKGBwYXJlbnQvY2hpbGQvLi4uYCkuIFBhc3MgYHsgcmVjdXJzZTogZmFsc2UgfWAgdG8gd2Fsa1xuICogICAgICBvbmx5IG9uZSBsZXZlbC5cbiAqICAgMi4gRU5UUlktU1RBR0UgTUFSS0VSIEZJUlNUOiBmb3IgZWFjaCBzdWJmbG93ICh0b3AtbGV2ZWwgYW5kXG4gKiAgICAgIG5lc3RlZCksIHlpZWxkcyBhIGB7IGtpbmQ6ICdzdWJmbG93LXN0YXJ0JywgLi4uIH1gIGl0ZW0gQkVGT1JFXG4gKiAgICAgIGFueSBzdGFnZS9lZGdlIGl0ZW1zIGZyb20gdGhhdCBzdWJmbG93LiBMZXRzIGNvbnN1bWVycyBkcmF3IHRoZVxuICogICAgICBib3VuZGFyeSBlZGdlIGZyb20gdGhlIG1vdW50IG5vZGUgdG8gdGhlIGVudHJ5IHN0YWdlLlxuICogICAzLiBDT01QT1NFRCBQQVRIUzogbmVzdGVkIHN1YmZsb3dzIGdldCBgcGFyZW50UGF0aCArICcvJyArIGxvY2FsSWRgLlxuICogICAgICBUb3AtbGV2ZWwgbW91bnQgcGF0aHMgYXJlIGxvY2FsLW9ubHkgKGAnYXV0aCdgLCBOT1QgYCdfX3Jvb3RfXy9hdXRoJ2ApLlxuICogICA0LiBTSEFQRSBNSVJST1JJTkc6IHN0YWdlL2VkZ2UvbG9vcCBpdGVtcyBoYXZlIHRoZSBzYW1lIHBheWxvYWRcbiAqICAgICAgc2hhcGUgYXMgU3RydWN0dXJlIGV2ZW50cywgd2l0aCBgc3ViZmxvd1BhdGhgIGFkZGVkLlxuICogICA1LiBTT1VSQ0UgRElTQ1JJTUlOQVRPUjogZXZlcnkgd2Fsa2VyIGl0ZW0gY2FycmllcyBgc291cmNlOiAnd2Fsa2VyJ2BcbiAqICAgICAgKFN0cnVjdHVyZSBldmVudHMgZG8gTk9UKS4gTGV0cyBjb25zdW1lcnMgZGlzdGluZ3Vpc2ggZXZlbnQgdnNcbiAqICAgICAgd2Fsa2VyIGluIGxvZ3MvZGVidWdnZXJzIHdoaWxlIHN0aWxsIHNoYXJpbmcgaGFuZGxlciBjb2RlIHBhdGhzLlxuICogICA2LiBTVEFHRS1JRCBQUkVGSVhJTkc6IHN0YWdlIElEcyBpbiBuZXN0ZWQgc3ViZmxvd3MgYXJlIGFscmVhZHlcbiAqICAgICAgcHJlZml4ZWQgYnkgdGhlIHNwZWMgKGUuZy4gYCdhdXRoL3ZlcmlmeS9jaGVjaydgKS4gV2Fsa2VyXG4gKiAgICAgIHByZXNlcnZlcyB0aGlzOyBgc3ViZmxvd1BhdGhgIGZpZWxkIGlzIHJlZHVuZGFudC1idXQtZXhwbGljaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgfSBmcm9tICcuLi9idWlsZGVyL3R5cGVzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBXYWxrZXJPcHRpb25zIHtcbiAgLyoqIEF1dG8tcmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJmbG93cyAoZGVmYXVsdDogdHJ1ZSkuIFdoZW4gZmFsc2UsXG4gICAqICBuZXN0ZWQgc3ViZmxvdyBpdGVtcyBhcmUgeWllbGRlZCBidXQgdGhlaXIgaW50ZXJuYWxzIGFyZSBub3RcbiAgICogIHRyYXZlcnNlZC4gKi9cbiAgcmVjdXJzZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFdhbGtlckl0ZW0gPVxuICB8IHtcbiAgICAgIGtpbmQ6ICdzdWJmbG93LXN0YXJ0JztcbiAgICAgIHN0YWdlSWQ6IHN0cmluZztcbiAgICAgIHN1YmZsb3dQYXRoOiBzdHJpbmc7XG4gICAgICBzb3VyY2U6ICd3YWxrZXInO1xuICAgIH1cbiAgfCB7XG4gICAgICBraW5kOiAnc3RhZ2UnO1xuICAgICAgc3RhZ2VJZDogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgdHlwZTogTm9uTnVsbGFibGU8U2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlWyd0eXBlJ10+O1xuICAgICAgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gICAgICBzcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gICAgICBzdWJmbG93UGF0aDogc3RyaW5nO1xuICAgICAgc291cmNlOiAnd2Fsa2VyJztcbiAgICB9XG4gIHwge1xuICAgICAga2luZDogJ2VkZ2UnO1xuICAgICAgZnJvbTogc3RyaW5nO1xuICAgICAgdG86IHN0cmluZztcbiAgICAgIGVkZ2VLaW5kOiAnbmV4dCcgfCAnZm9yay1icmFuY2gnIHwgJ2RlY2lzaW9uLWJyYW5jaCc7XG4gICAgICBsYWJlbD86IHN0cmluZztcbiAgICAgIHN1YmZsb3dQYXRoOiBzdHJpbmc7XG4gICAgICBzb3VyY2U6ICd3YWxrZXInO1xuICAgIH1cbiAgfCB7XG4gICAgICBraW5kOiAnbG9vcCc7XG4gICAgICBmcm9tOiBzdHJpbmc7XG4gICAgICB0bzogc3RyaW5nO1xuICAgICAgc3ViZmxvd1BhdGg6IHN0cmluZztcbiAgICAgIHNvdXJjZTogJ3dhbGtlcic7XG4gICAgfVxuICB8IHtcbiAgICAgIGtpbmQ6ICdzdWJmbG93JztcbiAgICAgIG1vdW50U3RhZ2VJZDogc3RyaW5nO1xuICAgICAgc3ViZmxvd0lkOiBzdHJpbmc7XG4gICAgICBzdWJmbG93TmFtZTogc3RyaW5nO1xuICAgICAgc3ViZmxvd1NwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgICAgIHN1YmZsb3dQYXRoOiBzdHJpbmc7XG4gICAgICBzb3VyY2U6ICd3YWxrZXInO1xuICAgIH07XG5cbi8qKlxuICogV2FsayBhIHN1YmZsb3cgc3BlYywgeWllbGRpbmcgaXRzIHN0cnVjdHVyZSBhcyBmbGF0IG9yZGVyZWQgaXRlbXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB3YWxrU3ViZmxvd1NwZWMgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogb25TdWJmbG93TW91bnRlZChldmVudCkge1xuICogICBpZiAoIWV2ZW50LnN1YmZsb3dTcGVjKSByZXR1cm47IC8vIGxhenkgbW91bnQg4oCUIG5vIHNwZWMgeWV0XG4gKiAgIGZvciAoY29uc3QgaXRlbSBvZiB3YWxrU3ViZmxvd1NwZWMoZXZlbnQuc3ViZmxvd1NwZWMsIGV2ZW50LnN1YmZsb3dQYXRoKSkge1xuICogICAgIHN3aXRjaCAoaXRlbS5raW5kKSB7XG4gKiAgICAgICBjYXNlICdzdWJmbG93LXN0YXJ0JzogYnJlYWs7ICAgICAgICAvLyBlbnRyeSBib3VuZGFyeVxuICogICAgICAgY2FzZSAnc3RhZ2UnOiAgICAgICAgIGJyZWFrOyAgICAgICAgLy8gaW5uZXIgc3RhZ2VcbiAqICAgICAgIGNhc2UgJ2VkZ2UnOiAgICAgICAgICBicmVhazsgICAgICAgIC8vIGlubmVyIGVkZ2VcbiAqICAgICAgIGNhc2UgJ2xvb3AnOiAgICAgICAgICBicmVhazsgICAgICAgIC8vIGlubmVyIGxvb3AgYmFjay1lZGdlXG4gKiAgICAgICBjYXNlICdzdWJmbG93JzogICAgICAgYnJlYWs7ICAgICAgICAvLyBuZXN0ZWQgbW91bnQgbWFya2VyXG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiB3YWxrU3ViZmxvd1NwZWMoXG4gIHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSxcbiAgc3ViZmxvd1BhdGg6IHN0cmluZyxcbiAgb3B0aW9uczogV2Fsa2VyT3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFdhbGtlckl0ZW0sIHZvaWQsIHZvaWQ+IHtcbiAgY29uc3QgcmVjdXJzZSA9IG9wdGlvbnMucmVjdXJzZSAhPT0gZmFsc2U7XG5cbiAgLy8gRW50cnkgbWFya2VyIGZpcnN0IOKAlCBjb25zdW1lciBkcmF3cyB0aGUgYm91bmRhcnkgZWRnZSBmcm9tIHRoaXMuXG4gIHlpZWxkIHtcbiAgICBraW5kOiAnc3ViZmxvdy1zdGFydCcsXG4gICAgc3RhZ2VJZDogc3BlYy5pZCxcbiAgICBzdWJmbG93UGF0aCxcbiAgICBzb3VyY2U6ICd3YWxrZXInLFxuICB9O1xuXG4gIHlpZWxkKiB3YWxrTm9kZShzcGVjLCBzdWJmbG93UGF0aCwgcmVjdXJzZSwgbmV3IFNldDxzdHJpbmc+KCkpO1xufVxuXG5mdW5jdGlvbiogd2Fsa05vZGUoXG4gIG5vZGU6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSxcbiAgc3ViZmxvd1BhdGg6IHN0cmluZyxcbiAgcmVjdXJzZTogYm9vbGVhbixcbiAgdmlzaXRlZDogU2V0PHN0cmluZz4sXG4pOiBHZW5lcmF0b3I8V2Fsa2VySXRlbSwgdm9pZCwgdm9pZD4ge1xuICBpZiAodmlzaXRlZC5oYXMobm9kZS5pZCkpIHJldHVybjtcbiAgdmlzaXRlZC5hZGQobm9kZS5pZCk7XG5cbiAgLy8gTG9vcCByZWZlcmVuY2Ug4oCUIHlpZWxkIGFzIGEgbG9vcCBlZGdlIGZyb20gcHJldmlvdXMtaW4tY29udGV4dCB0b1xuICAvLyB0aGUgdGFyZ2V0OyB0aGUgY2FsbGVyIChjYWxsZXIgb2Ygd2Fsa05vZGUgZm9yIHRoZSBwYXJlbnQpIGlzXG4gIC8vIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyB0aGUgbG9vcCBlZGdlIHdpdGggdGhlIGNvcnJlY3QgYGZyb21gLlxuICAvLyBXZSBuZXZlciByZS15aWVsZCBhIHN0YWdlIGZvciBhIGxvb3AgcmVmZXJlbmNlLlxuICBpZiAobm9kZS5pc0xvb3BSZWZlcmVuY2UpIHJldHVybjtcblxuICAvLyBOZXN0ZWQgc3ViZmxvdyBtb3VudCDigJQgeWllbGQgdGhlIG1hcmtlciwgb3B0aW9uYWxseSByZWN1cnNlLlxuICBpZiAobm9kZS5pc1N1YmZsb3dSb290ICYmIG5vZGUuc3ViZmxvd0lkICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gYCR7c3ViZmxvd1BhdGh9LyR7bm9kZS5zdWJmbG93SWR9YDtcbiAgICBjb25zdCBuZXN0ZWRTcGVjID0gbm9kZS5zdWJmbG93U3RydWN0dXJlO1xuICAgIGlmIChuZXN0ZWRTcGVjKSB7XG4gICAgICB5aWVsZCB7XG4gICAgICAgIGtpbmQ6ICdzdWJmbG93JyxcbiAgICAgICAgbW91bnRTdGFnZUlkOiBub2RlLmlkLFxuICAgICAgICBzdWJmbG93SWQ6IG5vZGUuc3ViZmxvd0lkLFxuICAgICAgICBzdWJmbG93TmFtZTogbm9kZS5zdWJmbG93TmFtZSA/PyBub2RlLnN1YmZsb3dJZCxcbiAgICAgICAgc3ViZmxvd1NwZWM6IG5lc3RlZFNwZWMsXG4gICAgICAgIHN1YmZsb3dQYXRoOiBuZXN0ZWRQYXRoLFxuICAgICAgICBzb3VyY2U6ICd3YWxrZXInLFxuICAgICAgfTtcbiAgICAgIGlmIChyZWN1cnNlKSB7XG4gICAgICAgIHlpZWxkKiB3YWxrU3ViZmxvd1NwZWMobmVzdGVkU3BlYywgbmVzdGVkUGF0aCwgeyByZWN1cnNlIH0pO1xuICAgICAgfVxuICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG5leHQvY2hpbGRyZW4g4oCUIHRoZSBtb3VudCBub2RlIHN0aWxsIGhhcyBhXG4gICAgICAvLyBtb3VudC1zaWRlIHN0YWdlIHJlcHJlc2VudGF0aW9uIHRoYXQgbWF5IGhhdmUgb3V0Z29pbmcgZWRnZXMuXG4gICAgfVxuICB9XG5cbiAgLy8gWWllbGQgdGhlIHN0YWdlIGl0c2VsZi5cbiAgeWllbGQge1xuICAgIGtpbmQ6ICdzdGFnZScsXG4gICAgc3RhZ2VJZDogbm9kZS5pZCxcbiAgICBuYW1lOiBub2RlLm5hbWUsXG4gICAgdHlwZTogbm9kZS50eXBlLFxuICAgIC4uLihub2RlLmlzUGF1c2FibGUgPT09IHRydWUgJiYgeyBpc1BhdXNhYmxlOiB0cnVlIH0pLFxuICAgIHNwZWM6IG5vZGUsXG4gICAgc3ViZmxvd1BhdGgsXG4gICAgc291cmNlOiAnd2Fsa2VyJyxcbiAgfTtcblxuICAvLyBBIEZBTi1PVVQgKHNlbGVjdG9yL2ZvcmspIOKAlCBldmVyeSBicmFuY2ggcnVucywgdGhlbiB0aGUgbm9kZSdzIGBuZXh0YFxuICAvLyBydW5zICh0aGUgam9pbikuIFRoaXMgaXMgZW5naW5lIHNlbWFudGljcywgc28gd2UgYWx3YXlzIHJlbmRlciB0aGUgdHJ1ZVxuICAvLyB0b3BvbG9neTogZWFjaCBicmFuY2gg4oaSIHRoYXQgam9pbiwgYW5kIHRoZSBub2RlJ3Mgb3duIGRpcmVjdCDihpIgbmV4dFxuICAvLyBcInNraXBcIiBlZGdlIHN1cHByZXNzZWQgKGZsb3cgZ29lcyBmb3JrIOKGkiBicmFuY2hlcyDihpIgam9pbiwgbmV2ZXIgZm9yayDihpJcbiAgLy8gam9pbiBkaXJlY3RseSkuIERlY2lkZXJzIChPTkUgYnJhbmNoIGNob3NlbiwgYnJhbmNoZXMgZ2VudWluZWx5IGRpdmVyZ2UpXG4gIC8vIGFyZSBOT1QgZmFuLW91dHMgYW5kIGFyZSBsZWZ0IGFsb25lLiBgbmV4dGAgbXVzdCBiZSBhIHJlYWwgc3RhZ2UgKG5vdCBhXG4gIC8vIGxvb3AgYmFjay1lZGdlKS5cbiAgY29uc3QgaXNGYW5PdXQgPSBub2RlLnR5cGUgPT09ICdmb3JrJyB8fCBub2RlLmhhc1NlbGVjdG9yID09PSB0cnVlO1xuICBjb25zdCBmYW5PdXRKb2luSWQgPSBpc0Zhbk91dCAmJiBub2RlLm5leHQgJiYgbm9kZS5uZXh0LmlzTG9vcFJlZmVyZW5jZSAhPT0gdHJ1ZSA/IG5vZGUubmV4dC5pZCA6IHVuZGVmaW5lZDtcblxuICAvLyBDaGlsZHJlbiAoZGVjaWRlci9zZWxlY3Rvci9mb3JrIGJyYW5jaGVzKS5cbiAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZWRnZUtpbmQ6ICdmb3JrLWJyYW5jaCcgfCAnZGVjaXNpb24tYnJhbmNoJyA9IG5vZGUudHlwZSA9PT0gJ2ZvcmsnID8gJ2ZvcmstYnJhbmNoJyA6ICdkZWNpc2lvbi1icmFuY2gnO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgeWllbGQge1xuICAgICAgICBraW5kOiAnZWRnZScsXG4gICAgICAgIGZyb206IG5vZGUuaWQsXG4gICAgICAgIHRvOiBjaGlsZC5pZCxcbiAgICAgICAgZWRnZUtpbmQsXG4gICAgICAgIC4uLihlZGdlS2luZCA9PT0gJ2RlY2lzaW9uLWJyYW5jaCcgJiYgY2hpbGQuaWQgIT09IHVuZGVmaW5lZCAmJiB7IGxhYmVsOiBjaGlsZC5pZCB9KSxcbiAgICAgICAgc3ViZmxvd1BhdGgsXG4gICAgICAgIHNvdXJjZTogJ3dhbGtlcicsXG4gICAgICB9O1xuICAgICAgLy8gQ29udmVyZ2VuY2UgZWRnZTogdGhpcyBicmFuY2ggbWVyZ2VzIGludG8gdGhlIGZhbi1vdXQncyBqb2luIHN0YWdlLlxuICAgICAgaWYgKGZhbk91dEpvaW5JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHlpZWxkIHtcbiAgICAgICAgICBraW5kOiAnZWRnZScsXG4gICAgICAgICAgZnJvbTogY2hpbGQuaWQsXG4gICAgICAgICAgdG86IGZhbk91dEpvaW5JZCxcbiAgICAgICAgICBlZGdlS2luZDogJ25leHQnLFxuICAgICAgICAgIHN1YmZsb3dQYXRoLFxuICAgICAgICAgIHNvdXJjZTogJ3dhbGtlcicsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB5aWVsZCogd2Fsa05vZGUoY2hpbGQsIHN1YmZsb3dQYXRoLCByZWN1cnNlLCB2aXNpdGVkKTtcbiAgICB9XG4gIH1cblxuICAvLyBMaW5lYXIgbmV4dC5cbiAgaWYgKG5vZGUubmV4dCkge1xuICAgIGlmIChub2RlLm5leHQuaXNMb29wUmVmZXJlbmNlICYmIG5vZGUubG9vcFRhcmdldCkge1xuICAgICAgeWllbGQge1xuICAgICAgICBraW5kOiAnbG9vcCcsXG4gICAgICAgIGZyb206IG5vZGUuaWQsXG4gICAgICAgIHRvOiBub2RlLmxvb3BUYXJnZXQsXG4gICAgICAgIHN1YmZsb3dQYXRoLFxuICAgICAgICBzb3VyY2U6ICd3YWxrZXInLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3VwcHJlc3MgdGhlIGRpcmVjdCBub2RlIOKGkiBuZXh0IGVkZ2Ugd2hlbiB0aGUgYnJhbmNoZXMgYWxyZWFkeSBjYXJyeVxuICAgICAgLy8gdGhlIGNvbnZlcmdlbmNlIHRvIGl0IChmYW5PdXRKb2luSWQpOyBzdGlsbCB3YWxrIG5leHQgc28gaXQncyBlbWl0dGVkLlxuICAgICAgaWYgKGZhbk91dEpvaW5JZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHlpZWxkIHtcbiAgICAgICAgICBraW5kOiAnZWRnZScsXG4gICAgICAgICAgZnJvbTogbm9kZS5pZCxcbiAgICAgICAgICB0bzogbm9kZS5uZXh0LmlkLFxuICAgICAgICAgIGVkZ2VLaW5kOiAnbmV4dCcsXG4gICAgICAgICAgc3ViZmxvd1BhdGgsXG4gICAgICAgICAgc291cmNlOiAnd2Fsa2VyJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHlpZWxkKiB3YWxrTm9kZShub2RlLm5leHQsIHN1YmZsb3dQYXRoLCByZWN1cnNlLCB2aXNpdGVkKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -124,6 +124,13 @@ const FLOW_RECORDER_EVENT_METHODS = [
|
|
|
124
124
|
'onError',
|
|
125
125
|
'onPause',
|
|
126
126
|
'onResume',
|
|
127
|
+
// Run-boundary methods — included so a recorder whose ONLY event hook
|
|
128
|
+
// is a run boundary (e.g. an error bridge implementing just
|
|
129
|
+
// `onRunFailed`) is still detected as a FlowRecorder and routed to the
|
|
130
|
+
// flow channel. Previously a run-only recorder was silently dropped.
|
|
131
|
+
'onRunStart',
|
|
132
|
+
'onRunEnd',
|
|
133
|
+
'onRunFailed',
|
|
127
134
|
];
|
|
128
135
|
/**
|
|
129
136
|
* Method names belonging to the `EmitRecorder` (user-emitted events)
|
|
@@ -208,4 +215,4 @@ export function hasFlowRecorderMethods(r) {
|
|
|
208
215
|
export function hasEmitRecorderMethods(r) {
|
|
209
216
|
return EMIT_RECORDER_EVENT_METHODS.some((m) => hasOwnOrClassMethod(r, m));
|
|
210
217
|
}
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvQ29tYmluZWRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQW1GSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBSSxLQUFRO0lBQ3JDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUQsT0FBUSxLQUFpQyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRztJQUM3QixRQUFRO0lBQ1IsU0FBUztJQUNULFVBQVU7SUFDVixTQUFTO0lBQ1QsY0FBYztJQUNkLFlBQVk7SUFDWixTQUFTO0lBQ1QsVUFBVTtDQUNGLENBQUM7QUFFWDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLDJCQUEyQixHQUFHO0lBQ2xDLGlCQUFpQjtJQUNqQixRQUFRO0lBQ1IsWUFBWTtJQUNaLFFBQVE7SUFDUixZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixxQkFBcUI7SUFDckIsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFVBQVU7Q0FDRixDQUFDO0FBRVg7Ozs7R0FJRztBQUNILE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxRQUFRLENBQVUsQ0FBQztBQUV4RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQVMsbUJBQW1CLENBQUMsQ0FBVSxFQUFFLENBQVM7SUFDaEQsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN0RCxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxPQUFPLE9BQVEsQ0FBNkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUM7SUFDakUsQ0FBQztJQUNELElBQUksS0FBSyxHQUFZLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDcEQsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkQsT0FBTyxPQUFRLEtBQWlDLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDO1FBQ3JFLENBQUM7UUFDRCxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLENBQW1CO0lBQ3BELE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLENBQW1CO0lBQ3hELE9BQU8sMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxDQUFtQjtJQUN4RCxPQUFPLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tYmluZWRSZWNvcmRlciDigJQgYSBzaW5nbGUgb2JzZXJ2ZXIgdGhhdCBjYW4gaG9vayBpbnRvIE1VTFRJUExFIGV2ZW50XG4gKiBzdHJlYW1zIChjdXJyZW50bHk6IHNjb3BlIGRhdGEtZmxvdyArIGNvbnRyb2wtZmxvdykuIE9uZSBvYmplY3QsIG9uZSBgaWRgLFxuICogb25lIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgZXhlY3V0aW9uLlxuICpcbiAqICMjIFdoeSB0aGlzIGV4aXN0c1xuICpcbiAqIEJlZm9yZSBgQ29tYmluZWRSZWNvcmRlcmAsIGEgY29uc3VtZXIgd2hvIHdhbnRlZCB0byBvYnNlcnZlIGJvdGggc3RyZWFtc1xuICogaGFkIHRvOlxuICogICAxLiBJbXBsZW1lbnQgYm90aCBgU2NvcGVSZWNvcmRlcmAgKDggbWV0aG9kcykgYW5kIGBGbG93UmVjb3JkZXJgICgxMiBtZXRob2RzKVxuICogICAgICBmdWxseSDigJQgc3R1YmJpbmcgZXZlcnkgZXZlbnQgdGhleSBkaWRuJ3QgY2FyZSBhYm91dC5cbiAqICAgMi4gUmVtZW1iZXIgdG8gY2FsbCBCT1RIIGBhdHRhY2hTY29wZVJlY29yZGVyKHIpYCBBTkQgYGF0dGFjaEZsb3dSZWNvcmRlcihyKWAuXG4gKiAgICAgIEZvcmdldHRpbmcgdGhlIHNlY29uZCBjYWxsIHNpbGVudGx5IGRyb3BwZWQgaGFsZiB0aGVpciBldmVudHMg4oCUIG5vXG4gKiAgICAgIHdhcm5pbmcsIG5vIHJ1bnRpbWUgZXJyb3IuXG4gKiAgIDMuIFJlLWltcGxlbWVudCBjb29yZGluYXRpb24gbG9naWMgKGJ1ZmZlcmluZywgb3JkZXJpbmcpIHRoZW1zZWx2ZXMuXG4gKlxuICogYENvbWJpbmVkUmVjb3JkZXJgIGNvbGxhcHNlcyB0aGF0IGludG8gYSBzaW5nbGUgdHlwZSBhbmQgYSBzaW5nbGUgYXR0YWNoXG4gKiBjYWxsIChgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyKWApLCB3aXRoIHRoZSBsaWJyYXJ5IGhhbmRsaW5nIHRoZVxuICogcm91dGluZyBpbnRlcm5hbGx5LiBDb25zdW1lcnMgaW1wbGVtZW50IG9ubHkgdGhlIGV2ZW50cyB0aGV5IGNhcmUgYWJvdXRcbiAqIChgUGFydGlhbDwuLi4+YCkgYW5kIHRoZSBhdHRhY2ggbWV0aG9kIGR1Y2stdHlwZXMgYXQgcnVudGltZSB0byBkaXNwYXRjaFxuICogdG8gdGhlIHJlbGV2YW50IGNoYW5uZWxzLlxuICpcbiAqICMjIEZvcndhcmQgY29tcGF0aWJpbGl0eVxuICpcbiAqIFdoZW4gYSB0aGlyZCBvYnNlcnZlciB0eXBlIGlzIGFkZGVkIChlLmcuIGFuIGBPcGVyYXRpb25SZWNvcmRlcmApLCB0aGVcbiAqIGBDb21iaW5lZFJlY29yZGVyYCB0eXBlIGdhaW5zIGFuIGAmIFBhcnRpYWw8T3BlcmF0aW9uUmVjb3JkZXI+YCBjbGF1c2UgYW5kXG4gKiBgYXR0YWNoQ29tYmluZWRSZWNvcmRlcmAgZ2FpbnMgb25lIG1vcmUgcnVudGltZSBicmFuY2ggaW4gaXRzIGRpc3BhdGNoLlxuICogQ29uc3VtZXJzIHdyaXRpbmcgYSBgQ29tYmluZWRSZWNvcmRlcmAgdG9kYXkgYXJlIE5PVCBhZmZlY3RlZCDigJQgdGhlaXJcbiAqIGNvZGUga2VlcHMgY29tcGlsaW5nIGFuZCBhdHRhY2hpbmcgY29ycmVjdGx5LCBiZWNhdXNlIGV2ZXJ5IG5ldyBsYXllciBpc1xuICogb3B0aW9uYWwuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzJztcbiAqXG4gKiBjb25zdCBhdWRpdDogQ29tYmluZWRSZWNvcmRlciA9IHtcbiAqICAgaWQ6ICdhdWRpdCcsXG4gKiAgIG9uV3JpdGU6IChlKSA9PiBsb2dXcml0ZShlLmtleSwgZS52YWx1ZSksICAgICAgICAvLyBTY29wZVJlY29yZGVyIG1ldGhvZFxuICogICBvbkRlY2lzaW9uOiAoZSkgPT4gbG9nRGVjaXNpb24oZS5jaG9zZW4pLCAgICAgICAgLy8gRmxvd1JlY29yZGVyIG1ldGhvZFxuICogfTtcbiAqXG4gKiBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKGF1ZGl0KTtcbiAqIC8vIF4gaW50ZXJuYWxseTogZGV0ZWN0cyBib3RoIHNldHMgb2YgbWV0aG9kcywgcm91dGVzIHRvIGJvdGggY2hhbm5lbHMuXG4gKiBgYGBcbiAqXG4gKiAjIyBDb250cmFjdCB3aXRoIGV4aXN0aW5nIEFQSXNcbiAqXG4gKiAtIGBhdHRhY2hTY29wZVJlY29yZGVyKHIpYCBhbmQgYGF0dGFjaEZsb3dSZWNvcmRlcihyKWAgcmVtYWluIHVuY2hhbmdlZC5cbiAqICAgQ29uc3VtZXJzIHdobyB3YW50IG9ubHkgT05FIGNoYW5uZWwga2VlcCB1c2luZyB0aGVtIOKAlCBleHBsaWNpdCBpcyBnb29kLlxuICogLSBgYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyKWAgaXMgdGhlIE9OTFkgd2F5IHRvIGd1YXJhbnRlZSBhbiBvYmplY3QgaXNcbiAqICAgaG9va2VkIGludG8gZXZlcnkgc3RyZWFtIGl0IGhhcyBtZXRob2RzIGZvciwgd2l0aG91dCBtYWludGFpbmluZyB0d29cbiAqICAgYXR0YWNoIGNhbGxzIGF0IHRoZSBjYWxsIHNpdGUuXG4gKiAtIElkZW1wb3RlbmN5IGJ5IGBpZGAgaXMgcHJlc2VydmVkIGFjcm9zcyBjaGFubmVsczogcmUtYXR0YWNoaW5nIHdpdGggdGhlXG4gKiAgIHNhbWUgYGlkYCByZXBsYWNlcyB0aGUgcHJldmlvdXMgaW5zdGFuY2Ugb24gQk9USCBjaGFubmVscywgbm90IGp1c3Qgb25lLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd0Vycm9yRXZlbnQsIEZsb3dQYXVzZUV2ZW50LCBGbG93UmVjb3JkZXIsIEZsb3dSZXN1bWVFdmVudCB9IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFcnJvckV2ZW50LCBQYXVzZUV2ZW50LCBSZXN1bWVFdmVudCwgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9FbWl0UmVjb3JkZXIuanMnO1xuXG4vKipcbiAqIE1ldGhvZCBuYW1lcyB0aGF0IGFwcGVhciBvbiBCT1RIIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmAgYnV0IHdpdGhcbiAqIGRpZmZlcmVudCBldmVudCBwYXlsb2FkIHR5cGVzLiBGb3IgdGhlc2UsIGEgYENvbWJpbmVkUmVjb3JkZXJgIGRlY2xhcmVzXG4gKiBPTkUgaGFuZGxlciB0aGF0IHJlY2VpdmVzIHRoZSB1bmlvbiBvZiBib3RoIHBheWxvYWRzIOKAlCBjb25zdW1lcnNcbiAqIGRpc2NyaW1pbmF0ZSBvbiBgdHJhdmVyc2FsQ29udGV4dGAsIHdoaWNoIG9ubHkgY29udHJvbC1mbG93IGV2ZW50cyBjYXJyeS5cbiAqL1xudHlwZSBTaGFyZWRMaWZlY3ljbGVPdmVybGFwID0gJ29uRXJyb3InIHwgJ29uUGF1c2UnIHwgJ29uUmVzdW1lJztcblxuLyoqIExpZmVjeWNsZSBob29rcyAobm90IGV2ZW50LXNwZWNpZmljKSB0aGF0IGJvdGggaW50ZXJmYWNlcyBzaGFyZSBpZGVudGljYWxseS4gKi9cbnR5cGUgU2hhcmVkTGlmZWN5Y2xlID0gJ2lkJyB8ICdjbGVhcicgfCAndG9TbmFwc2hvdCc7XG5cbi8qKlxuICogQSByZWNvcmRlciB0aGF0IE1BWSBvYnNlcnZlIGFueSBjb21iaW5hdGlvbiBvZiBzdXBwb3J0ZWQgZXZlbnQgc3RyZWFtcy5cbiAqXG4gKiBUb2RheSdzIHN0cmVhbXM6XG4gKiAgIC0gU2NvcGUgZGF0YS1mbG93IChgU2NvcGVSZWNvcmRlcmA6IG9uUmVhZC9vbldyaXRlL29uQ29tbWl0L29uU3RhZ2VTdGFydC/igKYpXG4gKiAgIC0gQ29udHJvbC1mbG93IChgRmxvd1JlY29yZGVyYDogb25EZWNpc2lvbi9vblN1YmZsb3dFbnRyeS9vbkxvb3Av4oCmKVxuICpcbiAqIEFsbCBldmVudCBoYW5kbGVycyBhcmUgb3B0aW9uYWwg4oCUIGltcGxlbWVudCBvbmx5IHdoYXQgeW91IGNhcmUgYWJvdXQuXG4gKiBgaWRgIGlzIHJlcXVpcmVkIHNvIHRoZSBsaWJyYXJ5IGNhbiBkZWR1cGxpY2F0ZSByZS1hdHRhY2hlcy5cbiAqXG4gKiAjIyBTaGFyZWQgbWV0aG9kIG5hbWVzIChvbkVycm9yIC8gb25QYXVzZSAvIG9uUmVzdW1lKVxuICpcbiAqIEJvdGggYFNjb3BlUmVjb3JkZXJgIGFuZCBgRmxvd1JlY29yZGVyYCBkZWNsYXJlIHRoZXNlIHdpdGggRElGRkVSRU5UIHBheWxvYWRcbiAqIHNoYXBlcy4gSW4gYSBjb21iaW5lZCByZWNvcmRlciwgZWFjaCBzdWNoIGhhbmRsZXIgaXMgY2FsbGVkIGJ5IEJPVEhcbiAqIGNoYW5uZWxzIHdpdGggaXRzIG93biB2YXJpYW50LiBUaGUgcGFyYW1ldGVyIHR5cGUgaXMgYSB1bmlvbiDigJQgY29uc3VtZXJzXG4gKiBjYW4gZWl0aGVyIGhhbmRsZSBib3RoIHZhcmlhbnRzIHVuaWZvcm1seSwgb3IgZGlzY3JpbWluYXRlIChjb250cm9sLWZsb3dcbiAqIHZhcmlhbnRzIGNhcnJ5IGEgYHRyYXZlcnNhbENvbnRleHRgIGZpZWxkIHRoYXQgZGF0YS1mbG93IHZhcmlhbnRzIGxhY2spLlxuICpcbiAqICMjIEZvcndhcmQgY29tcGF0aWJpbGl0eVxuICpcbiAqIFdoZW4gYSB0aGlyZCBvYnNlcnZlciB0eXBlIHNoaXBzIChlLmcuIGBPcGVyYXRpb25SZWNvcmRlcmApLCB0aGUgdHlwZVxuICogZ2FpbnMgYW5vdGhlciBgJiBQYXJ0aWFsPOKApj5gIGNsYXVzZS4gQmVjYXVzZSBldmVyeSBjbGF1c2UgaXMgYFBhcnRpYWxgLFxuICogZXhpc3RpbmcgYENvbWJpbmVkUmVjb3JkZXJgIGltcGxlbWVudGF0aW9ucyByZW1haW4gdHlwZS12YWxpZC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tYmluZWRSZWNvcmRlciA9IFBhcnRpYWw8T21pdDxTY29wZVJlY29yZGVyLCBTaGFyZWRMaWZlY3ljbGVPdmVybGFwIHwgU2hhcmVkTGlmZWN5Y2xlPj4gJlxuICBQYXJ0aWFsPE9taXQ8Rmxvd1JlY29yZGVyLCBTaGFyZWRMaWZlY3ljbGVPdmVybGFwIHwgU2hhcmVkTGlmZWN5Y2xlPj4gJlxuICAvLyBFbWl0IGNoYW5uZWwg4oCUIG5ldyB0aGlyZCBzdHJlYW0gKFBoYXNlIDMpLiBObyBtZXRob2QtbmFtZSBvdmVybGFwIHdpdGhcbiAgLy8gdGhlIG90aGVyIHR3byBpbnRlcmZhY2VzLCBzbyBhIHBsYWluIGludGVyc2VjdGlvbiBpcyBzb3VuZCDigJQgbm9cbiAgLy8gdW5pb24tcGF5bG9hZCBkaXNjcmltaW5hdG9yIG5lZWRlZC5cbiAgUGFydGlhbDxPbWl0PEVtaXRSZWNvcmRlciwgU2hhcmVkTGlmZWN5Y2xlPj4gJiB7XG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAgIC8vIFNoYXJlZCBsaWZlY3ljbGUgaG9va3Mg4oCUIHNhbWUgb24gYm90aCBpbnRlcmZhY2VzLCBzaGFwZSBjb21wYXRpYmxlLlxuICAgIGNsZWFyPygpOiB2b2lkO1xuICAgIHRvU25hcHNob3Q/KCk6IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uPzogJ3RyYW5zbGF0ZScgfCAnYWNjdW11bGF0ZScgfCAnYWdncmVnYXRlJztcbiAgICAgIGRhdGE6IHVua25vd247XG4gICAgfTtcblxuICAgIC8vIFNoYXJlZCBldmVudCBtZXRob2QgbmFtZXMgd2l0aCBESVZFUkdFTlQgcGF5bG9hZHMg4oCUIGRlY2xhcmVkIGFzIHVuaW9ucy5cbiAgICAvLyBDb25zdW1lcnMgZWl0aGVyIGhhbmRsZSBib3RoIHZhcmlhbnRzLCBvciBkaXNjcmltaW5hdGUgdXNpbmcgdGhlXG4gICAgLy8gZXhwb3J0ZWQgaGVscGVyIGBpc0Zsb3dFdmVudCgpYCAod2hpY2ggY2hlY2tzIGZvciB0aGVcbiAgICAvLyBgdHJhdmVyc2FsQ29udGV4dGAgZmllbGQg4oCUIHByZXNlbnQgb25seSBvbiBjb250cm9sLWZsb3cgdmFyaWFudHMpLlxuICAgIC8vXG4gICAgLy8gQGV4YW1wbGVcbiAgICAvLyBgYGB0c1xuICAgIC8vIGNvbnN0IGF1ZGl0OiBDb21iaW5lZFJlY29yZGVyID0ge1xuICAgIC8vICAgaWQ6ICdhdWRpdCcsXG4gICAgLy8gICBvbkVycm9yOiAoZSkgPT4ge1xuICAgIC8vICAgICBpZiAoaXNGbG93RXZlbnQoZSkpIHtcbiAgICAvLyAgICAgICAvLyBlIGlzIEZsb3dFcnJvckV2ZW50IOKAlCBoYXMgc3RhZ2VOYW1lLCBtZXNzYWdlLCBzdHJ1Y3R1cmVkRXJyb3JcbiAgICAvLyAgICAgICBsb2coJ2Zsb3cgZXJyb3IgaW4gc3RhZ2UnLCBlLnN0YWdlTmFtZSk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgLy8gZSBpcyBFcnJvckV2ZW50IOKAlCBoYXMgZXJyb3IsIG9wZXJhdGlvbiwga2V5P1xuICAgIC8vICAgICAgIGxvZygnc2NvcGUgZXJyb3IgZHVyaW5nJywgZS5vcGVyYXRpb24sIGUuZXJyb3IubWVzc2FnZSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0sXG4gICAgLy8gfTtcbiAgICAvLyBgYGBcbiAgICBvbkVycm9yPyhldmVudDogRXJyb3JFdmVudCB8IEZsb3dFcnJvckV2ZW50KTogdm9pZDtcbiAgICBvblBhdXNlPyhldmVudDogUGF1c2VFdmVudCB8IEZsb3dQYXVzZUV2ZW50KTogdm9pZDtcbiAgICBvblJlc3VtZT8oZXZlbnQ6IFJlc3VtZUV2ZW50IHwgRmxvd1Jlc3VtZUV2ZW50KTogdm9pZDtcbiAgfTtcblxuLyoqXG4gKiBEaXNjcmltaW5hdG9yIGZvciB0aGUgdW5pb24gcGF5bG9hZCB0eXBlcyBvbiBgQ29tYmluZWRSZWNvcmRlcmAncyBzaGFyZWRcbiAqIG1ldGhvZHMgKGBvbkVycm9yYCwgYG9uUGF1c2VgLCBgb25SZXN1bWVgKS4gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV2ZW50XG4gKiB3YXMgZW1pdHRlZCBmcm9tIHRoZSBjb250cm9sLWZsb3cgY2hhbm5lbCAoRmxvd1JlY29yZGVyKS5cbiAqXG4gKiAjIyBIb3cgaXQgZGlzY3JpbWluYXRlc1xuICpcbiAqIFNjb3BlLWNoYW5uZWwgZXZlbnRzIGV4dGVuZCBgUmVjb3JkZXJDb250ZXh0YCwgd2hpY2ggY2FycmllcyBgcGlwZWxpbmVJZGAuXG4gKiBGbG93LWNoYW5uZWwgZXZlbnRzIGRvIG5vdCBjYXJyeSBgcGlwZWxpbmVJZGAgKHRoZXkgY2FycnkgYW4gb3B0aW9uYWxcbiAqIGB0cmF2ZXJzYWxDb250ZXh0YCBpbnN0ZWFkLCBidXQgdGhhdCBmaWVsZCBpcyBvcHRpb25hbCBhbmQgY2Fubm90IGJlXG4gKiByZWxpZWQgb24gYXMgYSBwb3NpdGl2ZSBzaWduYWwpLiBXZSBkZXRlY3QgdGhlIGZsb3cgdmFyaWFudCBieSB0aGVcbiAqIEFCU0VOQ0Ugb2YgYHBpcGVsaW5lSWRgIOKAlCB0aGlzIGlzIHNjaGVtYS1zdGFibGUgYXMgbG9uZyBhcyBzY29wZSBldmVudHNcbiAqIGNvbnRpbnVlIHRvIGV4dGVuZCBgUmVjb3JkZXJDb250ZXh0YC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIG9uRXJyb3I6IChlKSA9PiB7XG4gKiAgIGlmIChpc0Zsb3dFdmVudChlKSkge1xuICogICAgIC8vIE5hcnJvd2VkIHRvIEZsb3dFcnJvckV2ZW50OiBoYXMgc3RhZ2VOYW1lLCBtZXNzYWdlLCBzdHJ1Y3R1cmVkRXJyb3JcbiAqICAgfSBlbHNlIHtcbiAqICAgICAvLyBOYXJyb3dlZCB0byBFcnJvckV2ZW50OiBoYXMgZXJyb3IsIG9wZXJhdGlvbiwga2V5P1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmxvd0V2ZW50PFQ+KGV2ZW50OiBUKTogZXZlbnQgaXMgRXhjbHVkZTxULCB7IHBpcGVsaW5lSWQ6IHN0cmluZyB9PiB7XG4gIGlmICh0eXBlb2YgZXZlbnQgIT09ICdvYmplY3QnIHx8IGV2ZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAoZXZlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnBpcGVsaW5lSWQgPT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBNZXRob2QgbmFtZXMgYmVsb25naW5nIHRvIHRoZSBgU2NvcGVSZWNvcmRlcmAgKGRhdGEtZmxvdykgaW50ZXJmYWNlLlxuICogS2VwdCBhcyBhIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggc28gdGhlIHJ1bnRpbWUgZHVjay10eXBlIGRldGVjdG9yIHN0YXlzXG4gKiBpbiBzeW5jIHdpdGggdGhlIGludGVyZmFjZS4gSWYgYSBtZXRob2QgaXMgYWRkZWQgdG8gYFNjb3BlUmVjb3JkZXJgLCBhZGRpbmcgaXRcbiAqIGhlcmUgaXMgdGhlIE9OTFkgY2hhbmdlIHJlcXVpcmVkIHRvIHJvdXRlIGNvbWJpbmVkLXJlY29yZGVycyBjb3JyZWN0bHkuXG4gKi9cbmNvbnN0IFJFQ09SREVSX0VWRU5UX01FVEhPRFMgPSBbXG4gICdvblJlYWQnLFxuICAnb25Xcml0ZScsXG4gICdvbkNvbW1pdCcsXG4gICdvbkVycm9yJyxcbiAgJ29uU3RhZ2VTdGFydCcsXG4gICdvblN0YWdlRW5kJyxcbiAgJ29uUGF1c2UnLFxuICAnb25SZXN1bWUnLFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBNZXRob2QgbmFtZXMgYmVsb25naW5nIHRvIHRoZSBgRmxvd1JlY29yZGVyYCAoY29udHJvbC1mbG93KSBpbnRlcmZhY2UuXG4gKiBTZWUgdGhlIG5vdGUgb24gYFJFQ09SREVSX0VWRU5UX01FVEhPRFNgLlxuICpcbiAqIE5PVEU6IHRoZSBgb25FcnJvcmAsIGBvblBhdXNlYCwgYG9uUmVzdW1lYCBtZXRob2RzIGV4aXN0IG9uIEJPVEggaW50ZXJmYWNlc1xuICogd2l0aCBESUZGRVJFTlQgZXZlbnQgcGF5bG9hZCBzaGFwZXMuIEEgYENvbWJpbmVkUmVjb3JkZXJgIHRoYXQgaW1wbGVtZW50c1xuICogYW55IG9mIHRoZXNlIHJlY2VpdmVzIGJvdGggdmFyaWFudHMgKG9uZSBmcm9tIGVhY2ggY2hhbm5lbCkuIENvbnN1bWVycyB3aG9cbiAqIGNhcmUgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGNhbiBkaXNjcmltaW5hdGUgb24gdGhlIHByZXNlbmNlIG9mXG4gKiBgdHJhdmVyc2FsQ29udGV4dGAgKHdoaWNoIG9ubHkgY29udHJvbC1mbG93IGV2ZW50cyBjYXJyeSkuXG4gKi9cbmNvbnN0IEZMT1dfUkVDT1JERVJfRVZFTlRfTUVUSE9EUyA9IFtcbiAgJ29uU3RhZ2VFeGVjdXRlZCcsXG4gICdvbk5leHQnLFxuICAnb25EZWNpc2lvbicsXG4gICdvbkZvcmsnLFxuICAnb25TZWxlY3RlZCcsXG4gICdvblN1YmZsb3dFbnRyeScsXG4gICdvblN1YmZsb3dFeGl0JyxcbiAgJ29uU3ViZmxvd1JlZ2lzdGVyZWQnLFxuICAnb25Mb29wJyxcbiAgJ29uQnJlYWsnLFxuICAnb25FcnJvcicsXG4gICdvblBhdXNlJyxcbiAgJ29uUmVzdW1lJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogTWV0aG9kIG5hbWVzIGJlbG9uZ2luZyB0byB0aGUgYEVtaXRSZWNvcmRlcmAgKHVzZXItZW1pdHRlZCBldmVudHMpXG4gKiBpbnRlcmZhY2UuIFNhbWUgY29udmVudGlvbiBhcyB0aGUgb3RoZXIgdHdvIGFycmF5cyBhYm92ZSDigJQga2VwdCBhc1xuICogdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGR1Y2stdHlwZSBkZXRlY3Rpb24uXG4gKi9cbmNvbnN0IEVNSVRfUkVDT1JERVJfRVZFTlRfTUVUSE9EUyA9IFsnb25FbWl0J10gYXMgY29uc3Q7XG5cbi8qKlxuICogVHJ1ZSBpZmYgdGhlIHJlY29yZGVyIGRlY2xhcmVzIGEgbWV0aG9kIG5hbWVkIGBtYCBlaXRoZXIgYXMgYW4gb3duXG4gKiBwcm9wZXJ0eSBPUiBvbiBpdHMgY2xhc3MtcHJvdG90eXBlIGNoYWluIOKAlCBidXQgTk9UIGluaGVyaXRlZCBmcm9tXG4gKiBgT2JqZWN0LnByb3RvdHlwZWAuXG4gKlxuICogIyMgV2h5IHRoaXMgbGF5ZXJlZCBjaGVja1xuICpcbiAqIEEgYENvbWJpbmVkUmVjb3JkZXJgIGNhbiBiZSBlaXRoZXIgYSBwbGFpbiBvYmplY3QgbGl0ZXJhbCAoaGFuZGxlcnMgYXNcbiAqIG93biBwcm9wZXJ0aWVzKSBPUiBhIGNsYXNzIGluc3RhbmNlIChoYW5kbGVycyBhcyBjbGFzcy1wcm90b3R5cGVcbiAqIG1ldGhvZHMpLiBCb3RoIGFyZSBsZWdpdGltYXRlIGNvbnN1bWVyIHBhdHRlcm5zIGFuZCBib3RoIE1VU1QgYXR0YWNoLlxuICpcbiAqIEJ1dCBoYW5kbGVycyBpbmhlcml0ZWQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAgYXJlIEFMV0FZUyBhY2NpZGVudGFsIG9yXG4gKiBtYWxpY2lvdXMgKG5vYm9keSBsZWdpdGltYXRlbHkgYXR0YWNoZXMgcmVjb3JkZXIgbWV0aG9kcyB0aGVyZSkuIFNvIHdlXG4gKiB3YWxrIHRoZSBwcm90b3R5cGUgY2hhaW4sIFNUT1BQSU5HIGJlZm9yZSBgT2JqZWN0LnByb3RvdHlwZWAuIFRoaXNcbiAqIGFjY2VwdHMgY2xhc3MgbWV0aG9kcyB3aGlsZSBzdGlsbCBibG9ja2luZyBgT2JqZWN0LnByb3RvdHlwZWBcbiAqIHBvbGx1dGlvbiBhdHRhY2tzLlxuICovXG5mdW5jdGlvbiBoYXNPd25PckNsYXNzTWV0aG9kKHI6IHVua25vd24sIG06IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAociA9PT0gbnVsbCB8fCB0eXBlb2YgciAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCBtKSkge1xuICAgIHJldHVybiB0eXBlb2YgKHIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW21dID09PSAnZnVuY3Rpb24nO1xuICB9XG4gIGxldCBwcm90bzogdW5rbm93biA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtcbiAgd2hpbGUgKHByb3RvICE9PSBudWxsICYmIHByb3RvICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgbSkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgKHByb3RvIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVttXSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUcnVlIGlmZiB0aGUgcmVjb3JkZXIgaW1wbGVtZW50cyBhdCBsZWFzdCBvbmUgZGF0YS1mbG93IGV2ZW50IG1ldGhvZC5cbiAqIFVzZWQgYnkgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXJgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGhvb2sgaW50b1xuICogdGhlIHNjb3BlIGRhdGEtZmxvdyBjaGFubmVsLlxuICpcbiAqICMjIERldGVjdGlvbiBydWxlXG4gKlxuICogQWNjZXB0cyBib3RoIG9iamVjdC1saXRlcmFsIHJlY29yZGVycyAob3duLXByb3BlcnR5IGhhbmRsZXJzKSBBTkQgY2xhc3NcbiAqIGluc3RhbmNlcyAoaGFuZGxlcnMgZGVjbGFyZWQgb24gdGhlIGNsYXNzIHByb3RvdHlwZSkuIFJlamVjdHMgaGFuZGxlcnNcbiAqIGluaGVyaXRlZCBmcm9tIGBPYmplY3QucHJvdG90eXBlYCDigJQgdGhhdCdzIGFsd2F5cyBhY2NpZGVudGFsIG9yXG4gKiBtYWxpY2lvdXMgcG9sbHV0aW9uLCBuZXZlciBhIGxlZ2l0aW1hdGUgcmVjb3JkZXIuXG4gKlxuICogIyMgTGlmZWN5Y2xlIGV4Y2x1c2lvbnNcbiAqXG4gKiBgY2xlYXJgIGFuZCBgdG9TbmFwc2hvdGAgYXJlIE5PVCBjb3VudGVkIGFzIGV2ZW50IG1ldGhvZHMg4oCUIGEgcmVjb3JkZXJcbiAqIHRoYXQgb25seSBpbXBsZW1lbnRzIHRob3NlIGhhcyBub3RoaW5nIHRvIG9ic2VydmUgYW5kIHdvdWxkIGJlIGEgbm8tb3BcbiAqIG9uIGVpdGhlciBjaGFubmVsLlxuICpcbiAqICMjIFJldHVybiB0eXBlXG4gKlxuICogUmV0dXJucyBwbGFpbiBgYm9vbGVhbmAgKG5vdCBhIHR5cGUgcHJlZGljYXRlKS4gVGhlIGZ1bGwgYFNjb3BlUmVjb3JkZXJgXG4gKiBpbnRlcmZhY2UgaGFzIHBheWxvYWQgdHlwZXMgdGhhdCBkaXZlcmdlIGZyb20gYENvbWJpbmVkUmVjb3JkZXJgJ3MgdW5pb25cbiAqIHZhcmlhbnRzIGZvciBzaGFyZWQgbWV0aG9kcywgc28gYSBuYXJyb3dpbmcgcHJlZGljYXRlIHdvdWxkIGJlIHVuc291bmQuXG4gKiBDYWxsZXJzIHRoYXQgbmVlZCB0byB0cmVhdCB0aGUgcmVjb3JkZXIgYXMgYSBgU2NvcGVSZWNvcmRlcmAgZG8gc28gZXhwbGljaXRseVxuICogYXQgdGhlIGF0dGFjaCBzaXRlIOKAlCB0aGUgY2FzdCBpcyB0aGUgY29udHJhY3QgdGhhdCBlYWNoIGNoYW5uZWwgcGFzc2VzXG4gKiBpdHMgb3duIHBheWxvYWQgdmFyaWFudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1JlY29yZGVyTWV0aG9kcyhyOiBDb21iaW5lZFJlY29yZGVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBSRUNPUkRFUl9FVkVOVF9NRVRIT0RTLnNvbWUoKG0pID0+IGhhc093bk9yQ2xhc3NNZXRob2QociwgbSkpO1xufVxuXG4vKipcbiAqIFRydWUgaWZmIHRoZSByZWNvcmRlciBpbXBsZW1lbnRzIGF0IGxlYXN0IG9uZSBjb250cm9sLWZsb3cgZXZlbnQgbWV0aG9kLlxuICogU2VlIGBoYXNSZWNvcmRlck1ldGhvZHNgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRmxvd1JlY29yZGVyTWV0aG9kcyhyOiBDb21iaW5lZFJlY29yZGVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBGTE9XX1JFQ09SREVSX0VWRU5UX01FVEhPRFMuc29tZSgobSkgPT4gaGFzT3duT3JDbGFzc01ldGhvZChyLCBtKSk7XG59XG5cbi8qKlxuICogVHJ1ZSBpZmYgdGhlIHJlY29yZGVyIGltcGxlbWVudHMgYXQgbGVhc3Qgb25lIGVtaXQtY2hhbm5lbCBldmVudCBtZXRob2QuXG4gKiBTZWUgYGhhc1JlY29yZGVyTWV0aG9kc2AgZm9yIHRoZSBvd25lcnNoaXAtZGV0ZWN0aW9uIHJ1bGVzIChvd24gb3JcbiAqIGNsYXNzLXByb3RvdHlwZSBtZXRob2RzIGNvdW50OyBgT2JqZWN0LnByb3RvdHlwZWAgcG9sbHV0aW9uIGRvZXMgbm90KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0VtaXRSZWNvcmRlck1ldGhvZHMocjogQ29tYmluZWRSZWNvcmRlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gRU1JVF9SRUNPUkRFUl9FVkVOVF9NRVRIT0RTLnNvbWUoKG0pID0+IGhhc093bk9yQ2xhc3NNZXRob2QociwgbSkpO1xufVxuIl19
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvQ29tYmluZWRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQW1GSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBSSxLQUFRO0lBQ3JDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUQsT0FBUSxLQUFpQyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRztJQUM3QixRQUFRO0lBQ1IsU0FBUztJQUNULFVBQVU7SUFDVixTQUFTO0lBQ1QsY0FBYztJQUNkLFlBQVk7SUFDWixTQUFTO0lBQ1QsVUFBVTtDQUNGLENBQUM7QUFFWDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLDJCQUEyQixHQUFHO0lBQ2xDLGlCQUFpQjtJQUNqQixRQUFRO0lBQ1IsWUFBWTtJQUNaLFFBQVE7SUFDUixZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixxQkFBcUI7SUFDckIsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFVBQVU7SUFDVixzRUFBc0U7SUFDdEUsNERBQTREO0lBQzVELHVFQUF1RTtJQUN2RSxxRUFBcUU7SUFDckUsWUFBWTtJQUNaLFVBQVU7SUFDVixhQUFhO0NBQ0wsQ0FBQztBQUVYOzs7O0dBSUc7QUFDSCxNQUFNLDJCQUEyQixHQUFHLENBQUMsUUFBUSxDQUFVLENBQUM7QUFFeEQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFTLG1CQUFtQixDQUFDLENBQVUsRUFBRSxDQUFTO0lBQ2hELElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEQsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0MsT0FBTyxPQUFRLENBQTZCLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDO0lBQ2pFLENBQUM7SUFDRCxJQUFJLEtBQUssR0FBWSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BELElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sT0FBUSxLQUFpQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxDQUFtQjtJQUNwRCxPQUFPLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxDQUFtQjtJQUN4RCxPQUFPLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsQ0FBbUI7SUFDeEQsT0FBTywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbWJpbmVkUmVjb3JkZXIg4oCUIGEgc2luZ2xlIG9ic2VydmVyIHRoYXQgY2FuIGhvb2sgaW50byBNVUxUSVBMRSBldmVudFxuICogc3RyZWFtcyAoY3VycmVudGx5OiBzY29wZSBkYXRhLWZsb3cgKyBjb250cm9sLWZsb3cpLiBPbmUgb2JqZWN0LCBvbmUgYGlkYCxcbiAqIG9uZSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGV4ZWN1dGlvbi5cbiAqXG4gKiAjIyBXaHkgdGhpcyBleGlzdHNcbiAqXG4gKiBCZWZvcmUgYENvbWJpbmVkUmVjb3JkZXJgLCBhIGNvbnN1bWVyIHdobyB3YW50ZWQgdG8gb2JzZXJ2ZSBib3RoIHN0cmVhbXNcbiAqIGhhZCB0bzpcbiAqICAgMS4gSW1wbGVtZW50IGJvdGggYFNjb3BlUmVjb3JkZXJgICg4IG1ldGhvZHMpIGFuZCBgRmxvd1JlY29yZGVyYCAoMTIgbWV0aG9kcylcbiAqICAgICAgZnVsbHkg4oCUIHN0dWJiaW5nIGV2ZXJ5IGV2ZW50IHRoZXkgZGlkbid0IGNhcmUgYWJvdXQuXG4gKiAgIDIuIFJlbWVtYmVyIHRvIGNhbGwgQk9USCBgYXR0YWNoU2NvcGVSZWNvcmRlcihyKWAgQU5EIGBhdHRhY2hGbG93UmVjb3JkZXIocilgLlxuICogICAgICBGb3JnZXR0aW5nIHRoZSBzZWNvbmQgY2FsbCBzaWxlbnRseSBkcm9wcGVkIGhhbGYgdGhlaXIgZXZlbnRzIOKAlCBub1xuICogICAgICB3YXJuaW5nLCBubyBydW50aW1lIGVycm9yLlxuICogICAzLiBSZS1pbXBsZW1lbnQgY29vcmRpbmF0aW9uIGxvZ2ljIChidWZmZXJpbmcsIG9yZGVyaW5nKSB0aGVtc2VsdmVzLlxuICpcbiAqIGBDb21iaW5lZFJlY29yZGVyYCBjb2xsYXBzZXMgdGhhdCBpbnRvIGEgc2luZ2xlIHR5cGUgYW5kIGEgc2luZ2xlIGF0dGFjaFxuICogY2FsbCAoYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocilgKSwgd2l0aCB0aGUgbGlicmFyeSBoYW5kbGluZyB0aGVcbiAqIHJvdXRpbmcgaW50ZXJuYWxseS4gQ29uc3VtZXJzIGltcGxlbWVudCBvbmx5IHRoZSBldmVudHMgdGhleSBjYXJlIGFib3V0XG4gKiAoYFBhcnRpYWw8Li4uPmApIGFuZCB0aGUgYXR0YWNoIG1ldGhvZCBkdWNrLXR5cGVzIGF0IHJ1bnRpbWUgdG8gZGlzcGF0Y2hcbiAqIHRvIHRoZSByZWxldmFudCBjaGFubmVscy5cbiAqXG4gKiAjIyBGb3J3YXJkIGNvbXBhdGliaWxpdHlcbiAqXG4gKiBXaGVuIGEgdGhpcmQgb2JzZXJ2ZXIgdHlwZSBpcyBhZGRlZCAoZS5nLiBhbiBgT3BlcmF0aW9uUmVjb3JkZXJgKSwgdGhlXG4gKiBgQ29tYmluZWRSZWNvcmRlcmAgdHlwZSBnYWlucyBhbiBgJiBQYXJ0aWFsPE9wZXJhdGlvblJlY29yZGVyPmAgY2xhdXNlIGFuZFxuICogYGF0dGFjaENvbWJpbmVkUmVjb3JkZXJgIGdhaW5zIG9uZSBtb3JlIHJ1bnRpbWUgYnJhbmNoIGluIGl0cyBkaXNwYXRjaC5cbiAqIENvbnN1bWVycyB3cml0aW5nIGEgYENvbWJpbmVkUmVjb3JkZXJgIHRvZGF5IGFyZSBOT1QgYWZmZWN0ZWQg4oCUIHRoZWlyXG4gKiBjb2RlIGtlZXBzIGNvbXBpbGluZyBhbmQgYXR0YWNoaW5nIGNvcnJlY3RseSwgYmVjYXVzZSBldmVyeSBuZXcgbGF5ZXIgaXNcbiAqIG9wdGlvbmFsLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcyc7XG4gKlxuICogY29uc3QgYXVkaXQ6IENvbWJpbmVkUmVjb3JkZXIgPSB7XG4gKiAgIGlkOiAnYXVkaXQnLFxuICogICBvbldyaXRlOiAoZSkgPT4gbG9nV3JpdGUoZS5rZXksIGUudmFsdWUpLCAgICAgICAgLy8gU2NvcGVSZWNvcmRlciBtZXRob2RcbiAqICAgb25EZWNpc2lvbjogKGUpID0+IGxvZ0RlY2lzaW9uKGUuY2hvc2VuKSwgICAgICAgIC8vIEZsb3dSZWNvcmRlciBtZXRob2RcbiAqIH07XG4gKlxuICogZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihhdWRpdCk7XG4gKiAvLyBeIGludGVybmFsbHk6IGRldGVjdHMgYm90aCBzZXRzIG9mIG1ldGhvZHMsIHJvdXRlcyB0byBib3RoIGNoYW5uZWxzLlxuICogYGBgXG4gKlxuICogIyMgQ29udHJhY3Qgd2l0aCBleGlzdGluZyBBUElzXG4gKlxuICogLSBgYXR0YWNoU2NvcGVSZWNvcmRlcihyKWAgYW5kIGBhdHRhY2hGbG93UmVjb3JkZXIocilgIHJlbWFpbiB1bmNoYW5nZWQuXG4gKiAgIENvbnN1bWVycyB3aG8gd2FudCBvbmx5IE9ORSBjaGFubmVsIGtlZXAgdXNpbmcgdGhlbSDigJQgZXhwbGljaXQgaXMgZ29vZC5cbiAqIC0gYGF0dGFjaENvbWJpbmVkUmVjb3JkZXIocilgIGlzIHRoZSBPTkxZIHdheSB0byBndWFyYW50ZWUgYW4gb2JqZWN0IGlzXG4gKiAgIGhvb2tlZCBpbnRvIGV2ZXJ5IHN0cmVhbSBpdCBoYXMgbWV0aG9kcyBmb3IsIHdpdGhvdXQgbWFpbnRhaW5pbmcgdHdvXG4gKiAgIGF0dGFjaCBjYWxscyBhdCB0aGUgY2FsbCBzaXRlLlxuICogLSBJZGVtcG90ZW5jeSBieSBgaWRgIGlzIHByZXNlcnZlZCBhY3Jvc3MgY2hhbm5lbHM6IHJlLWF0dGFjaGluZyB3aXRoIHRoZVxuICogICBzYW1lIGBpZGAgcmVwbGFjZXMgdGhlIHByZXZpb3VzIGluc3RhbmNlIG9uIEJPVEggY2hhbm5lbHMsIG5vdCBqdXN0IG9uZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dFcnJvckV2ZW50LCBGbG93UGF1c2VFdmVudCwgRmxvd1JlY29yZGVyLCBGbG93UmVzdW1lRXZlbnQgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRXJyb3JFdmVudCwgUGF1c2VFdmVudCwgUmVzdW1lRXZlbnQsIFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEVtaXRSZWNvcmRlciB9IGZyb20gJy4vRW1pdFJlY29yZGVyLmpzJztcblxuLyoqXG4gKiBNZXRob2QgbmFtZXMgdGhhdCBhcHBlYXIgb24gQk9USCBgU2NvcGVSZWNvcmRlcmAgYW5kIGBGbG93UmVjb3JkZXJgIGJ1dCB3aXRoXG4gKiBkaWZmZXJlbnQgZXZlbnQgcGF5bG9hZCB0eXBlcy4gRm9yIHRoZXNlLCBhIGBDb21iaW5lZFJlY29yZGVyYCBkZWNsYXJlc1xuICogT05FIGhhbmRsZXIgdGhhdCByZWNlaXZlcyB0aGUgdW5pb24gb2YgYm90aCBwYXlsb2FkcyDigJQgY29uc3VtZXJzXG4gKiBkaXNjcmltaW5hdGUgb24gYHRyYXZlcnNhbENvbnRleHRgLCB3aGljaCBvbmx5IGNvbnRyb2wtZmxvdyBldmVudHMgY2FycnkuXG4gKi9cbnR5cGUgU2hhcmVkTGlmZWN5Y2xlT3ZlcmxhcCA9ICdvbkVycm9yJyB8ICdvblBhdXNlJyB8ICdvblJlc3VtZSc7XG5cbi8qKiBMaWZlY3ljbGUgaG9va3MgKG5vdCBldmVudC1zcGVjaWZpYykgdGhhdCBib3RoIGludGVyZmFjZXMgc2hhcmUgaWRlbnRpY2FsbHkuICovXG50eXBlIFNoYXJlZExpZmVjeWNsZSA9ICdpZCcgfCAnY2xlYXInIHwgJ3RvU25hcHNob3QnO1xuXG4vKipcbiAqIEEgcmVjb3JkZXIgdGhhdCBNQVkgb2JzZXJ2ZSBhbnkgY29tYmluYXRpb24gb2Ygc3VwcG9ydGVkIGV2ZW50IHN0cmVhbXMuXG4gKlxuICogVG9kYXkncyBzdHJlYW1zOlxuICogICAtIFNjb3BlIGRhdGEtZmxvdyAoYFNjb3BlUmVjb3JkZXJgOiBvblJlYWQvb25Xcml0ZS9vbkNvbW1pdC9vblN0YWdlU3RhcnQv4oCmKVxuICogICAtIENvbnRyb2wtZmxvdyAoYEZsb3dSZWNvcmRlcmA6IG9uRGVjaXNpb24vb25TdWJmbG93RW50cnkvb25Mb29wL+KApilcbiAqXG4gKiBBbGwgZXZlbnQgaGFuZGxlcnMgYXJlIG9wdGlvbmFsIOKAlCBpbXBsZW1lbnQgb25seSB3aGF0IHlvdSBjYXJlIGFib3V0LlxuICogYGlkYCBpcyByZXF1aXJlZCBzbyB0aGUgbGlicmFyeSBjYW4gZGVkdXBsaWNhdGUgcmUtYXR0YWNoZXMuXG4gKlxuICogIyMgU2hhcmVkIG1ldGhvZCBuYW1lcyAob25FcnJvciAvIG9uUGF1c2UgLyBvblJlc3VtZSlcbiAqXG4gKiBCb3RoIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmAgZGVjbGFyZSB0aGVzZSB3aXRoIERJRkZFUkVOVCBwYXlsb2FkXG4gKiBzaGFwZXMuIEluIGEgY29tYmluZWQgcmVjb3JkZXIsIGVhY2ggc3VjaCBoYW5kbGVyIGlzIGNhbGxlZCBieSBCT1RIXG4gKiBjaGFubmVscyB3aXRoIGl0cyBvd24gdmFyaWFudC4gVGhlIHBhcmFtZXRlciB0eXBlIGlzIGEgdW5pb24g4oCUIGNvbnN1bWVyc1xuICogY2FuIGVpdGhlciBoYW5kbGUgYm90aCB2YXJpYW50cyB1bmlmb3JtbHksIG9yIGRpc2NyaW1pbmF0ZSAoY29udHJvbC1mbG93XG4gKiB2YXJpYW50cyBjYXJyeSBhIGB0cmF2ZXJzYWxDb250ZXh0YCBmaWVsZCB0aGF0IGRhdGEtZmxvdyB2YXJpYW50cyBsYWNrKS5cbiAqXG4gKiAjIyBGb3J3YXJkIGNvbXBhdGliaWxpdHlcbiAqXG4gKiBXaGVuIGEgdGhpcmQgb2JzZXJ2ZXIgdHlwZSBzaGlwcyAoZS5nLiBgT3BlcmF0aW9uUmVjb3JkZXJgKSwgdGhlIHR5cGVcbiAqIGdhaW5zIGFub3RoZXIgYCYgUGFydGlhbDzigKY+YCBjbGF1c2UuIEJlY2F1c2UgZXZlcnkgY2xhdXNlIGlzIGBQYXJ0aWFsYCxcbiAqIGV4aXN0aW5nIGBDb21iaW5lZFJlY29yZGVyYCBpbXBsZW1lbnRhdGlvbnMgcmVtYWluIHR5cGUtdmFsaWQuXG4gKi9cbmV4cG9ydCB0eXBlIENvbWJpbmVkUmVjb3JkZXIgPSBQYXJ0aWFsPE9taXQ8U2NvcGVSZWNvcmRlciwgU2hhcmVkTGlmZWN5Y2xlT3ZlcmxhcCB8IFNoYXJlZExpZmVjeWNsZT4+ICZcbiAgUGFydGlhbDxPbWl0PEZsb3dSZWNvcmRlciwgU2hhcmVkTGlmZWN5Y2xlT3ZlcmxhcCB8IFNoYXJlZExpZmVjeWNsZT4+ICZcbiAgLy8gRW1pdCBjaGFubmVsIOKAlCBuZXcgdGhpcmQgc3RyZWFtIChQaGFzZSAzKS4gTm8gbWV0aG9kLW5hbWUgb3ZlcmxhcCB3aXRoXG4gIC8vIHRoZSBvdGhlciB0d28gaW50ZXJmYWNlcywgc28gYSBwbGFpbiBpbnRlcnNlY3Rpb24gaXMgc291bmQg4oCUIG5vXG4gIC8vIHVuaW9uLXBheWxvYWQgZGlzY3JpbWluYXRvciBuZWVkZWQuXG4gIFBhcnRpYWw8T21pdDxFbWl0UmVjb3JkZXIsIFNoYXJlZExpZmVjeWNsZT4+ICYge1xuICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgICAvLyBTaGFyZWQgbGlmZWN5Y2xlIGhvb2tzIOKAlCBzYW1lIG9uIGJvdGggaW50ZXJmYWNlcywgc2hhcGUgY29tcGF0aWJsZS5cbiAgICBjbGVhcj8oKTogdm9pZDtcbiAgICB0b1NuYXBzaG90PygpOiB7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgIHByZWZlcnJlZE9wZXJhdGlvbj86ICd0cmFuc2xhdGUnIHwgJ2FjY3VtdWxhdGUnIHwgJ2FnZ3JlZ2F0ZSc7XG4gICAgICBkYXRhOiB1bmtub3duO1xuICAgIH07XG5cbiAgICAvLyBTaGFyZWQgZXZlbnQgbWV0aG9kIG5hbWVzIHdpdGggRElWRVJHRU5UIHBheWxvYWRzIOKAlCBkZWNsYXJlZCBhcyB1bmlvbnMuXG4gICAgLy8gQ29uc3VtZXJzIGVpdGhlciBoYW5kbGUgYm90aCB2YXJpYW50cywgb3IgZGlzY3JpbWluYXRlIHVzaW5nIHRoZVxuICAgIC8vIGV4cG9ydGVkIGhlbHBlciBgaXNGbG93RXZlbnQoKWAgKHdoaWNoIGNoZWNrcyBmb3IgdGhlXG4gICAgLy8gYHRyYXZlcnNhbENvbnRleHRgIGZpZWxkIOKAlCBwcmVzZW50IG9ubHkgb24gY29udHJvbC1mbG93IHZhcmlhbnRzKS5cbiAgICAvL1xuICAgIC8vIEBleGFtcGxlXG4gICAgLy8gYGBgdHNcbiAgICAvLyBjb25zdCBhdWRpdDogQ29tYmluZWRSZWNvcmRlciA9IHtcbiAgICAvLyAgIGlkOiAnYXVkaXQnLFxuICAgIC8vICAgb25FcnJvcjogKGUpID0+IHtcbiAgICAvLyAgICAgaWYgKGlzRmxvd0V2ZW50KGUpKSB7XG4gICAgLy8gICAgICAgLy8gZSBpcyBGbG93RXJyb3JFdmVudCDigJQgaGFzIHN0YWdlTmFtZSwgbWVzc2FnZSwgc3RydWN0dXJlZEVycm9yXG4gICAgLy8gICAgICAgbG9nKCdmbG93IGVycm9yIGluIHN0YWdlJywgZS5zdGFnZU5hbWUpO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgIC8vIGUgaXMgRXJyb3JFdmVudCDigJQgaGFzIGVycm9yLCBvcGVyYXRpb24sIGtleT9cbiAgICAvLyAgICAgICBsb2coJ3Njb3BlIGVycm9yIGR1cmluZycsIGUub3BlcmF0aW9uLCBlLmVycm9yLm1lc3NhZ2UpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9LFxuICAgIC8vIH07XG4gICAgLy8gYGBgXG4gICAgb25FcnJvcj8oZXZlbnQ6IEVycm9yRXZlbnQgfCBGbG93RXJyb3JFdmVudCk6IHZvaWQ7XG4gICAgb25QYXVzZT8oZXZlbnQ6IFBhdXNlRXZlbnQgfCBGbG93UGF1c2VFdmVudCk6IHZvaWQ7XG4gICAgb25SZXN1bWU/KGV2ZW50OiBSZXN1bWVFdmVudCB8IEZsb3dSZXN1bWVFdmVudCk6IHZvaWQ7XG4gIH07XG5cbi8qKlxuICogRGlzY3JpbWluYXRvciBmb3IgdGhlIHVuaW9uIHBheWxvYWQgdHlwZXMgb24gYENvbWJpbmVkUmVjb3JkZXJgJ3Mgc2hhcmVkXG4gKiBtZXRob2RzIChgb25FcnJvcmAsIGBvblBhdXNlYCwgYG9uUmVzdW1lYCkuIFJldHVybnMgYHRydWVgIGlmIHRoZSBldmVudFxuICogd2FzIGVtaXR0ZWQgZnJvbSB0aGUgY29udHJvbC1mbG93IGNoYW5uZWwgKEZsb3dSZWNvcmRlcikuXG4gKlxuICogIyMgSG93IGl0IGRpc2NyaW1pbmF0ZXNcbiAqXG4gKiBTY29wZS1jaGFubmVsIGV2ZW50cyBleHRlbmQgYFJlY29yZGVyQ29udGV4dGAsIHdoaWNoIGNhcnJpZXMgYHBpcGVsaW5lSWRgLlxuICogRmxvdy1jaGFubmVsIGV2ZW50cyBkbyBub3QgY2FycnkgYHBpcGVsaW5lSWRgICh0aGV5IGNhcnJ5IGFuIG9wdGlvbmFsXG4gKiBgdHJhdmVyc2FsQ29udGV4dGAgaW5zdGVhZCwgYnV0IHRoYXQgZmllbGQgaXMgb3B0aW9uYWwgYW5kIGNhbm5vdCBiZVxuICogcmVsaWVkIG9uIGFzIGEgcG9zaXRpdmUgc2lnbmFsKS4gV2UgZGV0ZWN0IHRoZSBmbG93IHZhcmlhbnQgYnkgdGhlXG4gKiBBQlNFTkNFIG9mIGBwaXBlbGluZUlkYCDigJQgdGhpcyBpcyBzY2hlbWEtc3RhYmxlIGFzIGxvbmcgYXMgc2NvcGUgZXZlbnRzXG4gKiBjb250aW51ZSB0byBleHRlbmQgYFJlY29yZGVyQ29udGV4dGAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBvbkVycm9yOiAoZSkgPT4ge1xuICogICBpZiAoaXNGbG93RXZlbnQoZSkpIHtcbiAqICAgICAvLyBOYXJyb3dlZCB0byBGbG93RXJyb3JFdmVudDogaGFzIHN0YWdlTmFtZSwgbWVzc2FnZSwgc3RydWN0dXJlZEVycm9yXG4gKiAgIH0gZWxzZSB7XG4gKiAgICAgLy8gTmFycm93ZWQgdG8gRXJyb3JFdmVudDogaGFzIGVycm9yLCBvcGVyYXRpb24sIGtleT9cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zsb3dFdmVudDxUPihldmVudDogVCk6IGV2ZW50IGlzIEV4Y2x1ZGU8VCwgeyBwaXBlbGluZUlkOiBzdHJpbmcgfT4ge1xuICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnb2JqZWN0JyB8fCBldmVudCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gKGV2ZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5waXBlbGluZUlkID09PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTWV0aG9kIG5hbWVzIGJlbG9uZ2luZyB0byB0aGUgYFNjb3BlUmVjb3JkZXJgIChkYXRhLWZsb3cpIGludGVyZmFjZS5cbiAqIEtlcHQgYXMgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoIHNvIHRoZSBydW50aW1lIGR1Y2stdHlwZSBkZXRlY3RvciBzdGF5c1xuICogaW4gc3luYyB3aXRoIHRoZSBpbnRlcmZhY2UuIElmIGEgbWV0aG9kIGlzIGFkZGVkIHRvIGBTY29wZVJlY29yZGVyYCwgYWRkaW5nIGl0XG4gKiBoZXJlIGlzIHRoZSBPTkxZIGNoYW5nZSByZXF1aXJlZCB0byByb3V0ZSBjb21iaW5lZC1yZWNvcmRlcnMgY29ycmVjdGx5LlxuICovXG5jb25zdCBSRUNPUkRFUl9FVkVOVF9NRVRIT0RTID0gW1xuICAnb25SZWFkJyxcbiAgJ29uV3JpdGUnLFxuICAnb25Db21taXQnLFxuICAnb25FcnJvcicsXG4gICdvblN0YWdlU3RhcnQnLFxuICAnb25TdGFnZUVuZCcsXG4gICdvblBhdXNlJyxcbiAgJ29uUmVzdW1lJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogTWV0aG9kIG5hbWVzIGJlbG9uZ2luZyB0byB0aGUgYEZsb3dSZWNvcmRlcmAgKGNvbnRyb2wtZmxvdykgaW50ZXJmYWNlLlxuICogU2VlIHRoZSBub3RlIG9uIGBSRUNPUkRFUl9FVkVOVF9NRVRIT0RTYC5cbiAqXG4gKiBOT1RFOiB0aGUgYG9uRXJyb3JgLCBgb25QYXVzZWAsIGBvblJlc3VtZWAgbWV0aG9kcyBleGlzdCBvbiBCT1RIIGludGVyZmFjZXNcbiAqIHdpdGggRElGRkVSRU5UIGV2ZW50IHBheWxvYWQgc2hhcGVzLiBBIGBDb21iaW5lZFJlY29yZGVyYCB0aGF0IGltcGxlbWVudHNcbiAqIGFueSBvZiB0aGVzZSByZWNlaXZlcyBib3RoIHZhcmlhbnRzIChvbmUgZnJvbSBlYWNoIGNoYW5uZWwpLiBDb25zdW1lcnMgd2hvXG4gKiBjYXJlIGFib3V0IHRoZSBkaXN0aW5jdGlvbiBjYW4gZGlzY3JpbWluYXRlIG9uIHRoZSBwcmVzZW5jZSBvZlxuICogYHRyYXZlcnNhbENvbnRleHRgICh3aGljaCBvbmx5IGNvbnRyb2wtZmxvdyBldmVudHMgY2FycnkpLlxuICovXG5jb25zdCBGTE9XX1JFQ09SREVSX0VWRU5UX01FVEhPRFMgPSBbXG4gICdvblN0YWdlRXhlY3V0ZWQnLFxuICAnb25OZXh0JyxcbiAgJ29uRGVjaXNpb24nLFxuICAnb25Gb3JrJyxcbiAgJ29uU2VsZWN0ZWQnLFxuICAnb25TdWJmbG93RW50cnknLFxuICAnb25TdWJmbG93RXhpdCcsXG4gICdvblN1YmZsb3dSZWdpc3RlcmVkJyxcbiAgJ29uTG9vcCcsXG4gICdvbkJyZWFrJyxcbiAgJ29uRXJyb3InLFxuICAnb25QYXVzZScsXG4gICdvblJlc3VtZScsXG4gIC8vIFJ1bi1ib3VuZGFyeSBtZXRob2RzIOKAlCBpbmNsdWRlZCBzbyBhIHJlY29yZGVyIHdob3NlIE9OTFkgZXZlbnQgaG9va1xuICAvLyBpcyBhIHJ1biBib3VuZGFyeSAoZS5nLiBhbiBlcnJvciBicmlkZ2UgaW1wbGVtZW50aW5nIGp1c3RcbiAgLy8gYG9uUnVuRmFpbGVkYCkgaXMgc3RpbGwgZGV0ZWN0ZWQgYXMgYSBGbG93UmVjb3JkZXIgYW5kIHJvdXRlZCB0byB0aGVcbiAgLy8gZmxvdyBjaGFubmVsLiBQcmV2aW91c2x5IGEgcnVuLW9ubHkgcmVjb3JkZXIgd2FzIHNpbGVudGx5IGRyb3BwZWQuXG4gICdvblJ1blN0YXJ0JyxcbiAgJ29uUnVuRW5kJyxcbiAgJ29uUnVuRmFpbGVkJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogTWV0aG9kIG5hbWVzIGJlbG9uZ2luZyB0byB0aGUgYEVtaXRSZWNvcmRlcmAgKHVzZXItZW1pdHRlZCBldmVudHMpXG4gKiBpbnRlcmZhY2UuIFNhbWUgY29udmVudGlvbiBhcyB0aGUgb3RoZXIgdHdvIGFycmF5cyBhYm92ZSDigJQga2VwdCBhc1xuICogdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGR1Y2stdHlwZSBkZXRlY3Rpb24uXG4gKi9cbmNvbnN0IEVNSVRfUkVDT1JERVJfRVZFTlRfTUVUSE9EUyA9IFsnb25FbWl0J10gYXMgY29uc3Q7XG5cbi8qKlxuICogVHJ1ZSBpZmYgdGhlIHJlY29yZGVyIGRlY2xhcmVzIGEgbWV0aG9kIG5hbWVkIGBtYCBlaXRoZXIgYXMgYW4gb3duXG4gKiBwcm9wZXJ0eSBPUiBvbiBpdHMgY2xhc3MtcHJvdG90eXBlIGNoYWluIOKAlCBidXQgTk9UIGluaGVyaXRlZCBmcm9tXG4gKiBgT2JqZWN0LnByb3RvdHlwZWAuXG4gKlxuICogIyMgV2h5IHRoaXMgbGF5ZXJlZCBjaGVja1xuICpcbiAqIEEgYENvbWJpbmVkUmVjb3JkZXJgIGNhbiBiZSBlaXRoZXIgYSBwbGFpbiBvYmplY3QgbGl0ZXJhbCAoaGFuZGxlcnMgYXNcbiAqIG93biBwcm9wZXJ0aWVzKSBPUiBhIGNsYXNzIGluc3RhbmNlIChoYW5kbGVycyBhcyBjbGFzcy1wcm90b3R5cGVcbiAqIG1ldGhvZHMpLiBCb3RoIGFyZSBsZWdpdGltYXRlIGNvbnN1bWVyIHBhdHRlcm5zIGFuZCBib3RoIE1VU1QgYXR0YWNoLlxuICpcbiAqIEJ1dCBoYW5kbGVycyBpbmhlcml0ZWQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAgYXJlIEFMV0FZUyBhY2NpZGVudGFsIG9yXG4gKiBtYWxpY2lvdXMgKG5vYm9keSBsZWdpdGltYXRlbHkgYXR0YWNoZXMgcmVjb3JkZXIgbWV0aG9kcyB0aGVyZSkuIFNvIHdlXG4gKiB3YWxrIHRoZSBwcm90b3R5cGUgY2hhaW4sIFNUT1BQSU5HIGJlZm9yZSBgT2JqZWN0LnByb3RvdHlwZWAuIFRoaXNcbiAqIGFjY2VwdHMgY2xhc3MgbWV0aG9kcyB3aGlsZSBzdGlsbCBibG9ja2luZyBgT2JqZWN0LnByb3RvdHlwZWBcbiAqIHBvbGx1dGlvbiBhdHRhY2tzLlxuICovXG5mdW5jdGlvbiBoYXNPd25PckNsYXNzTWV0aG9kKHI6IHVua25vd24sIG06IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAociA9PT0gbnVsbCB8fCB0eXBlb2YgciAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCBtKSkge1xuICAgIHJldHVybiB0eXBlb2YgKHIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW21dID09PSAnZnVuY3Rpb24nO1xuICB9XG4gIGxldCBwcm90bzogdW5rbm93biA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtcbiAgd2hpbGUgKHByb3RvICE9PSBudWxsICYmIHByb3RvICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgbSkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgKHByb3RvIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVttXSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUcnVlIGlmZiB0aGUgcmVjb3JkZXIgaW1wbGVtZW50cyBhdCBsZWFzdCBvbmUgZGF0YS1mbG93IGV2ZW50IG1ldGhvZC5cbiAqIFVzZWQgYnkgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXJgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGhvb2sgaW50b1xuICogdGhlIHNjb3BlIGRhdGEtZmxvdyBjaGFubmVsLlxuICpcbiAqICMjIERldGVjdGlvbiBydWxlXG4gKlxuICogQWNjZXB0cyBib3RoIG9iamVjdC1saXRlcmFsIHJlY29yZGVycyAob3duLXByb3BlcnR5IGhhbmRsZXJzKSBBTkQgY2xhc3NcbiAqIGluc3RhbmNlcyAoaGFuZGxlcnMgZGVjbGFyZWQgb24gdGhlIGNsYXNzIHByb3RvdHlwZSkuIFJlamVjdHMgaGFuZGxlcnNcbiAqIGluaGVyaXRlZCBmcm9tIGBPYmplY3QucHJvdG90eXBlYCDigJQgdGhhdCdzIGFsd2F5cyBhY2NpZGVudGFsIG9yXG4gKiBtYWxpY2lvdXMgcG9sbHV0aW9uLCBuZXZlciBhIGxlZ2l0aW1hdGUgcmVjb3JkZXIuXG4gKlxuICogIyMgTGlmZWN5Y2xlIGV4Y2x1c2lvbnNcbiAqXG4gKiBgY2xlYXJgIGFuZCBgdG9TbmFwc2hvdGAgYXJlIE5PVCBjb3VudGVkIGFzIGV2ZW50IG1ldGhvZHMg4oCUIGEgcmVjb3JkZXJcbiAqIHRoYXQgb25seSBpbXBsZW1lbnRzIHRob3NlIGhhcyBub3RoaW5nIHRvIG9ic2VydmUgYW5kIHdvdWxkIGJlIGEgbm8tb3BcbiAqIG9uIGVpdGhlciBjaGFubmVsLlxuICpcbiAqICMjIFJldHVybiB0eXBlXG4gKlxuICogUmV0dXJucyBwbGFpbiBgYm9vbGVhbmAgKG5vdCBhIHR5cGUgcHJlZGljYXRlKS4gVGhlIGZ1bGwgYFNjb3BlUmVjb3JkZXJgXG4gKiBpbnRlcmZhY2UgaGFzIHBheWxvYWQgdHlwZXMgdGhhdCBkaXZlcmdlIGZyb20gYENvbWJpbmVkUmVjb3JkZXJgJ3MgdW5pb25cbiAqIHZhcmlhbnRzIGZvciBzaGFyZWQgbWV0aG9kcywgc28gYSBuYXJyb3dpbmcgcHJlZGljYXRlIHdvdWxkIGJlIHVuc291bmQuXG4gKiBDYWxsZXJzIHRoYXQgbmVlZCB0byB0cmVhdCB0aGUgcmVjb3JkZXIgYXMgYSBgU2NvcGVSZWNvcmRlcmAgZG8gc28gZXhwbGljaXRseVxuICogYXQgdGhlIGF0dGFjaCBzaXRlIOKAlCB0aGUgY2FzdCBpcyB0aGUgY29udHJhY3QgdGhhdCBlYWNoIGNoYW5uZWwgcGFzc2VzXG4gKiBpdHMgb3duIHBheWxvYWQgdmFyaWFudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1JlY29yZGVyTWV0aG9kcyhyOiBDb21iaW5lZFJlY29yZGVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBSRUNPUkRFUl9FVkVOVF9NRVRIT0RTLnNvbWUoKG0pID0+IGhhc093bk9yQ2xhc3NNZXRob2QociwgbSkpO1xufVxuXG4vKipcbiAqIFRydWUgaWZmIHRoZSByZWNvcmRlciBpbXBsZW1lbnRzIGF0IGxlYXN0IG9uZSBjb250cm9sLWZsb3cgZXZlbnQgbWV0aG9kLlxuICogU2VlIGBoYXNSZWNvcmRlck1ldGhvZHNgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRmxvd1JlY29yZGVyTWV0aG9kcyhyOiBDb21iaW5lZFJlY29yZGVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBGTE9XX1JFQ09SREVSX0VWRU5UX01FVEhPRFMuc29tZSgobSkgPT4gaGFzT3duT3JDbGFzc01ldGhvZChyLCBtKSk7XG59XG5cbi8qKlxuICogVHJ1ZSBpZmYgdGhlIHJlY29yZGVyIGltcGxlbWVudHMgYXQgbGVhc3Qgb25lIGVtaXQtY2hhbm5lbCBldmVudCBtZXRob2QuXG4gKiBTZWUgYGhhc1JlY29yZGVyTWV0aG9kc2AgZm9yIHRoZSBvd25lcnNoaXAtZGV0ZWN0aW9uIHJ1bGVzIChvd24gb3JcbiAqIGNsYXNzLXByb3RvdHlwZSBtZXRob2RzIGNvdW50OyBgT2JqZWN0LnByb3RvdHlwZWAgcG9sbHV0aW9uIGRvZXMgbm90KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0VtaXRSZWNvcmRlck1ldGhvZHMocjogQ29tYmluZWRSZWNvcmRlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gRU1JVF9SRUNPUkRFUl9FVkVOVF9NRVRIT0RTLnNvbWUoKG0pID0+IGhhc093bk9yQ2xhc3NNZXRob2QociwgbSkpO1xufVxuIl19
|