@dollhousemcp/mcp-server 2.0.27 → 2.0.28
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/CHANGELOG.md +6 -0
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/mcp-aql/OperationSchema.js +2 -2
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/evaluatePermission.js +9 -3
- package/dist/web/console/IngestRoutes.d.ts +7 -1
- package/dist/web/console/IngestRoutes.d.ts.map +1 -1
- package/dist/web/console/IngestRoutes.js +28 -6
- package/dist/web/console/LeaderForwardingSink.d.ts +6 -1
- package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
- package/dist/web/console/LeaderForwardingSink.js +8 -2
- package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
- package/dist/web/console/UnifiedConsole.js +6 -3
- package/dist/web/console/sessionClientPlatform.d.ts +11 -0
- package/dist/web/console/sessionClientPlatform.d.ts.map +1 -0
- package/dist/web/console/sessionClientPlatform.js +83 -0
- package/dist/web/public/sessions.css +89 -9
- package/dist/web/public/sessions.js +160 -4
- package/dist/web/public/setup.js +4 -0
- package/package.json +1 -1
- package/scripts/pretooluse-dollhouse.sh +36 -2
- package/scripts/pretooluse-vscode.sh +5 -2
- package/scripts/pretooluse-windsurf.sh +5 -2
- package/server.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluatePermission.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/evaluatePermission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wEAAwE;AACxE,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,SAAgB,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,CAAC;IACpF,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAG/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,EACnE,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO;CAOlB;AAED,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,WAAW,CAAC;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,wBAAwB,CAAC;IACjG,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,mBAAmB,CAAC;IAChI,iBAAiB,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACrE;
|
|
1
|
+
{"version":3,"file":"evaluatePermission.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/evaluatePermission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wEAAwE;AACxE,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,SAAgB,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,CAAC;IACpF,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAG/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,EACnE,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO;CAOlB;AAED,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,WAAW,CAAC;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,wBAAwB,CAAC;IACjG,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,mBAAmB,CAAC;IAChI,iBAAiB,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACrE;AAqDD,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,UAAkC,CAAC;AAiBnE;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,EAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1F,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiDlC"}
|
|
@@ -40,9 +40,15 @@ function formatCursor(decision, reason) {
|
|
|
40
40
|
function formatWindsurf(decision, reason) {
|
|
41
41
|
return withReason({ allowed: decision === 'allow' }, reason);
|
|
42
42
|
}
|
|
43
|
-
/** Codex:
|
|
43
|
+
/** Codex: explicit PreToolUse payload, maps 'ask' to 'deny' */
|
|
44
44
|
function formatCodex(decision, reason) {
|
|
45
|
-
return {
|
|
45
|
+
return {
|
|
46
|
+
hookSpecificOutput: {
|
|
47
|
+
hookEventName: 'PreToolUse',
|
|
48
|
+
permissionDecision: decision === 'ask' ? 'deny' : decision,
|
|
49
|
+
permissionDecisionReason: reason ?? '',
|
|
50
|
+
},
|
|
51
|
+
};
|
|
46
52
|
}
|
|
47
53
|
/** Claude Code (default): uses hookSpecificOutput.permissionDecision for PreToolUse */
|
|
48
54
|
function formatClaudeCode(decision, reason) {
|
|
@@ -141,4 +147,4 @@ export async function evaluatePermission(params, deps) {
|
|
|
141
147
|
// Default: allow
|
|
142
148
|
return formatPermissionResponse('allow', platform, input);
|
|
143
149
|
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGVQZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvZXZhbHVhdGVQZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBTUgsd0VBQXdFO0FBQ3hFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0lBQ2xDLEtBQUssQ0FBK0Q7SUFDcEUsUUFBUSxDQUFTO0lBRWpDLFlBQ0UsT0FBZSxFQUNmLEtBQW1FLEVBQ25FLFFBQWdCLEVBQ2hCLEtBQWU7UUFFZixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFVRCxtRUFBbUU7QUFDbkUsU0FBUyxVQUFVLENBQUMsR0FBNEIsRUFBRSxNQUFlLEVBQUUsR0FBRyxHQUFHLFFBQVE7SUFDL0UsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFlO0lBQ3JELE9BQU8sVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFT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cEUsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixPQUFPLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVybWlzc2lvbiBldmFsdWF0aW9uIGZvciBQcmVUb29sVXNlIGhvb2tzIGFjcm9zcyBhbGwgQUkgcGxhdGZvcm1zLlxuICpcbiAqIFByb3ZpZGVzIHRoZSBgZXZhbHVhdGVfcGVybWlzc2lvbmAgTUNQLUFRTCBSRUFEIG9wZXJhdGlvbiwgZW5hYmxpbmdcbiAqIENsYXVkZSBDb2RlLCBDdXJzb3IsIEdlbWluaSBDTEksIFdpbmRzdXJmLCBhbmQgQ29kZXggdG8gdXNlXG4gKiBEb2xsaG91c2VNQ1AgYXMgdGhlaXIgcGVybWlzc2lvbiBldmFsdWF0aW9uIGJhY2tlbmQgdmlhIGhvb2tzLlxuICpcbiAqIFRocmVlLXN0YWdlIGV2YWx1YXRpb24gcGlwZWxpbmU6XG4gKiAxLiBSYXRlIGxpbWl0aW5nIOKAlCBwcmV2ZW50cyBhYnVzZVxuICogMi4gU3RhdGljIHRvb2wgY2xhc3NpZmljYXRpb24g4oCUIGJ1aWx0LWluIGFsbG93L2RlbnkgcnVsZXNcbiAqIDMuIEVsZW1lbnQgcG9saWN5IGV2YWx1YXRpb24g4oCUIGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXNcbiAqXG4gKiBSZXR1cm5zIHBsYXRmb3JtLXNwZWNpZmljIHJlc3BvbnNlIGZvcm1hdHMgc28gZWFjaCBwbGF0Zm9ybSdzIGhvb2tcbiAqIHNjcmlwdCByZWNlaXZlcyB0aGUgSlNPTiBzaGFwZSBpdCBleHBlY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9SYXRlTGltaXRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCwgQ2xpVG9vbFBvbGljeVJlc3VsdCB9IGZyb20gJy4vcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aXZlRWxlbWVudCB9IGZyb20gJy4vcG9saWNpZXMvRWxlbWVudFBvbGljaWVzLmpzJztcblxuLyoqIEVycm9yIHRocm93biB3aGVuIHBlcm1pc3Npb24gZXZhbHVhdGlvbiBmYWlscyBhdCBhIHNwZWNpZmljIHN0YWdlICovXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkV2YWx1YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWdlOiAncmF0ZV9saW1pdCcgfCAnY2xhc3NpZmljYXRpb24nIHwgJ3BvbGljeScgfCAnZWxlbWVudF9mZXRjaCc7XG4gIHB1YmxpYyByZWFkb25seSB0b29sTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdGFnZTogJ3JhdGVfbGltaXQnIHwgJ2NsYXNzaWZpY2F0aW9uJyB8ICdwb2xpY3knIHwgJ2VsZW1lbnRfZmV0Y2gnLFxuICAgIHRvb2xOYW1lOiBzdHJpbmcsXG4gICAgY2F1c2U/OiB1bmtub3duLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSA/IHsgY2F1c2UgfSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5uYW1lID0gJ1Blcm1pc3Npb25FdmFsdWF0aW9uRXJyb3InO1xuICAgIHRoaXMuc3RhZ2UgPSBzdGFnZTtcbiAgICB0aGlzLnRvb2xOYW1lID0gdG9vbE5hbWU7XG4gIH1cbn1cblxuLyoqIERlcGVuZGVuY2llcyBpbmplY3RlZCBmcm9tIE1DUEFRTEhhbmRsZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdGVQZXJtaXNzaW9uRGVwcyB7XG4gIHBlcm1pc3Npb25Qcm9tcHRMaW1pdGVyOiBSYXRlTGltaXRlcjtcbiAgY2xhc3NpZnlUb29sOiAodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0O1xuICBldmFsdWF0ZUNsaVRvb2xQb2xpY3k6ICh0b29sTmFtZTogc3RyaW5nLCB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBlbGVtZW50czogQWN0aXZlRWxlbWVudFtdKSA9PiBDbGlUb29sUG9saWN5UmVzdWx0O1xuICBnZXRBY3RpdmVFbGVtZW50czogKHNlc3Npb25JZD86IHN0cmluZykgPT4gUHJvbWlzZTxBY3RpdmVFbGVtZW50W10+O1xufVxuXG4vKiogT3B0aW9uYWwgcmVhc29uIGZpZWxkLCBvbmx5IGluY2x1ZGVkIHdoZW4gcmVhc29uIGlzIHByb3ZpZGVkICovXG5mdW5jdGlvbiB3aXRoUmVhc29uKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlYXNvbj86IHN0cmluZywga2V5ID0gJ3JlYXNvbicpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiByZWFzb24gPyB7IC4uLm9iaiwgW2tleV06IHJlYXNvbiB9IDogb2JqO1xufVxuXG4vKiogR2VtaW5pOiBtYXBzICdhc2snIHRvICdkZW55JyAobm8gaW50ZXJhY3RpdmUgc3VwcG9ydCkgKi9cbmZ1bmN0aW9uIGZvcm1hdEdlbWluaShkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgZGVjaXNpb246IGRlY2lzaW9uID09PSAnYXNrJyA/ICdkZW55JyA6IGRlY2lzaW9uIH0sIHJlYXNvbik7XG59XG5cbi8qKiBDdXJzb3I6IHVzZXMgJ3Blcm1pc3Npb24nIGZpZWxkIGluc3RlYWQgb2YgJ2RlY2lzaW9uJyAqL1xuZnVuY3Rpb24gZm9ybWF0Q3Vyc29yKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBwZXJtaXNzaW9uOiBkZWNpc2lvbiB9LCByZWFzb24pO1xufVxuXG4vKiogV2luZHN1cmY6IHVzZXMgYm9vbGVhbiAnYWxsb3dlZCcgZmllbGQgKi9cbmZ1bmN0aW9uIGZvcm1hdFdpbmRzdXJmKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBhbGxvd2VkOiBkZWNpc2lvbiA9PT0gJ2FsbG93JyB9LCByZWFzb24pO1xufVxuXG4vKiogQ29kZXg6IHdyYXBzIGluIGhvb2tTcGVjaWZpY091dHB1dCwgbWFwcyAnYXNrJyB0byAnZGVueScgKi9cbmZ1bmN0aW9uIGZvcm1hdENvZGV4KGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHsgaG9va1NwZWNpZmljT3V0cHV0OiB3aXRoUmVhc29uKHsgcGVybWlzc2lvbkRlY2lzaW9uOiBkZWNpc2lvbiA9PT0gJ2FzaycgPyAnZGVueScgOiBkZWNpc2lvbiB9LCByZWFzb24pIH07XG59XG5cbi8qKiBDbGF1ZGUgQ29kZSAoZGVmYXVsdCk6IHVzZXMgaG9va1NwZWNpZmljT3V0cHV0LnBlcm1pc3Npb25EZWNpc2lvbiBmb3IgUHJlVG9vbFVzZSAqL1xuZnVuY3Rpb24gZm9ybWF0Q2xhdWRlQ29kZShkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgaG9va1NwZWNpZmljT3V0cHV0OiB3aXRoUmVhc29uKHtcbiAgICAgIGhvb2tFdmVudE5hbWU6ICdQcmVUb29sVXNlJyxcbiAgICAgIHBlcm1pc3Npb25EZWNpc2lvbjogZGVjaXNpb24sXG4gICAgfSwgcmVhc29uLCAncGVybWlzc2lvbkRlY2lzaW9uUmVhc29uJyksXG4gIH07XG59XG5cbi8qKiBQbGF0Zm9ybSBmb3JtYXR0ZXIgbG9va3VwICovXG5jb25zdCBwbGF0Zm9ybUZvcm1hdHRlcnM6IFJlY29yZDxzdHJpbmcsIChkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHtcbiAgZ2VtaW5pOiBmb3JtYXRHZW1pbmksXG4gIGN1cnNvcjogZm9ybWF0Q3Vyc29yLFxuICB3aW5kc3VyZjogZm9ybWF0V2luZHN1cmYsXG4gIGNvZGV4OiBmb3JtYXRDb2RleCxcbiAgdnNjb2RlOiBmb3JtYXRDbGF1ZGVDb2RlLFxuICBjbGF1ZGVfY29kZTogZm9ybWF0Q2xhdWRlQ29kZSxcbn07XG5cbi8qKiBLbm93biBwbGF0Zm9ybSBpZGVudGlmaWVycyAqL1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9QTEFURk9STVMgPSBPYmplY3Qua2V5cyhwbGF0Zm9ybUZvcm1hdHRlcnMpO1xuXG5mdW5jdGlvbiB3YXJuT25Vbmtub3duUGxhdGZvcm0ocGxhdGZvcm06IHN0cmluZyk6IHZvaWQge1xuICB2b2lkIGltcG9ydCgnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJylcbiAgICAudGhlbigoeyBsb2dnZXIgfSkgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBbZXZhbHVhdGVQZXJtaXNzaW9uXSBVbmtub3duIHBsYXRmb3JtIFwiJHtwbGF0Zm9ybX1cIiwgZGVmYXVsdGluZyB0byBjbGF1ZGVfY29kZSBmb3JtYXQuIFN1cHBvcnRlZDogJHtTVVBQT1JURURfUExBVEZPUk1TLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbZXZhbHVhdGVQZXJtaXNzaW9uXSBGYWlsZWQgdG8gbG9hZCBsb2dnZXIgd2hpbGUgaGFuZGxpbmcgdW5rbm93biBwbGF0Zm9ybSBcIiR7cGxhdGZvcm19XCIuYCxcbiAgICAgICAgZXJyb3IsXG4gICAgICApO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEZvcm1hdCBwZXJtaXNzaW9uIGV2YWx1YXRpb24gcmVzcG9uc2UgZm9yIHBsYXRmb3JtLXNwZWNpZmljIGhvb2sgc2NyaXB0cy5cbiAqIEVhY2ggcGxhdGZvcm0gZXhwZWN0cyBhIGRpZmZlcmVudCBKU09OIHNoYXBlIGZyb20gaXRzIGhvb2sgcmVzcG9uc2UuXG4gKlxuICogVW5rbm93biBwbGF0Zm9ybXMgZGVmYXVsdCB0byBjbGF1ZGVfY29kZSBmb3JtYXQgd2l0aCBhIHdhcm5pbmcgbG9nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKFxuICBkZWNpc2lvbjogJ2FsbG93JyB8ICdkZW55JyB8ICdhc2snLFxuICBwbGF0Zm9ybTogc3RyaW5nLFxuICBfaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICByZWFzb24/OiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdnZW1pbmknOiByZXR1cm4gZm9ybWF0R2VtaW5pKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ2N1cnNvcic6IHJldHVybiBmb3JtYXRDdXJzb3IoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnd2luZHN1cmYnOiByZXR1cm4gZm9ybWF0V2luZHN1cmYoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnY29kZXgnOiByZXR1cm4gZm9ybWF0Q29kZXgoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnY2xhdWRlX2NvZGUnOiByZXR1cm4gZm9ybWF0Q2xhdWRlQ29kZShkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gSW1wb3J0IGxhemlseSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IGF0IG1vZHVsZSBsb2FkIHRpbWVcbiAgICAgIHdhcm5PblVua25vd25QbGF0Zm9ybShwbGF0Zm9ybSk7XG4gICAgICByZXR1cm4gZm9ybWF0Q2xhdWRlQ29kZShkZWNpc2lvbiwgcmVhc29uKTtcbiAgfVxufVxuXG4vKipcbiAqIEV2YWx1YXRlIGEgQ0xJIHBlcm1pc3Npb24gcmVxdWVzdCBmb3IgUHJlVG9vbFVzZSBob29rcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVG9vbCBuYW1lLCBpbnB1dCwgYW5kIHRhcmdldCBwbGF0Zm9ybVxuICogQHBhcmFtIGRlcHMgLSBJbmplY3RlZCBkZXBlbmRlbmNpZXMgZnJvbSBNQ1BBUUxIYW5kbGVyXG4gKiBAcmV0dXJucyBQbGF0Zm9ybS1mb3JtYXR0ZWQgcGVybWlzc2lvbiBkZWNpc2lvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbHVhdGVQZXJtaXNzaW9uKFxuICBwYXJhbXM6IHsgdG9vbF9uYW1lPzogdW5rbm93bjsgaW5wdXQ/OiB1bmtub3duOyBwbGF0Zm9ybT86IHVua25vd247IHNlc3Npb25faWQ/OiB1bmtub3duIH0sXG4gIGRlcHM6IEV2YWx1YXRlUGVybWlzc2lvbkRlcHMsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IHRvb2xOYW1lID0gdHlwZW9mIHBhcmFtcy50b29sX25hbWUgPT09ICdzdHJpbmcnID8gcGFyYW1zLnRvb2xfbmFtZSA6ICcnO1xuICBjb25zdCBpbnB1dFJhdyA9IHBhcmFtcy5pbnB1dDtcbiAgY29uc3QgaW5wdXQgPSAoaW5wdXRSYXcgJiYgdHlwZW9mIGlucHV0UmF3ID09PSAnb2JqZWN0JylcbiAgICA/IGlucHV0UmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgOiB7fTtcbiAgY29uc3QgcGxhdGZvcm0gPSB0eXBlb2YgcGFyYW1zLnBsYXRmb3JtID09PSAnc3RyaW5nJyA/IHBhcmFtcy5wbGF0Zm9ybSA6ICdjbGF1ZGVfY29kZSc7XG4gIGNvbnN0IHNlc3Npb25JZCA9IHR5cGVvZiBwYXJhbXMuc2Vzc2lvbl9pZCA9PT0gJ3N0cmluZycgJiYgcGFyYW1zLnNlc3Npb25faWQudHJpbSgpICE9PSAnJ1xuICAgID8gcGFyYW1zLnNlc3Npb25faWRcbiAgICA6IHVuZGVmaW5lZDtcblxuICAvLyBSYXRlIGxpbWl0XG4gIGNvbnN0IHJhdGVTdGF0dXMgPSBkZXBzLnBlcm1pc3Npb25Qcm9tcHRMaW1pdGVyLmNoZWNrTGltaXQoKTtcbiAgaWYgKCFyYXRlU3RhdHVzLmFsbG93ZWQpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdkZW55JywgcGxhdGZvcm0sIGlucHV0LCAnUmF0ZSBsaW1pdCBleGNlZWRlZCcpO1xuICB9XG4gIGRlcHMucGVybWlzc2lvblByb21wdExpbWl0ZXIuY29uc3VtZVRva2VuKCk7XG5cbiAgLy8gU3RhZ2UgMTogU3RhdGljIGNsYXNzaWZpY2F0aW9uXG4gIGNvbnN0IGNsYXNzaWZpY2F0aW9uID0gZGVwcy5jbGFzc2lmeVRvb2wodG9vbE5hbWUsIGlucHV0KTtcbiAgaWYgKGNsYXNzaWZpY2F0aW9uLmJlaGF2aW9yID09PSAnYWxsb3cnKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnYWxsb3cnLCBwbGF0Zm9ybSwgaW5wdXQpO1xuICB9XG4gIGlmIChjbGFzc2lmaWNhdGlvbi5iZWhhdmlvciA9PT0gJ2RlbnknKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnZGVueScsIHBsYXRmb3JtLCBpbnB1dCwgY2xhc3NpZmljYXRpb24ucmVhc29uKTtcbiAgfVxuXG4gIC8vIFN0YWdlIDI6IEVsZW1lbnQgcG9saWN5IGV2YWx1YXRpb25cbiAgbGV0IGVsZW1lbnRzOiBBY3RpdmVFbGVtZW50W107XG4gIHRyeSB7XG4gICAgZWxlbWVudHMgPSBhd2FpdCBkZXBzLmdldEFjdGl2ZUVsZW1lbnRzKHNlc3Npb25JZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBQZXJtaXNzaW9uRXZhbHVhdGlvbkVycm9yKFxuICAgICAgYEZhaWxlZCB0byBmZXRjaCBhY3RpdmUgZWxlbWVudHMgZm9yIHBvbGljeSBldmFsdWF0aW9uOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gLFxuICAgICAgJ2VsZW1lbnRfZmV0Y2gnLCB0b29sTmFtZSwgZXJyLFxuICAgICk7XG4gIH1cbiAgY29uc3QgZGVjaXNpb24gPSBkZXBzLmV2YWx1YXRlQ2xpVG9vbFBvbGljeSh0b29sTmFtZSwgaW5wdXQsIGVsZW1lbnRzKTtcblxuICBpZiAoZGVjaXNpb24uYmVoYXZpb3IgPT09ICdkZW55Jykge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2RlbnknLCBwbGF0Zm9ybSwgaW5wdXQsIGRlY2lzaW9uLm1lc3NhZ2UpO1xuICB9XG4gIGlmIChkZWNpc2lvbi5iZWhhdmlvciA9PT0gJ2NvbmZpcm0nKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnYXNrJywgcGxhdGZvcm0sIGlucHV0LFxuICAgICAgZGVjaXNpb24ubWVzc2FnZSB8fCAnUmVxdWlyZXMgY29uZmlybWF0aW9uIHBlciBlbGVtZW50IHBvbGljeScpO1xuICB9XG5cbiAgLy8gRGVmYXVsdDogYWxsb3dcbiAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnYWxsb3cnLCBwbGF0Zm9ybSwgaW5wdXQpO1xufVxuIl19
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGVQZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvZXZhbHVhdGVQZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBTUgsd0VBQXdFO0FBQ3hFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0lBQ2xDLEtBQUssQ0FBK0Q7SUFDcEUsUUFBUSxDQUFTO0lBRWpDLFlBQ0UsT0FBZSxFQUNmLEtBQW1FLEVBQ25FLFFBQWdCLEVBQ2hCLEtBQWU7UUFFZixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFVRCxtRUFBbUU7QUFDbkUsU0FBUyxVQUFVLENBQUMsR0FBNEIsRUFBRSxNQUFlLEVBQUUsR0FBRyxHQUFHLFFBQVE7SUFDL0UsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFlO0lBQ3JELE9BQU8sVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFT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T0FBTyxJQUFJLDBDQUEwQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixPQUFPLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVybWlzc2lvbiBldmFsdWF0aW9uIGZvciBQcmVUb29sVXNlIGhvb2tzIGFjcm9zcyBhbGwgQUkgcGxhdGZvcm1zLlxuICpcbiAqIFByb3ZpZGVzIHRoZSBgZXZhbHVhdGVfcGVybWlzc2lvbmAgTUNQLUFRTCBSRUFEIG9wZXJhdGlvbiwgZW5hYmxpbmdcbiAqIENsYXVkZSBDb2RlLCBDdXJzb3IsIEdlbWluaSBDTEksIFdpbmRzdXJmLCBhbmQgQ29kZXggdG8gdXNlXG4gKiBEb2xsaG91c2VNQ1AgYXMgdGhlaXIgcGVybWlzc2lvbiBldmFsdWF0aW9uIGJhY2tlbmQgdmlhIGhvb2tzLlxuICpcbiAqIFRocmVlLXN0YWdlIGV2YWx1YXRpb24gcGlwZWxpbmU6XG4gKiAxLiBSYXRlIGxpbWl0aW5nIOKAlCBwcmV2ZW50cyBhYnVzZVxuICogMi4gU3RhdGljIHRvb2wgY2xhc3NpZmljYXRpb24g4oCUIGJ1aWx0LWluIGFsbG93L2RlbnkgcnVsZXNcbiAqIDMuIEVsZW1lbnQgcG9saWN5IGV2YWx1YXRpb24g4oCUIGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXNcbiAqXG4gKiBSZXR1cm5zIHBsYXRmb3JtLXNwZWNpZmljIHJlc3BvbnNlIGZvcm1hdHMgc28gZWFjaCBwbGF0Zm9ybSdzIGhvb2tcbiAqIHNjcmlwdCByZWNlaXZlcyB0aGUgSlNPTiBzaGFwZSBpdCBleHBlY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9SYXRlTGltaXRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCwgQ2xpVG9vbFBvbGljeVJlc3VsdCB9IGZyb20gJy4vcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aXZlRWxlbWVudCB9IGZyb20gJy4vcG9saWNpZXMvRWxlbWVudFBvbGljaWVzLmpzJztcblxuLyoqIEVycm9yIHRocm93biB3aGVuIHBlcm1pc3Npb24gZXZhbHVhdGlvbiBmYWlscyBhdCBhIHNwZWNpZmljIHN0YWdlICovXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkV2YWx1YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWdlOiAncmF0ZV9saW1pdCcgfCAnY2xhc3NpZmljYXRpb24nIHwgJ3BvbGljeScgfCAnZWxlbWVudF9mZXRjaCc7XG4gIHB1YmxpYyByZWFkb25seSB0b29sTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdGFnZTogJ3JhdGVfbGltaXQnIHwgJ2NsYXNzaWZpY2F0aW9uJyB8ICdwb2xpY3knIHwgJ2VsZW1lbnRfZmV0Y2gnLFxuICAgIHRvb2xOYW1lOiBzdHJpbmcsXG4gICAgY2F1c2U/OiB1bmtub3duLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSA/IHsgY2F1c2UgfSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5uYW1lID0gJ1Blcm1pc3Npb25FdmFsdWF0aW9uRXJyb3InO1xuICAgIHRoaXMuc3RhZ2UgPSBzdGFnZTtcbiAgICB0aGlzLnRvb2xOYW1lID0gdG9vbE5hbWU7XG4gIH1cbn1cblxuLyoqIERlcGVuZGVuY2llcyBpbmplY3RlZCBmcm9tIE1DUEFRTEhhbmRsZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdGVQZXJtaXNzaW9uRGVwcyB7XG4gIHBlcm1pc3Npb25Qcm9tcHRMaW1pdGVyOiBSYXRlTGltaXRlcjtcbiAgY2xhc3NpZnlUb29sOiAodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0O1xuICBldmFsdWF0ZUNsaVRvb2xQb2xpY3k6ICh0b29sTmFtZTogc3RyaW5nLCB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBlbGVtZW50czogQWN0aXZlRWxlbWVudFtdKSA9PiBDbGlUb29sUG9saWN5UmVzdWx0O1xuICBnZXRBY3RpdmVFbGVtZW50czogKHNlc3Npb25JZD86IHN0cmluZykgPT4gUHJvbWlzZTxBY3RpdmVFbGVtZW50W10+O1xufVxuXG4vKiogT3B0aW9uYWwgcmVhc29uIGZpZWxkLCBvbmx5IGluY2x1ZGVkIHdoZW4gcmVhc29uIGlzIHByb3ZpZGVkICovXG5mdW5jdGlvbiB3aXRoUmVhc29uKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlYXNvbj86IHN0cmluZywga2V5ID0gJ3JlYXNvbicpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiByZWFzb24gPyB7IC4uLm9iaiwgW2tleV06IHJlYXNvbiB9IDogb2JqO1xufVxuXG4vKiogR2VtaW5pOiBtYXBzICdhc2snIHRvICdkZW55JyAobm8gaW50ZXJhY3RpdmUgc3VwcG9ydCkgKi9cbmZ1bmN0aW9uIGZvcm1hdEdlbWluaShkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgZGVjaXNpb246IGRlY2lzaW9uID09PSAnYXNrJyA/ICdkZW55JyA6IGRlY2lzaW9uIH0sIHJlYXNvbik7XG59XG5cbi8qKiBDdXJzb3I6IHVzZXMgJ3Blcm1pc3Npb24nIGZpZWxkIGluc3RlYWQgb2YgJ2RlY2lzaW9uJyAqL1xuZnVuY3Rpb24gZm9ybWF0Q3Vyc29yKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBwZXJtaXNzaW9uOiBkZWNpc2lvbiB9LCByZWFzb24pO1xufVxuXG4vKiogV2luZHN1cmY6IHVzZXMgYm9vbGVhbiAnYWxsb3dlZCcgZmllbGQgKi9cbmZ1bmN0aW9uIGZvcm1hdFdpbmRzdXJmKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBhbGxvd2VkOiBkZWNpc2lvbiA9PT0gJ2FsbG93JyB9LCByZWFzb24pO1xufVxuXG4vKiogQ29kZXg6IGV4cGxpY2l0IFByZVRvb2xVc2UgcGF5bG9hZCwgbWFwcyAnYXNrJyB0byAnZGVueScgKi9cbmZ1bmN0aW9uIGZvcm1hdENvZGV4KGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBob29rU3BlY2lmaWNPdXRwdXQ6IHtcbiAgICAgIGhvb2tFdmVudE5hbWU6ICdQcmVUb29sVXNlJyxcbiAgICAgIHBlcm1pc3Npb25EZWNpc2lvbjogZGVjaXNpb24gPT09ICdhc2snID8gJ2RlbnknIDogZGVjaXNpb24sXG4gICAgICBwZXJtaXNzaW9uRGVjaXNpb25SZWFzb246IHJlYXNvbiA/PyAnJyxcbiAgICB9LFxuICB9O1xufVxuXG4vKiogQ2xhdWRlIENvZGUgKGRlZmF1bHQpOiB1c2VzIGhvb2tTcGVjaWZpY091dHB1dC5wZXJtaXNzaW9uRGVjaXNpb24gZm9yIFByZVRvb2xVc2UgKi9cbmZ1bmN0aW9uIGZvcm1hdENsYXVkZUNvZGUoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIGhvb2tTcGVjaWZpY091dHB1dDogd2l0aFJlYXNvbih7XG4gICAgICBob29rRXZlbnROYW1lOiAnUHJlVG9vbFVzZScsXG4gICAgICBwZXJtaXNzaW9uRGVjaXNpb246IGRlY2lzaW9uLFxuICAgIH0sIHJlYXNvbiwgJ3Blcm1pc3Npb25EZWNpc2lvblJlYXNvbicpLFxuICB9O1xufVxuXG4vKiogUGxhdGZvcm0gZm9ybWF0dGVyIGxvb2t1cCAqL1xuY29uc3QgcGxhdGZvcm1Gb3JtYXR0ZXJzOiBSZWNvcmQ8c3RyaW5nLCAoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7XG4gIGdlbWluaTogZm9ybWF0R2VtaW5pLFxuICBjdXJzb3I6IGZvcm1hdEN1cnNvcixcbiAgd2luZHN1cmY6IGZvcm1hdFdpbmRzdXJmLFxuICBjb2RleDogZm9ybWF0Q29kZXgsXG4gIHZzY29kZTogZm9ybWF0Q2xhdWRlQ29kZSxcbiAgY2xhdWRlX2NvZGU6IGZvcm1hdENsYXVkZUNvZGUsXG59O1xuXG4vKiogS25vd24gcGxhdGZvcm0gaWRlbnRpZmllcnMgKi9cbmV4cG9ydCBjb25zdCBTVVBQT1JURURfUExBVEZPUk1TID0gT2JqZWN0LmtleXMocGxhdGZvcm1Gb3JtYXR0ZXJzKTtcblxuZnVuY3Rpb24gd2Fybk9uVW5rbm93blBsYXRmb3JtKHBsYXRmb3JtOiBzdHJpbmcpOiB2b2lkIHtcbiAgdm9pZCBpbXBvcnQoJy4uLy4uL3V0aWxzL2xvZ2dlci5qcycpXG4gICAgLnRoZW4oKHsgbG9nZ2VyIH0pID0+IHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgW2V2YWx1YXRlUGVybWlzc2lvbl0gVW5rbm93biBwbGF0Zm9ybSBcIiR7cGxhdGZvcm19XCIsIGRlZmF1bHRpbmcgdG8gY2xhdWRlX2NvZGUgZm9ybWF0LiBTdXBwb3J0ZWQ6ICR7U1VQUE9SVEVEX1BMQVRGT1JNUy5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2V2YWx1YXRlUGVybWlzc2lvbl0gRmFpbGVkIHRvIGxvYWQgbG9nZ2VyIHdoaWxlIGhhbmRsaW5nIHVua25vd24gcGxhdGZvcm0gXCIke3BsYXRmb3JtfVwiLmAsXG4gICAgICAgIGVycm9yLFxuICAgICAgKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgcGVybWlzc2lvbiBldmFsdWF0aW9uIHJlc3BvbnNlIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBob29rIHNjcmlwdHMuXG4gKiBFYWNoIHBsYXRmb3JtIGV4cGVjdHMgYSBkaWZmZXJlbnQgSlNPTiBzaGFwZSBmcm9tIGl0cyBob29rIHJlc3BvbnNlLlxuICpcbiAqIFVua25vd24gcGxhdGZvcm1zIGRlZmF1bHQgdG8gY2xhdWRlX2NvZGUgZm9ybWF0IHdpdGggYSB3YXJuaW5nIGxvZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZShcbiAgZGVjaXNpb246ICdhbGxvdycgfCAnZGVueScgfCAnYXNrJyxcbiAgcGxhdGZvcm06IHN0cmluZyxcbiAgX2lucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcmVhc29uPzogc3RyaW5nLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnZ2VtaW5pJzogcmV0dXJuIGZvcm1hdEdlbWluaShkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICdjdXJzb3InOiByZXR1cm4gZm9ybWF0Q3Vyc29yKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ3dpbmRzdXJmJzogcmV0dXJuIGZvcm1hdFdpbmRzdXJmKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ2NvZGV4JzogcmV0dXJuIGZvcm1hdENvZGV4KGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ2NsYXVkZV9jb2RlJzogcmV0dXJuIGZvcm1hdENsYXVkZUNvZGUoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEltcG9ydCBsYXppbHkgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBhdCBtb2R1bGUgbG9hZCB0aW1lXG4gICAgICB3YXJuT25Vbmtub3duUGxhdGZvcm0ocGxhdGZvcm0pO1xuICAgICAgcmV0dXJuIGZvcm1hdENsYXVkZUNvZGUoZGVjaXNpb24sIHJlYXNvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBhIENMSSBwZXJtaXNzaW9uIHJlcXVlc3QgZm9yIFByZVRvb2xVc2UgaG9va3MuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRvb2wgbmFtZSwgaW5wdXQsIGFuZCB0YXJnZXQgcGxhdGZvcm1cbiAqIEBwYXJhbSBkZXBzIC0gSW5qZWN0ZWQgZGVwZW5kZW5jaWVzIGZyb20gTUNQQVFMSGFuZGxlclxuICogQHJldHVybnMgUGxhdGZvcm0tZm9ybWF0dGVkIHBlcm1pc3Npb24gZGVjaXNpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV2YWx1YXRlUGVybWlzc2lvbihcbiAgcGFyYW1zOiB7IHRvb2xfbmFtZT86IHVua25vd247IGlucHV0PzogdW5rbm93bjsgcGxhdGZvcm0/OiB1bmtub3duOyBzZXNzaW9uX2lkPzogdW5rbm93biB9LFxuICBkZXBzOiBFdmFsdWF0ZVBlcm1pc3Npb25EZXBzLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCB0b29sTmFtZSA9IHR5cGVvZiBwYXJhbXMudG9vbF9uYW1lID09PSAnc3RyaW5nJyA/IHBhcmFtcy50b29sX25hbWUgOiAnJztcbiAgY29uc3QgaW5wdXRSYXcgPSBwYXJhbXMuaW5wdXQ7XG4gIGNvbnN0IGlucHV0ID0gKGlucHV0UmF3ICYmIHR5cGVvZiBpbnB1dFJhdyA9PT0gJ29iamVjdCcpXG4gICAgPyBpbnB1dFJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIDoge307XG4gIGNvbnN0IHBsYXRmb3JtID0gdHlwZW9mIHBhcmFtcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycgPyBwYXJhbXMucGxhdGZvcm0gOiAnY2xhdWRlX2NvZGUnO1xuICBjb25zdCBzZXNzaW9uSWQgPSB0eXBlb2YgcGFyYW1zLnNlc3Npb25faWQgPT09ICdzdHJpbmcnICYmIHBhcmFtcy5zZXNzaW9uX2lkLnRyaW0oKSAhPT0gJydcbiAgICA/IHBhcmFtcy5zZXNzaW9uX2lkXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgLy8gUmF0ZSBsaW1pdFxuICBjb25zdCByYXRlU3RhdHVzID0gZGVwcy5wZXJtaXNzaW9uUHJvbXB0TGltaXRlci5jaGVja0xpbWl0KCk7XG4gIGlmICghcmF0ZVN0YXR1cy5hbGxvd2VkKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnZGVueScsIHBsYXRmb3JtLCBpbnB1dCwgJ1JhdGUgbGltaXQgZXhjZWVkZWQnKTtcbiAgfVxuICBkZXBzLnBlcm1pc3Npb25Qcm9tcHRMaW1pdGVyLmNvbnN1bWVUb2tlbigpO1xuXG4gIC8vIFN0YWdlIDE6IFN0YXRpYyBjbGFzc2lmaWNhdGlvblxuICBjb25zdCBjbGFzc2lmaWNhdGlvbiA9IGRlcHMuY2xhc3NpZnlUb29sKHRvb2xOYW1lLCBpbnB1dCk7XG4gIGlmIChjbGFzc2lmaWNhdGlvbi5iZWhhdmlvciA9PT0gJ2FsbG93Jykge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FsbG93JywgcGxhdGZvcm0sIGlucHV0KTtcbiAgfVxuICBpZiAoY2xhc3NpZmljYXRpb24uYmVoYXZpb3IgPT09ICdkZW55Jykge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2RlbnknLCBwbGF0Zm9ybSwgaW5wdXQsIGNsYXNzaWZpY2F0aW9uLnJlYXNvbik7XG4gIH1cblxuICAvLyBTdGFnZSAyOiBFbGVtZW50IHBvbGljeSBldmFsdWF0aW9uXG4gIGxldCBlbGVtZW50czogQWN0aXZlRWxlbWVudFtdO1xuICB0cnkge1xuICAgIGVsZW1lbnRzID0gYXdhaXQgZGVwcy5nZXRBY3RpdmVFbGVtZW50cyhzZXNzaW9uSWQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgUGVybWlzc2lvbkV2YWx1YXRpb25FcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggYWN0aXZlIGVsZW1lbnRzIGZvciBwb2xpY3kgZXZhbHVhdGlvbjogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgICdlbGVtZW50X2ZldGNoJywgdG9vbE5hbWUsIGVycixcbiAgICApO1xuICB9XG4gIGNvbnN0IGRlY2lzaW9uID0gZGVwcy5ldmFsdWF0ZUNsaVRvb2xQb2xpY3kodG9vbE5hbWUsIGlucHV0LCBlbGVtZW50cyk7XG5cbiAgaWYgKGRlY2lzaW9uLmJlaGF2aW9yID09PSAnZGVueScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdkZW55JywgcGxhdGZvcm0sIGlucHV0LCBkZWNpc2lvbi5tZXNzYWdlKTtcbiAgfVxuICBpZiAoZGVjaXNpb24uYmVoYXZpb3IgPT09ICdjb25maXJtJykge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FzaycsIHBsYXRmb3JtLCBpbnB1dCxcbiAgICAgIGRlY2lzaW9uLm1lc3NhZ2UgfHwgJ1JlcXVpcmVzIGNvbmZpcm1hdGlvbiBwZXIgZWxlbWVudCBwb2xpY3knKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQ6IGFsbG93XG4gIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FsbG93JywgcGxhdGZvcm0sIGlucHV0KTtcbn1cbiJdfQ==
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
import { Router } from 'express';
|
|
18
18
|
import type { UnifiedLogEntry } from '../../logging/types.js';
|
|
19
19
|
import type { MetricSnapshot } from '../../metrics/types.js';
|
|
20
|
+
import { type SessionClientPlatformId } from './sessionClientPlatform.js';
|
|
20
21
|
/**
|
|
21
22
|
* Tracked session information.
|
|
22
23
|
*/
|
|
@@ -45,6 +46,10 @@ export interface SessionInfo {
|
|
|
45
46
|
serverVersion: string;
|
|
46
47
|
/** Console/session contract version used for compatibility-aware takeover. */
|
|
47
48
|
consoleProtocolVersion: number;
|
|
49
|
+
/** Explicit MCP host platform, when the session reported one. */
|
|
50
|
+
clientPlatform: SessionClientPlatformId | null;
|
|
51
|
+
/** Human-readable MCP host label for UI rendering. */
|
|
52
|
+
clientPlatformLabel: string;
|
|
48
53
|
}
|
|
49
54
|
/**
|
|
50
55
|
* Payload for POST /api/ingest/logs
|
|
@@ -70,6 +75,7 @@ export interface SessionEventPayload {
|
|
|
70
75
|
startedAt: string;
|
|
71
76
|
serverVersion?: string;
|
|
72
77
|
consoleProtocolVersion?: number;
|
|
78
|
+
clientPlatform?: string;
|
|
73
79
|
}
|
|
74
80
|
/**
|
|
75
81
|
* Callbacks provided by the unified console orchestrator for broadcasting
|
|
@@ -89,7 +95,7 @@ export interface IngestRoutesResult {
|
|
|
89
95
|
/** Get all tracked sessions */
|
|
90
96
|
getSessions: () => SessionInfo[];
|
|
91
97
|
/** Register the leader as a session */
|
|
92
|
-
registerLeaderSession: (sessionId: string, pid: number) => void;
|
|
98
|
+
registerLeaderSession: (sessionId: string, pid: number, clientPlatform?: string | null) => void;
|
|
93
99
|
/** Register the web console as a session so the indicator is never empty (#1805) */
|
|
94
100
|
registerConsoleSession: () => void;
|
|
95
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IngestRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/console/IngestRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"IngestRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/console/IngestRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAW7D,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,4BAA4B,CAAC;AAqBpC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;IACvB,iGAAiG;IACjG,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iEAAiE;IACjE,cAAc,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC/C,sDAAsD;IACtD,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,WAAW,EAAE,MAAM,WAAW,EAAE,CAAC;IACjC,uCAAuC;IACvC,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChG,oFAAoF;IACpF,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACpC;AAyBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,kBAAkB,CAmenF"}
|
|
@@ -22,6 +22,7 @@ import { logger } from '../../utils/logger.js';
|
|
|
22
22
|
import { env } from '../../config/env.js';
|
|
23
23
|
import { PACKAGE_VERSION } from '../../generated/version.js';
|
|
24
24
|
import { CONSOLE_PROTOCOL_VERSION, LEGACY_CONSOLE_PROTOCOL_VERSION, } from './LeaderElection.js';
|
|
25
|
+
import { getSessionClientPlatformLabel, normalizeSessionClientPlatformId, } from './sessionClientPlatform.js';
|
|
25
26
|
/** Maximum payload size for ingestion requests */
|
|
26
27
|
const MAX_PAYLOAD_SIZE = '1mb';
|
|
27
28
|
/** Rate limit: max requests per window per source */
|
|
@@ -51,6 +52,9 @@ function normalizeConsoleProtocolVersion(version) {
|
|
|
51
52
|
}
|
|
52
53
|
return LEGACY_CONSOLE_PROTOCOL_VERSION;
|
|
53
54
|
}
|
|
55
|
+
function normalizeClientPlatform(platform) {
|
|
56
|
+
return normalizeSessionClientPlatformId(platform);
|
|
57
|
+
}
|
|
54
58
|
/**
|
|
55
59
|
* Create the ingestion routes and session registry.
|
|
56
60
|
*
|
|
@@ -92,11 +96,12 @@ export function createIngestRoutes(broadcasts) {
|
|
|
92
96
|
killedSessions.add(sessionId);
|
|
93
97
|
}
|
|
94
98
|
/** Create a new session entry for an orphan. Returns null on failure. */
|
|
95
|
-
function autoRegister(sessionId, pid, authenticated = false, serverVersion, consoleProtocolVersion) {
|
|
99
|
+
function autoRegister(sessionId, pid, authenticated = false, serverVersion, consoleProtocolVersion, clientPlatform) {
|
|
96
100
|
try {
|
|
97
101
|
const displayName = namePool.assign(sessionId);
|
|
98
102
|
const color = namePool.getColor(sessionId) ?? '#3b82f6';
|
|
99
103
|
const now = new Date().toISOString();
|
|
104
|
+
const normalizedClientPlatform = normalizeClientPlatform(clientPlatform);
|
|
100
105
|
const info = {
|
|
101
106
|
sessionId, displayName, color,
|
|
102
107
|
pid: pid || 0,
|
|
@@ -104,6 +109,8 @@ export function createIngestRoutes(broadcasts) {
|
|
|
104
109
|
status: 'active', isLeader: false, authenticated, kind: 'mcp',
|
|
105
110
|
serverVersion: normalizeServerVersion(serverVersion),
|
|
106
111
|
consoleProtocolVersion: normalizeConsoleProtocolVersion(consoleProtocolVersion),
|
|
112
|
+
clientPlatform: normalizedClientPlatform,
|
|
113
|
+
clientPlatformLabel: getSessionClientPlatformLabel(normalizedClientPlatform),
|
|
107
114
|
};
|
|
108
115
|
sessions.set(sessionId, info);
|
|
109
116
|
logger.info('[IngestRoutes] Auto-registered orphaned session', {
|
|
@@ -123,7 +130,7 @@ export function createIngestRoutes(broadcasts) {
|
|
|
123
130
|
* Auto-register or update an orphaned session from ingestion data.
|
|
124
131
|
* Returns the session (existing or newly created), or null if killed/pending.
|
|
125
132
|
*/
|
|
126
|
-
function ensureSession(sessionId, pid, authenticated = false, serverVersion, consoleProtocolVersion) {
|
|
133
|
+
function ensureSession(sessionId, pid, authenticated = false, serverVersion, consoleProtocolVersion, clientPlatform) {
|
|
127
134
|
if (killedSessions.has(sessionId))
|
|
128
135
|
return null;
|
|
129
136
|
if (pendingKills.has(sessionId)) {
|
|
@@ -132,7 +139,7 @@ export function createIngestRoutes(broadcasts) {
|
|
|
132
139
|
}
|
|
133
140
|
const existing = sessions.get(sessionId);
|
|
134
141
|
if (!existing) {
|
|
135
|
-
return autoRegister(sessionId, pid, authenticated, serverVersion, consoleProtocolVersion);
|
|
142
|
+
return autoRegister(sessionId, pid, authenticated, serverVersion, consoleProtocolVersion, clientPlatform);
|
|
136
143
|
}
|
|
137
144
|
if (existing.status === 'ended') {
|
|
138
145
|
existing.status = 'active';
|
|
@@ -153,6 +160,10 @@ export function createIngestRoutes(broadcasts) {
|
|
|
153
160
|
if (consoleProtocolVersion !== undefined) {
|
|
154
161
|
existing.consoleProtocolVersion = normalizeConsoleProtocolVersion(consoleProtocolVersion);
|
|
155
162
|
}
|
|
163
|
+
if (clientPlatform !== undefined) {
|
|
164
|
+
existing.clientPlatform = normalizeClientPlatform(clientPlatform);
|
|
165
|
+
existing.clientPlatformLabel = getSessionClientPlatformLabel(existing.clientPlatform);
|
|
166
|
+
}
|
|
156
167
|
return existing;
|
|
157
168
|
}
|
|
158
169
|
// JSON body parsing with size limit
|
|
@@ -246,12 +257,15 @@ export function createIngestRoutes(broadcasts) {
|
|
|
246
257
|
const displayName = namePool.assign(payload.sessionId);
|
|
247
258
|
const color = namePool.getColor(payload.sessionId) ?? '#3b82f6';
|
|
248
259
|
const isAuthenticated = Boolean(res.locals?.tokenEntry);
|
|
260
|
+
const normalizedClientPlatform = normalizeClientPlatform(payload.clientPlatform);
|
|
249
261
|
sessions.set(payload.sessionId, {
|
|
250
262
|
sessionId: payload.sessionId, displayName, color,
|
|
251
263
|
pid: payload.pid, startedAt: payload.startedAt || now, lastHeartbeat: now,
|
|
252
264
|
status: 'active', isLeader: false, authenticated: isAuthenticated, kind: 'mcp',
|
|
253
265
|
serverVersion: normalizeServerVersion(payload.serverVersion),
|
|
254
266
|
consoleProtocolVersion: normalizeConsoleProtocolVersion(payload.consoleProtocolVersion),
|
|
267
|
+
clientPlatform: normalizedClientPlatform,
|
|
268
|
+
clientPlatformLabel: getSessionClientPlatformLabel(normalizedClientPlatform),
|
|
255
269
|
});
|
|
256
270
|
logger.info('[IngestRoutes] Session registered', {
|
|
257
271
|
displayName, sessionId: payload.sessionId, pid: payload.pid, color,
|
|
@@ -276,7 +290,7 @@ export function createIngestRoutes(broadcasts) {
|
|
|
276
290
|
}
|
|
277
291
|
case 'heartbeat': {
|
|
278
292
|
// Auto-register or update — heartbeat includes PID for recovery (#1870)
|
|
279
|
-
ensureSession(payload.sessionId, payload.pid, false, payload.serverVersion, payload.consoleProtocolVersion);
|
|
293
|
+
ensureSession(payload.sessionId, payload.pid, false, payload.serverVersion, payload.consoleProtocolVersion, payload.clientPlatform);
|
|
280
294
|
break;
|
|
281
295
|
}
|
|
282
296
|
}
|
|
@@ -312,6 +326,8 @@ export function createIngestRoutes(broadcasts) {
|
|
|
312
326
|
kind: ls.kind || 'mcp',
|
|
313
327
|
serverVersion: normalizeServerVersion(ls.serverVersion),
|
|
314
328
|
consoleProtocolVersion: normalizeConsoleProtocolVersion(ls.consoleProtocolVersion),
|
|
329
|
+
clientPlatform: normalizeClientPlatform(ls.clientPlatform),
|
|
330
|
+
clientPlatformLabel: getSessionClientPlatformLabel(normalizeClientPlatform(ls.clientPlatform)),
|
|
315
331
|
});
|
|
316
332
|
}
|
|
317
333
|
}
|
|
@@ -432,9 +448,10 @@ export function createIngestRoutes(broadcasts) {
|
|
|
432
448
|
function getSessions() {
|
|
433
449
|
return Array.from(sessions.values()).filter(s => s.status === 'active');
|
|
434
450
|
}
|
|
435
|
-
function registerLeaderSession(sessionId, pid) {
|
|
451
|
+
function registerLeaderSession(sessionId, pid, clientPlatform) {
|
|
436
452
|
const displayName = namePool.assign(sessionId, true);
|
|
437
453
|
const color = namePool.getColor(sessionId) ?? '#3b82f6';
|
|
454
|
+
const normalizedClientPlatform = normalizeClientPlatform(clientPlatform ?? undefined);
|
|
438
455
|
sessions.set(sessionId, {
|
|
439
456
|
sessionId,
|
|
440
457
|
displayName,
|
|
@@ -448,6 +465,8 @@ export function createIngestRoutes(broadcasts) {
|
|
|
448
465
|
kind: 'mcp',
|
|
449
466
|
serverVersion: PACKAGE_VERSION,
|
|
450
467
|
consoleProtocolVersion: CONSOLE_PROTOCOL_VERSION,
|
|
468
|
+
clientPlatform: normalizedClientPlatform,
|
|
469
|
+
clientPlatformLabel: getSessionClientPlatformLabel(normalizedClientPlatform),
|
|
451
470
|
});
|
|
452
471
|
logger.info('[IngestRoutes] Leader session registered', { displayName, sessionId, pid, color });
|
|
453
472
|
}
|
|
@@ -461,6 +480,7 @@ export function createIngestRoutes(broadcasts) {
|
|
|
461
480
|
if (sessions.has(consoleId))
|
|
462
481
|
return;
|
|
463
482
|
const displayName = 'Web Console';
|
|
483
|
+
const normalizedClientPlatform = 'web-console';
|
|
464
484
|
sessions.set(consoleId, {
|
|
465
485
|
sessionId: consoleId,
|
|
466
486
|
displayName,
|
|
@@ -474,9 +494,11 @@ export function createIngestRoutes(broadcasts) {
|
|
|
474
494
|
kind: 'console',
|
|
475
495
|
serverVersion: PACKAGE_VERSION,
|
|
476
496
|
consoleProtocolVersion: CONSOLE_PROTOCOL_VERSION,
|
|
497
|
+
clientPlatform: normalizedClientPlatform,
|
|
498
|
+
clientPlatformLabel: getSessionClientPlatformLabel(normalizedClientPlatform),
|
|
477
499
|
});
|
|
478
500
|
logger.info('[IngestRoutes] Console session registered', { sessionId: consoleId, pid: process.pid });
|
|
479
501
|
}
|
|
480
502
|
return { router, getSessions, registerLeaderSession, registerConsoleSession };
|
|
481
503
|
}
|
|
482
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5nZXN0Um91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL0luZ2VzdFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUkxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUNMLHdCQUF3QixFQUN4QiwrQkFBK0IsR0FDaEMsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixrREFBa0Q7QUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFFL0IscURBQXFEO0FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUVwQyxpREFBaUQ7QUFDakQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsNkVBQTZFO0FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBRWhDLDZEQUE2RDtBQUM3RCxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxrRUFBa0U7QUFDbEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFlBQVk7QUFvRi9DLDZEQUE2RDtBQUM3RCxTQUFTLGNBQWMsQ0FBQyxDQUFTO0lBQy9CLE9B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ZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnQgaW5nZXN0aW9uIHJvdXRlcyBmb3IgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogVGhlIGNvbnNvbGUgbGVhZGVyIG1vdW50cyB0aGVzZSByb3V0ZXMgc28gZm9sbG93ZXIgTUNQIHNlcnZlcnMgY2FuXG4gKiBmb3J3YXJkIHRoZWlyIGxvZ3MsIG1ldHJpY3MsIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBldmVudHMuIEFsbCBpbmdlc3RlZFxuICogZW50cmllcyBhcmUgc3RhbXBlZCB3aXRoIGBfc2Vzc2lvbklkYCBpbiB0aGVpciBkYXRhIGZpZWxkIGFuZCB0aGVuXG4gKiBicm9hZGNhc3QgdG8gU1NFIGNsaWVudHMgdmlhIHRoZSBleGlzdGluZyBsb2cvbWV0cmljcyBicm9hZGNhc3QgaG9va3MuXG4gKlxuICogUm91dGVzOlxuICogLSBQT1NUIC9hcGkvaW5nZXN0L2xvZ3MgICAgIOKAlCBCYXRjaGVkIGxvZyBlbnRyaWVzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L21ldHJpY3MgIOKAlCBNZXRyaWMgc25hcHNob3RzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb24gIOKAlCBTZXNzaW9uIGxpZmVjeWNsZSBldmVudHMgKHN0YXJ0ZWQvc3RvcHBlZC9oZWFydGJlYXQpXG4gKiAtIEdFVCAgL2FwaS9zZXNzaW9ucyAgICAgICAg4oCUIEFjdGl2ZSBzZXNzaW9uIGxpc3QgZm9yIHRoZSBVSVxuICpcbiAqIEBzaW5jZSB2Mi4xLjAg4oCUIElzc3VlICMxNzAwXG4gKi9cblxuaW1wb3J0IGV4cHJlc3MsIHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2Vzc2lvbk5hbWVQb29sIH0gZnJvbSAnLi9TZXNzaW9uTmFtZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHtcbiAgQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICBMRUdBQ1lfQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxufSBmcm9tICcuL0xlYWRlckVsZWN0aW9uLmpzJztcblxuLyoqIE1heGltdW0gcGF5bG9hZCBzaXplIGZvciBpbmdlc3Rpb24gcmVxdWVzdHMgKi9cbmNvbnN0IE1BWF9QQVlMT0FEX1NJWkUgPSAnMW1iJztcblxuLyoqIFJhdGUgbGltaXQ6IG1heCByZXF1ZXN0cyBwZXIgd2luZG93IHBlciBzb3VyY2UgKi9cbmNvbnN0IFJBVEVfTElNSVRfTUFYID0gMTAwMDtcbmNvbnN0IFJBVEVfTElNSVRfV0lORE9XX01TID0gNjBfMDAwO1xuXG4vKiogSG93IG9mdGVuIHRvIGNoZWNrIGZvciBzdGFsZSBzZXNzaW9ucyAobXMpICovXG5jb25zdCBSRUFQRVJfSU5URVJWQUxfTVMgPSA1XzAwMDtcblxuLyoqIEhvdyBsb25nIHNpbmNlIGxhc3QgaGVhcnRiZWF0IGJlZm9yZSBhIHNlc3Npb24gaXMgY29uc2lkZXJlZCBkZWFkIChtcykgKi9cbmNvbnN0IFNFU1NJT05fU1RBTEVfTVMgPSAxNV8wMDA7XG5cbi8qKiBUaW1lb3V0IGZvciBsZWdhY3kgcG9ydCBmZWRlcmF0aW9uL3Byb3h5IHJlcXVlc3RzIChtcykgKi9cbmNvbnN0IExFR0FDWV9GRVRDSF9USU1FT1VUX01TID0gMl8wMDA7XG5cbi8qKiBIb3cgbG9uZyBiZWZvcmUgZW5kZWQgc2Vzc2lvbnMgYXJlIHB1cmdlZCBmcm9tIHRoZSBNYXAgKG1zKSAqL1xuY29uc3QgRU5ERURfUFVSR0VfTVMgPSA1ICogNjBfMDAwOyAvLyA1IG1pbnV0ZXNcblxuLyoqXG4gKiBUcmFja2VkIHNlc3Npb24gaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkluZm8ge1xuICAvKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc2Vzc2lvbiAoVVVJRCBvciBgY29uc29sZS08cGlkPmApLiAqL1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIEZyaWVuZGx5IHB1cHBldCBuYW1lIChlLmcuLCBcIktlcm1pdFwiLCBcIlB1bmNoXCIpIG9yIFwiV2ViIENvbnNvbGVcIi4gKi9cbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgLyoqIENhbm9uaWNhbCBoZXggY29sb3IgZm9yIHRoaXMgcHVwcGV0IGNoYXJhY3Rlci4gKi9cbiAgY29sb3I6IHN0cmluZztcbiAgLyoqIE9TIHByb2Nlc3MgSUQgb2YgdGhlIE1DUCBzZXJ2ZXIgb3Igd2ViIGNvbnNvbGUgcHJvY2Vzcy4gKi9cbiAgcGlkOiBudW1iZXI7XG4gIC8qKiBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHNlc3Npb24gc3RhcnRlZC4gKi9cbiAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gIC8qKiBJU08gdGltZXN0YW1wIG9mIHRoZSBtb3N0IHJlY2VudCBoZWFydGJlYXQgKGZvbGxvd2Vycykgb3IgcmVnaXN0cmF0aW9uIChsZWFkZXIvY29uc29sZSkuICovXG4gIGxhc3RIZWFydGJlYXQ6IHN0cmluZztcbiAgLyoqIExpZmVjeWNsZSBzdGF0dXMg4oCUICdhY3RpdmUnIHVudGlsIGVuZGVkIG9yIHJlYXBlZCBmb3Igc3RhbGVuZXNzLiAqL1xuICBzdGF0dXM6ICdhY3RpdmUnIHwgJ2VuZGVkJztcbiAgLyoqIFRydWUgaWYgdGhpcyBzZXNzaW9uIHdvbiBsZWFkZXIgZWxlY3Rpb24gYW5kIG93bnMgdGhlIHRva2VuIGZpbGUuICovXG4gIGlzTGVhZGVyOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGlzIHNlc3Npb24gY29ubmVjdGVkIHdpdGggYSB2YWxpZCBCZWFyZXIgdG9rZW4gKCMxODA1KS4gKi9cbiAgYXV0aGVudGljYXRlZDogYm9vbGVhbjtcbiAgLyoqIFNlc3Npb24ga2luZCDigJQgJ21jcCcgZm9yIE1DUCBzdGRpbyBzZXNzaW9ucywgJ2NvbnNvbGUnIGZvciB0aGUgd2ViIGNvbnNvbGUgaXRzZWxmICgjMTgwNSkuICovXG4gIGtpbmQ6ICdtY3AnIHwgJ2NvbnNvbGUnO1xuICAvKiogRG9sbGhvdXNlTUNQIHBhY2thZ2UgdmVyc2lvbiByZXBvcnRlZCBieSB0aGUgc2Vzc2lvbi4gKi9cbiAgc2VydmVyVmVyc2lvbjogc3RyaW5nO1xuICAvKiogQ29uc29sZS9zZXNzaW9uIGNvbnRyYWN0IHZlcnNpb24gdXNlZCBmb3IgY29tcGF0aWJpbGl0eS1hd2FyZSB0YWtlb3Zlci4gKi9cbiAgY29uc29sZVByb3RvY29sVmVyc2lvbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBheWxvYWQgZm9yIFBPU1QgL2FwaS9pbmdlc3QvbG9nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdExvZ1BheWxvYWQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgZW50cmllczogVW5pZmllZExvZ0VudHJ5W107XG59XG5cbi8qKlxuICogUGF5bG9hZCBmb3IgUE9TVCAvYXBpL2luZ2VzdC9tZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0TWV0cmljc1BheWxvYWQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90O1xufVxuXG4vKipcbiAqIFBheWxvYWQgZm9yIFBPU1QgL2FwaS9pbmdlc3Qvc2Vzc2lvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25FdmVudFBheWxvYWQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgZXZlbnQ6ICdzdGFydGVkJyB8ICdzdG9wcGVkJyB8ICdoZWFydGJlYXQnO1xuICBwaWQ6IG51bWJlcjtcbiAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gIHNlcnZlclZlcnNpb24/OiBzdHJpbmc7XG4gIGNvbnNvbGVQcm90b2NvbFZlcnNpb24/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2FsbGJhY2tzIHByb3ZpZGVkIGJ5IHRoZSB1bmlmaWVkIGNvbnNvbGUgb3JjaGVzdHJhdG9yIGZvciBicm9hZGNhc3RpbmdcbiAqIGluZ2VzdGVkIGV2ZW50cyB0aHJvdWdoIHRoZSBleGlzdGluZyBTU0UgaW5mcmFzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0QnJvYWRjYXN0cyB7XG4gIGxvZ0Jyb2FkY2FzdDogKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQ7XG4gIG1ldHJpY3NPblNuYXBzaG90PzogKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZDtcbiAgc3RvcmVNZXRyaWNzU25hcHNob3Q/OiAoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90LCBzZXNzaW9uSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgc2Vzc2lvbkJyb2FkY2FzdD86IChldmVudDogU2Vzc2lvbkluZm8pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNyZWF0aW5nIGluZ2VzdCByb3V0ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0Um91dGVzUmVzdWx0IHtcbiAgcm91dGVyOiBSb3V0ZXI7XG4gIC8qKiBHZXQgYWxsIHRyYWNrZWQgc2Vzc2lvbnMgKi9cbiAgZ2V0U2Vzc2lvbnM6ICgpID0+IFNlc3Npb25JbmZvW107XG4gIC8qKiBSZWdpc3RlciB0aGUgbGVhZGVyIGFzIGEgc2Vzc2lvbiAqL1xuICByZWdpc3RlckxlYWRlclNlc3Npb246IChzZXNzaW9uSWQ6IHN0cmluZywgcGlkOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBSZWdpc3RlciB0aGUgd2ViIGNvbnNvbGUgYXMgYSBzZXNzaW9uIHNvIHRoZSBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KSAqL1xuICByZWdpc3RlckNvbnNvbGVTZXNzaW9uOiAoKSA9PiB2b2lkO1xufVxuXG4vKiogTm9ybWFsaXplIGEgc3RyaW5nIHZpYSBVbmljb2RlVmFsaWRhdG9yIChETUNQLVNFQy0wMDQpICovXG5mdW5jdGlvbiBub3JtYWxpemVJbnB1dChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocykubm9ybWFsaXplZENvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlcnZlclZlcnNpb24odmVyc2lvbj86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycgJiYgdmVyc2lvbi50cmltKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2ZXJzaW9uLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKHZlcnNpb24/OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmVyc2lvbikgJiYgdmVyc2lvbiA+PSAwKSB7XG4gICAgcmV0dXJuIHZlcnNpb247XG4gIH1cbiAgcmV0dXJuIExFR0FDWV9DT05TT0xFX1BST1RPQ09MX1ZFUlNJT047XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBpbmdlc3Rpb24gcm91dGVzIGFuZCBzZXNzaW9uIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBicm9hZGNhc3RzIC0gQ2FsbGJhY2tzIHRvIGZvcndhcmQgaW5nZXN0ZWQgZXZlbnRzIHRvIFNTRSBjbGllbnRzXG4gKiBAcmV0dXJucyBSb3V0ZXIgYW5kIHNlc3Npb24gbWFuYWdlbWVudCBmdW5jdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZ2VzdFJvdXRlcyhicm9hZGNhc3RzOiBJbmdlc3RCcm9hZGNhc3RzKTogSW5nZXN0Um91dGVzUmVzdWx0IHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG4gIGNvbnN0IHNlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIFNlc3Npb25JbmZvPigpO1xuICBjb25zdCBuYW1lUG9vbCA9IG5ldyBTZXNzaW9uTmFtZVBvb2woKTtcbiAgY29uc3QgcmF0ZUxpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKFJBVEVfTElNSVRfTUFYLCBSQVRFX0xJTUlUX1dJTkRPV19NUyk7XG5cbiAgLy8gU2Vzc2lvbnMgdGhlIHVzZXIgZXhwbGljaXRseSBraWxsZWQg4oCUIG5ldmVyIGNvbWUgYmFjayAoIzE4NzApLlxuICAvLyBDbGVhcmVkIG9ubHkgb24gc2VydmVyIHJlc3RhcnQsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHNpbmNlIHRoYXQncyBhIG5ldyBjb250ZXh0LlxuICBjb25zdCBraWxsZWRTZXNzaW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8vIFNlc3Npb25zIHdhaXRpbmcgZm9yIGEgUElEIHNvIHdlIGNhbiBTSUdURVJNIHRoZW0gKCMxODcwKS5cbiAgLy8gV2hlbiB0aGUgdXNlciBkaXNtaXNzZXMgYSBwaWQ9MCBvcnBoYW4sIHdlIGFkZCBpdCBoZXJlLiBUaGUgbmV4dCBoZWFydGJlYXRcbiAgLy8gKGV2ZXJ5IDEwcykgY2FycmllcyB0aGUgUElEIOKAlCB3ZSBTSUdURVJNIGltbWVkaWF0ZWx5IGFuZCBtb3ZlIHRvIGtpbGxlZFNlc3Npb25zLlxuICBjb25zdCBwZW5kaW5nS2lsbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKiogRXhlY3V0ZSBhIGRlZmVycmVkIGtpbGwgaWYgd2Ugbm93IGhhdmUgYSBQSUQuICovXG4gIGZ1bmN0aW9uIHRyeUV4ZWN1dGVQZW5kaW5nS2lsbChzZXNzaW9uSWQ6IHN0cmluZywgcGlkPzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qga2lsbFBpZCA9IHBpZCB8fCBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKT8ucGlkO1xuICAgIGlmICgha2lsbFBpZCkgcmV0dXJuO1xuICAgIHRyeSB7IHByb2Nlc3Mua2lsbChraWxsUGlkLCAnU0lHVEVSTScpOyB9IGNhdGNoIHsgLyogYWxyZWFkeSBkZWFkICovIH1cbiAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmIChleGlzdGluZykgZXhpc3Rpbmcuc3RhdHVzID0gJ2VuZGVkJztcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gRGVmZXJyZWQga2lsbCBleGVjdXRlZCDigJQgUElEIGFycml2ZWQnLCB7XG4gICAgICBkaXNwbGF5TmFtZTogZXhpc3Rpbmc/LmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZDoga2lsbFBpZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQcm9tb3RlIGEgcGVuZGluZyBraWxsIHRvIHBlcm1hbmVudC4gKi9cbiAgZnVuY3Rpb24gZmluYWxpemVQZW5kaW5nS2lsbChzZXNzaW9uSWQ6IHN0cmluZywgcGlkPzogbnVtYmVyKTogdm9pZCB7XG4gICAgdHJ5RXhlY3V0ZVBlbmRpbmdLaWxsKHNlc3Npb25JZCwgcGlkKTtcbiAgICBwZW5kaW5nS2lsbHMuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAga2lsbGVkU2Vzc2lvbnMuYWRkKHNlc3Npb25JZCk7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IHNlc3Npb24gZW50cnkgZm9yIGFuIG9ycGhhbi4gUmV0dXJucyBudWxsIG9uIGZhaWx1cmUuICovXG4gIGZ1bmN0aW9uIGF1dG9SZWdpc3RlcihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwaWQ/OiBudW1iZXIsXG4gICAgYXV0aGVudGljYXRlZCA9IGZhbHNlLFxuICAgIHNlcnZlclZlcnNpb24/OiBzdHJpbmcsXG4gICAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcixcbiAgKTogU2Vzc2lvbkluZm8gfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBuYW1lUG9vbC5hc3NpZ24oc2Vzc2lvbklkKTtcbiAgICAgIGNvbnN0IGNvbG9yID0gbmFtZVBvb2wuZ2V0Q29sb3Ioc2Vzc2lvbklkKSA/PyAnIzNiODJmNic7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBjb25zdCBpbmZvOiBTZXNzaW9uSW5mbyA9IHtcbiAgICAgICAgc2Vzc2lvbklkLCBkaXNwbGF5TmFtZSwgY29sb3IsXG4gICAgICAgIHBpZDogcGlkIHx8IDAsXG4gICAgICAgIHN0YXJ0ZWRBdDogbm93LCBsYXN0SGVhcnRiZWF0OiBub3csXG4gICAgICAgIHN0YXR1czogJ2FjdGl2ZScsIGlzTGVhZGVyOiBmYWxzZSwgYXV0aGVudGljYXRlZCwga2luZDogJ21jcCcsXG4gICAgICAgIHNlcnZlclZlcnNpb246IG5vcm1hbGl6ZVNlcnZlclZlcnNpb24oc2VydmVyVmVyc2lvbiksXG4gICAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24oY29uc29sZVByb3RvY29sVmVyc2lvbiksXG4gICAgICB9O1xuICAgICAgc2Vzc2lvbnMuc2V0KHNlc3Npb25JZCwgaW5mbyk7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gQXV0by1yZWdpc3RlcmVkIG9ycGhhbmVkIHNlc3Npb24nLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHNvdXJjZTogcGlkID8gJ2hlYXJ0YmVhdCcgOiAnaW5nZXN0aW9uJyxcbiAgICAgIH0pO1xuICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oaW5mbyk7XG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0luZ2VzdFJvdXRlc10gRmFpbGVkIHRvIGF1dG8tcmVnaXN0ZXIgb3JwaGFuZWQgc2Vzc2lvbicsIHtcbiAgICAgICAgc2Vzc2lvbklkLCBlcnJvcjogKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dG8tcmVnaXN0ZXIgb3IgdXBkYXRlIGFuIG9ycGhhbmVkIHNlc3Npb24gZnJvbSBpbmdlc3Rpb24gZGF0YS5cbiAgICogUmV0dXJucyB0aGUgc2Vzc2lvbiAoZXhpc3Rpbmcgb3IgbmV3bHkgY3JlYXRlZCksIG9yIG51bGwgaWYga2lsbGVkL3BlbmRpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBlbnN1cmVTZXNzaW9uKFxuICAgIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHBpZD86IG51bWJlcixcbiAgICBhdXRoZW50aWNhdGVkID0gZmFsc2UsXG4gICAgc2VydmVyVmVyc2lvbj86IHN0cmluZyxcbiAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uPzogbnVtYmVyLFxuICApOiBTZXNzaW9uSW5mbyB8IG51bGwge1xuICAgIGlmIChraWxsZWRTZXNzaW9ucy5oYXMoc2Vzc2lvbklkKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHBlbmRpbmdLaWxscy5oYXMoc2Vzc2lvbklkKSkge1xuICAgICAgZmluYWxpemVQZW5kaW5nS2lsbChzZXNzaW9uSWQsIHBpZCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBhdXRvUmVnaXN0ZXIoc2Vzc2lvbklkLCBwaWQsIGF1dGhlbnRpY2F0ZWQsIHNlcnZlclZlcnNpb24sIGNvbnNvbGVQcm90b2NvbFZlcnNpb24pO1xuICAgIH1cblxuICAgIGlmIChleGlzdGluZy5zdGF0dXMgPT09ICdlbmRlZCcpIHtcbiAgICAgIGV4aXN0aW5nLnN0YXR1cyA9ICdhY3RpdmUnO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFJldml2ZWQgZW5kZWQgc2Vzc2lvbiBzdGlsbCBzZW5kaW5nIGRhdGEnLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBleGlzdGluZy5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGV4aXN0aW5nLmxhc3RIZWFydGJlYXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHBpZCAmJiAhZXhpc3RpbmcucGlkKSB7XG4gICAgICBleGlzdGluZy5waWQgPSBwaWQ7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gUmVjb3ZlcmVkIFBJRCBmb3Igb3JwaGFuZWQgc2Vzc2lvbicsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2VydmVyVmVyc2lvbikge1xuICAgICAgZXhpc3Rpbmcuc2VydmVyVmVyc2lvbiA9IG5vcm1hbGl6ZVNlcnZlclZlcnNpb24oc2VydmVyVmVyc2lvbik7XG4gICAgfVxuICAgIGlmIChjb25zb2xlUHJvdG9jb2xWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4aXN0aW5nLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPSBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKGNvbnNvbGVQcm90b2NvbFZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH1cblxuICAvLyBKU09OIGJvZHkgcGFyc2luZyB3aXRoIHNpemUgbGltaXRcbiAgcm91dGVyLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogTUFYX1BBWUxPQURfU0laRSB9KSk7XG5cbiAgLyoqXG4gICAqIFBPU1QgL2FwaS9pbmdlc3QvbG9ncyDigJQgUmVjZWl2ZSBiYXRjaGVkIGxvZyBlbnRyaWVzIGZyb20gYSBmb2xsb3dlci5cbiAgICovXG4gIHJvdXRlci5wb3N0KCcvYXBpL2luZ2VzdC9sb2dzJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGlmICghcmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnUmF0ZSBsaW1pdCBleGNlZWRlZCcgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHJlcS5ib2R5IGFzIEluZ2VzdExvZ1BheWxvYWQ7XG4gICAgaWYgKCFwYXlsb2FkPy5zZXNzaW9uSWQgfHwgIUFycmF5LmlzQXJyYXkocGF5bG9hZC5lbnRyaWVzKSkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIGxvZyBwYXlsb2FkJywgeyByZWNlaXZlZCwgaGFzU2Vzc2lvbklkOiAhIXBheWxvYWQ/LnNlc3Npb25JZCwgaGFzRW50cmllczogQXJyYXkuaXNBcnJheShwYXlsb2FkPy5lbnRyaWVzKSB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBheWxvYWQnLCByZXF1aXJlZDogWydzZXNzaW9uSWQnLCAnZW50cmllcyddLCByZWNlaXZlZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGF5bG9hZC5zZXNzaW9uSWQgPSBub3JtYWxpemVJbnB1dChwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGxldCBza2lwcGVkID0gMDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBheWxvYWQuZW50cmllcykge1xuICAgICAgaWYgKCFlbnRyeSB8fCB0eXBlb2YgZW50cnkubWVzc2FnZSAhPT0gJ3N0cmluZycpIHsgc2tpcHBlZCsrOyBjb250aW51ZTsgfVxuICAgICAgY29uc3Qgc3RhbXBlZDogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiBwYXlsb2FkLnNlc3Npb25JZCB9LFxuICAgICAgfTtcbiAgICAgIGJyb2FkY2FzdHMubG9nQnJvYWRjYXN0KHN0YW1wZWQpO1xuICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgaGVhcnRiZWF0LCByZXZpdmUgZW5kZWQgc2Vzc2lvbnMsIG9yIGF1dG8tcmVnaXN0ZXIgb3JwaGFucyAoIzE4NzApXG4gICAgY29uc3Qgc2Vzc2lvbiA9IGVuc3VyZVNlc3Npb24ocGF5bG9hZC5zZXNzaW9uSWQpO1xuXG4gICAgaWYgKHNraXBwZWQgPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFtJbmdlc3RSb3V0ZXNdIExvZyBpbmdlc3QgZnJvbSAke3Nlc3Npb24/LmRpc3BsYXlOYW1lID8/IHBheWxvYWQuc2Vzc2lvbklkfTogYWNjZXB0ZWQ9JHtjb3VudH0sIHNraXBwZWQ9JHtza2lwcGVkfWApO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgYWNjZXB0ZWQ6IGNvdW50LCBza2lwcGVkIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9tZXRyaWNzIOKAlCBSZWNlaXZlIG1ldHJpYyBzbmFwc2hvdHMgZnJvbSBhIGZvbGxvd2VyLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9hcGkvaW5nZXN0L21ldHJpY3MnLCAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgSW5nZXN0TWV0cmljc1BheWxvYWQ7XG4gICAgaWYgKCFwYXlsb2FkPy5zZXNzaW9uSWQgfHwgIXBheWxvYWQuc25hcHNob3QpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVkID0gcGF5bG9hZCA/IE9iamVjdC5rZXlzKHBheWxvYWQpIDogW107XG4gICAgICBsb2dnZXIud2FybignW0luZ2VzdFJvdXRlc10gSW52YWxpZCBtZXRyaWNzIHBheWxvYWQnLCB7IHJlY2VpdmVkIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgcGF5bG9hZCcsIHJlcXVpcmVkOiBbJ3Nlc3Npb25JZCcsICdzbmFwc2hvdCddLCByZWNlaXZlZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGF5bG9hZC5zZXNzaW9uSWQgPSBub3JtYWxpemVJbnB1dChwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBpZiAoYnJvYWRjYXN0cy5tZXRyaWNzT25TbmFwc2hvdCkge1xuICAgICAgYnJvYWRjYXN0cy5tZXRyaWNzT25TbmFwc2hvdChwYXlsb2FkLnNuYXBzaG90KTtcbiAgICB9XG4gICAgaWYgKGJyb2FkY2FzdHMuc3RvcmVNZXRyaWNzU25hcHNob3QpIHtcbiAgICAgIGJyb2FkY2FzdHMuc3RvcmVNZXRyaWNzU25hcHNob3QocGF5bG9hZC5zbmFwc2hvdCwgcGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBoZWFydGJlYXQsIHJldml2ZSBlbmRlZCBzZXNzaW9ucywgb3IgYXV0by1yZWdpc3RlciBvcnBoYW5zICgjMTg3MClcbiAgICBjb25zdCBzZXNzaW9uID0gZW5zdXJlU2Vzc2lvbihwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbSW5nZXN0Um91dGVzXSBNZXRyaWNzIGluZ2VzdGVkIGZyb20gJHtzZXNzaW9uPy5kaXNwbGF5TmFtZSA/PyBwYXlsb2FkLnNlc3Npb25JZH1gKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IGFjY2VwdGVkOiB0cnVlIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9zZXNzaW9uIOKAlCBTZXNzaW9uIGxpZmVjeWNsZSBldmVudHMuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9pbmdlc3Qvc2Vzc2lvbicsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgU2Vzc2lvbkV2ZW50UGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQ/LnNlc3Npb25JZCB8fCAhcGF5bG9hZC5ldmVudCkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIHNlc3Npb24gZXZlbnQgcGF5bG9hZCcsIHsgcmVjZWl2ZWQgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXlsb2FkJywgcmVxdWlyZWQ6IFsnc2Vzc2lvbklkJywgJ2V2ZW50J10sIHJlY2VpdmVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXlsb2FkLnNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgIHN3aXRjaCAocGF5bG9hZC5ldmVudCkge1xuICAgICAgY2FzZSAnc3RhcnRlZCc6IHtcbiAgICAgICAgLy8gS2lsbGVkIHNlc3Npb25zIHN0YXkgZGVhZDsgcGVuZGluZyBraWxscyBnZXQgZmluYWxpemVkICgjMTg3MClcbiAgICAgICAgaWYgKGtpbGxlZFNlc3Npb25zLmhhcyhwYXlsb2FkLnNlc3Npb25JZCkpIGJyZWFrO1xuICAgICAgICBpZiAocGVuZGluZ0tpbGxzLmhhcyhwYXlsb2FkLnNlc3Npb25JZCkpIHsgZmluYWxpemVQZW5kaW5nS2lsbChwYXlsb2FkLnNlc3Npb25JZCwgcGF5bG9hZC5waWQpOyBicmVhazsgfVxuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgY29sb3IgPSBuYW1lUG9vbC5nZXRDb2xvcihwYXlsb2FkLnNlc3Npb25JZCkgPz8gJyMzYjgyZjYnO1xuICAgICAgICBjb25zdCBpc0F1dGhlbnRpY2F0ZWQgPSBCb29sZWFuKChyZXMgYXMgYW55KS5sb2NhbHM/LnRva2VuRW50cnkpO1xuICAgICAgICBzZXNzaW9ucy5zZXQocGF5bG9hZC5zZXNzaW9uSWQsIHtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkLCBkaXNwbGF5TmFtZSwgY29sb3IsXG4gICAgICAgICAgcGlkOiBwYXlsb2FkLnBpZCwgc3RhcnRlZEF0OiBwYXlsb2FkLnN0YXJ0ZWRBdCB8fCBub3csIGxhc3RIZWFydGJlYXQ6IG5vdyxcbiAgICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLCBpc0xlYWRlcjogZmFsc2UsIGF1dGhlbnRpY2F0ZWQ6IGlzQXV0aGVudGljYXRlZCwga2luZDogJ21jcCcsXG4gICAgICAgICAgc2VydmVyVmVyc2lvbjogbm9ybWFsaXplU2VydmVyVmVyc2lvbihwYXlsb2FkLnNlcnZlclZlcnNpb24pLFxuICAgICAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24ocGF5bG9hZC5jb25zb2xlUHJvdG9jb2xWZXJzaW9uKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIHJlZ2lzdGVyZWQnLCB7XG4gICAgICAgICAgZGlzcGxheU5hbWUsIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIHBpZDogcGF5bG9hZC5waWQsIGNvbG9yLFxuICAgICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKHNlc3Npb25zLmdldChwYXlsb2FkLnNlc3Npb25JZCkhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzdG9wcGVkJzoge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgIGV4aXN0aW5nLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICAgICAgZXhpc3RpbmcubGFzdEhlYXJ0YmVhdCA9IG5vdztcbiAgICAgICAgICBuYW1lUG9vbC5yZWxlYXNlKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gU2Vzc2lvbiBzdG9wcGVkJywge1xuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkLCBwaWQ6IGV4aXN0aW5nLnBpZCxcbiAgICAgICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oZXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnaGVhcnRiZWF0Jzoge1xuICAgICAgICAvLyBBdXRvLXJlZ2lzdGVyIG9yIHVwZGF0ZSDigJQgaGVhcnRiZWF0IGluY2x1ZGVzIFBJRCBmb3IgcmVjb3ZlcnkgKCMxODcwKVxuICAgICAgICBlbnN1cmVTZXNzaW9uKFxuICAgICAgICAgIHBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICAgIHBheWxvYWQucGlkLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHBheWxvYWQuc2VydmVyVmVyc2lvbixcbiAgICAgICAgICBwYXlsb2FkLmNvbnNvbGVQcm90b2NvbFZlcnNpb24sXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgb2s6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9zZXNzaW9ucyDigJQgTGlzdCBhbGwgdHJhY2tlZCBzZXNzaW9ucy5cbiAgICovXG4gIHJvdXRlci5nZXQoJy9hcGkvc2Vzc2lvbnMnLCBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIC8vIFNlcnZlci1zaWRlIGFjdGl2ZSBmaWx0ZXIg4oCUIHRoZSBmcm9udGVuZCBhbHNvIGZpbHRlcnMsIGJ1dCBlbmRlZCBzZXNzaW9uc1xuICAgIC8vIHNob3VsZCBuZXZlciBsZWF2ZSB0aGUgQVBJIHRvIHByZXZlbnQgc3RhbGUgVUkgKCMxODcwKS5cbiAgICBjb25zdCBsb2NhbFNlc3Npb25zID0gQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKTtcbiAgICBjb25zdCBjdXJyZW50UG9ydCA9IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCA/PyA0MTcxNTtcblxuICAgIC8vIEZlZGVyYXRlIHdpdGggdGhlIGxlZ2FjeSBwb3J0ICgzOTM5KSB0byBzaG93IGFsbCBzZXNzaW9ucyBvbiB0aGVcbiAgICAvLyBtYWNoaW5lLCBpbmNsdWRpbmcgdW5hdXRoZW50aWNhdGVkIG9uZXMgZnJvbSBwcmUtYXV0aCBpbnN0YWxscy5cbiAgICAvLyBTZXJ2ZXItdG8tc2VydmVyIGF2b2lkcyBDT1JTIHJlc3RyaWN0aW9ucyAoIzE4MDUpLlxuICAgIGlmIChjdXJyZW50UG9ydCAhPT0gMzkzOSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICAgIGNvbnN0IGxlZ2FjeVJlcyA9IGF3YWl0IGZldGNoKCdodHRwOi8vMTI3LjAuMC4xOjM5MzkvYXBpL3Nlc3Npb25zJywge1xuICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlmIChsZWdhY3lSZXMub2spIHtcbiAgICAgICAgICBjb25zdCBsZWdhY3lEYXRhID0gYXdhaXQgbGVnYWN5UmVzLmpzb24oKSBhcyB7IHNlc3Npb25zOiBTZXNzaW9uSW5mb1tdIH07XG4gICAgICAgICAgY29uc3QgbG9jYWxJZHMgPSBuZXcgU2V0KGxvY2FsU2Vzc2lvbnMubWFwKHMgPT4gcy5zZXNzaW9uSWQpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxzIG9mIChsZWdhY3lEYXRhLnNlc3Npb25zIHx8IFtdKSkge1xuICAgICAgICAgICAgaWYgKCFsb2NhbElkcy5oYXMobHMuc2Vzc2lvbklkKSAmJiBscy5zdGF0dXMgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICAgIGxvY2FsU2Vzc2lvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4ubHMsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAga2luZDogbHMua2luZCB8fCAnbWNwJyxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKGxzLnNlcnZlclZlcnNpb24pLFxuICAgICAgICAgICAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24obHMuY29uc29sZVByb3RvY29sVmVyc2lvbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIExlZ2FjeSBpbnN0YW5jZSBub3QgcnVubmluZyBvciB1bnJlYWNoYWJsZSDigJQgdGhhdCdzIGZpbmVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXMuanNvbih7IHNlc3Npb25zOiBsb2NhbFNlc3Npb25zIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL3Nlc3Npb25zLzpzZXNzaW9uSWQva2lsbCDigJQgVGVybWluYXRlIGEgc2Vzc2lvbidzIHNlcnZlciBwcm9jZXNzLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9hcGkvc2Vzc2lvbnMvOnNlc3Npb25JZC9raWxsJywgYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHJlcS5wYXJhbXNbJ3Nlc3Npb25JZCddIGFzIHN0cmluZztcbiAgICBjb25zdCBzZXNzaW9uID0gc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG5cbiAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgIC8vIFNlc3Npb24gbm90IGluIGxvY2FsIE1hcCDigJQgdHJ5IHByb3h5aW5nIGtpbGwgdG8gbGVnYWN5IHBvcnQgKCMxODcwKVxuICAgICAgY29uc3QgY3VycmVudFBvcnQgPSBlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQgPz8gNDE3MTU7XG4gICAgICBpZiAoY3VycmVudFBvcnQgIT09IDM5MzkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVHQUNZX0ZFVENIX1RJTUVPVVRfTVMpO1xuICAgICAgICAgIGNvbnN0IHByb3h5UmVzID0gYXdhaXQgZmV0Y2goYGh0dHA6Ly8xMjcuMC4wLjE6MzkzOS9hcGkvc2Vzc2lvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoc2Vzc2lvbklkKX0va2lsbGAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgaWYgKHByb3h5UmVzLm9rKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcHJveHlSZXMuanNvbigpO1xuICAgICAgICAgICAgcmVzLmpzb24oZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBMZWdhY3kgaW5zdGFuY2Ugbm90IHJ1bm5pbmcg4oCUIGZhbGwgdGhyb3VnaCB0byA0MDRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEtpbGwgcmVxdWVzdGVkIGZvciB1bmtub3duIHNlc3Npb24nLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHsgZXJyb3I6ICdTZXNzaW9uIG5vdCBmb3VuZCcsIHNlc3Npb25JZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXNlc3Npb24ucGlkKSB7XG4gICAgICAvLyBBdXRvLXJlZ2lzdGVyZWQgb3JwaGFuIHdpdGggdW5rbm93biBQSUQg4oCUIHF1ZXVlIGZvciBkZWZlcnJlZCBraWxsICgjMTg3MCkuXG4gICAgICAvLyBUaGUgbmV4dCBoZWFydGJlYXQgKGV2ZXJ5IH4xMHMpIGNhcnJpZXMgdGhlIFBJRC4gZW5zdXJlU2Vzc2lvbigpIHdpbGxcbiAgICAgIC8vIFNJR1RFUk0gdGhlIHByb2Nlc3MgYXMgc29vbiBhcyB0aGUgUElEIGFycml2ZXMuIFNlc3Npb24gaXMgZ29uZSBmb3IgZ29vZC5cbiAgICAgIHNlc3Npb24uc3RhdHVzID0gJ2VuZGVkJztcbiAgICAgIG5hbWVQb29sLnJlbGVhc2Uoc2Vzc2lvbklkKTtcbiAgICAgIHBlbmRpbmdLaWxscy5hZGQoc2Vzc2lvbklkKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBRdWV1ZWQgZGVmZXJyZWQga2lsbCDigJQgd2FpdGluZyBmb3IgUElEIHZpYSBoZWFydGJlYXQnLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsXG4gICAgICB9KTtcbiAgICAgIHJlcy5qc29uKHsgb2s6IHRydWUsIGRpc21pc3NlZDogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgcmVhc29uOiAncGVuZGluZy1raWxsJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTSUdURVJNIHRoZSBwcm9jZXNzLiBFdmVuIGlmIGl0IGZhaWxzIChFU1JDSCA9IGFscmVhZHkgZGVhZCwgRVBFUk0gPSBub3Qgb3VycyksXG4gICAgLy8gbWFyayB0aGUgc2Vzc2lvbiBhcyBwZXJtYW5lbnRseSBraWxsZWQgc28gaXQgbmV2ZXIgcmVhcHBlYXJzICgjMTg3MCkuXG4gICAgdHJ5IHtcbiAgICAgIHByb2Nlc3Mua2lsbChzZXNzaW9uLnBpZCwgJ1NJR1RFUk0nKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSAoZXJyIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZTtcbiAgICAgIGlmIChjb2RlID09PSAnRVNSQ0gnKSB7XG4gICAgICAgIC8vIFByb2Nlc3MgYWxyZWFkeSBkZWFkIOKAlCB0cmVhdCBhcyBzdWNjZXNzZnVsIGtpbGwuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1tJbmdlc3RSb3V0ZXNdIEZhaWxlZCB0byBraWxsIHNlc3Npb24nLCB7XG4gICAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkOiBzZXNzaW9uLnBpZCwgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAnRmFpbGVkIHRvIGtpbGwgc2Vzc2lvbicsIHNlc3Npb25JZCwgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHBpZDogc2Vzc2lvbi5waWQsIGRldGFpbDogKGVyciBhcyBFcnJvcikubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgbmFtZVBvb2wucmVsZWFzZShzZXNzaW9uSWQpO1xuICAgIGtpbGxlZFNlc3Npb25zLmFkZChzZXNzaW9uSWQpO1xuICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIGtpbGxlZCcsIHtcbiAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZDogc2Vzc2lvbi5waWQsXG4gICAgICBhY3RpdmVTZXNzaW9uczogQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKS5sZW5ndGggLSAxLFxuICAgIH0pO1xuICAgIHJlcy5qc29uKHsgb2s6IHRydWUsIGtpbGxlZDogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgcGlkOiBzZXNzaW9uLnBpZCB9KTtcbiAgfSk7XG5cbiAgLyoqIE1hcmsgc3RhbGUgYWN0aXZlIHNlc3Npb25zIGFzIGVuZGVkLiAqL1xuICBmdW5jdGlvbiByZWFwU3RhbGVTZXNzaW9ucyhub3c6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2lkLCBzZXNzaW9uXSBvZiBzZXNzaW9ucykge1xuICAgICAgaWYgKHNlc3Npb24uc3RhdHVzICE9PSAnYWN0aXZlJykgY29udGludWU7XG4gICAgICBpZiAoc2Vzc2lvbi5pc0xlYWRlciB8fCBzZXNzaW9uLmtpbmQgPT09ICdjb25zb2xlJykgY29udGludWU7XG4gICAgICBjb25zdCBhZ2UgPSBub3cgLSBuZXcgRGF0ZShzZXNzaW9uLmxhc3RIZWFydGJlYXQpLmdldFRpbWUoKTtcbiAgICAgIGlmIChhZ2UgPD0gU0VTU0lPTl9TVEFMRV9NUykgY29udGludWU7XG4gICAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICBuYW1lUG9vbC5yZWxlYXNlKGlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBSZWFwZWQgc3RhbGUgc2Vzc2lvbicsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZDogaWQsIHBpZDogc2Vzc2lvbi5waWQsXG4gICAgICAgIGxhc3RIZWFydGJlYXRBZ286IGAke01hdGgucm91bmQoYWdlIC8gMTAwMCl9c2AsXG4gICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgICB9KTtcbiAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKHNlc3Npb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZWxldGUgZW5kZWQgc2Vzc2lvbnMgdG8gYm91bmQgbWVtb3J5ICgjMTg3MCkuICovXG4gIGZ1bmN0aW9uIHB1cmdlU3RhbGVFbnRyaWVzKG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIHNlc3Npb25dIG9mIHNlc3Npb25zKSB7XG4gICAgICBpZiAoc2Vzc2lvbi5zdGF0dXMgPT09ICdlbmRlZCcgJiYgbm93IC0gbmV3IERhdGUoc2Vzc2lvbi5sYXN0SGVhcnRiZWF0KS5nZXRUaW1lKCkgPiBFTkRFRF9QVVJHRV9NUykge1xuICAgICAgICBzZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYXBlckludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgcmVhcFN0YWxlU2Vzc2lvbnMobm93KTtcbiAgICBwdXJnZVN0YWxlRW50cmllcyhub3cpO1xuICB9LCBSRUFQRVJfSU5URVJWQUxfTVMpO1xuICByZWFwZXJJbnRlcnZhbC51bnJlZigpO1xuXG4gIGZ1bmN0aW9uIGdldFNlc3Npb25zKCk6IFNlc3Npb25JbmZvW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJMZWFkZXJTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHNlc3Npb25JZCwgdHJ1ZSk7XG4gICAgY29uc3QgY29sb3IgPSBuYW1lUG9vbC5nZXRDb2xvcihzZXNzaW9uSWQpID8/ICcjM2I4MmY2JztcbiAgICBzZXNzaW9ucy5zZXQoc2Vzc2lvbklkLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGNvbG9yLFxuICAgICAgcGlkLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0SGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgaXNMZWFkZXI6IHRydWUsXG4gICAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAga2luZDogJ21jcCcsXG4gICAgICBzZXJ2ZXJWZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gICAgfSk7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIExlYWRlciBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IGRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZCwgY29sb3IgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBhcyBhIHNlc3Npb24gKCMxODA1KS4gRW5zdXJlcyB0aGVcbiAgICogc2Vzc2lvbiBpbmRpY2F0b3IgYWx3YXlzIHNob3dzIGF0IGxlYXN0IG9uZSBlbnRyeSDigJQgdGhlIGNvbnNvbGUgdGhlXG4gICAqIHVzZXIgaXMgY3VycmVudGx5IGxvb2tpbmcgYXQuXG4gICAqL1xuICBmdW5jdGlvbiByZWdpc3RlckNvbnNvbGVTZXNzaW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnNvbGVJZCA9IGBjb25zb2xlLSR7cHJvY2Vzcy5waWR9YDtcbiAgICBpZiAoc2Vzc2lvbnMuaGFzKGNvbnNvbGVJZCkpIHJldHVybjtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9ICdXZWIgQ29uc29sZSc7XG4gICAgc2Vzc2lvbnMuc2V0KGNvbnNvbGVJZCwge1xuICAgICAgc2Vzc2lvbklkOiBjb25zb2xlSWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGNvbG9yOiAnIzYzNjZmMScsIC8vIGluZGlnbyDigJQgZGlzdGluY3QgZnJvbSBwdXBwZXQgZ3JlZW5zL2JsdWVzXG4gICAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0SGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgaXNMZWFkZXI6IGZhbHNlLFxuICAgICAgYXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgIGtpbmQ6ICdjb25zb2xlJyxcbiAgICAgIHNlcnZlclZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gQ29uc29sZSBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IHNlc3Npb25JZDogY29uc29sZUlkLCBwaWQ6IHByb2Nlc3MucGlkIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgcm91dGVyLCBnZXRTZXNzaW9ucywgcmVnaXN0ZXJMZWFkZXJTZXNzaW9uLCByZWdpc3RlckNvbnNvbGVTZXNzaW9uIH07XG59XG4iXX0=
|
|
504
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5nZXN0Um91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL0luZ2VzdFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUkxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUNMLHdCQUF3QixFQUN4QiwrQkFBK0IsR0FDaEMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLGdDQUFnQyxHQUVqQyxNQUFNLDRCQUE0QixDQUFDO0FBRXBDLGtEQUFrRDtBQUNsRCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUUvQixxREFBcUQ7QUFDckQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQzVCLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBRXBDLGlEQUFpRDtBQUNqRCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQztBQUVqQyw2RUFBNkU7QUFDN0UsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFFaEMsNkRBQTZEO0FBQzdELE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0FBRXRDLGtFQUFrRTtBQUNsRSxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFD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LEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFdmVudCBpbmdlc3Rpb24gcm91dGVzIGZvciB0aGUgdW5pZmllZCB3ZWIgY29uc29sZS5cbiAqXG4gKiBUaGUgY29uc29sZSBsZWFkZXIgbW91bnRzIHRoZXNlIHJvdXRlcyBzbyBmb2xsb3dlciBNQ1Agc2VydmVycyBjYW5cbiAqIGZvcndhcmQgdGhlaXIgbG9ncywgbWV0cmljcywgYW5kIHNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cy4gQWxsIGluZ2VzdGVkXG4gKiBlbnRyaWVzIGFyZSBzdGFtcGVkIHdpdGggYF9zZXNzaW9uSWRgIGluIHRoZWlyIGRhdGEgZmllbGQgYW5kIHRoZW5cbiAqIGJyb2FkY2FzdCB0byBTU0UgY2xpZW50cyB2aWEgdGhlIGV4aXN0aW5nIGxvZy9tZXRyaWNzIGJyb2FkY2FzdCBob29rcy5cbiAqXG4gKiBSb3V0ZXM6XG4gKiAtIFBPU1QgL2FwaS9pbmdlc3QvbG9ncyAgICAg4oCUIEJhdGNoZWQgbG9nIGVudHJpZXMgZnJvbSBhIGZvbGxvd2VyXG4gKiAtIFBPU1QgL2FwaS9pbmdlc3QvbWV0cmljcyAg4oCUIE1ldHJpYyBzbmFwc2hvdHMgZnJvbSBhIGZvbGxvd2VyXG4gKiAtIFBPU1QgL2FwaS9pbmdlc3Qvc2Vzc2lvbiAg4oCUIFNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cyAoc3RhcnRlZC9zdG9wcGVkL2hlYXJ0YmVhdClcbiAqIC0gR0VUICAvYXBpL3Nlc3Npb25zICAgICAgICDigJQgQWN0aXZlIHNlc3Npb24gbGlzdCBmb3IgdGhlIFVJXG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgZXhwcmVzcywgeyBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB0eXBlIHsgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi4vLi4vbG9nZ2luZy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1NuYXBzaG90IH0gZnJvbSAnLi4vLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQgeyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9TbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZXNzaW9uTmFtZVBvb2wgfSBmcm9tICcuL1Nlc3Npb25OYW1lcy5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vY29uZmlnL2Vudi5qcyc7XG5pbXBvcnQgeyBQQUNLQUdFX1ZFUlNJT04gfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvdmVyc2lvbi5qcyc7XG5pbXBvcnQge1xuICBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIExFR0FDWV9DT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG59IGZyb20gJy4vTGVhZGVyRWxlY3Rpb24uanMnO1xuaW1wb3J0IHtcbiAgZ2V0U2Vzc2lvbkNsaWVudFBsYXRmb3JtTGFiZWwsXG4gIG5vcm1hbGl6ZVNlc3Npb25DbGllbnRQbGF0Zm9ybUlkLFxuICB0eXBlIFNlc3Npb25DbGllbnRQbGF0Zm9ybUlkLFxufSBmcm9tICcuL3Nlc3Npb25DbGllbnRQbGF0Zm9ybS5qcyc7XG5cbi8qKiBNYXhpbXVtIHBheWxvYWQgc2l6ZSBmb3IgaW5nZXN0aW9uIHJlcXVlc3RzICovXG5jb25zdCBNQVhfUEFZTE9BRF9TSVpFID0gJzFtYic7XG5cbi8qKiBSYXRlIGxpbWl0OiBtYXggcmVxdWVzdHMgcGVyIHdpbmRvdyBwZXIgc291cmNlICovXG5jb25zdCBSQVRFX0xJTUlUX01BWCA9IDEwMDA7XG5jb25zdCBSQVRFX0xJTUlUX1dJTkRPV19NUyA9IDYwXzAwMDtcblxuLyoqIEhvdyBvZnRlbiB0byBjaGVjayBmb3Igc3RhbGUgc2Vzc2lvbnMgKG1zKSAqL1xuY29uc3QgUkVBUEVSX0lOVEVSVkFMX01TID0gNV8wMDA7XG5cbi8qKiBIb3cgbG9uZyBzaW5jZSBsYXN0IGhlYXJ0YmVhdCBiZWZvcmUgYSBzZXNzaW9uIGlzIGNvbnNpZGVyZWQgZGVhZCAobXMpICovXG5jb25zdCBTRVNTSU9OX1NUQUxFX01TID0gMTVfMDAwO1xuXG4vKiogVGltZW91dCBmb3IgbGVnYWN5IHBvcnQgZmVkZXJhdGlvbi9wcm94eSByZXF1ZXN0cyAobXMpICovXG5jb25zdCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyA9IDJfMDAwO1xuXG4vKiogSG93IGxvbmcgYmVmb3JlIGVuZGVkIHNlc3Npb25zIGFyZSBwdXJnZWQgZnJvbSB0aGUgTWFwIChtcykgKi9cbmNvbnN0IEVOREVEX1BVUkdFX01TID0gNSAqIDYwXzAwMDsgLy8gNSBtaW51dGVzXG5cbi8qKlxuICogVHJhY2tlZCBzZXNzaW9uIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25JbmZvIHtcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHNlc3Npb24gKFVVSUQgb3IgYGNvbnNvbGUtPHBpZD5gKS4gKi9cbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBGcmllbmRseSBwdXBwZXQgbmFtZSAoZS5nLiwgXCJLZXJtaXRcIiwgXCJQdW5jaFwiKSBvciBcIldlYiBDb25zb2xlXCIuICovXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIC8qKiBDYW5vbmljYWwgaGV4IGNvbG9yIGZvciB0aGlzIHB1cHBldCBjaGFyYWN0ZXIuICovXG4gIGNvbG9yOiBzdHJpbmc7XG4gIC8qKiBPUyBwcm9jZXNzIElEIG9mIHRoZSBNQ1Agc2VydmVyIG9yIHdlYiBjb25zb2xlIHByb2Nlc3MuICovXG4gIHBpZDogbnVtYmVyO1xuICAvKiogSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSBzZXNzaW9uIHN0YXJ0ZWQuICovXG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICAvKiogSVNPIHRpbWVzdGFtcCBvZiB0aGUgbW9zdCByZWNlbnQgaGVhcnRiZWF0IChmb2xsb3dlcnMpIG9yIHJlZ2lzdHJhdGlvbiAobGVhZGVyL2NvbnNvbGUpLiAqL1xuICBsYXN0SGVhcnRiZWF0OiBzdHJpbmc7XG4gIC8qKiBMaWZlY3ljbGUgc3RhdHVzIOKAlCAnYWN0aXZlJyB1bnRpbCBlbmRlZCBvciByZWFwZWQgZm9yIHN0YWxlbmVzcy4gKi9cbiAgc3RhdHVzOiAnYWN0aXZlJyB8ICdlbmRlZCc7XG4gIC8qKiBUcnVlIGlmIHRoaXMgc2Vzc2lvbiB3b24gbGVhZGVyIGVsZWN0aW9uIGFuZCBvd25zIHRoZSB0b2tlbiBmaWxlLiAqL1xuICBpc0xlYWRlcjogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBzZXNzaW9uIGNvbm5lY3RlZCB3aXRoIGEgdmFsaWQgQmVhcmVyIHRva2VuICgjMTgwNSkuICovXG4gIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKiBTZXNzaW9uIGtpbmQg4oCUICdtY3AnIGZvciBNQ1Agc3RkaW8gc2Vzc2lvbnMsICdjb25zb2xlJyBmb3IgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiAoIzE4MDUpLiAqL1xuICBraW5kOiAnbWNwJyB8ICdjb25zb2xlJztcbiAgLyoqIERvbGxob3VzZU1DUCBwYWNrYWdlIHZlcnNpb24gcmVwb3J0ZWQgYnkgdGhlIHNlc3Npb24uICovXG4gIHNlcnZlclZlcnNpb246IHN0cmluZztcbiAgLyoqIENvbnNvbGUvc2Vzc2lvbiBjb250cmFjdCB2ZXJzaW9uIHVzZWQgZm9yIGNvbXBhdGliaWxpdHktYXdhcmUgdGFrZW92ZXIuICovXG4gIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG51bWJlcjtcbiAgLyoqIEV4cGxpY2l0IE1DUCBob3N0IHBsYXRmb3JtLCB3aGVuIHRoZSBzZXNzaW9uIHJlcG9ydGVkIG9uZS4gKi9cbiAgY2xpZW50UGxhdGZvcm06IFNlc3Npb25DbGllbnRQbGF0Zm9ybUlkIHwgbnVsbDtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIE1DUCBob3N0IGxhYmVsIGZvciBVSSByZW5kZXJpbmcuICovXG4gIGNsaWVudFBsYXRmb3JtTGFiZWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGZvciBQT1NUIC9hcGkvaW5nZXN0L2xvZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RMb2dQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGVudHJpZXM6IFVuaWZpZWRMb2dFbnRyeVtdO1xufVxuXG4vKipcbiAqIFBheWxvYWQgZm9yIFBPU1QgL2FwaS9pbmdlc3QvbWV0cmljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdE1ldHJpY3NQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdDtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGZvciBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uRXZlbnRQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGV2ZW50OiAnc3RhcnRlZCcgfCAnc3RvcHBlZCcgfCAnaGVhcnRiZWF0JztcbiAgcGlkOiBudW1iZXI7XG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICBzZXJ2ZXJWZXJzaW9uPzogc3RyaW5nO1xuICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uPzogbnVtYmVyO1xuICBjbGllbnRQbGF0Zm9ybT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDYWxsYmFja3MgcHJvdmlkZWQgYnkgdGhlIHVuaWZpZWQgY29uc29sZSBvcmNoZXN0cmF0b3IgZm9yIGJyb2FkY2FzdGluZ1xuICogaW5nZXN0ZWQgZXZlbnRzIHRocm91Z2ggdGhlIGV4aXN0aW5nIFNTRSBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RCcm9hZGNhc3RzIHtcbiAgbG9nQnJvYWRjYXN0OiAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4gdm9pZDtcbiAgbWV0cmljc09uU25hcHNob3Q/OiAoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90KSA9PiB2b2lkO1xuICBzdG9yZU1ldHJpY3NTbmFwc2hvdD86IChzbmFwc2hvdDogTWV0cmljU25hcHNob3QsIHNlc3Npb25JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBzZXNzaW9uQnJvYWRjYXN0PzogKGV2ZW50OiBTZXNzaW9uSW5mbykgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgY3JlYXRpbmcgaW5nZXN0IHJvdXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RSb3V0ZXNSZXN1bHQge1xuICByb3V0ZXI6IFJvdXRlcjtcbiAgLyoqIEdldCBhbGwgdHJhY2tlZCBzZXNzaW9ucyAqL1xuICBnZXRTZXNzaW9uczogKCkgPT4gU2Vzc2lvbkluZm9bXTtcbiAgLyoqIFJlZ2lzdGVyIHRoZSBsZWFkZXIgYXMgYSBzZXNzaW9uICovXG4gIHJlZ2lzdGVyTGVhZGVyU2Vzc2lvbjogKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ6IG51bWJlciwgY2xpZW50UGxhdGZvcm0/OiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkO1xuICAvKiogUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGFzIGEgc2Vzc2lvbiBzbyB0aGUgaW5kaWNhdG9yIGlzIG5ldmVyIGVtcHR5ICgjMTgwNSkgKi9cbiAgcmVnaXN0ZXJDb25zb2xlU2Vzc2lvbjogKCkgPT4gdm9pZDtcbn1cblxuLyoqIE5vcm1hbGl6ZSBhIHN0cmluZyB2aWEgVW5pY29kZVZhbGlkYXRvciAoRE1DUC1TRUMtMDA0KSAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5wdXQoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHMpLm5vcm1hbGl6ZWRDb250ZW50O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKHZlcnNpb24/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnICYmIHZlcnNpb24udHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdmVyc2lvbi50cmltKCk7XG4gIH1cbiAgcmV0dXJuICd1bmtub3duJztcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29uc29sZVByb3RvY29sVmVyc2lvbih2ZXJzaW9uPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHZlcnNpb24pICYmIHZlcnNpb24gPj0gMCkge1xuICAgIHJldHVybiB2ZXJzaW9uO1xuICB9XG4gIHJldHVybiBMRUdBQ1lfQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDbGllbnRQbGF0Zm9ybShwbGF0Zm9ybT86IHN0cmluZyB8IG51bGwpOiBTZXNzaW9uQ2xpZW50UGxhdGZvcm1JZCB8IG51bGwge1xuICByZXR1cm4gbm9ybWFsaXplU2Vzc2lvbkNsaWVudFBsYXRmb3JtSWQocGxhdGZvcm0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgaW5nZXN0aW9uIHJvdXRlcyBhbmQgc2Vzc2lvbiByZWdpc3RyeS5cbiAqXG4gKiBAcGFyYW0gYnJvYWRjYXN0cyAtIENhbGxiYWNrcyB0byBmb3J3YXJkIGluZ2VzdGVkIGV2ZW50cyB0byBTU0UgY2xpZW50c1xuICogQHJldHVybnMgUm91dGVyIGFuZCBzZXNzaW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbmdlc3RSb3V0ZXMoYnJvYWRjYXN0czogSW5nZXN0QnJvYWRjYXN0cyk6IEluZ2VzdFJvdXRlc1Jlc3VsdCB7XG4gIGNvbnN0IHJvdXRlciA9IFJvdXRlcigpO1xuICBjb25zdCBzZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBTZXNzaW9uSW5mbz4oKTtcbiAgY29uc3QgbmFtZVBvb2wgPSBuZXcgU2Vzc2lvbk5hbWVQb29sKCk7XG4gIGNvbnN0IHJhdGVMaW1pdGVyID0gbmV3IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlcihSQVRFX0xJTUlUX01BWCwgUkFURV9MSU1JVF9XSU5ET1dfTVMpO1xuXG4gIC8vIFNlc3Npb25zIHRoZSB1c2VyIGV4cGxpY2l0bHkga2lsbGVkIOKAlCBuZXZlciBjb21lIGJhY2sgKCMxODcwKS5cbiAgLy8gQ2xlYXJlZCBvbmx5IG9uIHNlcnZlciByZXN0YXJ0LCB3aGljaCBpcyBhcHByb3ByaWF0ZSBzaW5jZSB0aGF0J3MgYSBuZXcgY29udGV4dC5cbiAgY29uc3Qga2lsbGVkU2Vzc2lvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvLyBTZXNzaW9ucyB3YWl0aW5nIGZvciBhIFBJRCBzbyB3ZSBjYW4gU0lHVEVSTSB0aGVtICgjMTg3MCkuXG4gIC8vIFdoZW4gdGhlIHVzZXIgZGlzbWlzc2VzIGEgcGlkPTAgb3JwaGFuLCB3ZSBhZGQgaXQgaGVyZS4gVGhlIG5leHQgaGVhcnRiZWF0XG4gIC8vIChldmVyeSAxMHMpIGNhcnJpZXMgdGhlIFBJRCDigJQgd2UgU0lHVEVSTSBpbW1lZGlhdGVseSBhbmQgbW92ZSB0byBraWxsZWRTZXNzaW9ucy5cbiAgY29uc3QgcGVuZGluZ0tpbGxzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqIEV4ZWN1dGUgYSBkZWZlcnJlZCBraWxsIGlmIHdlIG5vdyBoYXZlIGEgUElELiAqL1xuICBmdW5jdGlvbiB0cnlFeGVjdXRlUGVuZGluZ0tpbGwoc2Vzc2lvbklkOiBzdHJpbmcsIHBpZD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGtpbGxQaWQgPSBwaWQgfHwgc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk/LnBpZDtcbiAgICBpZiAoIWtpbGxQaWQpIHJldHVybjtcbiAgICB0cnkgeyBwcm9jZXNzLmtpbGwoa2lsbFBpZCwgJ1NJR1RFUk0nKTsgfSBjYXRjaCB7IC8qIGFscmVhZHkgZGVhZCAqLyB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIGV4aXN0aW5nLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIERlZmVycmVkIGtpbGwgZXhlY3V0ZWQg4oCUIFBJRCBhcnJpdmVkJywge1xuICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nPy5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBwaWQ6IGtpbGxQaWQsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUHJvbW90ZSBhIHBlbmRpbmcga2lsbCB0byBwZXJtYW5lbnQuICovXG4gIGZ1bmN0aW9uIGZpbmFsaXplUGVuZGluZ0tpbGwoc2Vzc2lvbklkOiBzdHJpbmcsIHBpZD86IG51bWJlcik6IHZvaWQge1xuICAgIHRyeUV4ZWN1dGVQZW5kaW5nS2lsbChzZXNzaW9uSWQsIHBpZCk7XG4gICAgcGVuZGluZ0tpbGxzLmRlbGV0ZShzZXNzaW9uSWQpO1xuICAgIGtpbGxlZFNlc3Npb25zLmFkZChzZXNzaW9uSWQpO1xuICB9XG5cbiAgLyoqIENyZWF0ZSBhIG5ldyBzZXNzaW9uIGVudHJ5IGZvciBhbiBvcnBoYW4uIFJldHVybnMgbnVsbCBvbiBmYWlsdXJlLiAqL1xuICBmdW5jdGlvbiBhdXRvUmVnaXN0ZXIoXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgcGlkPzogbnVtYmVyLFxuICAgIGF1dGhlbnRpY2F0ZWQgPSBmYWxzZSxcbiAgICBzZXJ2ZXJWZXJzaW9uPzogc3RyaW5nLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb24/OiBudW1iZXIsXG4gICAgY2xpZW50UGxhdGZvcm0/OiBzdHJpbmcsXG4gICk6IFNlc3Npb25JbmZvIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHNlc3Npb25JZCk7XG4gICAgICBjb25zdCBjb2xvciA9IG5hbWVQb29sLmdldENvbG9yKHNlc3Npb25JZCkgPz8gJyMzYjgyZjYnO1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZENsaWVudFBsYXRmb3JtID0gbm9ybWFsaXplQ2xpZW50UGxhdGZvcm0oY2xpZW50UGxhdGZvcm0pO1xuICAgICAgY29uc3QgaW5mbzogU2Vzc2lvbkluZm8gPSB7XG4gICAgICAgIHNlc3Npb25JZCwgZGlzcGxheU5hbWUsIGNvbG9yLFxuICAgICAgICBwaWQ6IHBpZCB8fCAwLFxuICAgICAgICBzdGFydGVkQXQ6IG5vdywgbGFzdEhlYXJ0YmVhdDogbm93LFxuICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLCBpc0xlYWRlcjogZmFsc2UsIGF1dGhlbnRpY2F0ZWQsIGtpbmQ6ICdtY3AnLFxuICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKHNlcnZlclZlcnNpb24pLFxuICAgICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKGNvbnNvbGVQcm90b2NvbFZlcnNpb24pLFxuICAgICAgICBjbGllbnRQbGF0Zm9ybTogbm9ybWFsaXplZENsaWVudFBsYXRmb3JtLFxuICAgICAgICBjbGllbnRQbGF0Zm9ybUxhYmVsOiBnZXRTZXNzaW9uQ2xpZW50UGxhdGZvcm1MYWJlbChub3JtYWxpemVkQ2xpZW50UGxhdGZvcm0pLFxuICAgICAgfTtcbiAgICAgIHNlc3Npb25zLnNldChzZXNzaW9uSWQsIGluZm8pO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIEF1dG8tcmVnaXN0ZXJlZCBvcnBoYW5lZCBzZXNzaW9uJywge1xuICAgICAgICBkaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBzb3VyY2U6IHBpZCA/ICdoZWFydGJlYXQnIDogJ2luZ2VzdGlvbicsXG4gICAgICB9KTtcbiAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKGluZm8pO1xuICAgICAgcmV0dXJuIGluZm87XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tJbmdlc3RSb3V0ZXNdIEZhaWxlZCB0byBhdXRvLXJlZ2lzdGVyIG9ycGhhbmVkIHNlc3Npb24nLCB7XG4gICAgICAgIHNlc3Npb25JZCwgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRvLXJlZ2lzdGVyIG9yIHVwZGF0ZSBhbiBvcnBoYW5lZCBzZXNzaW9uIGZyb20gaW5nZXN0aW9uIGRhdGEuXG4gICAqIFJldHVybnMgdGhlIHNlc3Npb24gKGV4aXN0aW5nIG9yIG5ld2x5IGNyZWF0ZWQpLCBvciBudWxsIGlmIGtpbGxlZC9wZW5kaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gZW5zdXJlU2Vzc2lvbihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwaWQ/OiBudW1iZXIsXG4gICAgYXV0aGVudGljYXRlZCA9IGZhbHNlLFxuICAgIHNlcnZlclZlcnNpb24/OiBzdHJpbmcsXG4gICAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcixcbiAgICBjbGllbnRQbGF0Zm9ybT86IHN0cmluZyxcbiAgKTogU2Vzc2lvbkluZm8gfCBudWxsIHtcbiAgICBpZiAoa2lsbGVkU2Vzc2lvbnMuaGFzKHNlc3Npb25JZCkpIHJldHVybiBudWxsO1xuICAgIGlmIChwZW5kaW5nS2lsbHMuaGFzKHNlc3Npb25JZCkpIHtcbiAgICAgIGZpbmFsaXplUGVuZGluZ0tpbGwoc2Vzc2lvbklkLCBwaWQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gYXV0b1JlZ2lzdGVyKFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHBpZCxcbiAgICAgICAgYXV0aGVudGljYXRlZCxcbiAgICAgICAgc2VydmVyVmVyc2lvbixcbiAgICAgICAgY29uc29sZVByb3RvY29sVmVyc2lvbixcbiAgICAgICAgY2xpZW50UGxhdGZvcm0sXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChleGlzdGluZy5zdGF0dXMgPT09ICdlbmRlZCcpIHtcbiAgICAgIGV4aXN0aW5nLnN0YXR1cyA9ICdhY3RpdmUnO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFJldml2ZWQgZW5kZWQgc2Vzc2lvbiBzdGlsbCBzZW5kaW5nIGRhdGEnLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBleGlzdGluZy5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGV4aXN0aW5nLmxhc3RIZWFydGJlYXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHBpZCAmJiAhZXhpc3RpbmcucGlkKSB7XG4gICAgICBleGlzdGluZy5waWQgPSBwaWQ7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gUmVjb3ZlcmVkIFBJRCBmb3Igb3JwaGFuZWQgc2Vzc2lvbicsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2VydmVyVmVyc2lvbikge1xuICAgICAgZXhpc3Rpbmcuc2VydmVyVmVyc2lvbiA9IG5vcm1hbGl6ZVNlcnZlclZlcnNpb24oc2VydmVyVmVyc2lvbik7XG4gICAgfVxuICAgIGlmIChjb25zb2xlUHJvdG9jb2xWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4aXN0aW5nLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPSBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKGNvbnNvbGVQcm90b2NvbFZlcnNpb24pO1xuICAgIH1cbiAgICBpZiAoY2xpZW50UGxhdGZvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXhpc3RpbmcuY2xpZW50UGxhdGZvcm0gPSBub3JtYWxpemVDbGllbnRQbGF0Zm9ybShjbGllbnRQbGF0Zm9ybSk7XG4gICAgICBleGlzdGluZy5jbGllbnRQbGF0Zm9ybUxhYmVsID0gZ2V0U2Vzc2lvbkNsaWVudFBsYXRmb3JtTGFiZWwoZXhpc3RpbmcuY2xpZW50UGxhdGZvcm0pO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH1cblxuICAvLyBKU09OIGJvZHkgcGFyc2luZyB3aXRoIHNpemUgbGltaXRcbiAgcm91dGVyLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogTUFYX1BBWUxPQURfU0laRSB9KSk7XG5cbiAgLyoqXG4gICAqIFBPU1QgL2FwaS9pbmdlc3QvbG9ncyDigJQgUmVjZWl2ZSBiYXRjaGVkIGxvZyBlbnRyaWVzIGZyb20gYSBmb2xsb3dlci5cbiAgICovXG4gIHJvdXRlci5wb3N0KCcvYXBpL2luZ2VzdC9sb2dzJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGlmICghcmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnUmF0ZSBsaW1pdCBleGNlZWRlZCcgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHJlcS5ib2R5IGFzIEluZ2VzdExvZ1BheWxvYWQ7XG4gICAgaWYgKCFwYXlsb2FkPy5zZXNzaW9uSWQgfHwgIUFycmF5LmlzQXJyYXkocGF5bG9hZC5lbnRyaWVzKSkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIGxvZyBwYXlsb2FkJywgeyByZWNlaXZlZCwgaGFzU2Vzc2lvbklkOiAhIXBheWxvYWQ/LnNlc3Npb25JZCwgaGFzRW50cmllczogQXJyYXkuaXNBcnJheShwYXlsb2FkPy5lbnRyaWVzKSB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBheWxvYWQnLCByZXF1aXJlZDogWydzZXNzaW9uSWQnLCAnZW50cmllcyddLCByZWNlaXZlZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGF5bG9hZC5zZXNzaW9uSWQgPSBub3JtYWxpemVJbnB1dChwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGxldCBza2lwcGVkID0gMDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBheWxvYWQuZW50cmllcykge1xuICAgICAgaWYgKCFlbnRyeSB8fCB0eXBlb2YgZW50cnkubWVzc2FnZSAhPT0gJ3N0cmluZycpIHsgc2tpcHBlZCsrOyBjb250aW51ZTsgfVxuICAgICAgY29uc3Qgc3RhbXBlZDogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiBwYXlsb2FkLnNlc3Npb25JZCB9LFxuICAgICAgfTtcbiAgICAgIGJyb2FkY2FzdHMubG9nQnJvYWRjYXN0KHN0YW1wZWQpO1xuICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgaGVhcnRiZWF0LCByZXZpdmUgZW5kZWQgc2Vzc2lvbnMsIG9yIGF1dG8tcmVnaXN0ZXIgb3JwaGFucyAoIzE4NzApXG4gICAgY29uc3Qgc2Vzc2lvbiA9IGVuc3VyZVNlc3Npb24ocGF5bG9hZC5zZXNzaW9uSWQpO1xuXG4gICAgaWYgKHNraXBwZWQgPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFtJbmdlc3RSb3V0ZXNdIExvZyBpbmdlc3QgZnJvbSAke3Nlc3Npb24/LmRpc3BsYXlOYW1lID8/IHBheWxvYWQuc2Vzc2lvbklkfTogYWNjZXB0ZWQ9JHtjb3VudH0sIHNraXBwZWQ9JHtza2lwcGVkfWApO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgYWNjZXB0ZWQ6IGNvdW50LCBza2lwcGVkIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9tZXRyaWNzIOKAlCBSZWNlaXZlIG1ldHJpYyBzbmFwc2hvdHMgZnJvbSBhIGZvbGxvd2VyLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9hcGkvaW5nZXN0L21ldHJpY3MnLCAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgSW5nZXN0TWV0cmljc1BheWxvYWQ7XG4gICAgaWYgKCFwYXlsb2FkPy5zZXNzaW9uSWQgfHwgIXBheWxvYWQuc25hcHNob3QpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVkID0gcGF5bG9hZCA/IE9iamVjdC5rZXlzKHBheWxvYWQpIDogW107XG4gICAgICBsb2dnZXIud2FybignW0luZ2VzdFJvdXRlc10gSW52YWxpZCBtZXRyaWNzIHBheWxvYWQnLCB7IHJlY2VpdmVkIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgcGF5bG9hZCcsIHJlcXVpcmVkOiBbJ3Nlc3Npb25JZCcsICdzbmFwc2hvdCddLCByZWNlaXZlZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGF5bG9hZC5zZXNzaW9uSWQgPSBub3JtYWxpemVJbnB1dChwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBpZiAoYnJvYWRjYXN0cy5tZXRyaWNzT25TbmFwc2hvdCkge1xuICAgICAgYnJvYWRjYXN0cy5tZXRyaWNzT25TbmFwc2hvdChwYXlsb2FkLnNuYXBzaG90KTtcbiAgICB9XG4gICAgaWYgKGJyb2FkY2FzdHMuc3RvcmVNZXRyaWNzU25hcHNob3QpIHtcbiAgICAgIGJyb2FkY2FzdHMuc3RvcmVNZXRyaWNzU25hcHNob3QocGF5bG9hZC5zbmFwc2hvdCwgcGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBoZWFydGJlYXQsIHJldml2ZSBlbmRlZCBzZXNzaW9ucywgb3IgYXV0by1yZWdpc3RlciBvcnBoYW5zICgjMTg3MClcbiAgICBjb25zdCBzZXNzaW9uID0gZW5zdXJlU2Vzc2lvbihwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbSW5nZXN0Um91dGVzXSBNZXRyaWNzIGluZ2VzdGVkIGZyb20gJHtzZXNzaW9uPy5kaXNwbGF5TmFtZSA/PyBwYXlsb2FkLnNlc3Npb25JZH1gKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IGFjY2VwdGVkOiB0cnVlIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9zZXNzaW9uIOKAlCBTZXNzaW9uIGxpZmVjeWNsZSBldmVudHMuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9pbmdlc3Qvc2Vzc2lvbicsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgU2Vzc2lvbkV2ZW50UGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQ/LnNlc3Npb25JZCB8fCAhcGF5bG9hZC5ldmVudCkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIHNlc3Npb24gZXZlbnQgcGF5bG9hZCcsIHsgcmVjZWl2ZWQgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXlsb2FkJywgcmVxdWlyZWQ6IFsnc2Vzc2lvbklkJywgJ2V2ZW50J10sIHJlY2VpdmVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXlsb2FkLnNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgIHN3aXRjaCAocGF5bG9hZC5ldmVudCkge1xuICAgICAgY2FzZSAnc3RhcnRlZCc6IHtcbiAgICAgICAgLy8gS2lsbGVkIHNlc3Npb25zIHN0YXkgZGVhZDsgcGVuZGluZyBraWxscyBnZXQgZmluYWxpemVkICgjMTg3MClcbiAgICAgICAgaWYgKGtpbGxlZFNlc3Npb25zLmhhcyhwYXlsb2FkLnNlc3Npb25JZCkpIGJyZWFrO1xuICAgICAgICBpZiAocGVuZGluZ0tpbGxzLmhhcyhwYXlsb2FkLnNlc3Npb25JZCkpIHsgZmluYWxpemVQZW5kaW5nS2lsbChwYXlsb2FkLnNlc3Npb25JZCwgcGF5bG9hZC5waWQpOyBicmVhazsgfVxuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgY29sb3IgPSBuYW1lUG9vbC5nZXRDb2xvcihwYXlsb2FkLnNlc3Npb25JZCkgPz8gJyMzYjgyZjYnO1xuICAgICAgICBjb25zdCBpc0F1dGhlbnRpY2F0ZWQgPSBCb29sZWFuKChyZXMgYXMgYW55KS5sb2NhbHM/LnRva2VuRW50cnkpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkQ2xpZW50UGxhdGZvcm0gPSBub3JtYWxpemVDbGllbnRQbGF0Zm9ybShwYXlsb2FkLmNsaWVudFBsYXRmb3JtKTtcbiAgICAgICAgc2Vzc2lvbnMuc2V0KHBheWxvYWQuc2Vzc2lvbklkLCB7XG4gICAgICAgICAgc2Vzc2lvbklkOiBwYXlsb2FkLnNlc3Npb25JZCwgZGlzcGxheU5hbWUsIGNvbG9yLFxuICAgICAgICAgIHBpZDogcGF5bG9hZC5waWQsIHN0YXJ0ZWRBdDogcGF5bG9hZC5zdGFydGVkQXQgfHwgbm93LCBsYXN0SGVhcnRiZWF0OiBub3csXG4gICAgICAgICAgc3RhdHVzOiAnYWN0aXZlJywgaXNMZWFkZXI6IGZhbHNlLCBhdXRoZW50aWNhdGVkOiBpc0F1dGhlbnRpY2F0ZWQsIGtpbmQ6ICdtY3AnLFxuICAgICAgICAgIHNlcnZlclZlcnNpb246IG5vcm1hbGl6ZVNlcnZlclZlcnNpb24ocGF5bG9hZC5zZXJ2ZXJWZXJzaW9uKSxcbiAgICAgICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKHBheWxvYWQuY29uc29sZVByb3RvY29sVmVyc2lvbiksXG4gICAgICAgICAgY2xpZW50UGxhdGZvcm06IG5vcm1hbGl6ZWRDbGllbnRQbGF0Zm9ybSxcbiAgICAgICAgICBjbGllbnRQbGF0Zm9ybUxhYmVsOiBnZXRTZXNzaW9uQ2xpZW50UGxhdGZvcm1MYWJlbChub3JtYWxpemVkQ2xpZW50UGxhdGZvcm0pLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFNlc3Npb24gcmVnaXN0ZXJlZCcsIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSwgc2Vzc2lvbklkOiBwYXlsb2FkLnNlc3Npb25JZCwgcGlkOiBwYXlsb2FkLnBpZCwgY29sb3IsXG4gICAgICAgICAgYWN0aXZlU2Vzc2lvbnM6IEFycmF5LmZyb20oc2Vzc2lvbnMudmFsdWVzKCkpLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSAnYWN0aXZlJykubGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oc2Vzc2lvbnMuZ2V0KHBheWxvYWQuc2Vzc2lvbklkKSEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3N0b3BwZWQnOiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vzc2lvbnMuZ2V0KHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgZXhpc3Rpbmcuc3RhdHVzID0gJ2VuZGVkJztcbiAgICAgICAgICBleGlzdGluZy5sYXN0SGVhcnRiZWF0ID0gbm93O1xuICAgICAgICAgIG5hbWVQb29sLnJlbGVhc2UocGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIHN0b3BwZWQnLCB7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogZXhpc3RpbmcuZGlzcGxheU5hbWUsIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIHBpZDogZXhpc3RpbmcucGlkLFxuICAgICAgICAgICAgYWN0aXZlU2Vzc2lvbnM6IEFycmF5LmZyb20oc2Vzc2lvbnMudmFsdWVzKCkpLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSAnYWN0aXZlJykubGVuZ3RoIC0gMSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicm9hZGNhc3RzLnNlc3Npb25Ccm9hZGNhc3Q/LihleGlzdGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdoZWFydGJlYXQnOiB7XG4gICAgICAgIC8vIEF1dG8tcmVnaXN0ZXIgb3IgdXBkYXRlIOKAlCBoZWFydGJlYXQgaW5jbHVkZXMgUElEIGZvciByZWNvdmVyeSAoIzE4NzApXG4gICAgICAgIGVuc3VyZVNlc3Npb24oXG4gICAgICAgICAgcGF5bG9hZC5zZXNzaW9uSWQsXG4gICAgICAgICAgcGF5bG9hZC5waWQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgcGF5bG9hZC5zZXJ2ZXJWZXJzaW9uLFxuICAgICAgICAgIHBheWxvYWQuY29uc29sZVByb3RvY29sVmVyc2lvbixcbiAgICAgICAgICBwYXlsb2FkLmNsaWVudFBsYXRmb3JtLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IG9rOiB0cnVlIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogR0VUIC9hcGkvc2Vzc2lvbnMg4oCUIExpc3QgYWxsIHRyYWNrZWQgc2Vzc2lvbnMuXG4gICAqL1xuICByb3V0ZXIuZ2V0KCcvYXBpL3Nlc3Npb25zJywgYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAvLyBTZXJ2ZXItc2lkZSBhY3RpdmUgZmlsdGVyIOKAlCB0aGUgZnJvbnRlbmQgYWxzbyBmaWx0ZXJzLCBidXQgZW5kZWQgc2Vzc2lvbnNcbiAgICAvLyBzaG91bGQgbmV2ZXIgbGVhdmUgdGhlIEFQSSB0byBwcmV2ZW50IHN0YWxlIFVJICgjMTg3MCkuXG4gICAgY29uc3QgbG9jYWxTZXNzaW9ucyA9IEFycmF5LmZyb20oc2Vzc2lvbnMudmFsdWVzKCkpLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSAnYWN0aXZlJyk7XG4gICAgY29uc3QgY3VycmVudFBvcnQgPSBlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQgPz8gNDE3MTU7XG5cbiAgICAvLyBGZWRlcmF0ZSB3aXRoIHRoZSBsZWdhY3kgcG9ydCAoMzkzOSkgdG8gc2hvdyBhbGwgc2Vzc2lvbnMgb24gdGhlXG4gICAgLy8gbWFjaGluZSwgaW5jbHVkaW5nIHVuYXV0aGVudGljYXRlZCBvbmVzIGZyb20gcHJlLWF1dGggaW5zdGFsbHMuXG4gICAgLy8gU2VydmVyLXRvLXNlcnZlciBhdm9pZHMgQ09SUyByZXN0cmljdGlvbnMgKCMxODA1KS5cbiAgICBpZiAoY3VycmVudFBvcnQgIT09IDM5MzkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVHQUNZX0ZFVENIX1RJTUVPVVRfTVMpO1xuICAgICAgICBjb25zdCBsZWdhY3lSZXMgPSBhd2FpdCBmZXRjaCgnaHR0cDovLzEyNy4wLjAuMTozOTM5L2FwaS9zZXNzaW9ucycsIHtcbiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBpZiAobGVnYWN5UmVzLm9rKSB7XG4gICAgICAgICAgY29uc3QgbGVnYWN5RGF0YSA9IGF3YWl0IGxlZ2FjeVJlcy5qc29uKCkgYXMgeyBzZXNzaW9uczogU2Vzc2lvbkluZm9bXSB9O1xuICAgICAgICAgIGNvbnN0IGxvY2FsSWRzID0gbmV3IFNldChsb2NhbFNlc3Npb25zLm1hcChzID0+IHMuc2Vzc2lvbklkKSk7XG4gICAgICAgICAgZm9yIChjb25zdCBscyBvZiAobGVnYWN5RGF0YS5zZXNzaW9ucyB8fCBbXSkpIHtcbiAgICAgICAgICAgIGlmICghbG9jYWxJZHMuaGFzKGxzLnNlc3Npb25JZCkgJiYgbHMuc3RhdHVzID09PSAnYWN0aXZlJykge1xuICAgICAgICAgICAgICBsb2NhbFNlc3Npb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLmxzLFxuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBraW5kOiBscy5raW5kIHx8ICdtY3AnLFxuICAgICAgICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKGxzLnNlcnZlclZlcnNpb24pLFxuICAgICAgICAgICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKGxzLmNvbnNvbGVQcm90b2NvbFZlcnNpb24pLFxuICAgICAgICAgICAgICBjbGllbnRQbGF0Zm9ybTogbm9ybWFsaXplQ2xpZW50UGxhdGZvcm0obHMuY2xpZW50UGxhdGZvcm0pLFxuICAgICAgICAgICAgICBjbGllbnRQbGF0Zm9ybUxhYmVsOiBnZXRTZXNzaW9uQ2xpZW50UGxhdGZvcm1MYWJlbChub3JtYWxpemVDbGllbnRQbGF0Zm9ybShscy5jbGllbnRQbGF0Zm9ybSkpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBMZWdhY3kgaW5zdGFuY2Ugbm90IHJ1bm5pbmcgb3IgdW5yZWFjaGFibGUg4oCUIHRoYXQncyBmaW5lXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzLmpzb24oeyBzZXNzaW9uczogbG9jYWxTZXNzaW9ucyB9KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFBPU1QgL2FwaS9zZXNzaW9ucy86c2Vzc2lvbklkL2tpbGwg4oCUIFRlcm1pbmF0ZSBhIHNlc3Npb24ncyBzZXJ2ZXIgcHJvY2Vzcy5cbiAgICovXG4gIHJvdXRlci5wb3N0KCcvYXBpL3Nlc3Npb25zLzpzZXNzaW9uSWQva2lsbCcsIGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSByZXEucGFyYW1zWydzZXNzaW9uSWQnXSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuXG4gICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAvLyBTZXNzaW9uIG5vdCBpbiBsb2NhbCBNYXAg4oCUIHRyeSBwcm94eWluZyBraWxsIHRvIGxlZ2FjeSBwb3J0ICgjMTg3MClcbiAgICAgIGNvbnN0IGN1cnJlbnRQb3J0ID0gZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUID8/IDQxNzE1O1xuICAgICAgaWYgKGN1cnJlbnRQb3J0ICE9PSAzOTM5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIExFR0FDWV9GRVRDSF9USU1FT1VUX01TKTtcbiAgICAgICAgICBjb25zdCBwcm94eVJlcyA9IGF3YWl0IGZldGNoKGBodHRwOi8vMTI3LjAuMC4xOjM5MzkvYXBpL3Nlc3Npb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3Npb25JZCl9L2tpbGxgLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIGlmIChwcm94eVJlcy5vaykge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHByb3h5UmVzLmpzb24oKTtcbiAgICAgICAgICAgIHJlcy5qc29uKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gTGVnYWN5IGluc3RhbmNlIG5vdCBydW5uaW5nIOKAlCBmYWxsIHRocm91Z2ggdG8gNDA0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBLaWxsIHJlcXVlc3RlZCBmb3IgdW5rbm93biBzZXNzaW9uJywgeyBzZXNzaW9uSWQgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7IGVycm9yOiAnU2Vzc2lvbiBub3QgZm91bmQnLCBzZXNzaW9uSWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFzZXNzaW9uLnBpZCkge1xuICAgICAgLy8gQXV0by1yZWdpc3RlcmVkIG9ycGhhbiB3aXRoIHVua25vd24gUElEIOKAlCBxdWV1ZSBmb3IgZGVmZXJyZWQga2lsbCAoIzE4NzApLlxuICAgICAgLy8gVGhlIG5leHQgaGVhcnRiZWF0IChldmVyeSB+MTBzKSBjYXJyaWVzIHRoZSBQSUQuIGVuc3VyZVNlc3Npb24oKSB3aWxsXG4gICAgICAvLyBTSUdURVJNIHRoZSBwcm9jZXNzIGFzIHNvb24gYXMgdGhlIFBJRCBhcnJpdmVzLiBTZXNzaW9uIGlzIGdvbmUgZm9yIGdvb2QuXG4gICAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICBuYW1lUG9vbC5yZWxlYXNlKHNlc3Npb25JZCk7XG4gICAgICBwZW5kaW5nS2lsbHMuYWRkKHNlc3Npb25JZCk7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gUXVldWVkIGRlZmVycmVkIGtpbGwg4oCUIHdhaXRpbmcgZm9yIFBJRCB2aWEgaGVhcnRiZWF0Jywge1xuICAgICAgICBkaXNwbGF5TmFtZTogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLFxuICAgICAgfSk7XG4gICAgICByZXMuanNvbih7IG9rOiB0cnVlLCBkaXNtaXNzZWQ6IHNlc3Npb24uZGlzcGxheU5hbWUsIHJlYXNvbjogJ3BlbmRpbmcta2lsbCcgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU0lHVEVSTSB0aGUgcHJvY2Vzcy4gRXZlbiBpZiBpdCBmYWlscyAoRVNSQ0ggPSBhbHJlYWR5IGRlYWQsIEVQRVJNID0gbm90IG91cnMpLFxuICAgIC8vIG1hcmsgdGhlIHNlc3Npb24gYXMgcGVybWFuZW50bHkga2lsbGVkIHNvIGl0IG5ldmVyIHJlYXBwZWFycyAoIzE4NzApLlxuICAgIHRyeSB7XG4gICAgICBwcm9jZXNzLmtpbGwoc2Vzc2lvbi5waWQsICdTSUdURVJNJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBjb2RlID0gKGVyciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGU7XG4gICAgICBpZiAoY29kZSA9PT0gJ0VTUkNIJykge1xuICAgICAgICAvLyBQcm9jZXNzIGFscmVhZHkgZGVhZCDigJQgdHJlYXQgYXMgc3VjY2Vzc2Z1bCBraWxsLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdbSW5nZXN0Um91dGVzXSBGYWlsZWQgdG8ga2lsbCBzZXNzaW9uJywge1xuICAgICAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZDogc2Vzc2lvbi5waWQsIGVycm9yOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogJ0ZhaWxlZCB0byBraWxsIHNlc3Npb24nLCBzZXNzaW9uSWQsIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBwaWQ6IHNlc3Npb24ucGlkLCBkZXRhaWw6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgc2Vzc2lvbi5zdGF0dXMgPSAnZW5kZWQnO1xuICAgIG5hbWVQb29sLnJlbGVhc2Uoc2Vzc2lvbklkKTtcbiAgICBraWxsZWRTZXNzaW9ucy5hZGQoc2Vzc2lvbklkKTtcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gU2Vzc2lvbiBraWxsZWQnLCB7XG4gICAgICBkaXNwbGF5TmFtZTogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBwaWQ6IHNlc3Npb24ucGlkLFxuICAgICAgYWN0aXZlU2Vzc2lvbnM6IEFycmF5LmZyb20oc2Vzc2lvbnMudmFsdWVzKCkpLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSAnYWN0aXZlJykubGVuZ3RoIC0gMSxcbiAgICB9KTtcbiAgICByZXMuanNvbih7IG9rOiB0cnVlLCBraWxsZWQ6IHNlc3Npb24uZGlzcGxheU5hbWUsIHBpZDogc2Vzc2lvbi5waWQgfSk7XG4gIH0pO1xuXG4gIC8qKiBNYXJrIHN0YWxlIGFjdGl2ZSBzZXNzaW9ucyBhcyBlbmRlZC4gKi9cbiAgZnVuY3Rpb24gcmVhcFN0YWxlU2Vzc2lvbnMobm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgc2Vzc2lvbl0gb2Ygc2Vzc2lvbnMpIHtcbiAgICAgIGlmIChzZXNzaW9uLnN0YXR1cyAhPT0gJ2FjdGl2ZScpIGNvbnRpbnVlO1xuICAgICAgaWYgKHNlc3Npb24uaXNMZWFkZXIgfHwgc2Vzc2lvbi5raW5kID09PSAnY29uc29sZScpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgYWdlID0gbm93IC0gbmV3IERhdGUoc2Vzc2lvbi5sYXN0SGVhcnRiZWF0KS5nZXRUaW1lKCk7XG4gICAgICBpZiAoYWdlIDw9IFNFU1NJT05fU1RBTEVfTVMpIGNvbnRpbnVlO1xuICAgICAgc2Vzc2lvbi5zdGF0dXMgPSAnZW5kZWQnO1xuICAgICAgbmFtZVBvb2wucmVsZWFzZShpZCk7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gUmVhcGVkIHN0YWxlIHNlc3Npb24nLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQ6IGlkLCBwaWQ6IHNlc3Npb24ucGlkLFxuICAgICAgICBsYXN0SGVhcnRiZWF0QWdvOiBgJHtNYXRoLnJvdW5kKGFnZSAvIDEwMDApfXNgLFxuICAgICAgICBhY3RpdmVTZXNzaW9uczogQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKS5sZW5ndGggLSAxLFxuICAgICAgfSk7XG4gICAgICBicm9hZGNhc3RzLnNlc3Npb25Ccm9hZGNhc3Q/LihzZXNzaW9uKTtcbiAgICB9XG4gIH1cblxuICAvKiogRGVsZXRlIGVuZGVkIHNlc3Npb25zIHRvIGJvdW5kIG1lbW9yeSAoIzE4NzApLiAqL1xuICBmdW5jdGlvbiBwdXJnZVN0YWxlRW50cmllcyhub3c6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2lkLCBzZXNzaW9uXSBvZiBzZXNzaW9ucykge1xuICAgICAgaWYgKHNlc3Npb24uc3RhdHVzID09PSAnZW5kZWQnICYmIG5vdyAtIG5ldyBEYXRlKHNlc3Npb24ubGFzdEhlYXJ0YmVhdCkuZ2V0VGltZSgpID4gRU5ERURfUFVSR0VfTVMpIHtcbiAgICAgICAgc2Vzc2lvbnMuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZWFwZXJJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHJlYXBTdGFsZVNlc3Npb25zKG5vdyk7XG4gICAgcHVyZ2VTdGFsZUVudHJpZXMobm93KTtcbiAgfSwgUkVBUEVSX0lOVEVSVkFMX01TKTtcbiAgcmVhcGVySW50ZXJ2YWwudW5yZWYoKTtcblxuICBmdW5jdGlvbiBnZXRTZXNzaW9ucygpOiBTZXNzaW9uSW5mb1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyTGVhZGVyU2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZywgcGlkOiBudW1iZXIsIGNsaWVudFBsYXRmb3JtPzogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHNlc3Npb25JZCwgdHJ1ZSk7XG4gICAgY29uc3QgY29sb3IgPSBuYW1lUG9vbC5nZXRDb2xvcihzZXNzaW9uSWQpID8/ICcjM2I4MmY2JztcbiAgICBjb25zdCBub3JtYWxpemVkQ2xpZW50UGxhdGZvcm0gPSBub3JtYWxpemVDbGllbnRQbGF0Zm9ybShjbGllbnRQbGF0Zm9ybSA/PyB1bmRlZmluZWQpO1xuICAgIHNlc3Npb25zLnNldChzZXNzaW9uSWQsIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIGRpc3BsYXlOYW1lLFxuICAgICAgY29sb3IsXG4gICAgICBwaWQsXG4gICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhc3RIZWFydGJlYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHN0YXR1czogJ2FjdGl2ZScsXG4gICAgICBpc0xlYWRlcjogdHJ1ZSxcbiAgICAgIGF1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICBraW5kOiAnbWNwJyxcbiAgICAgIHNlcnZlclZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICAgIGNsaWVudFBsYXRmb3JtOiBub3JtYWxpemVkQ2xpZW50UGxhdGZvcm0sXG4gICAgICBjbGllbnRQbGF0Zm9ybUxhYmVsOiBnZXRTZXNzaW9uQ2xpZW50UGxhdGZvcm1MYWJlbChub3JtYWxpemVkQ2xpZW50UGxhdGZvcm0pLFxuICAgIH0pO1xuICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBMZWFkZXIgc2Vzc2lvbiByZWdpc3RlcmVkJywgeyBkaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBwaWQsIGNvbG9yIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHRoZSB3ZWIgY29uc29sZSBpdHNlbGYgYXMgYSBzZXNzaW9uICgjMTgwNSkuIEVuc3VyZXMgdGhlXG4gICAqIHNlc3Npb24gaW5kaWNhdG9yIGFsd2F5cyBzaG93cyBhdCBsZWFzdCBvbmUgZW50cnkg4oCUIHRoZSBjb25zb2xlIHRoZVxuICAgKiB1c2VyIGlzIGN1cnJlbnRseSBsb29raW5nIGF0LlxuICAgKi9cbiAgZnVuY3Rpb24gcmVnaXN0ZXJDb25zb2xlU2Vzc2lvbigpOiB2b2lkIHtcbiAgICBjb25zdCBjb25zb2xlSWQgPSBgY29uc29sZS0ke3Byb2Nlc3MucGlkfWA7XG4gICAgaWYgKHNlc3Npb25zLmhhcyhjb25zb2xlSWQpKSByZXR1cm47XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSAnV2ViIENvbnNvbGUnO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRDbGllbnRQbGF0Zm9ybTogU2Vzc2lvbkNsaWVudFBsYXRmb3JtSWQgPSAnd2ViLWNvbnNvbGUnO1xuICAgIHNlc3Npb25zLnNldChjb25zb2xlSWQsIHtcbiAgICAgIHNlc3Npb25JZDogY29uc29sZUlkLFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgICBjb2xvcjogJyM2MzY2ZjEnLCAvLyBpbmRpZ28g4oCUIGRpc3RpbmN0IGZyb20gcHVwcGV0IGdyZWVucy9ibHVlc1xuICAgICAgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICAgIHN0YXJ0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbGFzdEhlYXJ0YmVhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgc3RhdHVzOiAnYWN0aXZlJyxcbiAgICAgIGlzTGVhZGVyOiBmYWxzZSxcbiAgICAgIGF1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICBraW5kOiAnY29uc29sZScsXG4gICAgICBzZXJ2ZXJWZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gICAgICBjbGllbnRQbGF0Zm9ybTogbm9ybWFsaXplZENsaWVudFBsYXRmb3JtLFxuICAgICAgY2xpZW50UGxhdGZvcm1MYWJlbDogZ2V0U2Vzc2lvbkNsaWVudFBsYXRmb3JtTGFiZWwobm9ybWFsaXplZENsaWVudFBsYXRmb3JtKSxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gQ29uc29sZSBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IHNlc3Npb25JZDogY29uc29sZUlkLCBwaWQ6IHByb2Nlc3MucGlkIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgcm91dGVyLCBnZXRTZXNzaW9ucywgcmVnaXN0ZXJMZWFkZXJTZXNzaW9uLCByZWdpc3RlckNvbnNvbGVTZXNzaW9uIH07XG59XG4iXX0=
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import type { ILogSink, UnifiedLogEntry } from '../../logging/types.js';
|
|
18
18
|
import type { MetricSnapshot } from '../../metrics/types.js';
|
|
19
|
+
import { type SessionClientPlatformId } from './sessionClientPlatform.js';
|
|
19
20
|
/**
|
|
20
21
|
* ILogSink that batch-POSTs entries to the leader's /api/ingest/logs.
|
|
21
22
|
*/
|
|
@@ -66,10 +67,14 @@ export declare class SessionHeartbeat {
|
|
|
66
67
|
private readonly pid;
|
|
67
68
|
/** Optional console auth token (#1780). Included as Bearer header on ingest POSTs. */
|
|
68
69
|
private readonly authToken;
|
|
70
|
+
/** Explicit MCP host platform metadata for this runtime. */
|
|
71
|
+
private readonly clientPlatform;
|
|
69
72
|
private heartbeatTimer;
|
|
70
73
|
constructor(leaderUrl: string, sessionId: string, pid: number,
|
|
71
74
|
/** Optional console auth token (#1780). Included as Bearer header on ingest POSTs. */
|
|
72
|
-
authToken?: string | null
|
|
75
|
+
authToken?: string | null,
|
|
76
|
+
/** Explicit MCP host platform metadata for this runtime. */
|
|
77
|
+
clientPlatform?: SessionClientPlatformId | null);
|
|
73
78
|
/** Notify the leader that this session has started */
|
|
74
79
|
start(): Promise<void>;
|
|
75
80
|
/** Notify the leader that this session is stopping */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeaderForwardingSink.d.ts","sourceRoot":"","sources":["../../../src/web/console/LeaderForwardingSink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"LeaderForwardingSink.d.ts","sourceRoot":"","sources":["../../../src/web/console/LeaderForwardingSink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM7D,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,4BAA4B,CAAC;AAqCpC;;GAEG;AACH,qBAAa,uBAAwB,YAAW,QAAQ;IASpD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAbjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,MAAM,CAAS;gBAGJ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM;IAClC,sFAAsF;IACrE,SAAS,GAAE,MAAM,GAAG,IAAW;IAChD,gGAAgG;IAC/E,aAAa,CAAC,GAAE,MAAM,IAAI,aAAA;IAO7C,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAkB7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAQd,WAAW;IAgCzB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;CAwBtB;AAED;;GAEG;AACH,qBAAa,2BAA2B;IAEpC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAHT,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM;IAClC,sFAAsF;IACrE,SAAS,GAAE,MAAM,GAAG,IAAW;IAG5C,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB1D;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc;IATjC,OAAO,CAAC,cAAc,CAA+C;gBAGlD,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM;IAC5B,sFAAsF;IACrE,SAAS,GAAE,MAAM,GAAG,IAAW;IAChD,4DAA4D;IAC3C,cAAc,GAAE,uBAAuB,GAAG,IAAsC;IAGnG,sDAAsD;IAChD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,sDAAsD;IAChD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAQb,SAAS;CAwBxB"}
|