@dollhousemcp/mcp-server 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -6
- package/dist/persona/PersonaManager.d.ts.map +1 -1
- package/dist/persona/PersonaManager.js +1 -2
- package/dist/security/commandValidator.d.ts.map +1 -1
- package/dist/security/commandValidator.js +15 -3
- package/dist/utils/git.d.ts +0 -6
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +2 -5
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +7 -5
- package/package.json +3 -3
- package/server.json +2 -2
- package/dist/constants/version.d.ts +0 -3
- package/dist/constants/version.d.ts.map +0 -1
- package/dist/constants/version.js +0 -4
- package/dist/logging/sinks/SSELogSink.d.ts +0 -35
- package/dist/logging/sinks/SSELogSink.d.ts.map +0 -1
- package/dist/logging/sinks/SSELogSink.js +0 -181
- package/dist/logging/viewer/viewerHtml.d.ts +0 -8
- package/dist/logging/viewer/viewerHtml.d.ts.map +0 -1
- package/dist/logging/viewer/viewerHtml.js +0 -204
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandValidator.d.ts","sourceRoot":"","sources":["../../src/security/commandValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,eAAe,CAAC;AAc/C,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAczD,OAAO,CAAC,MAAM,CAAC,cAAc;WAKhB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"commandValidator.d.ts","sourceRoot":"","sources":["../../src/security/commandValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,eAAe,CAAC;AAc/C,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAczD,OAAO,CAAC,MAAM,CAAC,cAAc;WAKhB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;CAsEhH"}
|
|
@@ -33,8 +33,20 @@ export class CommandValidator {
|
|
|
33
33
|
...options,
|
|
34
34
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
35
35
|
env: {
|
|
36
|
-
|
|
37
|
-
PATH: '/usr/bin:/bin:/usr/local/bin'
|
|
36
|
+
// SEC-03: Explicit allowlist instead of spreading full process.env
|
|
37
|
+
PATH: '/usr/bin:/bin:/usr/local/bin',
|
|
38
|
+
HOME: process.env.HOME,
|
|
39
|
+
USER: process.env.USER,
|
|
40
|
+
LANG: process.env.LANG,
|
|
41
|
+
TERM: process.env.TERM,
|
|
42
|
+
// Git operations need these
|
|
43
|
+
GIT_AUTHOR_NAME: process.env.GIT_AUTHOR_NAME,
|
|
44
|
+
GIT_AUTHOR_EMAIL: process.env.GIT_AUTHOR_EMAIL,
|
|
45
|
+
GIT_COMMITTER_NAME: process.env.GIT_COMMITTER_NAME,
|
|
46
|
+
GIT_COMMITTER_EMAIL: process.env.GIT_COMMITTER_EMAIL,
|
|
47
|
+
// npm operations
|
|
48
|
+
NODE_PATH: process.env.NODE_PATH,
|
|
49
|
+
npm_config_cache: process.env.npm_config_cache,
|
|
38
50
|
},
|
|
39
51
|
cwd: options?.cwd || process.cwd(),
|
|
40
52
|
timeout: options?.timeout || 30000 // 30 second default
|
|
@@ -79,4 +91,4 @@ export class CommandValidator {
|
|
|
79
91
|
});
|
|
80
92
|
}
|
|
81
93
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb21tYW5kVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsTUFBTSxnQkFBZ0IsR0FBNkI7SUFDakQsdURBQXVEO0lBQ3ZELHFGQUFxRjtJQUNyRix1RUFBdUU7SUFDdkUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQztJQUMxSCxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQztJQUM1RCxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7SUFDbkIsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO0NBQ25CLENBQUM7QUFFRixNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBVyxFQUFFLElBQWM7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2Qix3REFBd0Q7WUFDeEQsSUFBSSxDQUFDLFdBQVcs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QUFRLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixJQUFJLE1BQU0sTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3pCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBSZWdleFZhbGlkYXRvciB9IGZyb20gJy4vcmVnZXhWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5jb25zdCBBTExPV0VEX0NPTU1BTkRTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gIC8vIFNFQ1VSSVRZIEZJWDogQWRkZWQgJ2Nsb25lJyBjb21tYW5kIHRvIGdpdCBhbGxvd2xpc3RcbiAgLy8gUHJldmlvdXNseTogbnBtIGluc3RhbGxhdGlvbiBmZWF0dXJlIHdvdWxkIGZhaWwgd2l0aCBcIkFyZ3VtZW50IG5vdCBhbGxvd2VkOiBjbG9uZVwiXG4gIC8vIE5vdzogZ2l0IGNsb25lIGNvbW1hbmQgaXMgYWxsb3dlZCBmb3IgbnBtIGluc3RhbGxhdGlvbiBmdW5jdGlvbmFsaXR5XG4gIGdpdDogWydwdWxsJywgJ3N0YXR1cycsICdsb2cnLCAncmV2LXBhcnNlJywgJ2JyYW5jaCcsICdjaGVja291dCcsICdmZXRjaCcsICdjbG9uZScsICctLWFiYnJldi1yZWYnLCAnSEVBRCcsICctLXBvcmNlbGFpbiddLFxuICBucG06IFsnaW5zdGFsbCcsICdydW4nLCAnYXVkaXQnLCAnY2knLCAnLS12ZXJzaW9uJywgJ2J1aWxkJ10sXG4gIG5vZGU6IFsnLS12ZXJzaW9uJ10sXG4gIG5weDogWyctLXZlcnNpb24nXVxufTtcblxuZXhwb3J0IGNsYXNzIENvbW1hbmRWYWxpZGF0b3Ige1xuICBzdGF0aWMgc2FuaXRpemVDb21tYW5kKGNtZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICghQUxMT1dFRF9DT01NQU5EU1tjbWRdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgbm90IGFsbG93ZWQ6ICR7Y21kfWApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBhbGxvd2VkQXJncyA9IEFMTE9XRURfQ09NTUFORFNbY21kXTtcbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGluIGFsbG93ZWQgbGlzdCBvciBtYXRjaGVzIHNhZmUgcGF0dGVyblxuICAgICAgaWYgKCFhbGxvd2VkQXJncy5pbmNsdWRlcyhhcmcpICYmICF0aGlzLmlzU2FmZUFyZ3VtZW50KGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcmd1bWVudCBub3QgYWxsb3dlZDogJHthcmd9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNTYWZlQXJndW1lbnQoYXJnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBBbGxvdyBhbHBoYW51bWVyaWMsIGRhc2gsIHVuZGVyc2NvcmUsIGRvdCwgYW5kIGZvcndhcmQgc2xhc2hcbiAgICByZXR1cm4gUmVnZXhWYWxpZGF0b3IudmFsaWRhdGUoYXJnLCAvXlthLXpBLVowLTlcXC1fLi9dKyQvLCB7IG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT01NQU5EX0FSR19MRU5HVEggfSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgc2VjdXJlRXhlYyhjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zPzogY2hpbGRfcHJvY2Vzcy5TcGF3bk9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMuc2FuaXRpemVDb21tYW5kKGNvbW1hbmQsIGFyZ3MpO1xuICAgIFxuICAgIGNvbnN0IHNhZmVPcHRpb25zOiBjaGlsZF9wcm9jZXNzLlNwYXduT3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIFBBVEg6ICcvdXNyL2JpbjovYmluOi91c3IvbG9jYWwvYmluJyAvLyBSZXN0cmljdCBQQVRIXG4gICAgICB9LFxuICAgICAgY3dkOiBvcHRpb25zPy5jd2QgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgIHRpbWVvdXQ6IG9wdGlvbnM/LnRpbWVvdXQgfHwgMzAwMDAgLy8gMzAgc2Vjb25kIGRlZmF1bHRcbiAgICB9O1xuICAgIFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBwcm9jID0gY2hpbGRfcHJvY2Vzcy5zcGF3bihjb21tYW5kLCBhcmdzLCBzYWZlT3B0aW9ucyk7XG4gICAgICBcbiAgICAgIGxldCBzdGRvdXQgPSAnJztcbiAgICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICAgIGxldCB0aW1lb3V0SGFuZGxlOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBpc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgXG4gICAgICAvLyBIZWxwZXIgdG8gc2FmZWx5IHJlc29sdmUvcmVqZWN0IG9ubHkgb25jZVxuICAgICAgY29uc3QgY29tcGxldGUgPSAoZm46ICgpID0+IHZvaWQpID0+IHtcbiAgICAgICAgaWYgKCFpc0NvbXBsZXRlZCkge1xuICAgICAgICAgIGlzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGltZW91dEhhbmRsZSkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQpIHtcbiAgICAgICAgdGltZW91dEhhbmRsZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHByb2Mua2lsbCgnU0lHVEVSTScpO1xuICAgICAgICAgIGNvbXBsZXRlKCgpID0+IHJlamVjdChuZXcgRXJyb3IoYENvbW1hbmQgdGltZWQgb3V0IGFmdGVyICR7b3B0aW9ucy50aW1lb3V0fW1zYCkpKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgICAgdGltZW91dEhhbmRsZS51bnJlZigpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBwcm9jLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YSkgPT4gc3Rkb3V0ICs9IGRhdGEpO1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHN0ZGVyciArPSBkYXRhKTtcbiAgICAgIFxuICAgICAgcHJvYy5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgICAgY29tcGxldGUoKCkgPT4gcmVzb2x2ZShzdGRvdXQudHJpbSgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcGxldGUoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQgKCR7Y29kZX0pOiAke3N0ZGVycn1gKSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcHJvYy5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgY29tcGxldGUoKCkgPT4gcmVqZWN0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iXX0=
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb21tYW5kVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsTUFBTSxnQkFBZ0IsR0FBNkI7SUFDakQsdURBQXVEO0lBQ3ZELHFGQUFxRjtJQUNyRix1RUFBdUU7SUFDdkUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQztJQUMxSCxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQztJQUM1RCxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7SUFDbkIsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO0NBQ25CLENBQUM7QUFFRixNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBVyxFQUFFLElBQWM7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2Qix3REFBd0Q7WUFDeEQsSUFBSSxDQUFDLFdBQVcs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Q0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IFJlZ2V4VmFsaWRhdG9yIH0gZnJvbSAnLi9yZWdleFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbmNvbnN0IEFMTE9XRURfQ09NTUFORFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgLy8gU0VDVVJJVFkgRklYOiBBZGRlZCAnY2xvbmUnIGNvbW1hbmQgdG8gZ2l0IGFsbG93bGlzdFxuICAvLyBQcmV2aW91c2x5OiBucG0gaW5zdGFsbGF0aW9uIGZlYXR1cmUgd291bGQgZmFpbCB3aXRoIFwiQXJndW1lbnQgbm90IGFsbG93ZWQ6IGNsb25lXCJcbiAgLy8gTm93OiBnaXQgY2xvbmUgY29tbWFuZCBpcyBhbGxvd2VkIGZvciBucG0gaW5zdGFsbGF0aW9uIGZ1bmN0aW9uYWxpdHlcbiAgZ2l0OiBbJ3B1bGwnLCAnc3RhdHVzJywgJ2xvZycsICdyZXYtcGFyc2UnLCAnYnJhbmNoJywgJ2NoZWNrb3V0JywgJ2ZldGNoJywgJ2Nsb25lJywgJy0tYWJicmV2LXJlZicsICdIRUFEJywgJy0tcG9yY2VsYWluJ10sXG4gIG5wbTogWydpbnN0YWxsJywgJ3J1bicsICdhdWRpdCcsICdjaScsICctLXZlcnNpb24nLCAnYnVpbGQnXSxcbiAgbm9kZTogWyctLXZlcnNpb24nXSxcbiAgbnB4OiBbJy0tdmVyc2lvbiddXG59O1xuXG5leHBvcnQgY2xhc3MgQ29tbWFuZFZhbGlkYXRvciB7XG4gIHN0YXRpYyBzYW5pdGl6ZUNvbW1hbmQoY21kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCFBTExPV0VEX0NPTU1BTkRTW2NtZF0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBub3QgYWxsb3dlZDogJHtjbWR9YCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGFsbG93ZWRBcmdzID0gQUxMT1dFRF9DT01NQU5EU1tjbWRdO1xuICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgaW4gYWxsb3dlZCBsaXN0IG9yIG1hdGNoZXMgc2FmZSBwYXR0ZXJuXG4gICAgICBpZiAoIWFsbG93ZWRBcmdzLmluY2x1ZGVzKGFyZykgJiYgIXRoaXMuaXNTYWZlQXJndW1lbnQoYXJnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFyZ3VtZW50IG5vdCBhbGxvd2VkOiAke2FyZ31gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc1NhZmVBcmd1bWVudChhcmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIEFsbG93IGFscGhhbnVtZXJpYywgZGFzaCwgdW5kZXJzY29yZSwgZG90LCBhbmQgZm9yd2FyZCBzbGFzaFxuICAgIHJldHVybiBSZWdleFZhbGlkYXRvci52YWxpZGF0ZShhcmcsIC9eW2EtekEtWjAtOVxcLV8uL10rJC8sIHsgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTU1BTkRfQVJHX0xFTkdUSCB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzZWN1cmVFeGVjKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBjaGlsZF9wcm9jZXNzLlNwYXduT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5zYW5pdGl6ZUNvbW1hbmQoY29tbWFuZCwgYXJncyk7XG4gICAgXG4gICAgY29uc3Qgc2FmZU9wdGlvbnM6IGNoaWxkX3Byb2Nlc3MuU3Bhd25PcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICAgIGVudjoge1xuICAgICAgICAvLyBTRUMtMDM6IEV4cGxpY2l0IGFsbG93bGlzdCBpbnN0ZWFkIG9mIHNwcmVhZGluZyBmdWxsIHByb2Nlc3MuZW52XG4gICAgICAgIFBBVEg6ICcvdXNyL2JpbjovYmluOi91c3IvbG9jYWwvYmluJyxcbiAgICAgICAgSE9NRTogcHJvY2Vzcy5lbnYuSE9NRSxcbiAgICAgICAgVVNFUjogcHJvY2Vzcy5lbnYuVVNFUixcbiAgICAgICAgTEFORzogcHJvY2Vzcy5lbnYuTEFORyxcbiAgICAgICAgVEVSTTogcHJvY2Vzcy5lbnYuVEVSTSxcbiAgICAgICAgLy8gR2l0IG9wZXJhdGlvbnMgbmVlZCB0aGVzZVxuICAgICAgICBHSVRfQVVUSE9SX05BTUU6IHByb2Nlc3MuZW52LkdJVF9BVVRIT1JfTkFNRSxcbiAgICAgICAgR0lUX0FVVEhPUl9FTUFJTDogcHJvY2Vzcy5lbnYuR0lUX0FVVEhPUl9FTUFJTCxcbiAgICAgICAgR0lUX0NPTU1JVFRFUl9OQU1FOiBwcm9jZXNzLmVudi5HSVRfQ09NTUlUVEVSX05BTUUsXG4gICAgICAgIEdJVF9DT01NSVRURVJfRU1BSUw6IHByb2Nlc3MuZW52LkdJVF9DT01NSVRURVJfRU1BSUwsXG4gICAgICAgIC8vIG5wbSBvcGVyYXRpb25zXG4gICAgICAgIE5PREVfUEFUSDogcHJvY2Vzcy5lbnYuTk9ERV9QQVRILFxuICAgICAgICBucG1fY29uZmlnX2NhY2hlOiBwcm9jZXNzLmVudi5ucG1fY29uZmlnX2NhY2hlLFxuICAgICAgfSxcbiAgICAgIGN3ZDogb3B0aW9ucz8uY3dkIHx8IHByb2Nlc3MuY3dkKCksXG4gICAgICB0aW1lb3V0OiBvcHRpb25zPy50aW1lb3V0IHx8IDMwMDAwIC8vIDMwIHNlY29uZCBkZWZhdWx0XG4gICAgfTtcbiAgICBcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcHJvYyA9IGNoaWxkX3Byb2Nlc3Muc3Bhd24oY29tbWFuZCwgYXJncywgc2FmZU9wdGlvbnMpO1xuICAgICAgXG4gICAgICBsZXQgc3Rkb3V0ID0gJyc7XG4gICAgICBsZXQgc3RkZXJyID0gJyc7XG4gICAgICBsZXQgdGltZW91dEhhbmRsZTogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgaXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgIFxuICAgICAgLy8gSGVscGVyIHRvIHNhZmVseSByZXNvbHZlL3JlamVjdCBvbmx5IG9uY2VcbiAgICAgIGNvbnN0IGNvbXBsZXRlID0gKGZuOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgIGlmICghaXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICBpc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRpbWVvdXRIYW5kbGUpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0KSB7XG4gICAgICAgIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBwcm9jLmtpbGwoJ1NJR1RFUk0nKTtcbiAgICAgICAgICBjb21wbGV0ZSgoKSA9PiByZWplY3QobmV3IEVycm9yKGBDb21tYW5kIHRpbWVkIG91dCBhZnRlciAke29wdGlvbnMudGltZW91dH1tc2ApKSk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICAgIHRpbWVvdXRIYW5kbGUudW5yZWYoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHN0ZG91dCArPSBkYXRhKTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhKSA9PiBzdGRlcnIgKz0gZGF0YSk7XG4gICAgICBcbiAgICAgIHByb2Mub24oJ2V4aXQnLCAoY29kZSkgPT4ge1xuICAgICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICAgIGNvbXBsZXRlKCgpID0+IHJlc29sdmUoc3Rkb3V0LnRyaW0oKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXBsZXRlKCgpID0+IHJlamVjdChuZXcgRXJyb3IoYENvbW1hbmQgZmFpbGVkICgke2NvZGV9KTogJHtzdGRlcnJ9YCkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHByb2Mub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbXBsZXRlKCgpID0+IHJlamVjdChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSkpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59Il19
|
package/dist/utils/git.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Git-related utility functions
|
|
3
3
|
*/
|
|
4
|
-
import * as child_process from 'child_process';
|
|
5
|
-
declare const exec: typeof child_process.exec.__promisify__;
|
|
6
4
|
/**
|
|
7
5
|
* Execute a command safely using CommandValidator
|
|
8
6
|
*/
|
|
@@ -13,10 +11,6 @@ export declare function safeExec(command: string, args: string[], options?: {
|
|
|
13
11
|
stdout: string;
|
|
14
12
|
stderr: string;
|
|
15
13
|
}>;
|
|
16
|
-
/**
|
|
17
|
-
* Execute a command using exec (use only for trusted input)
|
|
18
|
-
*/
|
|
19
|
-
export { exec };
|
|
20
14
|
/**
|
|
21
15
|
* Get current git branch
|
|
22
16
|
*/
|
package/dist/utils/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAa7C;AAID;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOtE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOtE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOzE"}
|
package/dist/utils/git.js
CHANGED
|
@@ -22,10 +22,7 @@ export async function safeExec(command, args, options = {}) {
|
|
|
22
22
|
throw new Error(errorMessage);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
* Execute a command using exec (use only for trusted input)
|
|
27
|
-
*/
|
|
28
|
-
export { exec };
|
|
25
|
+
// SEC-02: Raw exec intentionally NOT exported — use safeExec or CommandValidator.secureExec
|
|
29
26
|
/**
|
|
30
27
|
* Get current git branch
|
|
31
28
|
*/
|
|
@@ -62,4 +59,4 @@ export async function hasUncommittedChanges(cwd) {
|
|
|
62
59
|
throw new Error(`Failed to check git status: ${error instanceof Error ? error.message : String(error)}`);
|
|
63
60
|
}
|
|
64
61
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2dpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkUsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUUzQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUM1QixPQUFlLEVBQ2YsSUFBYyxFQUNkLFVBQThDLEVBQUU7SUFFaEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtZQUM5RCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSztTQUNsQyxDQUFDLENBQUM7UUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZix5Q0FBeUM7UUFDekMsTUFBTSxZQUFZLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEMsQ0FBQztBQUNILENBQUM7QUFFRCw0RkFBNEY7QUFFNUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLEdBQVc7SUFDbkQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxHQUFXO0lBQ25ELElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxHQUFXO0lBQ3JELElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNHLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHaXQtcmVsYXRlZCB1dGlsaXR5IGZ1bmN0aW9uc1xuICovXG5cbmltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcbmltcG9ydCB7IENvbW1hbmRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb21tYW5kVmFsaWRhdG9yLmpzJztcblxuY29uc3QgZXhlYyA9IHByb21pc2lmeShjaGlsZF9wcm9jZXNzLmV4ZWMpO1xuXG4vKipcbiAqIEV4ZWN1dGUgYSBjb21tYW5kIHNhZmVseSB1c2luZyBDb21tYW5kVmFsaWRhdG9yXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlRXhlYyhcbiAgY29tbWFuZDogc3RyaW5nLCBcbiAgYXJnczogc3RyaW5nW10sIFxuICBvcHRpb25zOiB7IGN3ZD86IHN0cmluZzsgdGltZW91dD86IG51bWJlciB9ID0ge31cbik6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmcgfT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IENvbW1hbmRWYWxpZGF0b3Iuc2VjdXJlRXhlYyhjb21tYW5kLCBhcmdzLCB7XG4gICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgdGltZW91dDogb3B0aW9ucy50aW1lb3V0IHx8IDMwMDAwXG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHsgc3Rkb3V0OiByZXN1bHQsIHN0ZGVycjogJycgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBDb252ZXJ0IHRvIGV4cGVjdGVkIGZvcm1hdCB3aXRoIHN0ZGVyclxuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgfVxufVxuXG4vLyBTRUMtMDI6IFJhdyBleGVjIGludGVudGlvbmFsbHkgTk9UIGV4cG9ydGVkIOKAlCB1c2Ugc2FmZUV4ZWMgb3IgQ29tbWFuZFZhbGlkYXRvci5zZWN1cmVFeGVjXG5cbi8qKlxuICogR2V0IGN1cnJlbnQgZ2l0IGJyYW5jaFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudEdpdEJyYW5jaChjd2Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHNhZmVFeGVjKCdnaXQnLCBbJ3Jldi1wYXJzZScsICctLWFiYnJldi1yZWYnLCAnSEVBRCddLCB7IGN3ZCB9KTtcbiAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBnZXQgY3VycmVudCBnaXQgYnJhbmNoOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IGdpdCBjb21taXQgaGFzaFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudEdpdENvbW1pdChjd2Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHNhZmVFeGVjKCdnaXQnLCBbJ3Jldi1wYXJzZScsICdIRUFEJ10sIHsgY3dkIH0pO1xuICAgIHJldHVybiBzdGRvdXQudHJpbSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBjdXJyZW50IGdpdCBjb21taXQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgZ2l0IHJlcG9zaXRvcnkgaGFzIHVuY29tbWl0dGVkIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc1VuY29tbWl0dGVkQ2hhbmdlcyhjd2Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBzYWZlRXhlYygnZ2l0JywgWydzdGF0dXMnLCAnLS1wb3JjZWxhaW4nXSwgeyBjd2QgfSk7XG4gICAgcmV0dXJuIHN0ZG91dC50cmltKCkubGVuZ3RoID4gMDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjaGVjayBnaXQgc3RhdHVzOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgfVxufSJdfQ==
|
package/dist/web/routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/web/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/web/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAid1E,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAiJ5D;AAqBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CA0H3F"}
|
package/dist/web/routes.js
CHANGED
|
@@ -339,7 +339,8 @@ function registerPortfolioRoutes(router, portfolioDir, options) {
|
|
|
339
339
|
}
|
|
340
340
|
});
|
|
341
341
|
router.get('/elements/:type/:name', async (req, res) => {
|
|
342
|
-
const
|
|
342
|
+
const type = req.params.type;
|
|
343
|
+
const name = normalizeInput(req.params.name);
|
|
343
344
|
if (!ELEMENT_TYPES.includes(type)) {
|
|
344
345
|
res.status(400).json({ error: `Invalid element type: ${type}` });
|
|
345
346
|
return;
|
|
@@ -595,13 +596,14 @@ export function createGatewayApiRoutes(handler, portfolioDir) {
|
|
|
595
596
|
* codeql[js/missing-rate-limiting] — Rate-limited by router.use() middleware above.
|
|
596
597
|
*/
|
|
597
598
|
router.get('/collection/content/:prefix/:type/:name', async (req, res) => {
|
|
598
|
-
const
|
|
599
|
+
const prefix = normalizeInput(req.params.prefix);
|
|
600
|
+
const elementType = normalizeInput(req.params.type);
|
|
601
|
+
const filename = normalizeInput(req.params.name);
|
|
602
|
+
const elementPath = `${prefix}/${elementType}/${filename}`;
|
|
599
603
|
if (!elementPath || elementPath.includes('..') || elementPath.includes('\\')) {
|
|
600
604
|
res.status(400).json({ error: 'Invalid element path' });
|
|
601
605
|
return;
|
|
602
606
|
}
|
|
603
|
-
const elementType = req.params.type;
|
|
604
|
-
const filename = req.params.name;
|
|
605
607
|
// Validate element type against known types to prevent arbitrary path construction
|
|
606
608
|
if (!ELEMENT_TYPES.includes(elementType)) {
|
|
607
609
|
res.status(400).json({ error: `Invalid element type: ${elementType}` });
|
|
@@ -690,4 +692,4 @@ export function createGatewayApiRoutes(handler, portfolioDir) {
|
|
|
690
692
|
});
|
|
691
693
|
return router;
|
|
692
694
|
}
|
|
693
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNCQUFzQixFQUFvRCxNQUFNLHNCQUFzQixDQUFDO0FBR2hILDRFQUE0RTtBQUM1RSxTQUFTLGNBQWMsQ0FBQyxLQUFhO0lBQ25DLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBQ0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBVSxDQUFDO0FBRXRHLDZDQUE2QztBQUM3QyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUV0QyxvQ0FBb0M7QUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUUzRCx5R0FBeUc7QUFDekcsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMs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WUFDN0QsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDekQsU0FBUyxFQUFFLDRCQUE0QjtnQkFDdkMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTthQUM5QixDQUFDLENBQUMsQ0FBQztZQUVKLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRSxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsaURBQWlELFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGFBQWEsSUFBSSxlQUFlLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxtQkFBb0IsR0FBYSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXZWIgVUkgQVBJIFJvdXRlc1xuICpcbiAqIFJFU1QgZW5kcG9pbnRzIGZvciByZWFkaW5nIHBvcnRmb2xpbyBlbGVtZW50cy5cbiAqIFJlYWQtb25seSDigJQgbm8gbXV0YXRpb25zIGluIFYxLlxuICpcbiAqIEFsbCBlbGVtZW50IGNvbnRlbnQgaXMgc2FuaXRpemVkIGJlZm9yZSBzZXJ2aW5nIHRvIHByZXZlbnQgWFNTLlxuICpcbiAqIFNlY3VyaXR5IG5vdGU6IFRoaXMgd2ViIHNlcnZlciBiaW5kcyB0byAxMjcuMC4wLjEgb25seSAoc2VlIHNlcnZlci50cykuXG4gKiBSYXRlIGxpbWl0aW5nIG9uIHJlYWQtb25seSBHRVQgZW5kcG9pbnRzIGlzIG5vdCByZXF1aXJlZCBmb3IgbG9jYWxob3N0LW9ubHlcbiAqIG1hbmFnZW1lbnQgaW50ZXJmYWNlcy4gVGhlIFBPU1QgL2FwaS9pbnN0YWxsIGVuZHBvaW50IGhhcyBleHBsaWNpdCByYXRlIGxpbWl0aW5nXG4gKiB2aWEgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyIChtYXggMTAgcGVyIG1pbnV0ZSkuXG4gKiBjb2RlcWxbanMvbWlzc2luZy1yYXRlLWxpbWl0aW5nXSDigJQgQWNrbm93bGVkZ2VkOyBsb2NhbGhvc3Qtb25seSBiaW5kaW5nIG1pdGlnYXRlcyBEb1Mgcmlzay5cbiAqL1xuXG5pbXBvcnQgZXhwcmVzcywgeyBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IHJlYWRkaXIsIHJlYWRGaWxlLCBzdGF0IH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luLCBleHRuYW1lLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUVsZW1lbnRDb250ZW50LCB0eXBlIFBpcGVsaW5lUmVzdWx0LCB0eXBlIEVsZW1lbnREaXNwbGF5TWV0YWRhdGEgfSBmcm9tICcuL2NvbnRlbnRQaXBlbGluZS5qcyc7XG5pbXBvcnQgdHlwZSB7IE1DUEFRTEhhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9tY3AtYXFsL01DUEFRTEhhbmRsZXIuanMnO1xuXG4vKiogTm9ybWFsaXplIHVzZXIgaW5wdXQgdG8gTkZDIGZvcm0gdG8gcHJldmVudCBVbmljb2RlIGhvbW9ncmFwaCBhdHRhY2tzICovXG5mdW5jdGlvbiBub3JtYWxpemVJbnB1dChpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlucHV0Lm5vcm1hbGl6ZSgnTkZDJyk7XG59XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi91dGlscy9TbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIuanMnO1xuXG5jb25zdCBFTEVNRU5UX1RZUEVTID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cycsICdtZW1vcmllcycsICdlbnNlbWJsZXMnXSBhcyBjb25zdDtcblxuLyoqIE1heCBmaWxlIHNpemUgZm9yIGVsZW1lbnQgcmVhZHMgKDEgTUIpICovXG5jb25zdCBNQVhfRklMRV9TSVpFX0JZVEVTID0gMV8wNDhfNTc2O1xuXG4vKiogVmFsaWQgZWxlbWVudCBmaWxlIGV4dGVuc2lvbnMgKi9cbmNvbnN0IFZBTElEX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLm1kJywgJy55YW1sJywgJy55bWwnXSk7XG5cbi8qKiBLbm93bi1zYWZlIGZpbGVuYW1lIHBhdHRlcm46IHN0YXJ0cyBhbHBoYW51bWVyaWMsIGJvZHkgYWxsb3dzIGh5cGhlbnMvdW5kZXJzY29yZXMsIHZhbGlkIGV4dGVuc2lvbiAqL1xuY29uc3QgU0FGRV9GSUxFTkFNRV9SRSA9IC9eW2EtekEtWjAtOV1bYS16QS1aMC05Xy1dKlxcLih5YW1sfHltbHxtZCkkLztcblxuLyoqIENoZWNrIGlmIGEgZmlsZW5hbWUgaXMgYSBiYWNrdXAgb3IgY3J1ZnQgZmlsZSAqL1xuZnVuY3Rpb24gaXNCYWNrdXBPckNydWZ0KGZpbGVuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gR3VhcmFudGVlZCBzYWZlIGZpbGVuYW1lcyBza2lwIGJsYWNrbGlzdCBjaGVja3MgZW50aXJlbHlcbiAgaWYgKFNBRkVfRklMRU5BTUVfUkUudGVzdChmaWxlbmFtZSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoJy4nKSkgcmV0dXJuIHRydWU7XG4gIGlmIChmaWxlbmFtZSA9PT0gJ19pbmRleC5qc29uJykgcmV0dXJuIHRydWU7XG4gIGlmIChmaWxlbmFtZS5pbmNsdWRlcygnLmJhY2t1cCcpIHx8IGZpbGVuYW1lLmluY2x1ZGVzKCcuc3RhdGUnKSkgcmV0dXJuIHRydWU7XG4gIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgnLmJhaycpIHx8IGZpbGVuYW1lLmVuZHNXaXRoKCd+JykpIHJldHVybiB0cnVlO1xuICBpZiAoZmlsZW5hbWUuaW5jbHVkZXMoJyBjb3B5JykpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogU2NhbiBhIGRpcmVjdG9yeSBmb3IgdmFsaWQgZWxlbWVudHMsIHJ1bm5pbmcgZWFjaCB0aHJvdWdoIHRoZSBzZWN1cml0eVxuICogdmFsaWRhdGlvbiBwaXBlbGluZS4gUmV0dXJucyBtZXRhZGF0YSBvYmplY3RzIHJlYWR5IGZvciBBUEkgcmVzcG9uc2VzLlxuICovXG5hc3luYyBmdW5jdGlvbiBzY2FuRWxlbWVudERpcmVjdG9yeSh0eXBlRGlyOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgbG9nUHJlZml4OiBzdHJpbmcpOiBQcm9taXNlPHVua25vd25bXT4ge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIodHlwZURpcik7XG4gIGNvbnN0IGVsZW1lbnRzOiB1bmtub3duW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBpZiAoaXNCYWNrdXBPckNydWZ0KGZpbGUpKSBjb250aW51ZTtcbiAgICBjb25zdCBleHQgPSBleHRuYW1lKGZpbGUpO1xuICAgIGlmICghVkFMSURfRVhURU5TSU9OUy5oYXMoZXh0KSkgY29udGludWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHR5cGVEaXIsIGZpbGUpO1xuICAgICAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KGZpbGVQYXRoKTtcbiAgICAgIGlmICghZmlsZVN0YXQuaXNGaWxlKCkgfHwgZmlsZVN0YXQuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfQllURVMpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZSwgY29udGVudCwgdHlwZSk7XG5cbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC52YWxpZCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYCR7bG9nUHJlZml4fSBTa2lwcGluZyByZWplY3RlZCBmaWxlICR7ZmlsZX06ICR7dmFsaWRhdGlvblJlc3VsdC5yZWplY3Rpb24/LnJlYXNvbn1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgbWV0YWRhdGEgfSA9IHZhbGlkYXRpb25SZXN1bHQ7XG4gICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSB8fCBmaWxlLnJlcGxhY2UoZXh0LCAnJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgdHlwZTogdHlwZS5zbGljZSgwLCAtMSksXG4gICAgICAgIHZlcnNpb246IG1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMC4wJyxcbiAgICAgICAgYXV0aG9yOiBtZXRhZGF0YS5hdXRob3IgfHwgJycsXG4gICAgICAgIGNhdGVnb3J5OiBtZXRhZGF0YS5jYXRlZ29yeSB8fCAnJyxcbiAgICAgICAgdGFnczogbWV0YWRhdGEudGFncyB8fCAnJyxcbiAgICAgICAgY3JlYXRlZDogbWV0YWRhdGEuY3JlYXRlZCB8fCAnJyxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgJHtsb2dQcmVmaXh9IEZhaWxlZCB0byBwYXJzZSAke2ZpbGV9OmAsIGVycik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG4vKiogTm9ybWFsaXplIHBsdXJhbCBlbGVtZW50IHR5cGUgdG8gc2luZ3VsYXIgZm9ybSAqL1xuY29uc3QgUExVUkFMX1RPX1NJTkdVTEFSOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBwZXJzb25hczogJ3BlcnNvbmEnLCBza2lsbHM6ICdza2lsbCcsIHRlbXBsYXRlczogJ3RlbXBsYXRlJyxcbiAgYWdlbnRzOiAnYWdlbnQnLCBtZW1vcmllczogJ21lbW9yeScsIGVuc2VtYmxlczogJ2Vuc2VtYmxlJyxcbn07XG5mdW5jdGlvbiB0b1Npbmd1bGFyVHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gUExVUkFMX1RPX1NJTkdVTEFSW3R5cGVdIHx8ICh0eXBlLmVuZHNXaXRoKCdzJykgPyB0eXBlLnNsaWNlKDAsIC0xKSA6IHR5cGUpO1xufVxuXG4vKiogQnVpbGQgYSBzdHJ1Y3R1cmVkIHZhbGlkYXRpb24gcmVzcG9uc2UgZm9yIGVsZW1lbnQgZGV0YWlsIHJvdXRlcyAqL1xuZnVuY3Rpb24gYnVpbGRWYWxpZGF0aW9uUmVzcG9uc2UodmFsaWRhdGlvbjogUGlwZWxpbmVSZXN1bHQsIGNvbnRlbnQ6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGE6IHZhbGlkYXRpb24ubWV0YWRhdGEsXG4gICAgYm9keTogdmFsaWRhdGlvbi5ib2R5LFxuICAgIHJhdzogY29udGVudCxcbiAgICB0eXBlOiB0b1Npbmd1bGFyVHlwZSh0eXBlKSxcbiAgICB2YWxpZGF0aW9uOiB7XG4gICAgICBzdGF0dXM6IHZhbGlkYXRpb24udmFsaWQgPyAncGFzcycgOiAnd2FybicsXG4gICAgICAuLi4odmFsaWRhdGlvbi5yZWplY3Rpb24gJiYge1xuICAgICAgICByZWFzb246IHZhbGlkYXRpb24ucmVqZWN0aW9uLnJlYXNvbixcbiAgICAgICAgc2V2ZXJpdHk6IHZhbGlkYXRpb24ucmVqZWN0aW9uLnNldmVyaXR5LFxuICAgICAgICBwYXR0ZXJuczogdmFsaWRhdGlvbi5yZWplY3Rpb24ucGF0dGVybnMsXG4gICAgICB9KSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBmaWxlIHBhdGggZm9yIGFuIGVsZW1lbnQsIGhhbmRsaW5nIG1lbW9yeSBkYXRlLXBhdGhzXG4gKiBhbmQgbmFtZS13aXRoLW9yLXdpdGhvdXQtZXh0ZW5zaW9uIG1hdGNoaW5nLlxuICogUmV0dXJucyB0aGUgcmVzb2x2ZWQgcGF0aCBvciBudWxsIHdpdGggYW4gZXJyb3IgdG8gc2VuZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUVsZW1lbnRGaWxlUGF0aChcbiAgcG9ydGZvbGlvRGlyOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPHsgZmlsZVBhdGg6IHN0cmluZyB9IHwgeyBlcnJvcjogc3RyaW5nOyBzdGF0dXM6IG51bWJlciB9PiB7XG4gIGlmICh0eXBlID09PSAnbWVtb3JpZXMnICYmIG5hbWUuaW5jbHVkZXMoJy8nKSkge1xuICAgIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdCgnLycpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIgfHwgIS9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHBhcnRzWzBdKSB8fCBpc0JhY2t1cE9yQ3J1ZnQocGFydHNbMV0pKSB7XG4gICAgICByZXR1cm4geyBlcnJvcjogJ0ludmFsaWQgbWVtb3J5IHBhdGgnLCBzdGF0dXM6IDQwMCB9O1xuICAgIH1cbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCB0eXBlLCBuYW1lKTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlKGZpbGVQYXRoKTtcbiAgICBpZiAoIXJlc29sdmVkUGF0aC5zdGFydHNXaXRoKHJlc29sdmUocG9ydGZvbGlvRGlyKSkpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiAnUGF0aCB0cmF2ZXJzYWwgZGV0ZWN0ZWQnLCBzdGF0dXM6IDQwMCB9O1xuICAgIH1cbiAgICByZXR1cm4geyBmaWxlUGF0aCB9O1xuICB9XG5cbiAgY29uc3QgdHlwZURpciA9IGpvaW4ocG9ydGZvbGlvRGlyLCB0eXBlKTtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHR5cGVEaXIpO1xuICBjb25zdCBtYXRjaCA9IGZpbGVzLmZpbmQoZiA9PiB7XG4gICAgY29uc3QgYmFzZSA9IGYucmVwbGFjZShleHRuYW1lKGYpLCAnJyk7XG4gICAgcmV0dXJuIGJhc2UgPT09IG5hbWUgfHwgZiA9PT0gbmFtZTtcbiAgfSk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB7IGVycm9yOiBgRWxlbWVudCBub3QgZm91bmQ6ICR7dHlwZX0vJHtuYW1lfWAsIHN0YXR1czogNDA0IH07XG4gIH1cblxuICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCB0eXBlLCBtYXRjaCk7XG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoZmlsZVBhdGgpO1xuICBpZiAoIXJlc29sdmVkUGF0aC5zdGFydHNXaXRoKHJlc29sdmUocG9ydGZvbGlvRGlyKSkpIHtcbiAgICByZXR1cm4geyBlcnJvcjogJ1BhdGggdHJhdmVyc2FsIGRldGVjdGVkJywgc3RhdHVzOiA0MDAgfTtcbiAgfVxuICByZXR1cm4geyBmaWxlUGF0aCB9O1xufVxuXG4vKipcbiAqIExvYWQgbWVtb3JpZXMgZnJvbSB0aGUgX2luZGV4Lmpzb24gZmlsZS5cbiAqIE1lbW9yaWVzIHVzZSBkYXRlLXBhcnRpdGlvbmVkIHN0b3JhZ2Ugd2l0aCBhbiBpbmRleCwgdW5saWtlIG90aGVyXG4gKiBlbGVtZW50IHR5cGVzIHdoaWNoIGFyZSBmbGF0IGZpbGVzIGluIGEgZGlyZWN0b3J5LlxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd25bXT4ge1xuICBjb25zdCBpbmRleFBhdGggPSBqb2luKHBvcnRmb2xpb0RpciwgJ21lbW9yaWVzJywgJ19pbmRleC5qc29uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUoaW5kZXhQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBpbmRleCA9IEpTT04ucGFyc2UocmF3KSBhcyB7XG4gICAgICBlbnRyaWVzPzogUmVjb3JkPHN0cmluZywgeyBuYW1lPzogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZzsgdGFncz86IHN0cmluZ1tdOyBjcmVhdGVkPzogc3RyaW5nOyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0+O1xuICAgICAgZW50cnlDb3VudD86IG51bWJlcjtcbiAgICB9O1xuXG4gICAgY29uc3QgZW50cmllcyA9IGluZGV4LmVudHJpZXMgfHwge307XG4gICAgY29uc3QgZWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSB7XG4gICAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeSAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgcGF0aFBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSBwYXRoUGFydHMucG9wKCkgfHwgcGF0aDtcbiAgICAgIC8vIEV4dHJhY3QgZGF0ZSBmcm9tIGRpcmVjdG9yeSBwYXRoIChlLmcuLCBcIjIwMjUtMDktMTkvY29kZS1wYXR0ZXJucy55YW1sXCIgLT4gXCIyMDI1LTA5LTE5XCIpXG4gICAgICBjb25zdCBkYXRlRnJvbVBhdGggPSBwYXRoUGFydHMubGVuZ3RoID4gMCAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdChwYXRoUGFydHNbMF0pID8gcGF0aFBhcnRzWzBdIDogJyc7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gZmlsZW5hbWUgaWYgaW5kZXggaGFzIG5vIG5hbWUgb3Igc3RvcmVkIFwidW5uYW1lZFwiICh1cHN0cmVhbSBpbmRleGVyIGJ1ZylcbiAgICAgIGNvbnN0IGluZGV4TmFtZSA9IGVudHJ5Lm5hbWUgJiYgZW50cnkubmFtZSAhPT0gJ3VubmFtZWQnID8gZW50cnkubmFtZSA6IG51bGw7XG4gICAgICBjb25zdCBuYW1lID0gaW5kZXhOYW1lIHx8IGZpbGVuYW1lLnJlcGxhY2UoL1xcLih5YW1sfHltbHxtZCkkLywgJycpO1xuXG4gICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGVudHJ5LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICB0eXBlOiAnbWVtb3J5JyxcbiAgICAgICAgdmVyc2lvbjogZW50cnkudmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgICBhdXRob3I6IGVudHJ5LmF1dGhvciB8fCAnJyxcbiAgICAgICAgY2F0ZWdvcnk6IGVudHJ5LmNhdGVnb3J5IHx8IGVudHJ5Lm1lbW9yeVR5cGUgfHwgJycsXG4gICAgICAgIHRhZ3M6IGVudHJ5LnRhZ3MgfHwgW10sXG4gICAgICAgIGNyZWF0ZWQ6IGVudHJ5LmNyZWF0ZWQgfHwgZGF0ZUZyb21QYXRoLFxuICAgICAgICBmaWxlbmFtZTogcGF0aCwgLy8gZGF0ZS9maWxlbmFtZSBwYXRoIGZvciBjb250ZW50IGxvYWRpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50cztcbiAgfSBjYXRjaCB7XG4gICAgLy8gRmFsbCBiYWNrIHRvIGVtcHR5IGlmIG5vIGluZGV4XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKiBSYXRlIGxpbWl0ZXIgZm9yIC9hcGkvaW5zdGFsbDogbWF4IDEwIGluc3RhbGxzIHBlciA2MCBzZWNvbmRzICovXG5jb25zdCBpbnN0YWxsUmF0ZUxpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKDEwLCA2MF8wMDApO1xuXG4vKiogU2FuaXRpemUgdGV4dCBjb250ZW50IHRvIHByZXZlbnQgWFNTIGluIHJlbmRlcmVkIEhUTUwgKi9cbmZ1bmN0aW9uIHNhbml0aXplRm9ySHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgLnJlcGxhY2UoLycvZywgJyYjMzk7Jyk7XG59XG5cbi8qKiBQYXJzZSBZQU1MIGZyb250IG1hdHRlciBmcm9tIGEgbWFya2Rvd24gZmlsZSAqL1xuZnVuY3Rpb24gcGFyc2VGcm9udE1hdHRlcihjb250ZW50OiBzdHJpbmcpOiB7IG1ldGFkYXRhOiBFbGVtZW50RGlzcGxheU1ldGFkYXRhOyBib2R5OiBzdHJpbmcgfSB7XG4gIGNvbnN0IG1hdGNoID0gY29udGVudC5tYXRjaCgvXi0tLVxccj9cXG4oW1xcc1xcU10qPylcXHI/XFxuLS0tXFxyP1xcbj8oW1xcc1xcU10qKSQvKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB7IG1ldGFkYXRhOiB7fSwgYm9keTogY29udGVudCB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlUmF3WWFtbChtYXRjaFsxXSk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsKSA/IHBhcnNlZCBhcyBFbGVtZW50RGlzcGxheU1ldGFkYXRhIDoge307XG4gICAgcmV0dXJuIHsgbWV0YWRhdGEsIGJvZHk6IG1hdGNoWzJdIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IG1ldGFkYXRhOiB7fSwgYm9keTogbWF0Y2hbMl0gfHwgY29udGVudCB9O1xuICB9XG59XG5cbi8qKiBQYXJzZSBhIFlBTUwtb25seSBmaWxlIChtZW1vcmllcykgKi9cbmZ1bmN0aW9uIHBhcnNlWWFtbEZpbGUoY29udGVudDogc3RyaW5nKTogeyBtZXRhZGF0YTogRWxlbWVudERpc3BsYXlNZXRhZGF0YTsgYm9keTogc3RyaW5nIH0ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKGNvbnRlbnQpO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gKHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnICYmIHBhcnNlZCAhPT0gbnVsbCkgPyBwYXJzZWQgYXMgRWxlbWVudERpc3BsYXlNZXRhZGF0YSA6IHt9O1xuICAgIHJldHVybiB7IG1ldGFkYXRhLCBib2R5OiAnJyB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBtZXRhZGF0YToge30sIGJvZHk6IGNvbnRlbnQgfTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIHBvcnRmb2xpbyByb3V0ZXMgc2hhcmVkIGJldHdlZW4gc2ltcGxlIGFuZCBnYXRld2F5IG1vZGVzLlxuICogVGhlIHN0cnVjdHVyZWREZXRhaWwgb3B0aW9uIGNvbnRyb2xzIHdoZXRoZXIgZGV0YWlsIHJvdXRlcyByZXR1cm5cbiAqIHN0cnVjdHVyZWQgSlNPTiAoZ2F0ZXdheSkgb3IgcGxhaW4gdGV4dCAoc2ltcGxlL2xlZ2FjeSkuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyUG9ydGZvbGlvUm91dGVzKFxuICByb3V0ZXI6IFJvdXRlcixcbiAgcG9ydGZvbGlvRGlyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHsgc3RydWN0dXJlZERldGFpbDogYm9vbGVhbjsgbG9nUHJlZml4OiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCB7IHN0cnVjdHVyZWREZXRhaWwsIGxvZ1ByZWZpeCB9ID0gb3B0aW9ucztcblxuICByb3V0ZXIuZ2V0KCcvZWxlbWVudHMnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFnZVBhcmFtID0gcmVxLnF1ZXJ5LnBhZ2UgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcGFnZVNpemVQYXJhbSA9IHJlcS5xdWVyeS5wYWdlU2l6ZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB3YW50UGFnaW5hdGlvbiA9IHBhZ2VQYXJhbSAhPT0gdW5kZWZpbmVkICYmIHBhZ2VTaXplUGFyYW0gIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHBhZ2UgPSBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQocGFnZVBhcmFtIHx8ICcxJywgMTApIHx8IDEpO1xuICAgICAgY29uc3QgcGFnZVNpemUgPSBNYXRoLm1heCgxLCBNYXRoLm1pbigyMDAsIE51bWJlci5wYXJzZUludChwYWdlU2l6ZVBhcmFtIHx8ICc1MCcsIDEwKSB8fCA1MCkpO1xuXG4gICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd25bXT4gPSB7fTtcbiAgICAgIGxldCB0b3RhbENvdW50ID0gMDtcblxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIEVMRU1FTlRfVFlQRVMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ21lbW9yaWVzJykge1xuICAgICAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgICAgIHJlc3VsdFt0eXBlXSA9IG1lbUVsZW1lbnRzO1xuICAgICAgICAgICAgdG90YWxDb3VudCArPSBtZW1FbGVtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0eXBlRGlyID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUpO1xuICAgICAgICAgIGNvbnN0IGRpclN0YXQgPSBhd2FpdCBzdGF0KHR5cGVEaXIpO1xuICAgICAgICAgIGlmICghZGlyU3RhdC5pc0RpcmVjdG9yeSgpKSBjb250aW51ZTtcblxuICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgc2NhbkVsZW1lbnREaXJlY3RvcnkodHlwZURpciwgdHlwZSwgbG9nUHJlZml4KTtcbiAgICAgICAgICByZXN1bHRbdHlwZV0gPSBlbGVtZW50cztcbiAgICAgICAgICB0b3RhbENvdW50ICs9IGVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmVzdWx0W3R5cGVdID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHdhbnRQYWdpbmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFsbEVsZW1lbnRzOiB1bmtub3duW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIEVMRU1FTlRfVFlQRVMpIHtcbiAgICAgICAgICBhbGxFbGVtZW50cy5wdXNoKC4uLihyZXN1bHRbdHlwZV0gfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydCA9IChwYWdlIC0gMSkgKiBwYWdlU2l6ZTtcbiAgICAgICAgY29uc3QgcGFnZWQgPSBhbGxFbGVtZW50cy5zbGljZShzdGFydCwgc3RhcnQgKyBwYWdlU2l6ZSk7XG4gICAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwoYWxsRWxlbWVudHMubGVuZ3RoIC8gcGFnZVNpemUpO1xuICAgICAgICByZXMuanNvbih7IGVsZW1lbnRzOiBwYWdlZCwgdG90YWxDb3VudDogYWxsRWxlbWVudHMubGVuZ3RoLCBwYWdlLCBwYWdlU2l6ZSwgdG90YWxQYWdlcyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5qc29uKHsgZWxlbWVudHM6IHJlc3VsdCwgdG90YWxDb3VudCB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgJHtsb2dQcmVmaXh9IEZhaWxlZCB0byBsaXN0IGVsZW1lbnRzOmAsIGVycik7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAnRmFpbGVkIHRvIGxpc3QgZWxlbWVudHMnIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnL2VsZW1lbnRzLzp0eXBlJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IG5vcm1hbGl6ZUlucHV0KHJlcS5wYXJhbXMudHlwZSk7XG4gICAgaWYgKCFFTEVNRU5UX1RZUEVTLmluY2x1ZGVzKHR5cGUgYXMgdHlwZW9mIEVMRU1FTlRfVFlQRVNbbnVtYmVyXSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IGBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJHt0eXBlfWAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlID09PSAnbWVtb3JpZXMnKSB7XG4gICAgICAgIGNvbnN0IG1lbUVsZW1lbnRzID0gYXdhaXQgbG9hZE1lbW9yaWVzRnJvbUluZGV4KHBvcnRmb2xpb0Rpcik7XG4gICAgICAgIHJlcy5qc29uKHsgdHlwZSwgZWxlbWVudHM6IG1lbUVsZW1lbnRzLCBjb3VudDogbWVtRWxlbWVudHMubGVuZ3RoIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgc2NhbkVsZW1lbnREaXJlY3Rvcnkoam9pbihwb3J0Zm9saW9EaXIsIHR5cGUpLCB0eXBlLCBsb2dQcmVmaXgpO1xuICAgICAgcmVzLmpzb24oeyB0eXBlLCBlbGVtZW50cywgY291bnQ6IGVsZW1lbnRzLmxlbmd0aCB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBGYWlsZWQgdG8gbGlzdCAke3R5cGV9YCB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5nZXQoJy9lbGVtZW50cy9tZW1vcmllcy86ZGF0ZS86ZmlsZScsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIGNvbnN0IHsgZGF0ZSwgZmlsZSB9ID0gcmVxLnBhcmFtcztcblxuICAgIGlmICghL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QoZGF0ZSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGRhdGUgZm9ybWF0JyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZpbGUuaW5jbHVkZXMoJy4uJykgfHwgZmlsZS5pbmNsdWRlcygnLycpIHx8IGZpbGUuaW5jbHVkZXMoJ1xcXFwnKSB8fCBpc0JhY2t1cE9yQ3J1ZnQoZmlsZSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGZpbGVuYW1lJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHBvcnRmb2xpb0RpciwgJ21lbW9yaWVzJywgZGF0ZSwgZmlsZSk7XG4gICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlKGZpbGVQYXRoKTtcbiAgICAgIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnUGF0aCB0cmF2ZXJzYWwgZGV0ZWN0ZWQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVTdGF0ID0gYXdhaXQgc3RhdChmaWxlUGF0aCk7XG4gICAgICBpZiAoIWZpbGVTdGF0LmlzRmlsZSgpIHx8IGZpbGVTdGF0LnNpemUgPiBNQVhfRklMRV9TSVpFX0JZVEVTKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoZmlsZVN0YXQuaXNGaWxlKCkgPyA0MTMgOiA0MDQpLmpzb24oeyBlcnJvcjogZmlsZVN0YXQuaXNGaWxlKCkgPyAnRmlsZSB0b28gbGFyZ2UnIDogJ05vdCBmb3VuZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgIGlmIChzdHJ1Y3R1cmVkRGV0YWlsKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUVsZW1lbnRDb250ZW50KGZpbGUsIGNvbnRlbnQsICdtZW1vcmllcycpO1xuICAgICAgICByZXMuanNvbihidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uLCBjb250ZW50LCAnbWVtb3JpZXMnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcpO1xuICAgICAgICByZXMuc2VuZChjb250ZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHsgZXJyb3I6IGBNZW1vcnkgbm90IGZvdW5kOiAke2RhdGV9LyR7ZmlsZX1gIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnL2VsZW1lbnRzLzp0eXBlLzpuYW1lJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgeyB0eXBlLCBuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGlmICghRUxFTUVOVF9UWVBFUy5pbmNsdWRlcyh0eXBlIGFzIHR5cGVvZiBFTEVNRU5UX1RZUEVTW251bWJlcl0pKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiBgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7dHlwZX1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuYW1lLmluY2x1ZGVzKCcuLicpIHx8IG5hbWUuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBuYW1lJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAhPT0gJ21lbW9yaWVzJyAmJiBuYW1lLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRGaWxlUGF0aChwb3J0Zm9saW9EaXIsIHR5cGUsIG5hbWUpO1xuICAgICAgaWYgKCdlcnJvcicgaW4gcmVzb2x2ZWQpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXNvbHZlZC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzb2x2ZWQuZXJyb3IgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KHJlc29sdmVkLmZpbGVQYXRoKTtcbiAgICAgIGlmIChmaWxlU3RhdC5zaXplID4gTUFYX0ZJTEVfU0laRV9CWVRFUykge1xuICAgICAgICByZXMuc3RhdHVzKDQxMykuanNvbih7IGVycm9yOiBgRmlsZSB0b28gbGFyZ2UgKCR7ZmlsZVN0YXQuc2l6ZX0gYnl0ZXMpLiBNYXggMSBNQi5gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShyZXNvbHZlZC5maWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBpZiAoc3RydWN0dXJlZERldGFpbCkge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHJlc29sdmVkLmZpbGVQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgbmFtZTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZW5hbWUsIGNvbnRlbnQsIHR5cGUpO1xuICAgICAgICByZXMuanNvbihidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uLCBjb250ZW50LCB0eXBlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcpO1xuICAgICAgICByZXMuc2VuZChjb250ZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBGYWlsZWQgdG8gZ2V0IGVsZW1lbnQ6ICR7dHlwZX0vJHtuYW1lfWAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIFJlZ2lzdGVyIGZpbGVzeXN0ZW0tYmFzZWQgc3RhdHMgcm91dGUgKHNoYXJlZCBiZXR3ZWVuIHNpbXBsZSBhbmQgZ2F0ZXdheSkgKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXI6IFJvdXRlciwgcG9ydGZvbGlvRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgcm91dGVyLmdldCgnL3N0YXRzJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgICAgbGV0IHRvdGFsID0gMDtcblxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIEVMRU1FTlRfVFlQRVMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ21lbW9yaWVzJykge1xuICAgICAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgICAgIHN0YXRzW3R5cGVdID0gbWVtRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgdG90YWwgKz0gbWVtRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgdHlwZSk7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHR5cGVEaXIpO1xuICAgICAgICAgIGNvbnN0IGNvdW50ID0gZmlsZXMuZmlsdGVyKGYgPT4gIWlzQmFja3VwT3JDcnVmdChmKSAmJiBWQUxJRF9FWFRFTlNJT05TLmhhcyhleHRuYW1lKGYpKSkubGVuZ3RoO1xuICAgICAgICAgIHN0YXRzW3R5cGVdID0gY291bnQ7XG4gICAgICAgICAgdG90YWwgKz0gY291bnQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHN0YXRzW3R5cGVdID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXMuanNvbih7IHN0YXRzLCB0b3RhbCB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gZ2V0IHN0YXRzJyB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiogUmVnaXN0ZXIgY29sbGVjdGlvbiBpbmRleCBwcm94eSByb3V0ZSAoc2hhcmVkIGJldHdlZW4gc2ltcGxlIGFuZCBnYXRld2F5KSAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJDb2xsZWN0aW9uUm91dGUocm91dGVyOiBSb3V0ZXIsIHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogdm9pZCB7XG4gIHJvdXRlci5nZXQoJy9jb2xsZWN0aW9uJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHJlcy5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vbWFpbi9wdWJsaWMvY29sbGVjdGlvbi1pbmRleC5qc29uJyk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgcmVzLnNlbmQoZGF0YSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHsgLyogR2l0SHViIHVucmVhY2hhYmxlIOKAlCBmYWxsIGJhY2sgdG8gbG9jYWwgKi8gfVxuXG4gICAgY29uc3QgbG9jYWxQYXRocyA9IFtcbiAgICAgIGpvaW4ocG9ydGZvbGlvRGlyLCAnLi4nLCAnLi4nLCAnLi4nLCAnY29sbGVjdGlvbicsICdwdWJsaWMnLCAnY29sbGVjdGlvbi1pbmRleC5qc29uJyksXG4gICAgICBqb2luKHBvcnRmb2xpb0RpciwgJy4uJywgJ2NvbGxlY3Rpb24nLCAncHVibGljJywgJ2NvbGxlY3Rpb24taW5kZXguanNvbicpLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsUGF0aCBvZiBsb2NhbFBhdGhzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUobG9jYWxQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgcmVzLnNlbmQoY29udGVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggeyAvKiB0cnkgbmV4dCAqLyB9XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ0NvbGxlY3Rpb24gaW5kZXggbm90IGF2YWlsYWJsZScgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBpUm91dGVzKHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogUm91dGVyIHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG5cbiAgcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMocm91dGVyLCBwb3J0Zm9saW9EaXIsIHsgc3RydWN0dXJlZERldGFpbDogZmFsc2UsIGxvZ1ByZWZpeDogJ1tXZWJVSV0nIH0pO1xuXG4gIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG4gIHJlZ2lzdGVyQ29sbGVjdGlvblJvdXRlKHJvdXRlciwgcG9ydGZvbGlvRGlyKTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luc3RhbGxcbiAgICogSW5zdGFsbCBhIGNvbGxlY3Rpb24gZWxlbWVudCBpbnRvIHRoZSBsb2NhbCBwb3J0Zm9saW8uXG4gICAqIFJvdXRlcyB0aHJvdWdoIERvbGxob3VzZU1DUCdzIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IHBpcGVsaW5lXG4gICAqIGZvciBwcm9wZXIgdmFsaWRhdGlvbiwgZ2F0ZWtlZXBlciBjaGVja3MsIGFuZCBlbGVtZW50IG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBNQ1Agc2VydmVyJ3MgQ29sbGVjdGlvbkhhbmRsZXIgdG8gYmUgYXZhaWxhYmxlLlxuICAgKiBGYWxscyBiYWNrIHRvIGRpcmVjdCBmaWxlIHdyaXRlIGlmIG5vdCAoc3RhbmRhbG9uZSB3ZWIgbW9kZSkuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2luc3RhbGwnLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgaWYgKCFpbnN0YWxsUmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnVG9vIG1hbnkgaW5zdGFsbCByZXF1ZXN0cy4gTWF4IDEwIHBlciBtaW51dGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhdGg6IGVsZW1lbnRQYXRoLCBuYW1lLCB0eXBlIH0gPSByZXEuYm9keSBhcyB7IHBhdGg/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmcgfTtcblxuICAgIGlmICghZWxlbWVudFBhdGggfHwgIXR5cGUgfHwgIW5hbWUpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdNaXNzaW5nIHJlcXVpcmVkIGZpZWxkczogcGF0aCwgbmFtZSwgdHlwZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdHlwZVxuICAgIGNvbnN0IHBsdXJhbFR5cGUgPSB0eXBlLmVuZHNXaXRoKCdzJykgPyB0eXBlIDogYCR7dHlwZX1zYDtcbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXMocGx1cmFsVHlwZSBhcyB0eXBlb2YgRUxFTUVOVF9UWVBFU1tudW1iZXJdKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEludmFsaWQgZWxlbWVudCB0eXBlOiAke3R5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IHBhdGggdHJhdmVyc2FsXG4gICAgaWYgKGVsZW1lbnRQYXRoLmluY2x1ZGVzKCcuLicpIHx8IG5hbWUuaW5jbHVkZXMoJy4uJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBhdGggb3IgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWxlbWVudFBhdGggY29udGFpbnMgb25seSBzYWZlIGNoYXJhY3RlcnMgKGFscGhhbnVtZXJpYywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMsIHNsYXNoZXMpXG4gICAgaWYgKCEvXlthLXpBLVowLTkvXy4tXSskLy50ZXN0KGVsZW1lbnRQYXRoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBwYXRoIGNoYXJhY3RlcnMnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBGZXRjaCBjb250ZW50IGZyb20gR2l0SHViXG4gICAgICBjb25zdCBnaFVybCA9IGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vbWFpbi8ke2VsZW1lbnRQYXRofWA7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBjb25zdHJ1Y3RlZCBVUkwgc3RheXMgd2l0aGluIGV4cGVjdGVkIGRvbWFpbiBhbmQgcGF0aFxuICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChnaFVybCk7XG4gICAgICBpZiAocGFyc2VkVXJsLmhvc3RuYW1lICE9PSAncmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbScgfHwgIXBhcnNlZFVybC5wYXRobmFtZS5zdGFydHNXaXRoKCcvRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vJykpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgY29sbGVjdGlvbiBwYXRoJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGdoVXJsKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmVzLnN0YXR1cyg1MDIpLmpzb24oeyBlcnJvcjogYEZhaWxlZCB0byBmZXRjaCBmcm9tIGNvbGxlY3Rpb246IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAgICAgLy8gVmFsaWRhdGUgY29udGVudCB0aHJvdWdoIHRoZSBzZWN1cml0eSBwaXBlbGluZSBiZWZvcmUgd3JpdGluZ1xuICAgICAgY29uc3QgZXh0ID0gZXh0bmFtZShlbGVtZW50UGF0aCk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZXh0ID09PSAnLnlhbWwnIHx8IGV4dCA9PT0gJy55bWwnKSB7XG4gICAgICAgICAgLy8gVmFsaWRhdGUgWUFNTCBjb250ZW50IGZvciBib21icywgY2lyY3VsYXIgcmVmZXJlbmNlcywgbWFsaWNpb3VzIHBhdHRlcm5zXG4gICAgICAgICAgaWYgKCFDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlWWFtbENvbnRlbnQoY29udGVudCkpIHtcbiAgICAgICAgICAgIHJlcy5zdGF0dXMoNDIyKS5qc29uKHsgZXJyb3I6ICdDb250ZW50IGZhaWxlZCBZQU1MIHZhbGlkYXRpb24g4oCUIHBvdGVudGlhbGx5IG1hbGljaW91cyBwYXR0ZXJucyBkZXRlY3RlZCcgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFZhbGlkYXRlIG1hcmtkb3duK2Zyb250bWF0dGVyIGNvbnRlbnRcbiAgICAgICAgICBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChwYXJzZUVycikge1xuICAgICAgICByZXMuc3RhdHVzKDQyMikuanNvbih7IGVycm9yOiBgQ29udGVudCBmYWlsZWQgcGFyc2UgdmFsaWRhdGlvbjogJHsocGFyc2VFcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBjb250ZW50IGJvZHkgZm9yIGluamVjdGlvbiBwYXR0ZXJuc1xuICAgICAgY29uc3Qgc2luZ3VsYXJUeXBlID0gcGx1cmFsVHlwZS5zbGljZSgwLCAtMSk7XG4gICAgICBjb25zdCBjb250ZXh0VHlwZXMgPSBbJ3BlcnNvbmEnLCAnc2tpbGwnLCAndGVtcGxhdGUnLCAnYWdlbnQnLCAnbWVtb3J5J10gYXMgY29uc3Q7XG4gICAgICB0eXBlIENvbnRlbnRDb250ZXh0ID0gdHlwZW9mIGNvbnRleHRUeXBlc1tudW1iZXJdO1xuICAgICAgY29uc3QgY29udGVudENvbnRleHQgPSBjb250ZXh0VHlwZXMuaW5jbHVkZXMoc2luZ3VsYXJUeXBlIGFzIENvbnRlbnRDb250ZXh0KSA/IHNpbmd1bGFyVHlwZSBhcyBDb250ZW50Q29udGV4dCA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUoY29udGVudCwge1xuICAgICAgICBjb250ZW50Q29udGV4dCxcbiAgICAgIH0pO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1tXZWJVSV0gSW5zdGFsbCBibG9ja2VkIOKAlCBjb250ZW50IHZhbGlkYXRpb24gZmFpbGVkJywge1xuICAgICAgICAgIGVsZW1lbnQ6IGAke3BsdXJhbFR5cGV9LyR7bmFtZX1gLFxuICAgICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uUmVzdWx0LmRldGVjdGVkUGF0dGVybnMsXG4gICAgICAgICAgc2V2ZXJpdHk6IHZhbGlkYXRpb25SZXN1bHQuc2V2ZXJpdHksXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuc3RhdHVzKDQyMikuanNvbih7XG4gICAgICAgICAgZXJyb3I6ICdDb250ZW50IGZhaWxlZCBzZWN1cml0eSB2YWxpZGF0aW9uJyxcbiAgICAgICAgICBwYXR0ZXJuczogdmFsaWRhdGlvblJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgICAgIHNldmVyaXR5OiB2YWxpZGF0aW9uUmVzdWx0LnNldmVyaXR5LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgZmlsZW5hbWVcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gZWxlbWVudFBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCBgJHtuYW1lfS5tZGA7XG5cbiAgICAgIC8vIEVuc3VyZSB0eXBlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgcGx1cmFsVHlwZSk7XG4gICAgICBjb25zdCB7IG1rZGlyIH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKTtcbiAgICAgIGF3YWl0IG1rZGlyKHR5cGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAvLyBXcml0ZSB0byBwb3J0Zm9saW9cbiAgICAgIGNvbnN0IGRlc3RQYXRoID0gam9pbih0eXBlRGlyLCBmaWxlbmFtZSk7XG5cbiAgICAgIC8vIFZlcmlmeSByZXNvbHZlZCBkZXN0aW5hdGlvbiBwYXRoIHN0YXlzIHdpdGhpbiBwb3J0Zm9saW8gZGlyZWN0b3J5IChkZWZlbnNlIGluIGRlcHRoKVxuICAgICAgY29uc3QgcmVzb2x2ZWREZXN0ID0gcmVzb2x2ZShkZXN0UGF0aCk7XG4gICAgICBpZiAoIXJlc29sdmVkRGVzdC5zdGFydHNXaXRoKHJlc29sdmUocG9ydGZvbGlvRGlyKSkpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ1BhdGggdHJhdmVyc2FsIGRldGVjdGVkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdGF0KGRlc3RQYXRoKTtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDkpLmpzb24oeyBlcnJvcjogYEVsZW1lbnQgYWxyZWFkeSBleGlzdHM6ICR7cGx1cmFsVHlwZX0vJHtmaWxlbmFtZX0uIERlbGV0ZSBpdCBmaXJzdCBvciByZW5hbWUuYCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCB7IC8qIGRvZXNuJ3QgZXhpc3Qg4oCUIGdvb2QgKi8gfVxuXG4gICAgICBjb25zdCB7IHdyaXRlRmlsZTogd3JpdGVGaWxlRnMgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpmcy9wcm9taXNlcycpO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlRnMoZGVzdFBhdGgsIGNvbnRlbnQsICd1dGYtOCcpO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBJbnN0YWxsZWQgY29sbGVjdGlvbiBlbGVtZW50OiAke3BsdXJhbFR5cGV9LyR7ZmlsZW5hbWV9YCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6IGBJbnN0YWxsZWQgJHtuYW1lfSB0byBwb3J0Zm9saW9gLCBwYXRoOiBgJHtwbHVyYWxUeXBlfS8ke2ZpbGVuYW1lfWAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tXZWJVSV0gSW5zdGFsbCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBJbnN0YWxsIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFdlYiBNQ1AtQVFMIEdhdGV3YXkgUm91dGVzIChJc3N1ZSAjNzk2KVxuLy9cbi8vIFRoZXNlIHJvdXRlcyB0cmFuc2xhdGUgSFRUUCByZXF1ZXN0cyBpbnRvIE1DUEFRTEhhbmRsZXIgY2FsbHMsIHJvdXRpbmcgYWxsXG4vLyByZWFkcy93cml0ZXMgdGhyb3VnaCB0aGUgZXhpc3RpbmcgZWxlbWVudCBtYW5hZ2VycywgdmFsaWRhdGlvbiwgYW5kIGdhdGVrZWVwZXIuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBFeHRyYWN0IHNpbmdsZSBvcGVyYXRpb24gcmVzdWx0IGZyb20gTUNQQVFMSGFuZGxlciByZXNwb25zZS5cbiAqIFdlYiByb3V0ZXMgbmV2ZXIgc2VuZCBiYXRjaCByZXF1ZXN0cywgc28gY2FzdCBpcyBzYWZlLlxuICovXG5pbnRlcmZhY2UgU2luZ2xlT3BSZXN1bHQgeyBzdWNjZXNzOiBib29sZWFuOyBkYXRhPzogdW5rbm93bjsgZXJyb3I/OiBzdHJpbmcgfVxuZnVuY3Rpb24gYXNTaW5nbGVSZXN1bHQocjogdW5rbm93bik6IFNpbmdsZU9wUmVzdWx0IHtcbiAgaWYgKHR5cGVvZiByID09PSAnb2JqZWN0JyAmJiByICE9PSBudWxsICYmICdzdWNjZXNzJyBpbiByKSB7XG4gICAgcmV0dXJuIHIgYXMgU2luZ2xlT3BSZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnSW52YWxpZCBvcGVyYXRpb24gcmVzdWx0IGZvcm1hdCcgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgQVBJIHJvdXRlcyB0aGF0IHJvdXRlIHRocm91Z2ggTUNQQVFMSGFuZGxlciAoZ2F0ZXdheSBtb2RlKS5cbiAqIEFsbCBvcGVyYXRpb25zIGdvIHRocm91Z2ggdGhlIE1DUC1BUUwgcGlwZWxpbmU6IHZhbGlkYXRpb24sIGNhY2hlLCBnYXRla2VlcGVyLlxuICpcbiAqIEZhbGxzIGJhY2sgdG8gZGlyZWN0IGZpbGVzeXN0ZW0gZm9yIC9hcGkvY29sbGVjdGlvbiAoZXh0ZXJuYWwgZmV0Y2gsIG5vIE1DUC1BUUwgZXF1aXZhbGVudClcbiAqIGFuZCAvYXBpL3N0YXRzIChsaWdodHdlaWdodCBhZ2dyZWdhdGUsIG5vIG1hdGNoaW5nIG9wZXJhdGlvbikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5QXBpUm91dGVzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIsIHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogUm91dGVyIHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG5cbiAgLy8gU2hhcmVkIHBvcnRmb2xpbyByb3V0ZXMg4oCUIHN0cnVjdHVyZWQgSlNPTiBmb3IgZGV0YWlsIHZpZXdzXG4gIC8vIGNvZGVxbFtqcy9taXNzaW5nLXJhdGUtbGltaXRpbmddIOKAlCBSYXRlLWxpbWl0ZWQgYnkgcm91dGVyLnVzZSgpIG1pZGRsZXdhcmUgaW4gc2VydmVyLnRzXG4gIHJlZ2lzdGVyUG9ydGZvbGlvUm91dGVzKHJvdXRlciwgcG9ydGZvbGlvRGlyLCB7IHN0cnVjdHVyZWREZXRhaWw6IHRydWUsIGxvZ1ByZWZpeDogJ1tXZWJVSS9HYXRld2F5XScgfSk7XG4gIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG4gIHJlZ2lzdGVyQ29sbGVjdGlvblJvdXRlKHJvdXRlciwgcG9ydGZvbGlvRGlyKTtcblxuICAvKipcbiAgICogR0VUIC9hcGkvY29sbGVjdGlvbi9jb250ZW50LypcbiAgICogUHJveGllcyBjb2xsZWN0aW9uIGVsZW1lbnQgY29udGVudCBmcm9tIEdpdEh1YiwgdmFsaWRhdGVzIHRocm91Z2ggdGhlXG4gICAqIHNlY3VyaXR5IHBpcGVsaW5lLCBhbmQgcmV0dXJucyBzdHJ1Y3R1cmVkIEpTT04gKHNhbWUgZm9ybWF0IGFzIHBvcnRmb2xpbyBkZXRhaWwpLlxuICAgKiBjb2RlcWxbanMvbWlzc2luZy1yYXRlLWxpbWl0aW5nXSDigJQgUmF0ZS1saW1pdGVkIGJ5IHJvdXRlci51c2UoKSBtaWRkbGV3YXJlIGFib3ZlLlxuICAgKi9cbiAgcm91dGVyLmdldCgnL2NvbGxlY3Rpb24vY29udGVudC86cHJlZml4Lzp0eXBlLzpuYW1lJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudFBhdGggPSBgJHtyZXEucGFyYW1zLnByZWZpeH0vJHtyZXEucGFyYW1zLnR5cGV9LyR7cmVxLnBhcmFtcy5uYW1lfWA7XG4gICAgaWYgKCFlbGVtZW50UGF0aCB8fCBlbGVtZW50UGF0aC5pbmNsdWRlcygnLi4nKSB8fCBlbGVtZW50UGF0aC5pbmNsdWRlcygnXFxcXCcpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBlbGVtZW50IHBhdGgnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gcmVxLnBhcmFtcy50eXBlO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gcmVxLnBhcmFtcy5uYW1lO1xuXG4gICAgLy8gVmFsaWRhdGUgZWxlbWVudCB0eXBlIGFnYWluc3Qga25vd24gdHlwZXMgdG8gcHJldmVudCBhcmJpdHJhcnkgcGF0aCBjb25zdHJ1Y3Rpb25cbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXMoZWxlbWVudFR5cGUgYXMgdHlwZW9mIEVMRU1FTlRfVFlQRVNbbnVtYmVyXSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IGBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJHtlbGVtZW50VHlwZX1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBjb2RlcWxbanMvcmVxdWVzdC1mb3JnZXJ5XSDigJQgbWl0aWdhdGVkOiBkb21haW4gYW5kIHJlcG8gYXJlIGhhcmRjb2RlZCBjb25zdGFudHMsXG4gICAgICAvLyBlbGVtZW50VHlwZSBpcyB2YWxpZGF0ZWQgYWdhaW5zdCBFTEVNRU5UX1RZUEVTIHdoaXRlbGlzdCBhYm92ZSwgcGF0aCB0cmF2ZXJzYWxcbiAgICAgIC8vIGlzIGNoZWNrZWQsIGFuZCB0aGUgb25seSByZWFjaGFibGUgdGFyZ2V0IGlzIGEgc3BlY2lmaWMgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5LlxuICAgICAgY29uc3QgZ2l0aHViVXJsID0gYGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9tYWluLyR7ZWxlbWVudFBhdGh9YDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZ2l0aHViVXJsKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXNwb25zZS5zdGF0dXMgPT09IDQwNCA/IDQwNCA6IDUwMikuanNvbih7XG4gICAgICAgICAgZXJyb3I6IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0XG4gICAgICAgICAgICA/IGBDb2xsZWN0aW9uIGVsZW1lbnQgbm90IGZvdW5kOiAke2VsZW1lbnRQYXRofWBcbiAgICAgICAgICAgIDogYEZhaWxlZCB0byBmZXRjaCBmcm9tIEdpdEh1YiAoSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30pYCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUVsZW1lbnRDb250ZW50KGZpbGVuYW1lLCBjb250ZW50LCBlbGVtZW50VHlwZSk7XG4gICAgICBjb25zdCBzaW5ndWxhclR5cGUgPSBQTFVSQUxfVE9fU0lOR1VMQVJbZWxlbWVudFR5cGVdIHx8IChlbGVtZW50VHlwZS5lbmRzV2l0aCgncycpID8gZWxlbWVudFR5cGUuc2xpY2UoMCwgLTEpIDogZWxlbWVudFR5cGUpO1xuXG4gICAgICByZXMuanNvbih7XG4gICAgICAgIG1ldGFkYXRhOiB2YWxpZGF0aW9uLm1ldGFkYXRhLFxuICAgICAgICBib2R5OiB2YWxpZGF0aW9uLmJvZHksXG4gICAgICAgIHJhdzogY29udGVudCxcbiAgICAgICAgdHlwZTogc2luZ3VsYXJUeXBlLFxuICAgICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgICAgc3RhdHVzOiB2YWxpZGF0aW9uLnZhbGlkID8gJ3Bhc3MnIDogJ3dhcm4nLFxuICAgICAgICAgIC4uLih2YWxpZGF0aW9uLnJlamVjdGlvbiAmJiB7XG4gICAgICAgICAgICByZWFzb246IHZhbGlkYXRpb24ucmVqZWN0aW9uLnJlYXNvbixcbiAgICAgICAgICAgIHNldmVyaXR5OiB2YWxpZGF0aW9uLnJlamVjdGlvbi5zZXZlcml0eSxcbiAgICAgICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uLnJlamVjdGlvbi5wYXR0ZXJucyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbV2ViVUkvR2F0ZXdheV0gRmFpbGVkIHRvIGZldGNoIGNvbGxlY3Rpb24gY29udGVudDonLCBlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDIpLmpzb24oeyBlcnJvcjogJ0ZhaWxlZCB0byBmZXRjaCBjb2xsZWN0aW9uIGVsZW1lbnQnIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFBPU1QgL2FwaS9pbnN0YWxsXG4gICAqIFJvdXRlcyB0aHJvdWdoIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IE1DUC1BUUwgb3BlcmF0aW9uLlxuICAgKiBBbGwgdmFsaWRhdGlvbiwgZ2F0ZWtlZXBlciBjaGVja3MgaGFuZGxlZCBieSB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBjb25zdCBpbnN0YWxsTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoMTAsIDYwXzAwMCk7XG4gIHJvdXRlci5wb3N0KCcvaW5zdGFsbCcsIGV4cHJlc3MuanNvbigpLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBpZiAoIWluc3RhbGxMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1RvbyBtYW55IGluc3RhbGwgcmVxdWVzdHMuIE1heCAxMCBwZXIgbWludXRlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBwYXRoOiBlbGVtZW50UGF0aCwgbmFtZSwgdHlwZSB9ID0gcmVxLmJvZHkgYXMgeyBwYXRoPzogc3RyaW5nOyBuYW1lPzogc3RyaW5nOyB0eXBlPzogc3RyaW5nIH07XG5cbiAgICBpZiAoIWVsZW1lbnRQYXRoIHx8ICF0eXBlIHx8ICFuYW1lKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnTWlzc2luZyByZXF1aXJlZCBmaWVsZHM6IHBhdGgsIG5hbWUsIHR5cGUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50UGF0aC5pbmNsdWRlcygnLi4nKSB8fCBuYW1lLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXRoIG9yIG5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnRQYXRoIGNvbnRhaW5zIG9ubHkgc2FmZSBjaGFyYWN0ZXJzIChhbHBoYW51bWVyaWMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzLCBzbGFzaGVzKVxuICAgIGlmICghL15bYS16QS1aMC05L18uLV0rJC8udGVzdChlbGVtZW50UGF0aCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgcGF0aCBjaGFyYWN0ZXJzJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gUm91dGUgdGhyb3VnaCBNQ1AtQVFMIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IG9wZXJhdGlvblxuICAgICAgY29uc3QgaW5zdGFsbFBhdGggPSBlbGVtZW50UGF0aC5yZXBsYWNlKC9ebGlicmFyeVxcLy8sICcnKTtcbiAgICAgIGNvbnN0IG9wUmVzdWx0ID0gYXNTaW5nbGVSZXN1bHQoYXdhaXQgaGFuZGxlci5oYW5kbGVDcmVhdGUoe1xuICAgICAgICBvcGVyYXRpb246ICdpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudCcsXG4gICAgICAgIHBhcmFtczogeyBwYXRoOiBpbnN0YWxsUGF0aCB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoIW9wUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MjIpLmpzb24oeyBlcnJvcjogb3BSZXN1bHQuZXJyb3IgfHwgJ0luc3RhbGwgZmFpbGVkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJL0dhdGV3YXldIEluc3RhbGxlZCBjb2xsZWN0aW9uIGVsZW1lbnQ6ICR7aW5zdGFsbFBhdGh9YCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6IGBJbnN0YWxsZWQgJHtuYW1lfSB0byBwb3J0Zm9saW9gLCBkYXRhOiBvcFJlc3VsdC5kYXRhIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbV2ViVUkvR2F0ZXdheV0gSW5zdGFsbCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBJbnN0YWxsIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuIl19
|
|
695
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNCQUFzQixFQUFvRCxNQUFNLHNCQUFzQixDQUFDO0FBR2hILDRFQUE0RTtBQUM1RSxTQUFTLGNBQWMsQ0FBQyxLQUFhO0lBQ25DLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBQ0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBVSxDQUFDO0FBRXRHLDZDQUE2QztBQUM3QyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUV0QyxvQ0FBb0M7QUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUUzRCx5R0FBeUc7QUFDekcsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMs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QUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYiBVSSBBUEkgUm91dGVzXG4gKlxuICogUkVTVCBlbmRwb2ludHMgZm9yIHJlYWRpbmcgcG9ydGZvbGlvIGVsZW1lbnRzLlxuICogUmVhZC1vbmx5IOKAlCBubyBtdXRhdGlvbnMgaW4gVjEuXG4gKlxuICogQWxsIGVsZW1lbnQgY29udGVudCBpcyBzYW5pdGl6ZWQgYmVmb3JlIHNlcnZpbmcgdG8gcHJldmVudCBYU1MuXG4gKlxuICogU2VjdXJpdHkgbm90ZTogVGhpcyB3ZWIgc2VydmVyIGJpbmRzIHRvIDEyNy4wLjAuMSBvbmx5IChzZWUgc2VydmVyLnRzKS5cbiAqIFJhdGUgbGltaXRpbmcgb24gcmVhZC1vbmx5IEdFVCBlbmRwb2ludHMgaXMgbm90IHJlcXVpcmVkIGZvciBsb2NhbGhvc3Qtb25seVxuICogbWFuYWdlbWVudCBpbnRlcmZhY2VzLiBUaGUgUE9TVCAvYXBpL2luc3RhbGwgZW5kcG9pbnQgaGFzIGV4cGxpY2l0IHJhdGUgbGltaXRpbmdcbiAqIHZpYSBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIgKG1heCAxMCBwZXIgbWludXRlKS5cbiAqIGNvZGVxbFtqcy9taXNzaW5nLXJhdGUtbGltaXRpbmddIOKAlCBBY2tub3dsZWRnZWQ7IGxvY2FsaG9zdC1vbmx5IGJpbmRpbmcgbWl0aWdhdGVzIERvUyByaXNrLlxuICovXG5cbmltcG9ydCBleHByZXNzLCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgcmVhZGRpciwgcmVhZEZpbGUsIHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIGV4dG5hbWUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlRWxlbWVudENvbnRlbnQsIHR5cGUgUGlwZWxpbmVSZXN1bHQsIHR5cGUgRWxlbWVudERpc3BsYXlNZXRhZGF0YSB9IGZyb20gJy4vY29udGVudFBpcGVsaW5lLmpzJztcbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5cbi8qKiBOb3JtYWxpemUgdXNlciBpbnB1dCB0byBORkMgZm9ybSB0byBwcmV2ZW50IFVuaWNvZGUgaG9tb2dyYXBoIGF0dGFja3MgKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlucHV0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQubm9ybWFsaXplKCdORkMnKTtcbn1cbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlciB9IGZyb20gJy4uL3V0aWxzL1NsaWRpbmdXaW5kb3dSYXRlTGltaXRlci5qcyc7XG5cbmNvbnN0IEVMRU1FTlRfVFlQRVMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddIGFzIGNvbnN0O1xuXG4vKiogTWF4IGZpbGUgc2l6ZSBmb3IgZWxlbWVudCByZWFkcyAoMSBNQikgKi9cbmNvbnN0IE1BWF9GSUxFX1NJWkVfQllURVMgPSAxXzA0OF81NzY7XG5cbi8qKiBWYWxpZCBlbGVtZW50IGZpbGUgZXh0ZW5zaW9ucyAqL1xuY29uc3QgVkFMSURfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycubWQnLCAnLnlhbWwnLCAnLnltbCddKTtcblxuLyoqIEtub3duLXNhZmUgZmlsZW5hbWUgcGF0dGVybjogc3RhcnRzIGFscGhhbnVtZXJpYywgYm9keSBhbGxvd3MgaHlwaGVucy91bmRlcnNjb3JlcywgdmFsaWQgZXh0ZW5zaW9uICovXG5jb25zdCBTQUZFX0ZJTEVOQU1FX1JFID0gL15bYS16QS1aMC05XVthLXpBLVowLTlfLV0qXFwuKHlhbWx8eW1sfG1kKSQvO1xuXG4vKiogQ2hlY2sgaWYgYSBmaWxlbmFtZSBpcyBhIGJhY2t1cCBvciBjcnVmdCBmaWxlICovXG5mdW5jdGlvbiBpc0JhY2t1cE9yQ3J1ZnQoZmlsZW5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBHdWFyYW50ZWVkIHNhZmUgZmlsZW5hbWVzIHNraXAgYmxhY2tsaXN0IGNoZWNrcyBlbnRpcmVseVxuICBpZiAoU0FGRV9GSUxFTkFNRV9SRS50ZXN0KGZpbGVuYW1lKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lID09PSAnX2luZGV4Lmpzb24nKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lLmluY2x1ZGVzKCcuYmFja3VwJykgfHwgZmlsZW5hbWUuaW5jbHVkZXMoJy5zdGF0ZScpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcuYmFrJykgfHwgZmlsZW5hbWUuZW5kc1dpdGgoJ34nKSkgcmV0dXJuIHRydWU7XG4gIGlmIChmaWxlbmFtZS5pbmNsdWRlcygnIGNvcHknKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgZGlyZWN0b3J5IGZvciB2YWxpZCBlbGVtZW50cywgcnVubmluZyBlYWNoIHRocm91Z2ggdGhlIHNlY3VyaXR5XG4gKiB2YWxpZGF0aW9uIHBpcGVsaW5lLiBSZXR1cm5zIG1ldGFkYXRhIG9iamVjdHMgcmVhZHkgZm9yIEFQSSByZXNwb25zZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5FbGVtZW50RGlyZWN0b3J5KHR5cGVEaXI6IHN0cmluZywgdHlwZTogc3RyaW5nLCBsb2dQcmVmaXg6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcih0eXBlRGlyKTtcbiAgY29uc3QgZWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGlmIChpc0JhY2t1cE9yQ3J1ZnQoZmlsZSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUoZmlsZSk7XG4gICAgaWYgKCFWQUxJRF9FWFRFTlNJT05TLmhhcyhleHQpKSBjb250aW51ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4odHlwZURpciwgZmlsZSk7XG4gICAgICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFmaWxlU3RhdC5pc0ZpbGUoKSB8fCBmaWxlU3RhdC5zaXplID4gTUFYX0ZJTEVfU0laRV9CWVRFUykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVFbGVtZW50Q29udGVudChmaWxlLCBjb250ZW50LCB0eXBlKTtcblxuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgJHtsb2dQcmVmaXh9IFNraXBwaW5nIHJlamVjdGVkIGZpbGUgJHtmaWxlfTogJHt2YWxpZGF0aW9uUmVzdWx0LnJlamVjdGlvbj8ucmVhc29ufWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXRhZGF0YSB9ID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lIHx8IGZpbGUucmVwbGFjZShleHQsICcnKSxcbiAgICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICB0eXBlOiB0eXBlLnNsaWNlKDAsIC0xKSxcbiAgICAgICAgdmVyc2lvbjogbWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvciB8fCAnJyxcbiAgICAgICAgY2F0ZWdvcnk6IG1ldGFkYXRhLmNhdGVnb3J5IHx8ICcnLFxuICAgICAgICB0YWdzOiBtZXRhZGF0YS50YWdzIHx8ICcnLFxuICAgICAgICBjcmVhdGVkOiBtZXRhZGF0YS5jcmVhdGVkIHx8ICcnLFxuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGAke2xvZ1ByZWZpeH0gRmFpbGVkIHRvIHBhcnNlICR7ZmlsZX06YCwgZXJyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbi8qKiBOb3JtYWxpemUgcGx1cmFsIGVsZW1lbnQgdHlwZSB0byBzaW5ndWxhciBmb3JtICovXG5jb25zdCBQTFVSQUxfVE9fU0lOR1VMQVI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHBlcnNvbmFzOiAncGVyc29uYScsIHNraWxsczogJ3NraWxsJywgdGVtcGxhdGVzOiAndGVtcGxhdGUnLFxuICBhZ2VudHM6ICdhZ2VudCcsIG1lbW9yaWVzOiAnbWVtb3J5JywgZW5zZW1ibGVzOiAnZW5zZW1ibGUnLFxufTtcbmZ1bmN0aW9uIHRvU2luZ3VsYXJUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBQTFVSQUxfVE9fU0lOR1VMQVJbdHlwZV0gfHwgKHR5cGUuZW5kc1dpdGgoJ3MnKSA/IHR5cGUuc2xpY2UoMCwgLTEpIDogdHlwZSk7XG59XG5cbi8qKiBCdWlsZCBhIHN0cnVjdHVyZWQgdmFsaWRhdGlvbiByZXNwb25zZSBmb3IgZWxlbWVudCBkZXRhaWwgcm91dGVzICovXG5mdW5jdGlvbiBidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uOiBQaXBlbGluZVJlc3VsdCwgY29udGVudDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YTogdmFsaWRhdGlvbi5tZXRhZGF0YSxcbiAgICBib2R5OiB2YWxpZGF0aW9uLmJvZHksXG4gICAgcmF3OiBjb250ZW50LFxuICAgIHR5cGU6IHRvU2luZ3VsYXJUeXBlKHR5cGUpLFxuICAgIHZhbGlkYXRpb246IHtcbiAgICAgIHN0YXR1czogdmFsaWRhdGlvbi52YWxpZCA/ICdwYXNzJyA6ICd3YXJuJyxcbiAgICAgIC4uLih2YWxpZGF0aW9uLnJlamVjdGlvbiAmJiB7XG4gICAgICAgIHJlYXNvbjogdmFsaWRhdGlvbi5yZWplY3Rpb24ucmVhc29uLFxuICAgICAgICBzZXZlcml0eTogdmFsaWRhdGlvbi5yZWplY3Rpb24uc2V2ZXJpdHksXG4gICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uLnJlamVjdGlvbi5wYXR0ZXJucyxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGZpbGUgcGF0aCBmb3IgYW4gZWxlbWVudCwgaGFuZGxpbmcgbWVtb3J5IGRhdGUtcGF0aHNcbiAqIGFuZCBuYW1lLXdpdGgtb3Itd2l0aG91dC1leHRlbnNpb24gbWF0Y2hpbmcuXG4gKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBwYXRoIG9yIG51bGwgd2l0aCBhbiBlcnJvciB0byBzZW5kLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRWxlbWVudEZpbGVQYXRoKFxuICBwb3J0Zm9saW9EaXI6IHN0cmluZywgdHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmdcbik6IFByb21pc2U8eyBmaWxlUGF0aDogc3RyaW5nIH0gfCB7IGVycm9yOiBzdHJpbmc7IHN0YXR1czogbnVtYmVyIH0+IHtcbiAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycgJiYgbmFtZS5pbmNsdWRlcygnLycpKSB7XG4gICAgY29uc3QgcGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMiB8fCAhL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QocGFydHNbMF0pIHx8IGlzQmFja3VwT3JDcnVmdChwYXJ0c1sxXSkpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiAnSW52YWxpZCBtZW1vcnkgcGF0aCcsIHN0YXR1czogNDAwIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUsIG5hbWUpO1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoZmlsZVBhdGgpO1xuICAgIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgICAgcmV0dXJuIHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcsIHN0YXR1czogNDAwIH07XG4gICAgfVxuICAgIHJldHVybiB7IGZpbGVQYXRoIH07XG4gIH1cblxuICBjb25zdCB0eXBlRGlyID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUpO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIodHlwZURpcik7XG4gIGNvbnN0IG1hdGNoID0gZmlsZXMuZmluZChmID0+IHtcbiAgICBjb25zdCBiYXNlID0gZi5yZXBsYWNlKGV4dG5hbWUoZiksICcnKTtcbiAgICByZXR1cm4gYmFzZSA9PT0gbmFtZSB8fCBmID09PSBuYW1lO1xuICB9KTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGBFbGVtZW50IG5vdCBmb3VuZDogJHt0eXBlfS8ke25hbWV9YCwgc3RhdHVzOiA0MDQgfTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVQYXRoID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUsIG1hdGNoKTtcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShmaWxlUGF0aCk7XG4gIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgIHJldHVybiB7IGVycm9yOiAnUGF0aCB0cmF2ZXJzYWwgZGV0ZWN0ZWQnLCBzdGF0dXM6IDQwMCB9O1xuICB9XG4gIHJldHVybiB7IGZpbGVQYXRoIH07XG59XG5cbi8qKlxuICogTG9hZCBtZW1vcmllcyBmcm9tIHRoZSBfaW5kZXguanNvbiBmaWxlLlxuICogTWVtb3JpZXMgdXNlIGRhdGUtcGFydGl0aW9uZWQgc3RvcmFnZSB3aXRoIGFuIGluZGV4LCB1bmxpa2Ugb3RoZXJcbiAqIGVsZW1lbnQgdHlwZXMgd2hpY2ggYXJlIGZsYXQgZmlsZXMgaW4gYSBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRNZW1vcmllc0Zyb21JbmRleChwb3J0Zm9saW9EaXI6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gIGNvbnN0IGluZGV4UGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCAnbWVtb3JpZXMnLCAnX2luZGV4Lmpzb24nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShpbmRleFBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGluZGV4ID0gSlNPTi5wYXJzZShyYXcpIGFzIHtcbiAgICAgIGVudHJpZXM/OiBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU/OiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nOyB0YWdzPzogc3RyaW5nW107IGNyZWF0ZWQ/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IHVua25vd24gfT47XG4gICAgICBlbnRyeUNvdW50PzogbnVtYmVyO1xuICAgIH07XG5cbiAgICBjb25zdCBlbnRyaWVzID0gaW5kZXguZW50cmllcyB8fCB7fTtcbiAgICBjb25zdCBlbGVtZW50czogdW5rbm93bltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cmllcykpIHtcbiAgICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGhQYXJ0cy5wb3AoKSB8fCBwYXRoO1xuICAgICAgLy8gRXh0cmFjdCBkYXRlIGZyb20gZGlyZWN0b3J5IHBhdGggKGUuZy4sIFwiMjAyNS0wOS0xOS9jb2RlLXBhdHRlcm5zLnlhbWxcIiAtPiBcIjIwMjUtMDktMTlcIilcbiAgICAgIGNvbnN0IGRhdGVGcm9tUGF0aCA9IHBhdGhQYXJ0cy5sZW5ndGggPiAwICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHBhdGhQYXJ0c1swXSkgPyBwYXRoUGFydHNbMF0gOiAnJztcbiAgICAgIC8vIEZhbGwgYmFjayB0byBmaWxlbmFtZSBpZiBpbmRleCBoYXMgbm8gbmFtZSBvciBzdG9yZWQgXCJ1bm5hbWVkXCIgKHVwc3RyZWFtIGluZGV4ZXIgYnVnKVxuICAgICAgY29uc3QgaW5kZXhOYW1lID0gZW50cnkubmFtZSAmJiBlbnRyeS5uYW1lICE9PSAndW5uYW1lZCcgPyBlbnRyeS5uYW1lIDogbnVsbDtcbiAgICAgIGNvbnN0IG5hbWUgPSBpbmRleE5hbWUgfHwgZmlsZW5hbWUucmVwbGFjZSgvXFwuKHlhbWx8eW1sfG1kKSQvLCAnJyk7XG5cbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogZW50cnkuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIHR5cGU6ICdtZW1vcnknLFxuICAgICAgICB2ZXJzaW9uOiBlbnRyeS52ZXJzaW9uIHx8ICcxLjAuMCcsXG4gICAgICAgIGF1dGhvcjogZW50cnkuYXV0aG9yIHx8ICcnLFxuICAgICAgICBjYXRlZ29yeTogZW50cnkuY2F0ZWdvcnkgfHwgZW50cnkubWVtb3J5VHlwZSB8fCAnJyxcbiAgICAgICAgdGFnczogZW50cnkudGFncyB8fCBbXSxcbiAgICAgICAgY3JlYXRlZDogZW50cnkuY3JlYXRlZCB8fCBkYXRlRnJvbVBhdGgsXG4gICAgICAgIGZpbGVuYW1lOiBwYXRoLCAvLyBkYXRlL2ZpbGVuYW1lIHBhdGggZm9yIGNvbnRlbnQgbG9hZGluZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9IGNhdGNoIHtcbiAgICAvLyBGYWxsIGJhY2sgdG8gZW1wdHkgaWYgbm8gaW5kZXhcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqIFJhdGUgbGltaXRlciBmb3IgL2FwaS9pbnN0YWxsOiBtYXggMTAgaW5zdGFsbHMgcGVyIDYwIHNlY29uZHMgKi9cbmNvbnN0IGluc3RhbGxSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoMTAsIDYwXzAwMCk7XG5cbi8qKiBTYW5pdGl6ZSB0ZXh0IGNvbnRlbnQgdG8gcHJldmVudCBYU1MgaW4gcmVuZGVyZWQgSFRNTCAqL1xuZnVuY3Rpb24gc2FuaXRpemVGb3JIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZSgvJy9nLCAnJiMzOTsnKTtcbn1cblxuLyoqIFBhcnNlIFlBTUwgZnJvbnQgbWF0dGVyIGZyb20gYSBtYXJrZG93biBmaWxlICovXG5mdW5jdGlvbiBwYXJzZUZyb250TWF0dGVyKGNvbnRlbnQ6IHN0cmluZyk6IHsgbWV0YWRhdGE6IEVsZW1lbnREaXNwbGF5TWV0YWRhdGE7IGJvZHk6IHN0cmluZyB9IHtcbiAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxyP1xcbihbXFxzXFxTXSo/KVxccj9cXG4tLS1cXHI/XFxuPyhbXFxzXFxTXSopJC8pO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHsgbWV0YWRhdGE6IHt9LCBib2R5OiBjb250ZW50IH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKG1hdGNoWzFdKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9ICh0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBwYXJzZWQgIT09IG51bGwpID8gcGFyc2VkIGFzIEVsZW1lbnREaXNwbGF5TWV0YWRhdGEgOiB7fTtcbiAgICByZXR1cm4geyBtZXRhZGF0YSwgYm9keTogbWF0Y2hbMl0gfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgbWV0YWRhdGE6IHt9LCBib2R5OiBtYXRjaFsyXSB8fCBjb250ZW50IH07XG4gIH1cbn1cblxuLyoqIFBhcnNlIGEgWUFNTC1vbmx5IGZpbGUgKG1lbW9yaWVzKSAqL1xuZnVuY3Rpb24gcGFyc2VZYW1sRmlsZShjb250ZW50OiBzdHJpbmcpOiB7IG1ldGFkYXRhOiBFbGVtZW50RGlzcGxheU1ldGFkYXRhOyBib2R5OiBzdHJpbmcgfSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZVJhd1lhbWwoY29udGVudCk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsKSA/IHBhcnNlZCBhcyBFbGVtZW50RGlzcGxheU1ldGFkYXRhIDoge307XG4gICAgcmV0dXJuIHsgbWV0YWRhdGEsIGJvZHk6ICcnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IG1ldGFkYXRhOiB7fSwgYm9keTogY29udGVudCB9O1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgcG9ydGZvbGlvIHJvdXRlcyBzaGFyZWQgYmV0d2VlbiBzaW1wbGUgYW5kIGdhdGV3YXkgbW9kZXMuXG4gKiBUaGUgc3RydWN0dXJlZERldGFpbCBvcHRpb24gY29udHJvbHMgd2hldGhlciBkZXRhaWwgcm91dGVzIHJldHVyblxuICogc3RydWN0dXJlZCBKU09OIChnYXRld2F5KSBvciBwbGFpbiB0ZXh0IChzaW1wbGUvbGVnYWN5KS5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMoXG4gIHJvdXRlcjogUm91dGVyLFxuICBwb3J0Zm9saW9EaXI6IHN0cmluZyxcbiAgb3B0aW9uczogeyBzdHJ1Y3R1cmVkRGV0YWlsOiBib29sZWFuOyBsb2dQcmVmaXg6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHsgc3RydWN0dXJlZERldGFpbCwgbG9nUHJlZml4IH0gPSBvcHRpb25zO1xuXG4gIHJvdXRlci5nZXQoJy9lbGVtZW50cycsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlUGFyYW0gPSByZXEucXVlcnkucGFnZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBwYWdlU2l6ZVBhcmFtID0gcmVxLnF1ZXJ5LnBhZ2VTaXplIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHdhbnRQYWdpbmF0aW9uID0gcGFnZVBhcmFtICE9PSB1bmRlZmluZWQgJiYgcGFnZVNpemVQYXJhbSAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcGFnZSA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChwYWdlUGFyYW0gfHwgJzEnLCAxMCkgfHwgMSk7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IE1hdGgubWF4KDEsIE1hdGgubWluKDIwMCwgTnVtYmVyLnBhcnNlSW50KHBhZ2VTaXplUGFyYW0gfHwgJzUwJywgMTApIHx8IDUwKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPiA9IHt9O1xuICAgICAgbGV0IHRvdGFsQ291bnQgPSAwO1xuXG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgRUxFTUVOVF9UWVBFUykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnbWVtb3JpZXMnKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1FbGVtZW50cyA9IGF3YWl0IGxvYWRNZW1vcmllc0Zyb21JbmRleChwb3J0Zm9saW9EaXIpO1xuICAgICAgICAgICAgcmVzdWx0W3R5cGVdID0gbWVtRWxlbWVudHM7XG4gICAgICAgICAgICB0b3RhbENvdW50ICs9IG1lbUVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgdHlwZSk7XG4gICAgICAgICAgY29uc3QgZGlyU3RhdCA9IGF3YWl0IHN0YXQodHlwZURpcik7XG4gICAgICAgICAgaWYgKCFkaXJTdGF0LmlzRGlyZWN0b3J5KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBzY2FuRWxlbWVudERpcmVjdG9yeSh0eXBlRGlyLCB0eXBlLCBsb2dQcmVmaXgpO1xuICAgICAgICAgIHJlc3VsdFt0eXBlXSA9IGVsZW1lbnRzO1xuICAgICAgICAgIHRvdGFsQ291bnQgKz0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXN1bHRbdHlwZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAod2FudFBhZ2luYXRpb24pIHtcbiAgICAgICAgY29uc3QgYWxsRWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgRUxFTUVOVF9UWVBFUykge1xuICAgICAgICAgIGFsbEVsZW1lbnRzLnB1c2goLi4uKHJlc3VsdFt0eXBlXSB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHBhZ2VTaXplO1xuICAgICAgICBjb25zdCBwYWdlZCA9IGFsbEVsZW1lbnRzLnNsaWNlKHN0YXJ0LCBzdGFydCArIHBhZ2VTaXplKTtcbiAgICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChhbGxFbGVtZW50cy5sZW5ndGggLyBwYWdlU2l6ZSk7XG4gICAgICAgIHJlcy5qc29uKHsgZWxlbWVudHM6IHBhZ2VkLCB0b3RhbENvdW50OiBhbGxFbGVtZW50cy5sZW5ndGgsIHBhZ2UsIHBhZ2VTaXplLCB0b3RhbFBhZ2VzIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLmpzb24oeyBlbGVtZW50czogcmVzdWx0LCB0b3RhbENvdW50IH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKGAke2xvZ1ByZWZpeH0gRmFpbGVkIHRvIGxpc3QgZWxlbWVudHM6YCwgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gbGlzdCBlbGVtZW50cycgfSk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvZWxlbWVudHMvOnR5cGUnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy50eXBlKTtcbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXModHlwZSBhcyB0eXBlb2YgRUxFTUVOVF9UWVBFU1tudW1iZXJdKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEludmFsaWQgZWxlbWVudCB0eXBlOiAke3R5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycpIHtcbiAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgcmVzLmpzb24oeyB0eXBlLCBlbGVtZW50czogbWVtRWxlbWVudHMsIGNvdW50OiBtZW1FbGVtZW50cy5sZW5ndGggfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBzY2FuRWxlbWVudERpcmVjdG9yeShqb2luKHBvcnRmb2xpb0RpciwgdHlwZSksIHR5cGUsIGxvZ1ByZWZpeCk7XG4gICAgICByZXMuanNvbih7IHR5cGUsIGVsZW1lbnRzLCBjb3VudDogZWxlbWVudHMubGVuZ3RoIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7dHlwZX1gIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnL2VsZW1lbnRzL21lbW9yaWVzLzpkYXRlLzpmaWxlJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgeyBkYXRlLCBmaWxlIH0gPSByZXEucGFyYW1zO1xuXG4gICAgaWYgKCEvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdChkYXRlKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZGF0ZSBmb3JtYXQnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZmlsZS5pbmNsdWRlcygnLi4nKSB8fCBmaWxlLmluY2x1ZGVzKCcvJykgfHwgZmlsZS5pbmNsdWRlcygnXFxcXCcpIHx8IGlzQmFja3VwT3JDcnVmdChmaWxlKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZmlsZW5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCAnbWVtb3JpZXMnLCBkYXRlLCBmaWxlKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFyZXNvbHZlZFBhdGguc3RhcnRzV2l0aChyZXNvbHZlKHBvcnRmb2xpb0RpcikpKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KGZpbGVQYXRoKTtcbiAgICAgIGlmICghZmlsZVN0YXQuaXNGaWxlKCkgfHwgZmlsZVN0YXQuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfQllURVMpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhmaWxlU3RhdC5pc0ZpbGUoKSA/IDQxMyA6IDQwNCkuanNvbih7IGVycm9yOiBmaWxlU3RhdC5pc0ZpbGUoKSA/ICdGaWxlIHRvbyBsYXJnZScgOiAnTm90IGZvdW5kJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgaWYgKHN0cnVjdHVyZWREZXRhaWwpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZSwgY29udGVudCwgJ21lbW9yaWVzJyk7XG4gICAgICAgIHJlcy5qc29uKGJ1aWxkVmFsaWRhdGlvblJlc3BvbnNlKHZhbGlkYXRpb24sIGNvbnRlbnQsICdtZW1vcmllcycpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICAgIHJlcy5zZW5kKGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogYE1lbW9yeSBub3QgZm91bmQ6ICR7ZGF0ZX0vJHtmaWxlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvZWxlbWVudHMvOnR5cGUvOm5hbWUnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB0eXBlID0gcmVxLnBhcmFtcy50eXBlO1xuICAgIGNvbnN0IG5hbWUgPSBub3JtYWxpemVJbnB1dChyZXEucGFyYW1zLm5hbWUpO1xuICAgIGlmICghRUxFTUVOVF9UWVBFUy5pbmNsdWRlcyh0eXBlIGFzIHR5cGVvZiBFTEVNRU5UX1RZUEVTW251bWJlcl0pKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiBgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7dHlwZX1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuYW1lLmluY2x1ZGVzKCcuLicpIHx8IG5hbWUuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBuYW1lJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAhPT0gJ21lbW9yaWVzJyAmJiBuYW1lLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRGaWxlUGF0aChwb3J0Zm9saW9EaXIsIHR5cGUsIG5hbWUpO1xuICAgICAgaWYgKCdlcnJvcicgaW4gcmVzb2x2ZWQpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXNvbHZlZC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzb2x2ZWQuZXJyb3IgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KHJlc29sdmVkLmZpbGVQYXRoKTtcbiAgICAgIGlmIChmaWxlU3RhdC5zaXplID4gTUFYX0ZJTEVfU0laRV9CWVRFUykge1xuICAgICAgICByZXMuc3RhdHVzKDQxMykuanNvbih7IGVycm9yOiBgRmlsZSB0b28gbGFyZ2UgKCR7ZmlsZVN0YXQuc2l6ZX0gYnl0ZXMpLiBNYXggMSBNQi5gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShyZXNvbHZlZC5maWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBpZiAoc3RydWN0dXJlZERldGFpbCkge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHJlc29sdmVkLmZpbGVQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgbmFtZTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZW5hbWUsIGNvbnRlbnQsIHR5cGUpO1xuICAgICAgICByZXMuanNvbihidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uLCBjb250ZW50LCB0eXBlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcpO1xuICAgICAgICByZXMuc2VuZChjb250ZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBGYWlsZWQgdG8gZ2V0IGVsZW1lbnQ6ICR7dHlwZX0vJHtuYW1lfWAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIFJlZ2lzdGVyIGZpbGVzeXN0ZW0tYmFzZWQgc3RhdHMgcm91dGUgKHNoYXJlZCBiZXR3ZWVuIHNpbXBsZSBhbmQgZ2F0ZXdheSkgKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXI6IFJvdXRlciwgcG9ydGZvbGlvRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgcm91dGVyLmdldCgnL3N0YXRzJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgICAgbGV0IHRvdGFsID0gMDtcblxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIEVMRU1FTlRfVFlQRVMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ21lbW9yaWVzJykge1xuICAgICAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgICAgIHN0YXRzW3R5cGVdID0gbWVtRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgdG90YWwgKz0gbWVtRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgdHlwZSk7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHR5cGVEaXIpO1xuICAgICAgICAgIGNvbnN0IGNvdW50ID0gZmlsZXMuZmlsdGVyKGYgPT4gIWlzQmFja3VwT3JDcnVmdChmKSAmJiBWQUxJRF9FWFRFTlNJT05TLmhhcyhleHRuYW1lKGYpKSkubGVuZ3RoO1xuICAgICAgICAgIHN0YXRzW3R5cGVdID0gY291bnQ7XG4gICAgICAgICAgdG90YWwgKz0gY291bnQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHN0YXRzW3R5cGVdID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXMuanNvbih7IHN0YXRzLCB0b3RhbCB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gZ2V0IHN0YXRzJyB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiogUmVnaXN0ZXIgY29sbGVjdGlvbiBpbmRleCBwcm94eSByb3V0ZSAoc2hhcmVkIGJldHdlZW4gc2ltcGxlIGFuZCBnYXRld2F5KSAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJDb2xsZWN0aW9uUm91dGUocm91dGVyOiBSb3V0ZXIsIHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogdm9pZCB7XG4gIHJvdXRlci5nZXQoJy9jb2xsZWN0aW9uJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHJlcy5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vbWFpbi9wdWJsaWMvY29sbGVjdGlvbi1pbmRleC5qc29uJyk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgcmVzLnNlbmQoZGF0YSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHsgLyogR2l0SHViIHVucmVhY2hhYmxlIOKAlCBmYWxsIGJhY2sgdG8gbG9jYWwgKi8gfVxuXG4gICAgY29uc3QgbG9jYWxQYXRocyA9IFtcbiAgICAgIGpvaW4ocG9ydGZvbGlvRGlyLCAnLi4nLCAnLi4nLCAnLi4nLCAnY29sbGVjdGlvbicsICdwdWJsaWMnLCAnY29sbGVjdGlvbi1pbmRleC5qc29uJyksXG4gICAgICBqb2luKHBvcnRmb2xpb0RpciwgJy4uJywgJ2NvbGxlY3Rpb24nLCAncHVibGljJywgJ2NvbGxlY3Rpb24taW5kZXguanNvbicpLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsUGF0aCBvZiBsb2NhbFBhdGhzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUobG9jYWxQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgcmVzLnNlbmQoY29udGVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggeyAvKiB0cnkgbmV4dCAqLyB9XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ0NvbGxlY3Rpb24gaW5kZXggbm90IGF2YWlsYWJsZScgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBpUm91dGVzKHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogUm91dGVyIHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG5cbiAgcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMocm91dGVyLCBwb3J0Zm9saW9EaXIsIHsgc3RydWN0dXJlZERldGFpbDogZmFsc2UsIGxvZ1ByZWZpeDogJ1tXZWJVSV0nIH0pO1xuXG4gIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG4gIHJlZ2lzdGVyQ29sbGVjdGlvblJvdXRlKHJvdXRlciwgcG9ydGZvbGlvRGlyKTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luc3RhbGxcbiAgICogSW5zdGFsbCBhIGNvbGxlY3Rpb24gZWxlbWVudCBpbnRvIHRoZSBsb2NhbCBwb3J0Zm9saW8uXG4gICAqIFJvdXRlcyB0aHJvdWdoIERvbGxob3VzZU1DUCdzIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IHBpcGVsaW5lXG4gICAqIGZvciBwcm9wZXIgdmFsaWRhdGlvbiwgZ2F0ZWtlZXBlciBjaGVja3MsIGFuZCBlbGVtZW50IG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBNQ1Agc2VydmVyJ3MgQ29sbGVjdGlvbkhhbmRsZXIgdG8gYmUgYXZhaWxhYmxlLlxuICAgKiBGYWxscyBiYWNrIHRvIGRpcmVjdCBmaWxlIHdyaXRlIGlmIG5vdCAoc3RhbmRhbG9uZSB3ZWIgbW9kZSkuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2luc3RhbGwnLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgaWYgKCFpbnN0YWxsUmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnVG9vIG1hbnkgaW5zdGFsbCByZXF1ZXN0cy4gTWF4IDEwIHBlciBtaW51dGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhdGg6IGVsZW1lbnRQYXRoLCBuYW1lLCB0eXBlIH0gPSByZXEuYm9keSBhcyB7IHBhdGg/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmcgfTtcblxuICAgIGlmICghZWxlbWVudFBhdGggfHwgIXR5cGUgfHwgIW5hbWUpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdNaXNzaW5nIHJlcXVpcmVkIGZpZWxkczogcGF0aCwgbmFtZSwgdHlwZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdHlwZVxuICAgIGNvbnN0IHBsdXJhbFR5cGUgPSB0eXBlLmVuZHNXaXRoKCdzJykgPyB0eXBlIDogYCR7dHlwZX1zYDtcbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXMocGx1cmFsVHlwZSBhcyB0eXBlb2YgRUxFTUVOVF9UWVBFU1tudW1iZXJdKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEludmFsaWQgZWxlbWVudCB0eXBlOiAke3R5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IHBhdGggdHJhdmVyc2FsXG4gICAgaWYgKGVsZW1lbnRQYXRoLmluY2x1ZGVzKCcuLicpIHx8IG5hbWUuaW5jbHVkZXMoJy4uJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBhdGggb3IgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWxlbWVudFBhdGggY29udGFpbnMgb25seSBzYWZlIGNoYXJhY3RlcnMgKGFscGhhbnVtZXJpYywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMsIHNsYXNoZXMpXG4gICAgaWYgKCEvXlthLXpBLVowLTkvXy4tXSskLy50ZXN0KGVsZW1lbnRQYXRoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBwYXRoIGNoYXJhY3RlcnMnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBGZXRjaCBjb250ZW50IGZyb20gR2l0SHViXG4gICAgICBjb25zdCBnaFVybCA9IGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vbWFpbi8ke2VsZW1lbnRQYXRofWA7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBjb25zdHJ1Y3RlZCBVUkwgc3RheXMgd2l0aGluIGV4cGVjdGVkIGRvbWFpbiBhbmQgcGF0aFxuICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChnaFVybCk7XG4gICAgICBpZiAocGFyc2VkVXJsLmhvc3RuYW1lICE9PSAncmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbScgfHwgIXBhcnNlZFVybC5wYXRobmFtZS5zdGFydHNXaXRoKCcvRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vJykpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgY29sbGVjdGlvbiBwYXRoJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGdoVXJsKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmVzLnN0YXR1cyg1MDIpLmpzb24oeyBlcnJvcjogYEZhaWxlZCB0byBmZXRjaCBmcm9tIGNvbGxlY3Rpb246IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAgICAgLy8gVmFsaWRhdGUgY29udGVudCB0aHJvdWdoIHRoZSBzZWN1cml0eSBwaXBlbGluZSBiZWZvcmUgd3JpdGluZ1xuICAgICAgY29uc3QgZXh0ID0gZXh0bmFtZShlbGVtZW50UGF0aCk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZXh0ID09PSAnLnlhbWwnIHx8IGV4dCA9PT0gJy55bWwnKSB7XG4gICAgICAgICAgLy8gVmFsaWRhdGUgWUFNTCBjb250ZW50IGZvciBib21icywgY2lyY3VsYXIgcmVmZXJlbmNlcywgbWFsaWNpb3VzIHBhdHRlcm5zXG4gICAgICAgICAgaWYgKCFDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlWWFtbENvbnRlbnQoY29udGVudCkpIHtcbiAgICAgICAgICAgIHJlcy5zdGF0dXMoNDIyKS5qc29uKHsgZXJyb3I6ICdDb250ZW50IGZhaWxlZCBZQU1MIHZhbGlkYXRpb24g4oCUIHBvdGVudGlhbGx5IG1hbGljaW91cyBwYXR0ZXJucyBkZXRlY3RlZCcgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFZhbGlkYXRlIG1hcmtkb3duK2Zyb250bWF0dGVyIGNvbnRlbnRcbiAgICAgICAgICBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChwYXJzZUVycikge1xuICAgICAgICByZXMuc3RhdHVzKDQyMikuanNvbih7IGVycm9yOiBgQ29udGVudCBmYWlsZWQgcGFyc2UgdmFsaWRhdGlvbjogJHsocGFyc2VFcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBjb250ZW50IGJvZHkgZm9yIGluamVjdGlvbiBwYXR0ZXJuc1xuICAgICAgY29uc3Qgc2luZ3VsYXJUeXBlID0gcGx1cmFsVHlwZS5zbGljZSgwLCAtMSk7XG4gICAgICBjb25zdCBjb250ZXh0VHlwZXMgPSBbJ3BlcnNvbmEnLCAnc2tpbGwnLCAndGVtcGxhdGUnLCAnYWdlbnQnLCAnbWVtb3J5J10gYXMgY29uc3Q7XG4gICAgICB0eXBlIENvbnRlbnRDb250ZXh0ID0gdHlwZW9mIGNvbnRleHRUeXBlc1tudW1iZXJdO1xuICAgICAgY29uc3QgY29udGVudENvbnRleHQgPSBjb250ZXh0VHlwZXMuaW5jbHVkZXMoc2luZ3VsYXJUeXBlIGFzIENvbnRlbnRDb250ZXh0KSA/IHNpbmd1bGFyVHlwZSBhcyBDb250ZW50Q29udGV4dCA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUoY29udGVudCwge1xuICAgICAgICBjb250ZW50Q29udGV4dCxcbiAgICAgIH0pO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1tXZWJVSV0gSW5zdGFsbCBibG9ja2VkIOKAlCBjb250ZW50IHZhbGlkYXRpb24gZmFpbGVkJywge1xuICAgICAgICAgIGVsZW1lbnQ6IGAke3BsdXJhbFR5cGV9LyR7bmFtZX1gLFxuICAgICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uUmVzdWx0LmRldGVjdGVkUGF0dGVybnMsXG4gICAgICAgICAgc2V2ZXJpdHk6IHZhbGlkYXRpb25SZXN1bHQuc2V2ZXJpdHksXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuc3RhdHVzKDQyMikuanNvbih7XG4gICAgICAgICAgZXJyb3I6ICdDb250ZW50IGZhaWxlZCBzZWN1cml0eSB2YWxpZGF0aW9uJyxcbiAgICAgICAgICBwYXR0ZXJuczogdmFsaWRhdGlvblJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgICAgIHNldmVyaXR5OiB2YWxpZGF0aW9uUmVzdWx0LnNldmVyaXR5LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgZmlsZW5hbWVcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gZWxlbWVudFBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCBgJHtuYW1lfS5tZGA7XG5cbiAgICAgIC8vIEVuc3VyZSB0eXBlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgcGx1cmFsVHlwZSk7XG4gICAgICBjb25zdCB7IG1rZGlyIH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKTtcbiAgICAgIGF3YWl0IG1rZGlyKHR5cGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAvLyBXcml0ZSB0byBwb3J0Zm9saW9cbiAgICAgIGNvbnN0IGRlc3RQYXRoID0gam9pbih0eXBlRGlyLCBmaWxlbmFtZSk7XG5cbiAgICAgIC8vIFZlcmlmeSByZXNvbHZlZCBkZXN0aW5hdGlvbiBwYXRoIHN0YXlzIHdpdGhpbiBwb3J0Zm9saW8gZGlyZWN0b3J5IChkZWZlbnNlIGluIGRlcHRoKVxuICAgICAgY29uc3QgcmVzb2x2ZWREZXN0ID0gcmVzb2x2ZShkZXN0UGF0aCk7XG4gICAgICBpZiAoIXJlc29sdmVkRGVzdC5zdGFydHNXaXRoKHJlc29sdmUocG9ydGZvbGlvRGlyKSkpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ1BhdGggdHJhdmVyc2FsIGRldGVjdGVkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdGF0KGRlc3RQYXRoKTtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDkpLmpzb24oeyBlcnJvcjogYEVsZW1lbnQgYWxyZWFkeSBleGlzdHM6ICR7cGx1cmFsVHlwZX0vJHtmaWxlbmFtZX0uIERlbGV0ZSBpdCBmaXJzdCBvciByZW5hbWUuYCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCB7IC8qIGRvZXNuJ3QgZXhpc3Qg4oCUIGdvb2QgKi8gfVxuXG4gICAgICBjb25zdCB7IHdyaXRlRmlsZTogd3JpdGVGaWxlRnMgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpmcy9wcm9taXNlcycpO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlRnMoZGVzdFBhdGgsIGNvbnRlbnQsICd1dGYtOCcpO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBJbnN0YWxsZWQgY29sbGVjdGlvbiBlbGVtZW50OiAke3BsdXJhbFR5cGV9LyR7ZmlsZW5hbWV9YCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6IGBJbnN0YWxsZWQgJHtuYW1lfSB0byBwb3J0Zm9saW9gLCBwYXRoOiBgJHtwbHVyYWxUeXBlfS8ke2ZpbGVuYW1lfWAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tXZWJVSV0gSW5zdGFsbCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBJbnN0YWxsIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFdlYiBNQ1AtQVFMIEdhdGV3YXkgUm91dGVzIChJc3N1ZSAjNzk2KVxuLy9cbi8vIFRoZXNlIHJvdXRlcyB0cmFuc2xhdGUgSFRUUCByZXF1ZXN0cyBpbnRvIE1DUEFRTEhhbmRsZXIgY2FsbHMsIHJvdXRpbmcgYWxsXG4vLyByZWFkcy93cml0ZXMgdGhyb3VnaCB0aGUgZXhpc3RpbmcgZWxlbWVudCBtYW5hZ2VycywgdmFsaWRhdGlvbiwgYW5kIGdhdGVrZWVwZXIuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBFeHRyYWN0IHNpbmdsZSBvcGVyYXRpb24gcmVzdWx0IGZyb20gTUNQQVFMSGFuZGxlciByZXNwb25zZS5cbiAqIFdlYiByb3V0ZXMgbmV2ZXIgc2VuZCBiYXRjaCByZXF1ZXN0cywgc28gY2FzdCBpcyBzYWZlLlxuICovXG5pbnRlcmZhY2UgU2luZ2xlT3BSZXN1bHQgeyBzdWNjZXNzOiBib29sZWFuOyBkYXRhPzogdW5rbm93bjsgZXJyb3I/OiBzdHJpbmcgfVxuZnVuY3Rpb24gYXNTaW5nbGVSZXN1bHQocjogdW5rbm93bik6IFNpbmdsZU9wUmVzdWx0IHtcbiAgaWYgKHR5cGVvZiByID09PSAnb2JqZWN0JyAmJiByICE9PSBudWxsICYmICdzdWNjZXNzJyBpbiByKSB7XG4gICAgcmV0dXJuIHIgYXMgU2luZ2xlT3BSZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnSW52YWxpZCBvcGVyYXRpb24gcmVzdWx0IGZvcm1hdCcgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgQVBJIHJvdXRlcyB0aGF0IHJvdXRlIHRocm91Z2ggTUNQQVFMSGFuZGxlciAoZ2F0ZXdheSBtb2RlKS5cbiAqIEFsbCBvcGVyYXRpb25zIGdvIHRocm91Z2ggdGhlIE1DUC1BUUwgcGlwZWxpbmU6IHZhbGlkYXRpb24sIGNhY2hlLCBnYXRla2VlcGVyLlxuICpcbiAqIEZhbGxzIGJhY2sgdG8gZGlyZWN0IGZpbGVzeXN0ZW0gZm9yIC9hcGkvY29sbGVjdGlvbiAoZXh0ZXJuYWwgZmV0Y2gsIG5vIE1DUC1BUUwgZXF1aXZhbGVudClcbiAqIGFuZCAvYXBpL3N0YXRzIChsaWdodHdlaWdodCBhZ2dyZWdhdGUsIG5vIG1hdGNoaW5nIG9wZXJhdGlvbikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5QXBpUm91dGVzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIsIHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogUm91dGVyIHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG5cbiAgLy8gU2hhcmVkIHBvcnRmb2xpbyByb3V0ZXMg4oCUIHN0cnVjdHVyZWQgSlNPTiBmb3IgZGV0YWlsIHZpZXdzXG4gIC8vIGNvZGVxbFtqcy9taXNzaW5nLXJhdGUtbGltaXRpbmddIOKAlCBSYXRlLWxpbWl0ZWQgYnkgcm91dGVyLnVzZSgpIG1pZGRsZXdhcmUgaW4gc2VydmVyLnRzXG4gIHJlZ2lzdGVyUG9ydGZvbGlvUm91dGVzKHJvdXRlciwgcG9ydGZvbGlvRGlyLCB7IHN0cnVjdHVyZWREZXRhaWw6IHRydWUsIGxvZ1ByZWZpeDogJ1tXZWJVSS9HYXRld2F5XScgfSk7XG4gIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG4gIHJlZ2lzdGVyQ29sbGVjdGlvblJvdXRlKHJvdXRlciwgcG9ydGZvbGlvRGlyKTtcblxuICAvKipcbiAgICogR0VUIC9hcGkvY29sbGVjdGlvbi9jb250ZW50LypcbiAgICogUHJveGllcyBjb2xsZWN0aW9uIGVsZW1lbnQgY29udGVudCBmcm9tIEdpdEh1YiwgdmFsaWRhdGVzIHRocm91Z2ggdGhlXG4gICAqIHNlY3VyaXR5IHBpcGVsaW5lLCBhbmQgcmV0dXJucyBzdHJ1Y3R1cmVkIEpTT04gKHNhbWUgZm9ybWF0IGFzIHBvcnRmb2xpbyBkZXRhaWwpLlxuICAgKiBjb2RlcWxbanMvbWlzc2luZy1yYXRlLWxpbWl0aW5nXSDigJQgUmF0ZS1saW1pdGVkIGJ5IHJvdXRlci51c2UoKSBtaWRkbGV3YXJlIGFib3ZlLlxuICAgKi9cbiAgcm91dGVyLmdldCgnL2NvbGxlY3Rpb24vY29udGVudC86cHJlZml4Lzp0eXBlLzpuYW1lJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgcHJlZml4ID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy5wcmVmaXgpO1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy50eXBlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IG5vcm1hbGl6ZUlucHV0KHJlcS5wYXJhbXMubmFtZSk7XG4gICAgY29uc3QgZWxlbWVudFBhdGggPSBgJHtwcmVmaXh9LyR7ZWxlbWVudFR5cGV9LyR7ZmlsZW5hbWV9YDtcbiAgICBpZiAoIWVsZW1lbnRQYXRoIHx8IGVsZW1lbnRQYXRoLmluY2x1ZGVzKCcuLicpIHx8IGVsZW1lbnRQYXRoLmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgcGF0aCcgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWxlbWVudCB0eXBlIGFnYWluc3Qga25vd24gdHlwZXMgdG8gcHJldmVudCBhcmJpdHJhcnkgcGF0aCBjb25zdHJ1Y3Rpb25cbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXMoZWxlbWVudFR5cGUgYXMgdHlwZW9mIEVMRU1FTlRfVFlQRVNbbnVtYmVyXSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IGBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJHtlbGVtZW50VHlwZX1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBjb2RlcWxbanMvcmVxdWVzdC1mb3JnZXJ5XSDigJQgbWl0aWdhdGVkOiBkb21haW4gYW5kIHJlcG8gYXJlIGhhcmRjb2RlZCBjb25zdGFudHMsXG4gICAgICAvLyBlbGVtZW50VHlwZSBpcyB2YWxpZGF0ZWQgYWdhaW5zdCBFTEVNRU5UX1RZUEVTIHdoaXRlbGlzdCBhYm92ZSwgcGF0aCB0cmF2ZXJzYWxcbiAgICAgIC8vIGlzIGNoZWNrZWQsIGFuZCB0aGUgb25seSByZWFjaGFibGUgdGFyZ2V0IGlzIGEgc3BlY2lmaWMgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5LlxuICAgICAgY29uc3QgZ2l0aHViVXJsID0gYGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9tYWluLyR7ZWxlbWVudFBhdGh9YDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZ2l0aHViVXJsKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXNwb25zZS5zdGF0dXMgPT09IDQwNCA/IDQwNCA6IDUwMikuanNvbih7XG4gICAgICAgICAgZXJyb3I6IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0XG4gICAgICAgICAgICA/IGBDb2xsZWN0aW9uIGVsZW1lbnQgbm90IGZvdW5kOiAke2VsZW1lbnRQYXRofWBcbiAgICAgICAgICAgIDogYEZhaWxlZCB0byBmZXRjaCBmcm9tIEdpdEh1YiAoSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30pYCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUVsZW1lbnRDb250ZW50KGZpbGVuYW1lLCBjb250ZW50LCBlbGVtZW50VHlwZSk7XG4gICAgICBjb25zdCBzaW5ndWxhclR5cGUgPSBQTFVSQUxfVE9fU0lOR1VMQVJbZWxlbWVudFR5cGVdIHx8IChlbGVtZW50VHlwZS5lbmRzV2l0aCgncycpID8gZWxlbWVudFR5cGUuc2xpY2UoMCwgLTEpIDogZWxlbWVudFR5cGUpO1xuXG4gICAgICByZXMuanNvbih7XG4gICAgICAgIG1ldGFkYXRhOiB2YWxpZGF0aW9uLm1ldGFkYXRhLFxuICAgICAgICBib2R5OiB2YWxpZGF0aW9uLmJvZHksXG4gICAgICAgIHJhdzogY29udGVudCxcbiAgICAgICAgdHlwZTogc2luZ3VsYXJUeXBlLFxuICAgICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgICAgc3RhdHVzOiB2YWxpZGF0aW9uLnZhbGlkID8gJ3Bhc3MnIDogJ3dhcm4nLFxuICAgICAgICAgIC4uLih2YWxpZGF0aW9uLnJlamVjdGlvbiAmJiB7XG4gICAgICAgICAgICByZWFzb246IHZhbGlkYXRpb24ucmVqZWN0aW9uLnJlYXNvbixcbiAgICAgICAgICAgIHNldmVyaXR5OiB2YWxpZGF0aW9uLnJlamVjdGlvbi5zZXZlcml0eSxcbiAgICAgICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uLnJlamVjdGlvbi5wYXR0ZXJucyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbV2ViVUkvR2F0ZXdheV0gRmFpbGVkIHRvIGZldGNoIGNvbGxlY3Rpb24gY29udGVudDonLCBlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDIpLmpzb24oeyBlcnJvcjogJ0ZhaWxlZCB0byBmZXRjaCBjb2xsZWN0aW9uIGVsZW1lbnQnIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFBPU1QgL2FwaS9pbnN0YWxsXG4gICAqIFJvdXRlcyB0aHJvdWdoIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IE1DUC1BUUwgb3BlcmF0aW9uLlxuICAgKiBBbGwgdmFsaWRhdGlvbiwgZ2F0ZWtlZXBlciBjaGVja3MgaGFuZGxlZCBieSB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBjb25zdCBpbnN0YWxsTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoMTAsIDYwXzAwMCk7XG4gIHJvdXRlci5wb3N0KCcvaW5zdGFsbCcsIGV4cHJlc3MuanNvbigpLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBpZiAoIWluc3RhbGxMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1RvbyBtYW55IGluc3RhbGwgcmVxdWVzdHMuIE1heCAxMCBwZXIgbWludXRlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBwYXRoOiBlbGVtZW50UGF0aCwgbmFtZSwgdHlwZSB9ID0gcmVxLmJvZHkgYXMgeyBwYXRoPzogc3RyaW5nOyBuYW1lPzogc3RyaW5nOyB0eXBlPzogc3RyaW5nIH07XG5cbiAgICBpZiAoIWVsZW1lbnRQYXRoIHx8ICF0eXBlIHx8ICFuYW1lKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnTWlzc2luZyByZXF1aXJlZCBmaWVsZHM6IHBhdGgsIG5hbWUsIHR5cGUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50UGF0aC5pbmNsdWRlcygnLi4nKSB8fCBuYW1lLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXRoIG9yIG5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnRQYXRoIGNvbnRhaW5zIG9ubHkgc2FmZSBjaGFyYWN0ZXJzIChhbHBoYW51bWVyaWMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzLCBzbGFzaGVzKVxuICAgIGlmICghL15bYS16QS1aMC05L18uLV0rJC8udGVzdChlbGVtZW50UGF0aCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgcGF0aCBjaGFyYWN0ZXJzJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gUm91dGUgdGhyb3VnaCBNQ1AtQVFMIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IG9wZXJhdGlvblxuICAgICAgY29uc3QgaW5zdGFsbFBhdGggPSBlbGVtZW50UGF0aC5yZXBsYWNlKC9ebGlicmFyeVxcLy8sICcnKTtcbiAgICAgIGNvbnN0IG9wUmVzdWx0ID0gYXNTaW5nbGVSZXN1bHQoYXdhaXQgaGFuZGxlci5oYW5kbGVDcmVhdGUoe1xuICAgICAgICBvcGVyYXRpb246ICdpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudCcsXG4gICAgICAgIHBhcmFtczogeyBwYXRoOiBpbnN0YWxsUGF0aCB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoIW9wUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MjIpLmpzb24oeyBlcnJvcjogb3BSZXN1bHQuZXJyb3IgfHwgJ0luc3RhbGwgZmFpbGVkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJL0dhdGV3YXldIEluc3RhbGxlZCBjb2xsZWN0aW9uIGVsZW1lbnQ6ICR7aW5zdGFsbFBhdGh9YCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6IGBJbnN0YWxsZWQgJHtuYW1lfSB0byBwb3J0Zm9saW9gLCBkYXRhOiBvcFJlc3VsdC5kYXRhIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbV2ViVUkvR2F0ZXdheV0gSW5zdGFsbCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBJbnN0YWxsIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dollhousemcp/mcp-server",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -152,8 +152,6 @@
|
|
|
152
152
|
"dependencies": {
|
|
153
153
|
"@dollhousemcp/safety": "^1.0.0",
|
|
154
154
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
155
|
-
"@types/dompurify": "^3.2.0",
|
|
156
|
-
"@types/uuid": "^10.0.0",
|
|
157
155
|
"chalk": "^5.6.2",
|
|
158
156
|
"dompurify": "^3.3.1",
|
|
159
157
|
"dotenv": "^17.2.3",
|
|
@@ -174,6 +172,7 @@
|
|
|
174
172
|
"@jest/globals": "^30.3.0",
|
|
175
173
|
"@modelcontextprotocol/inspector": "^0.21.1",
|
|
176
174
|
"@types/archiver": "^7.0.0",
|
|
175
|
+
"@types/dompurify": "^3.2.0",
|
|
177
176
|
"@types/express": "^5.0.6",
|
|
178
177
|
"@types/jest": "^30.0.0",
|
|
179
178
|
"@types/js-yaml": "^4.0.9",
|
|
@@ -181,6 +180,7 @@
|
|
|
181
180
|
"@types/node": "^24.10.0",
|
|
182
181
|
"@types/semver": "^7.7.1",
|
|
183
182
|
"@types/supertest": "^7.2.0",
|
|
183
|
+
"@types/uuid": "^10.0.0",
|
|
184
184
|
"@typescript-eslint/eslint-plugin": "^8.46.2",
|
|
185
185
|
"@typescript-eslint/parser": "^8.48.1",
|
|
186
186
|
"archiver": "^7.0.1",
|
package/server.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "io.github.DollhouseMCP/mcp-server",
|
|
4
4
|
"title": "DollhouseMCP",
|
|
5
5
|
"description": "OSS to create Personas, Skills, Templates, Agents, and Memories to customize your AI experience.",
|
|
6
|
-
"version": "2.0.
|
|
6
|
+
"version": "2.0.2",
|
|
7
7
|
"homepage": "https://dollhousemcp.com",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
{
|
|
30
30
|
"registryType": "npm",
|
|
31
31
|
"identifier": "@dollhousemcp/mcp-server",
|
|
32
|
-
"version": "2.0.
|
|
32
|
+
"version": "2.0.2",
|
|
33
33
|
"transport": {
|
|
34
34
|
"type": "stdio"
|
|
35
35
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/constants/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,UAAU,6BAA6B,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// Auto-generated version constant
|
|
2
|
-
export const VERSION = "1.6.5";
|
|
3
|
-
export const BUILD_DATE = "2025-08-26T15:30:22.187Z";
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdGFudHMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBdXRvLWdlbmVyYXRlZCB2ZXJzaW9uIGNvbnN0YW50XG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS42LjVcIjtcbmV4cG9ydCBjb25zdCBCVUlMRF9EQVRFID0gXCIyMDI1LTA4LTI2VDE1OjMwOjIyLjE4N1pcIjtcbiJdfQ==
|