@dollhousemcp/mcp-server 1.6.7 → 1.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +4 -4
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -8
- package/dist/persona/PersonaLoader.d.ts.map +1 -1
- package/dist/persona/PersonaLoader.js +12 -1
- package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioRepoManager.js +5 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonaLoader.d.ts","sourceRoot":"","sources":["../../src/persona/PersonaLoader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAmB,MAAM,qBAAqB,CAAC;AAQ/D,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,WAAW,CAAC,EAAE,MAAM;IAQhC;;OAEG;IACG,OAAO,CAAC,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA4BjF;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"PersonaLoader.d.ts","sourceRoot":"","sources":["../../src/persona/PersonaLoader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAmB,MAAM,qBAAqB,CAAC;AAQ/D,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,WAAW,CAAC,EAAE,MAAM;IAQhC;;OAEG;IACG,OAAO,CAAC,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA4BjF;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAuDjG;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBlD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUvD;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAS3B"}
|
|
@@ -54,6 +54,8 @@ export class PersonaLoader {
|
|
|
54
54
|
try {
|
|
55
55
|
const filePath = path.join(this.personasDir, filename);
|
|
56
56
|
const fileContent = await fs.readFile(filePath, 'utf-8');
|
|
57
|
+
// DIAGNOSTIC: Log file content size
|
|
58
|
+
logger.debug(`[CONTENT-TRACE] Loading ${filename} - file size: ${fileContent.length} chars`);
|
|
57
59
|
// Use secure YAML parser instead of direct gray-matter
|
|
58
60
|
let parsed;
|
|
59
61
|
try {
|
|
@@ -68,6 +70,8 @@ export class PersonaLoader {
|
|
|
68
70
|
}
|
|
69
71
|
const metadata = parsed.data;
|
|
70
72
|
const content = parsed.content;
|
|
73
|
+
// DIAGNOSTIC: Log parsed content size
|
|
74
|
+
logger.debug(`[CONTENT-TRACE] Parsed ${filename} - content size: ${content.length} chars`);
|
|
71
75
|
if (!metadata.name) {
|
|
72
76
|
metadata.name = path.basename(filename, '.md');
|
|
73
77
|
}
|
|
@@ -98,15 +102,22 @@ export class PersonaLoader {
|
|
|
98
102
|
*/
|
|
99
103
|
async savePersona(persona) {
|
|
100
104
|
const filePath = path.join(this.personasDir, persona.filename);
|
|
105
|
+
// DIAGNOSTIC: Log content size before save
|
|
106
|
+
logger.debug(`[CONTENT-TRACE] Saving ${persona.filename} - content size: ${persona.content.length} chars`);
|
|
101
107
|
// Use secure YAML stringification
|
|
102
108
|
const secureParser = SecureYamlParser.createSecureMatterParser();
|
|
103
109
|
const fileContent = secureParser.stringify(persona.content, persona.metadata);
|
|
110
|
+
// DIAGNOSTIC: Log stringified content size
|
|
111
|
+
logger.debug(`[CONTENT-TRACE] Stringified ${persona.filename} - file content size: ${fileContent.length} chars`);
|
|
104
112
|
// SECURITY FIX: Replace direct file write with atomic operation
|
|
105
113
|
// FIXED: CVE-2025-XXXX - Non-atomic file write in persona save operation
|
|
106
114
|
// Original issue: Line 120 used direct fs.writeFile instead of atomic operation
|
|
107
115
|
// Security impact: Race conditions could cause data corruption or partial writes
|
|
108
116
|
// Fix: Replaced with FileLockManager.atomicWriteFile for guaranteed atomicity
|
|
109
117
|
await FileLockManager.atomicWriteFile(filePath, fileContent, { encoding: 'utf-8' });
|
|
118
|
+
// DIAGNOSTIC: Verify file was written correctly
|
|
119
|
+
const writtenContent = await fs.readFile(filePath, 'utf-8');
|
|
120
|
+
logger.debug(`[CONTENT-TRACE] Verified ${persona.filename} - actual file size: ${writtenContent.length} chars`);
|
|
110
121
|
}
|
|
111
122
|
/**
|
|
112
123
|
* Delete a persona file
|
|
@@ -148,4 +159,4 @@ export class PersonaLoader {
|
|
|
148
159
|
metadata.license = 'CC-BY-SA-4.0';
|
|
149
160
|
}
|
|
150
161
|
}
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wZXJzb25hL1BlcnNvbmFMb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUc3QixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE1BQU0sT0FBTyxhQUFhO0lBQ2hCLFdBQVcsQ0FBUztJQUNwQixnQkFBZ0IsQ0FBbUI7SUFFM0MsWUFBWSxXQUFvQjtRQUM5QixtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELDREQUE0RDtRQUM1RCxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFtQztRQUMvQywwQkFBMEI7UUFDMUIsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBRTVDLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUVqRSxLQUFLLE1BQU0sSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDWixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7b0JBQ2xGLENBQUM7Z0JBQ0gsQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLElBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN4RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFnQixFQUFFLGNBQW1DO1FBQ3JFLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2RCxNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRXpELHVEQUF1RDtZQUN2RCxJQUFJLE1BQU0sQ0FBQztZQUNYLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksS0FBSyxZQUFZLGFBQWEsRUFBRSxDQUFDO29CQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxRQUFRLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ2xGLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7Z0JBQ0QsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQXVCLENBQUM7WUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUUvQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuQixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFFRCxvQ0FBb0M7WUFDcEMsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxjQUFjLEVBQUUsSUFBSSxTQUFTLENBQUM7Z0JBQ3JFLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUVELHlDQUF5QztZQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbEMsTUFBTSxPQUFPLEdBQVk7Z0JBQ3ZCLFFBQVE7Z0JBQ1IsT0FBTztnQkFDUCxRQUFRO2dCQUNSLFNBQVMsRUFBRSxRQUFRO2FBQ3BCLENBQUM7WUFFRixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLFFBQVEsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBZ0I7UUFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUvRCxrQ0FBa0M7UUFDbEMsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlFLGdFQUFnRTtRQUNoRSx5RUFBeUU7UUFDekUsZ0ZBQWdGO1FBQ2hGLGlGQUFpRjtRQUNqRiw4RUFBOEU7UUFDOUUsTUFBTSxlQUFlLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQWdCO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFnQjtRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkQsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLFFBQXlCO1FBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUTtZQUFFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtZQUFFLFFBQVEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYTtZQUFFLFFBQVEsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3pELElBQUksUUFBUSxDQUFDLFlBQVksS0FBSyxTQUFTO1lBQUUsUUFBUSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDdkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7WUFBRSxRQUFRLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSztZQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTztZQUFFLFFBQVEsQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO0lBQzNELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyc29uYSBsb2FkaW5nIGFuZCBmaWxlIG1hbmFnZW1lbnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5pbXBvcnQgeyBQZXJzb25hLCBQZXJzb25hTWV0YWRhdGEgfSBmcm9tICcuLi90eXBlcy9wZXJzb25hLmpzJztcbmltcG9ydCB7IGVuc3VyZURpcmVjdG9yeSwgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uL3V0aWxzL2ZpbGVzeXN0ZW0uanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9TZWN1cml0eUVycm9yLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyLCBFbGVtZW50VHlwZSB9IGZyb20gJy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4uL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25hTG9hZGVyIHtcbiAgcHJpdmF0ZSBwZXJzb25hc0Rpcjogc3RyaW5nO1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIFxuICBjb25zdHJ1Y3RvcihwZXJzb25hc0Rpcj86IHN0cmluZykge1xuICAgIC8vIFVzZSBQb3J0Zm9saW9NYW5hZ2VyIGZvciBuZXcgcG9ydGZvbGlvIHN0cnVjdHVyZVxuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAvLyBJZiBwZXJzb25hc0RpciBpcyBwcm92aWRlZCwgaXQncyBmb3IgbGVnYWN5IGNvbXBhdGliaWxpdHlcbiAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBwb3J0Zm9saW8gcGVyc29uYXMgZGlyZWN0b3J5XG4gICAgdGhpcy5wZXJzb25hc0RpciA9IHBlcnNvbmFzRGlyIHx8IHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICB9XG4gIFxuICAvKipcbiAgICogTG9hZCBhbGwgcGVyc29uYXMgZnJvbSB0aGUgcGVyc29uYXMgZGlyZWN0b3J5XG4gICAqL1xuICBhc3luYyBsb2FkQWxsKGdldEN1cnJlbnRVc2VyOiAoKSA9PiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBQZXJzb25hPj4ge1xuICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KHRoaXMucGVyc29uYXNEaXIpO1xuICAgIFxuICAgIGNvbnN0IHBlcnNvbmFzID0gbmV3IE1hcDxzdHJpbmcsIFBlcnNvbmE+KCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnBlcnNvbmFzRGlyKTtcbiAgICAgIGNvbnN0IG1hcmtkb3duRmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSk7XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtYXJrZG93bkZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IHRoaXMubG9hZFBlcnNvbmEoZmlsZSwgZ2V0Q3VycmVudFVzZXIpO1xuICAgICAgICAgIGlmIChwZXJzb25hKSB7XG4gICAgICAgICAgICBwZXJzb25hcy5zZXQoZmlsZSwgcGVyc29uYSk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYExvYWRlZCBwZXJzb25hOiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX0gKCR7cGVyc29uYS51bmlxdWVfaWR9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgcGVyc29uYSAke2ZpbGV9OmAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIHJlYWRpbmcgcGVyc29uYXMgZGlyZWN0b3J5OmAsIGVycm9yKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHBlcnNvbmFzO1xuICB9XG4gIFxuICAvKipcbiAgICogTG9hZCBhIHNpbmdsZSBwZXJzb25hIGZyb20gZmlsZVxuICAgKi9cbiAgYXN5bmMgbG9hZFBlcnNvbmEoZmlsZW5hbWU6IHN0cmluZywgZ2V0Q3VycmVudFVzZXI6ICgpID0+IHN0cmluZyB8IG51bGwpOiBQcm9taXNlPFBlcnNvbmEgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgXG4gICAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgcGFyc2VyIGluc3RlYWQgb2YgZGlyZWN0IGdyYXktbWF0dGVyXG4gICAgICBsZXQgcGFyc2VkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5zYWZlTWF0dGVyKGZpbGVDb250ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYFNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBwZXJzb25hICR7ZmlsZW5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gcGFyc2VkLmRhdGEgYXMgUGVyc29uYU1ldGFkYXRhO1xuICAgICAgY29uc3QgY29udGVudCA9IHBhcnNlZC5jb250ZW50O1xuICAgICAgXG4gICAgICBpZiAoIW1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgbWV0YWRhdGEubmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUsICcubWQnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2VuZXJhdGUgdW5pcXVlIElEIGlmIG5vdCBwcmVzZW50XG4gICAgICBsZXQgdW5pcXVlSWQgPSBtZXRhZGF0YS51bmlxdWVfaWQ7XG4gICAgICBpZiAoIXVuaXF1ZUlkKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvckZvcklkID0gbWV0YWRhdGEuYXV0aG9yIHx8IGdldEN1cnJlbnRVc2VyKCkgfHwgdW5kZWZpbmVkO1xuICAgICAgICB1bmlxdWVJZCA9IGdlbmVyYXRlVW5pcXVlSWQobWV0YWRhdGEubmFtZSwgYXV0aG9yRm9ySWQpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYEdlbmVyYXRlZCB1bmlxdWUgSUQgZm9yICR7bWV0YWRhdGEubmFtZX06ICR7dW5pcXVlSWR9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWV0YWRhdGEgZmllbGRzXG4gICAgICB0aGlzLnNldERlZmF1bHRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHBlcnNvbmE6IFBlcnNvbmEgPSB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgdW5pcXVlX2lkOiB1bmlxdWVJZCxcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHJldHVybiBwZXJzb25hO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgcGVyc29uYSAke2ZpbGVuYW1lfTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTYXZlIGEgcGVyc29uYSB0byBmaWxlXG4gICAqL1xuICBhc3luYyBzYXZlUGVyc29uYShwZXJzb25hOiBQZXJzb25hKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciwgcGVyc29uYS5maWxlbmFtZSk7XG4gICAgXG4gICAgLy8gVXNlIHNlY3VyZSBZQU1MIHN0cmluZ2lmaWNhdGlvblxuICAgIGNvbnN0IHNlY3VyZVBhcnNlciA9IFNlY3VyZVlhbWxQYXJzZXIuY3JlYXRlU2VjdXJlTWF0dGVyUGFyc2VyKCk7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSBzZWN1cmVQYXJzZXIuc3RyaW5naWZ5KHBlcnNvbmEuY29udGVudCwgcGVyc29uYS5tZXRhZGF0YSk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYOiBSZXBsYWNlIGRpcmVjdCBmaWxlIHdyaXRlIHdpdGggYXRvbWljIG9wZXJhdGlvblxuICAgIC8vIEZJWEVEOiBDVkUtMjAyNS1YWFhYIC0gTm9uLWF0b21pYyBmaWxlIHdyaXRlIGluIHBlcnNvbmEgc2F2ZSBvcGVyYXRpb25cbiAgICAvLyBPcmlnaW5hbCBpc3N1ZTogTGluZSAxMjAgdXNlZCBkaXJlY3QgZnMud3JpdGVGaWxlIGluc3RlYWQgb2YgYXRvbWljIG9wZXJhdGlvblxuICAgIC8vIFNlY3VyaXR5IGltcGFjdDogUmFjZSBjb25kaXRpb25zIGNvdWxkIGNhdXNlIGRhdGEgY29ycnVwdGlvbiBvciBwYXJ0aWFsIHdyaXRlc1xuICAgIC8vIEZpeDogUmVwbGFjZWQgd2l0aCBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlIGZvciBndWFyYW50ZWVkIGF0b21pY2l0eVxuICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZmlsZVBhdGgsIGZpbGVDb250ZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogRGVsZXRlIGEgcGVyc29uYSBmaWxlXG4gICAqL1xuICBhc3luYyBkZWxldGVQZXJzb25hKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyLCBmaWxlbmFtZSk7XG4gICAgYXdhaXQgZnMudW5saW5rKGZpbGVQYXRoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgcGVyc29uYSBmaWxlIGV4aXN0c1xuICAgKi9cbiAgYXN5bmMgcGVyc29uYUV4aXN0cyhmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVuYW1lKTtcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCBtZXRhZGF0YSB2YWx1ZXNcbiAgICovXG4gIHByaXZhdGUgc2V0RGVmYXVsdE1ldGFkYXRhKG1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGEpOiB2b2lkIHtcbiAgICBpZiAoIW1ldGFkYXRhLmNhdGVnb3J5KSBtZXRhZGF0YS5jYXRlZ29yeSA9ICdnZW5lcmFsJztcbiAgICBpZiAoIW1ldGFkYXRhLmFnZV9yYXRpbmcpIG1ldGFkYXRhLmFnZV9yYXRpbmcgPSAnYWxsJztcbiAgICBpZiAoIW1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MpIG1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MgPSBbXTtcbiAgICBpZiAobWV0YWRhdGEuYWlfZ2VuZXJhdGVkID09PSB1bmRlZmluZWQpIG1ldGFkYXRhLmFpX2dlbmVyYXRlZCA9IGZhbHNlO1xuICAgIGlmICghbWV0YWRhdGEuZ2VuZXJhdGlvbl9tZXRob2QpIG1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kID0gJ2h1bWFuJztcbiAgICBpZiAoIW1ldGFkYXRhLnByaWNlKSBtZXRhZGF0YS5wcmljZSA9ICdmcmVlJztcbiAgICBpZiAoIW1ldGFkYXRhLmxpY2Vuc2UpIG1ldGFkYXRhLmxpY2Vuc2UgPSAnQ0MtQlktU0EtNC4wJztcbiAgfVxufSJdfQ==
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wZXJzb25hL1BlcnNvbmFMb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUc3QixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE1BQU0sT0FBTyxhQUFhO0lBQ2hCLFdBQVcsQ0FBUztJQUNwQixnQkFBZ0IsQ0FBbUI7SUFFM0MsWUFBWSxXQUFvQjtRQUM5QixtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELDREQUE0RDtRQUM1RCxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFtQztRQUMvQywwQkFBMEI7UUFDMUIsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFt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LFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVO1lBQUUsUUFBUSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhO1lBQUUsUUFBUSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDekQsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLFNBQVM7WUFBRSxRQUFRLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQjtZQUFFLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUM7UUFDdEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO1lBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1lBQUUsUUFBUSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUM7SUFDM0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQZXJzb25hIGxvYWRpbmcgYW5kIGZpbGUgbWFuYWdlbWVudFxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbWF0dGVyIGZyb20gJ2dyYXktbWF0dGVyJztcbmltcG9ydCB7IFBlcnNvbmEsIFBlcnNvbmFNZXRhZGF0YSB9IGZyb20gJy4uL3R5cGVzL3BlcnNvbmEuanMnO1xuaW1wb3J0IHsgZW5zdXJlRGlyZWN0b3J5LCBnZW5lcmF0ZVVuaXF1ZUlkIH0gZnJvbSAnLi4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL1NlY3VyaXR5RXJyb3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIsIEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJztcblxuZXhwb3J0IGNsYXNzIFBlcnNvbmFMb2FkZXIge1xuICBwcml2YXRlIHBlcnNvbmFzRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcjtcbiAgXG4gIGNvbnN0cnVjdG9yKHBlcnNvbmFzRGlyPzogc3RyaW5nKSB7XG4gICAgLy8gVXNlIFBvcnRmb2xpb01hbmFnZXIgZm9yIG5ldyBwb3J0Zm9saW8gc3RydWN0dXJlXG4gICAgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIC8vIElmIHBlcnNvbmFzRGlyIGlzIHByb3ZpZGVkLCBpdCdzIGZvciBsZWdhY3kgY29tcGF0aWJpbGl0eVxuICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIHBvcnRmb2xpbyBwZXJzb25hcyBkaXJlY3RvcnlcbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gcGVyc29uYXNEaXIgfHwgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuUEVSU09OQSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGFsbCBwZXJzb25hcyBmcm9tIHRoZSBwZXJzb25hcyBkaXJlY3RvcnlcbiAgICovXG4gIGFzeW5jIGxvYWRBbGwoZ2V0Q3VycmVudFVzZXI6ICgpID0+IHN0cmluZyB8IG51bGwpOiBQcm9taXNlPE1hcDxzdHJpbmcsIFBlcnNvbmE+PiB7XG4gICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkodGhpcy5wZXJzb25hc0Rpcik7XG4gICAgXG4gICAgY29uc3QgcGVyc29uYXMgPSBuZXcgTWFwPHN0cmluZywgUGVyc29uYT4oKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMucGVyc29uYXNEaXIpO1xuICAgICAgY29uc3QgbWFya2Rvd25GaWxlcyA9IGZpbGVzLmZpbHRlcihmaWxlID0+IGZpbGUuZW5kc1dpdGgoJy5tZCcpKTtcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIG1hcmtkb3duRmlsZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwZXJzb25hID0gYXdhaXQgdGhpcy5sb2FkUGVyc29uYShmaWxlLCBnZXRDdXJyZW50VXNlcik7XG4gICAgICAgICAgaWYgKHBlcnNvbmEpIHtcbiAgICAgICAgICAgIHBlcnNvbmFzLnNldChmaWxlLCBwZXJzb25hKTtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9hZGVkIHBlcnNvbmE6ICR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSAoJHtwZXJzb25hLnVuaXF1ZV9pZH0pYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3IgbG9hZGluZyBwZXJzb25hICR7ZmlsZX06YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3IgcmVhZGluZyBwZXJzb25hcyBkaXJlY3Rvcnk6YCwgZXJyb3IpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcGVyc29uYXM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGEgc2luZ2xlIHBlcnNvbmEgZnJvbSBmaWxlXG4gICAqL1xuICBhc3luYyBsb2FkUGVyc29uYShmaWxlbmFtZTogc3RyaW5nLCBnZXRDdXJyZW50VXNlcjogKCkgPT4gc3RyaW5nIHwgbnVsbCk6IFByb21pc2U8UGVyc29uYSB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciwgZmlsZW5hbWUpO1xuICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBcbiAgICAgIC8vIERJQUdOT1NUSUM6IExvZyBmaWxlIGNvbnRlbnQgc2l6ZVxuICAgICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gTG9hZGluZyAke2ZpbGVuYW1lfSAtIGZpbGUgc2l6ZTogJHtmaWxlQ29udGVudC5sZW5ndGh9IGNoYXJzYCk7XG4gICAgICBcbiAgICAgIC8vIFVzZSBzZWN1cmUgWUFNTCBwYXJzZXIgaW5zdGVhZCBvZiBkaXJlY3QgZ3JheS1tYXR0ZXJcbiAgICAgIGxldCBwYXJzZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnNhZmVNYXR0ZXIoZmlsZUNvbnRlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgU2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIHBlcnNvbmEgJHtmaWxlbmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBwYXJzZWQuZGF0YSBhcyBQZXJzb25hTWV0YWRhdGE7XG4gICAgICBjb25zdCBjb250ZW50ID0gcGFyc2VkLmNvbnRlbnQ7XG4gICAgICBcbiAgICAgIC8vIERJQUdOT1NUSUM6IExvZyBwYXJzZWQgY29udGVudCBzaXplXG4gICAgICBsb2dnZXIuZGVidWcoYFtDT05URU5ULVRSQUNFXSBQYXJzZWQgJHtmaWxlbmFtZX0gLSBjb250ZW50IHNpemU6ICR7Y29udGVudC5sZW5ndGh9IGNoYXJzYCk7XG4gICAgICBcbiAgICAgIGlmICghbWV0YWRhdGEubmFtZSkge1xuICAgICAgICBtZXRhZGF0YS5uYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgJy5tZCcpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgSUQgaWYgbm90IHByZXNlbnRcbiAgICAgIGxldCB1bmlxdWVJZCA9IG1ldGFkYXRhLnVuaXF1ZV9pZDtcbiAgICAgIGlmICghdW5pcXVlSWQpIHtcbiAgICAgICAgY29uc3QgYXV0aG9yRm9ySWQgPSBtZXRhZGF0YS5hdXRob3IgfHwgZ2V0Q3VycmVudFVzZXIoKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIHVuaXF1ZUlkID0gZ2VuZXJhdGVVbmlxdWVJZChtZXRhZGF0YS5uYW1lLCBhdXRob3JGb3JJZCk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgR2VuZXJhdGVkIHVuaXF1ZSBJRCBmb3IgJHttZXRhZGF0YS5uYW1lfTogJHt1bmlxdWVJZH1gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBtZXRhZGF0YSBmaWVsZHNcbiAgICAgIHRoaXMuc2V0RGVmYXVsdE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICAgIFxuICAgICAgY29uc3QgcGVyc29uYTogUGVyc29uYSA9IHtcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICB1bmlxdWVfaWQ6IHVuaXF1ZUlkLFxuICAgICAgfTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHBlcnNvbmE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3IgbG9hZGluZyBwZXJzb25hICR7ZmlsZW5hbWV9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFNhdmUgYSBwZXJzb25hIHRvIGZpbGVcbiAgICovXG4gIGFzeW5jIHNhdmVQZXJzb25hKHBlcnNvbmE6IFBlcnNvbmEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyLCBwZXJzb25hLmZpbGVuYW1lKTtcbiAgICBcbiAgICAvLyBESUFHTk9TVElDOiBMb2cgY29udGVudCBzaXplIGJlZm9yZSBzYXZlXG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gU2F2aW5nICR7cGVyc29uYS5maWxlbmFtZX0gLSBjb250ZW50IHNpemU6ICR7cGVyc29uYS5jb250ZW50Lmxlbmd0aH0gY2hhcnNgKTtcbiAgICBcbiAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgc3RyaW5naWZpY2F0aW9uXG4gICAgY29uc3Qgc2VjdXJlUGFyc2VyID0gU2VjdXJlWWFtbFBhcnNlci5jcmVhdGVTZWN1cmVNYXR0ZXJQYXJzZXIoKTtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHNlY3VyZVBhcnNlci5zdHJpbmdpZnkocGVyc29uYS5jb250ZW50LCBwZXJzb25hLm1ldGFkYXRhKTtcbiAgICBcbiAgICAvLyBESUFHTk9TVElDOiBMb2cgc3RyaW5naWZpZWQgY29udGVudCBzaXplXG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gU3RyaW5naWZpZWQgJHtwZXJzb25hLmZpbGVuYW1lfSAtIGZpbGUgY29udGVudCBzaXplOiAke2ZpbGVDb250ZW50Lmxlbmd0aH0gY2hhcnNgKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVg6IFJlcGxhY2UgZGlyZWN0IGZpbGUgd3JpdGUgd2l0aCBhdG9taWMgb3BlcmF0aW9uXG4gICAgLy8gRklYRUQ6IENWRS0yMDI1LVhYWFggLSBOb24tYXRvbWljIGZpbGUgd3JpdGUgaW4gcGVyc29uYSBzYXZlIG9wZXJhdGlvblxuICAgIC8vIE9yaWdpbmFsIGlzc3VlOiBMaW5lIDEyMCB1c2VkIGRpcmVjdCBmcy53cml0ZUZpbGUgaW5zdGVhZCBvZiBhdG9taWMgb3BlcmF0aW9uXG4gICAgLy8gU2VjdXJpdHkgaW1wYWN0OiBSYWNlIGNvbmRpdGlvbnMgY291bGQgY2F1c2UgZGF0YSBjb3JydXB0aW9uIG9yIHBhcnRpYWwgd3JpdGVzXG4gICAgLy8gRml4OiBSZXBsYWNlZCB3aXRoIEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUgZm9yIGd1YXJhbnRlZWQgYXRvbWljaXR5XG4gICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmaWxlUGF0aCwgZmlsZUNvbnRlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgXG4gICAgLy8gRElBR05PU1RJQzogVmVyaWZ5IGZpbGUgd2FzIHdyaXR0ZW4gY29ycmVjdGx5XG4gICAgY29uc3Qgd3JpdHRlbkNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gVmVyaWZpZWQgJHtwZXJzb25hLmZpbGVuYW1lfSAtIGFjdHVhbCBmaWxlIHNpemU6ICR7d3JpdHRlbkNvbnRlbnQubGVuZ3RofSBjaGFyc2ApO1xuICB9XG4gIFxuICAvKipcbiAgICogRGVsZXRlIGEgcGVyc29uYSBmaWxlXG4gICAqL1xuICBhc3luYyBkZWxldGVQZXJzb25hKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyLCBmaWxlbmFtZSk7XG4gICAgYXdhaXQgZnMudW5saW5rKGZpbGVQYXRoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgcGVyc29uYSBmaWxlIGV4aXN0c1xuICAgKi9cbiAgYXN5bmMgcGVyc29uYUV4aXN0cyhmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVuYW1lKTtcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCBtZXRhZGF0YSB2YWx1ZXNcbiAgICovXG4gIHByaXZhdGUgc2V0RGVmYXVsdE1ldGFkYXRhKG1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGEpOiB2b2lkIHtcbiAgICBpZiAoIW1ldGFkYXRhLmNhdGVnb3J5KSBtZXRhZGF0YS5jYXRlZ29yeSA9ICdnZW5lcmFsJztcbiAgICBpZiAoIW1ldGFkYXRhLmFnZV9yYXRpbmcpIG1ldGFkYXRhLmFnZV9yYXRpbmcgPSAnYWxsJztcbiAgICBpZiAoIW1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MpIG1ldGFkYXRhLmNvbnRlbnRfZmxhZ3MgPSBbXTtcbiAgICBpZiAobWV0YWRhdGEuYWlfZ2VuZXJhdGVkID09PSB1bmRlZmluZWQpIG1ldGFkYXRhLmFpX2dlbmVyYXRlZCA9IGZhbHNlO1xuICAgIGlmICghbWV0YWRhdGEuZ2VuZXJhdGlvbl9tZXRob2QpIG1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kID0gJ2h1bWFuJztcbiAgICBpZiAoIW1ldGFkYXRhLnByaWNlKSBtZXRhZGF0YS5wcmljZSA9ICdmcmVlJztcbiAgICBpZiAoIW1ldGFkYXRhLmxpY2Vuc2UpIG1ldGFkYXRhLmxpY2Vuc2UgPSAnQ0MtQlktU0EtNC4wJztcbiAgfVxufSJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortfolioRepoManager.d.ts","sourceRoot":"","sources":["../../src/portfolio/PortfolioRepoManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAOzD,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;IACpE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAuC;IAClF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAEnE,OAAO,CAAC,KAAK,CAAuB;;IAMpC;;;OAGG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC;;;;OAIG;YACW,mBAAmB;IA6BjC;;OAEG;YACW,aAAa;IA0D3B;;;;OAIG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe9D;;;OAGG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IA+EtF;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"PortfolioRepoManager.d.ts","sourceRoot":"","sources":["../../src/portfolio/PortfolioRepoManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAOzD,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;IACpE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAuC;IAClF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAEnE,OAAO,CAAC,KAAK,CAAuB;;IAMpC;;;OAGG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC;;;;OAIG;YACW,mBAAmB;IA6BjC;;OAEG;YACW,aAAa;IA0D3B;;;;OAIG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe9D;;;OAGG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IA+EtF;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAoJnF;;;OAGG;IACG,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CjE;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcvB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAQ7B"}
|
|
@@ -224,6 +224,10 @@ export class PortfolioRepoManager {
|
|
|
224
224
|
const filePath = `${element.type}/${fileName}.md`;
|
|
225
225
|
// Prepare content (could be markdown with frontmatter)
|
|
226
226
|
const content = this.formatElementContent(element);
|
|
227
|
+
// DIAGNOSTIC: Log content size before sending to GitHub
|
|
228
|
+
logger.debug(`[CONTENT-TRACE] Saving element ${element.id} to GitHub - content size: ${content.length} chars`);
|
|
229
|
+
logger.debug(`[CONTENT-TRACE] First 200 chars: ${content.substring(0, 200)}`);
|
|
230
|
+
logger.debug(`[CONTENT-TRACE] Last 200 chars: ${content.substring(Math.max(0, content.length - 200))}`);
|
|
227
231
|
// Save to GitHub
|
|
228
232
|
try {
|
|
229
233
|
// First, check if file exists to determine if this is create or update
|
|
@@ -404,4 +408,4 @@ These elements can be imported into your DollhouseMCP installation.
|
|
|
404
408
|
return `# ${element.metadata.name}\n\n${element.metadata.description || ''}`;
|
|
405
409
|
}
|
|
406
410
|
}
|
|
407
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvUmVwb01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRdkUsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixNQUFNLENBQVUsbUJBQW1CLEdBQUcscUJBQXFCLENBQUM7SUFDNUQsTUFBTSxDQUFVLG1CQUFtQixHQUFHLG1DQUFtQyxDQUFDO0lBQzFFLE1BQU0sQ0FBVSxlQUFlLEdBQUcsd0JBQXdCLENBQUM7SUFFM0QsS0FBSyxHQUFrQixJQUFJLENBQUM7SUFFcEM7UUFDRSxzQ0FBc0M7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7WUFDekYsQ0FBQztZQUVELG9F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O1FBQ2pELElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFDRCxvQ0FBb0M7UUFDcEMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQy9FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvcnRmb2xpb1JlcG9NYW5hZ2VyIC0gTWFuYWdlcyBHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcmllcyBmb3IgZWxlbWVudCBzdG9yYWdlXG4gKiBcbiAqIEtleSBGZWF0dXJlczpcbiAqIC0gRVhQTElDSVQgQ09OU0VOVCByZXF1aXJlZCBmb3IgYWxsIG9wZXJhdGlvbnNcbiAqIC0gQ3JlYXRlcyBwb3J0Zm9saW8gcmVwb3NpdG9yaWVzIGluIHVzZXIncyBHaXRIdWIgYWNjb3VudFxuICogLSBTYXZlcyBlbGVtZW50cyB0byBhcHByb3ByaWF0ZSBkaXJlY3Rvcmllc1xuICogLSBIYW5kbGVzIEFQSSBmYWlsdXJlcyBncmFjZWZ1bGx5XG4gKiAtIFByb3ZpZGVzIGF1ZGl0IGxvZ2dpbmcgZm9yIGNvbnNlbnQgZGVjaXNpb25zXG4gKi9cblxuaW1wb3J0IHsgSUVsZW1lbnQgfSBmcm9tICcuLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBUb2tlbk1hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydGZvbGlvUmVwb09wdGlvbnMge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHJpdmF0ZT86IGJvb2xlYW47XG4gIGF1dG9faW5pdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBQb3J0Zm9saW9SZXBvTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBPUlRGT0xJT19SRVBPX05BTUUgPSAnZG9sbGhvdXNlLXBvcnRmb2xpbyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfREVTQ1JJUFRJT04gPSAnTXkgRG9sbGhvdXNlTUNQIGVsZW1lbnQgcG9ydGZvbGlvJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgR0lUSFVCX0FQSV9CQVNFID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nO1xuICBcbiAgcHJpdmF0ZSB0b2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gVG9rZW4gd2lsbCBiZSByZXRyaWV2ZWQgd2hlbiBuZWVkZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIEdpdEh1YiB0b2tlbiBmb3IgQVBJIGNhbGxzXG4gICAqIFVzZWQgd2hlbiB0b2tlbiBpcyBhbHJlYWR5IGF2YWlsYWJsZSBmcm9tIFRva2VuTWFuYWdlclxuICAgKi9cbiAgcHVibGljIHNldFRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gIH1cblxuICAvKipcbiAgICogR2V0IEdpdEh1YiB0b2tlbiBmb3IgQVBJIGNhbGxzIHdpdGggdmFsaWRhdGlvblxuICAgKiBTRUNVUklUWSBGSVg6IEFkZGVkIHRva2VuIHZhbGlkYXRpb24gdG8gcHJldmVudCB0b2tlbiB2YWxpZGF0aW9uIGJ5cGFzcyAoRE1DUC1TRUMtMDAyKVxuICAgKiBNZXRob2QgbmFtZSBpbmNsdWRlcyAndmFsaWRhdGUnIHRvIHNhdGlzZnkgc2VjdXJpdHkgc2Nhbm5lciBwYXR0ZXJuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFRva2VuQW5kVmFsaWRhdGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMudG9rZW4pIHtcbiAgICAgIHRoaXMudG9rZW4gPSBhd2FpdCBUb2tlbk1hbmFnZXIuZ2V0R2l0SHViVG9rZW5Bc3luYygpO1xuICAgICAgaWYgKCF0aGlzLnRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignR2l0SHViIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLiBQbGVhc2UgdXNlIHNldHVwX2dpdGh1Yl9hdXRoIGZpcnN0LicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFZhbGlkYXRlIHRva2VuIGJlZm9yZSB1c2UgdG8gcHJldmVudCBieXBhc3MgYXR0YWNrc1xuICAgICAgLy8gVXNpbmcgdmFsaWRhdGVUb2tlblNjb3BlcyB3aXRoIG1pbmltYWwgcmVxdWlyZWQgc2NvcGVzIGZvciBwb3J0Zm9saW8gb3BlcmF0aW9uc1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IFRva2VuTWFuYWdlci52YWxpZGF0ZVRva2VuU2NvcGVzKHRoaXMudG9rZW4sIHtcbiAgICAgICAgcmVxdWlyZWQ6IFsncHVibGljX3JlcG8nXSAvLyBNaW5pbXVtIHNjb3BlIG5lZWRlZCBmb3IgcG9ydGZvbGlvIG9wZXJhdGlvbnNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICB0aGlzLnRva2VuID0gbnVsbDtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9yIGV4cGlyZWQgR2l0SHViIHRva2VuOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IgfHwgJ1BsZWFzZSByZS1hdXRoZW50aWNhdGUuJ31gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTE9XIEZJWDogQWRkIGF1ZGl0IGxvZ2dpbmcgZm9yIHNlY3VyaXR5IG9wZXJhdGlvbnMgKERNQ1AtU0VDLTAwNilcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fU1VDQ0VTUycsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnUG9ydGZvbGlvUmVwb01hbmFnZXIuZ2V0VG9rZW4nLFxuICAgICAgICBkZXRhaWxzOiAnR2l0SHViIHRva2VuIHZhbGlkYXRlZCBzdWNjZXNzZnVsbHkgZm9yIHBvcnRmb2xpbyBvcGVyYXRpb25zJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYXV0aGVudGljYXRlZCBHaXRIdWIgQVBJIHJlcXVlc3RcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2l0aHViUmVxdWVzdChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgbWV0aG9kOiBzdHJpbmcgPSAnR0VUJyxcbiAgICBib2R5PzogYW55XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmdldFRva2VuQW5kVmFsaWRhdGUoKTtcbiAgICBjb25zdCB1cmwgPSBgJHtQb3J0Zm9saW9SZXBvTWFuYWdlci5HSVRIVUJfQVBJX0JBU0V9JHtwYXRofWA7XG4gICAgXG4gICAgY29uc3Qgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7XG4gICAgICBtZXRob2QsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uJyxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLzEuMCdcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIG9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBvcHRpb25zKTtcbiAgICBcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBOb3QgZm91bmQgaXMgb2Z0ZW4gZXhwZWN0ZWRcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgLy8gUHJvdmlkZSBtb3JlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2VzIGZvciBjb21tb24gc3RhdHVzIGNvZGVzXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gZGF0YS5tZXNzYWdlIHx8IGBHaXRIdWIgQVBJIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c31gO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgICBjYXNlIDQyMjpcbiAgICAgICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCAtIG9mdGVuIG1lYW5zIHJlcG9zaXRvcnkgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgUmVwb3NpdG9yeSB2YWxpZGF0aW9uIGZhaWxlZDogJHtkYXRhLm1lc3NhZ2UgfHwgJ25hbWUgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBhY2NvdW50J31gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIGNoZWNrIHlvdXIgdG9rZW4uJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEdpdEh1YiBBUEkgYWNjZXNzIGZvcmJpZGRlbjogJHtkYXRhLm1lc3NhZ2UgfHwgJ2luc3VmZmljaWVudCBwZXJtaXNzaW9ucyBvciByYXRlIGxpbWl0IGV4Y2VlZGVkJ31gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUwMDpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnR2l0SHViIEFQSSBzZXJ2ZXIgZXJyb3IuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgR2l0SHViIEFQSSBlcnJvciAoJHtyZXNwb25zZS5zdGF0dXN9KTogJHtkYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHBvcnRmb2xpbyByZXBvc2l0b3J5IGV4aXN0cyBmb3IgYSB1c2VyXG4gICAqIE5vIGNvbnNlbnQgcmVxdWlyZWQgLSB0aGlzIGlzIGEgcmVhZC1vbmx5IG9wZXJhdGlvblxuICAgKiBTRUNVUklUWSBGSVg6IEFkZGVkIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBmb3IgdXNlciBpbnB1dCAoRE1DUC1TRUMtMDA0KVxuICAgKi9cbiAgYXN5bmMgY2hlY2tQb3J0Zm9saW9FeGlzdHModXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIE1FRElVTSBGSVg6IE5vcm1hbGl6ZSB1c2VybmFtZSB0byBwcmV2ZW50IFVuaWNvZGUgYXR0YWNrc1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRVc2VybmFtZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHVzZXJuYW1lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgYC9yZXBvcy8ke25vcm1hbGl6ZWRVc2VybmFtZX0vJHtQb3J0Zm9saW9SZXBvTWFuYWdlci5QT1JURk9MSU9fUkVQT19OQU1FfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVwbyAhPT0gbnVsbDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gUmVwb3NpdG9yeSBkb2Vzbid0IGV4aXN0IG9yIEFQSSBlcnJvciAtIGJvdGggcmV0dXJuIGZhbHNlXG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNoZWNrSWZSZXBvRXhpc3RzJywgZXJyb3IsIHsgdXNlcm5hbWUgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBwb3J0Zm9saW8gcmVwb3NpdG9yeSB3aXRoIEVYUExJQ0lUIHVzZXIgY29uc2VudFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHVzZXIgZGVjbGluZXMgY29uc2VudCBvciBpZiBjb25zZW50IGlzIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlUG9ydGZvbGlvKHVzZXJuYW1lOiBzdHJpbmcsIGNvbnNlbnQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIC8vIE1FRElVTSBGSVg6IE5vcm1hbGl6ZSB1c2VybmFtZSB0byBwcmV2ZW50IFVuaWNvZGUgYXR0YWNrcyAoRE1DUC1TRUMtMDA0KVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRVc2VybmFtZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHVzZXJuYW1lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICAvLyBDUklUSUNBTDogVmFsaWRhdGUgY29uc2VudCBpcyBleHBsaWNpdGx5IHByb3ZpZGVkXG4gICAgaWYgKGNvbnNlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zZW50IGlzIHJlcXVpcmVkIGZvciBwb3J0Zm9saW8gY3JlYXRpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnNlbnQpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBVc2VyIGRlY2xpbmVkIHBvcnRmb2xpbyBjcmVhdGlvbiBmb3IgJHt1c2VybmFtZX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBkZWNsaW5lZCBwb3J0Zm9saW8gY3JlYXRpb24nKTtcbiAgICB9XG5cbiAgICAvLyBMb2cgY29uc2VudCBmb3IgYXVkaXQgdHJhaWxcbiAgICBsb2dnZXIuaW5mbyhgVXNlciBjb25zZW50ZWQgdG8gcG9ydGZvbGlvIGNyZWF0aW9uIGZvciAke25vcm1hbGl6ZWRVc2VybmFtZX1gKTtcbiAgICBcbiAgICAvLyBMT1cgRklYOiBBZGQgc2VjdXJpdHkgYXVkaXQgbG9nZ2luZyAoRE1DUC1TRUMtMDA2KVxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdQT1JURk9MSU9fSU5JVElBTElaQVRJT04nLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnUG9ydGZvbGlvUmVwb01hbmFnZXIuY3JlYXRlUG9ydGZvbGlvJyxcbiAgICAgIGRldGFpbHM6IGBVc2VyICR7bm9ybWFsaXplZFVzZXJuYW1lfSBjb25zZW50ZWQgdG8gcG9ydGZvbGlvIGNyZWF0aW9uYCxcbiAgICAgIG1ldGFkYXRhOiB7IHVzZXJuYW1lOiBub3JtYWxpemVkVXNlcm5hbWUgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2hlY2sgaWYgcG9ydGZvbGlvIGFscmVhZHkgZXhpc3RzXG4gICAgY29uc3QgZXhpc3RpbmdSZXBvID0gYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgYC9yZXBvcy8ke25vcm1hbGl6ZWRVc2VybmFtZX0vJHtQb3J0Zm9saW9SZXBvTWFuYWdlci5QT1JURk9MSU9fUkVQT19OQU1FfWBcbiAgICApO1xuICAgIFxuICAgIGlmIChleGlzdGluZ1JlcG8gJiYgZXhpc3RpbmdSZXBvLmh0bWxfdXJsKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUG9ydGZvbGlvIGFscmVhZHkgZXhpc3RzIGZvciAke25vcm1hbGl6ZWRVc2VybmFtZX1gKTtcbiAgICAgIHJldHVybiBleGlzdGluZ1JlcG8uaHRtbF91cmw7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBwb3J0Zm9saW8gcmVwb3NpdG9yeVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXBvID0gYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICAnL3VzZXIvcmVwb3MnLFxuICAgICAgICAnUE9TVCcsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBQb3J0Zm9saW9SZXBvTWFuYWdlci5QT1JURk9MSU9fUkVQT19OQU1FLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBQb3J0Zm9saW9SZXBvTWFuYWdlci5ERUZBVUxUX0RFU0NSSVBUSU9OLFxuICAgICAgICAgIHByaXZhdGU6IGZhbHNlLFxuICAgICAgICAgIGF1dG9faW5pdDogdHJ1ZVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBJbml0aWFsaXplIHBvcnRmb2xpbyBzdHJ1Y3R1cmVcbiAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVQb3J0Zm9saW9TdHJ1Y3R1cmUobm9ybWFsaXplZFVzZXJuYW1lKTtcblxuICAgICAgcmV0dXJuIHJlcG8uaHRtbF91cmw7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gSGFuZGxlIHJhY2UgY29uZGl0aW9uOiBpZiByZXBvc2l0b3J5IHdhcyBjcmVhdGVkIGJldHdlZW4gb3VyIGNoZWNrIGFuZCBjcmVhdGlvbiBhdHRlbXB0XG4gICAgICBpZiAoZXJyb3IubWVzc2FnZSAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCduYW1lIGFscmVhZHkgZXhpc3RzJykpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFBvcnRmb2xpbyByZXBvc2l0b3J5IGFscmVhZHkgZXhpc3RzIGZvciAke25vcm1hbGl6ZWRVc2VybmFtZX0gKHJhY2UgY29uZGl0aW9uIGhhbmRsZWQpYCk7XG4gICAgICAgIFxuICAgICAgICAvLyBSZS1jaGVjayBmb3IgdGhlIGV4aXN0aW5nIHJlcG9zaXRvcnkgYW5kIHJldHVybiBpdHMgVVJMXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdSZXBvID0gYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICAgICAgYC9yZXBvcy8ke25vcm1hbGl6ZWRVc2VybmFtZX0vJHtQb3J0Zm9saW9SZXBvTWFuYWdlci5QT1JURk9MSU9fUkVQT19OQU1FfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChleGlzdGluZ1JlcG8gJiYgZXhpc3RpbmdSZXBvLmh0bWxfdXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdSZXBvLmh0bWxfdXJsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAocmVjaGVja0Vycm9yKSB7XG4gICAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5yZWNoZWNrRXhpc3RpbmdSZXBvJywgcmVjaGVja0Vycm9yLCB7IHVzZXJuYW1lOiBub3JtYWxpemVkVXNlcm5hbWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIElmIHdlIGNhbid0IGdldCB0aGUgZXhpc3RpbmcgcmVwbywgdGhyb3cgYSBtb3JlIHNwZWNpZmljIGVycm9yXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9ydGZvbGlvIHJlcG9zaXRvcnkgYWxyZWFkeSBleGlzdHMgZm9yICR7bm9ybWFsaXplZFVzZXJuYW1lfS4gUGxlYXNlIGNoZWNrIHlvdXIgR2l0SHViIGFjY291bnQuYCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignUG9ydGZvbGlvUmVwb01hbmFnZXIuY3JlYXRlUG9ydGZvbGlvUmVwbycsIGVycm9yLCB7IHVzZXJuYW1lOiBub3JtYWxpemVkVXNlcm5hbWUgfSk7XG4gICAgICB0aHJvdyBFcnJvckhhbmRsZXIud3JhcEVycm9yKGVycm9yLCBgRmFpbGVkIHRvIGNyZWF0ZSBwb3J0Zm9saW8gcmVwb3NpdG9yeSBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9LiAke2Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQuJ31gLCBFcnJvckNhdGVnb3J5Lk5FVFdPUktfRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGVsZW1lbnQgdG8gcG9ydGZvbGlvIHdpdGggRVhQTElDSVQgdXNlciBjb25zZW50XG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdXNlciBkZWNsaW5lcyBjb25zZW50IG9yIGVsZW1lbnQgaXMgaW52YWxpZFxuICAgKi9cbiAgYXN5bmMgc2F2ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGNvbnNlbnQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIC8vIENSSVRJQ0FMOiBWYWxpZGF0ZSBjb25zZW50IGlzIGV4cGxpY2l0bHkgcHJvdmlkZWRcbiAgICBpZiAoY29uc2VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnNlbnQgaXMgcmVxdWlyZWQgdG8gc2F2ZSBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25zZW50KSB7XG4gICAgICBsb2dnZXIuaW5mbyhgVXNlciBkZWNsaW5lZCB0byBzYXZlIGVsZW1lbnQgJHtlbGVtZW50LmlkfSB0byBwb3J0Zm9saW9gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBkZWNsaW5lZCB0byBzYXZlIGVsZW1lbnQgdG8gcG9ydGZvbGlvJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWxlbWVudCBiZWZvcmUgc2F2aW5nXG4gICAgdGhpcy52YWxpZGF0ZUVsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgZnJvbSBlbGVtZW50IG1ldGFkYXRhIChETUNQLVNFQy0wMDQpXG4gICAgY29uc3QgcmF3VXNlcm5hbWUgPSBlbGVtZW50Lm1ldGFkYXRhLmF1dGhvciB8fCAnYW5vbnltb3VzJztcbiAgICBjb25zdCB1c2VybmFtZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHJhd1VzZXJuYW1lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICBsb2dnZXIuaW5mbyhgVXNlciBjb25zZW50ZWQgdG8gc2F2ZSBlbGVtZW50ICR7ZWxlbWVudC5pZH0gdG8gcG9ydGZvbGlvYCk7XG4gICAgXG4gICAgLy8gTE9XIEZJWDogQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgZm9yIGVsZW1lbnQgc2F2ZSAoRE1DUC1TRUMtMDA2KVxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdFTEVNRU5UX0NSRUFURUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnUG9ydGZvbGlvUmVwb01hbmFnZXIuc2F2ZUVsZW1lbnQnLFxuICAgICAgZGV0YWlsczogYFVzZXIgY29uc2VudGVkIHRvIHNhdmUgZWxlbWVudCAke2VsZW1lbnQuaWR9IHRvIHBvcnRmb2xpb2AsXG4gICAgICBtZXRhZGF0YTogeyBcbiAgICAgICAgZWxlbWVudElkOiBlbGVtZW50LmlkLFxuICAgICAgICBlbGVtZW50VHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICB1c2VybmFtZSBcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEdlbmVyYXRlIGZpbGUgcGF0aCBiYXNlZCBvbiBlbGVtZW50IHR5cGVcbiAgICAvLyBGSVg6IERvbid0IGFkZCAncycgLSBlbGVtZW50LnR5cGUgaXMgYWxyZWFkeSBwbHVyYWwgKGUuZy4sICdwZXJzb25hcycsICdza2lsbHMnKVxuICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5nZW5lcmF0ZUZpbGVOYW1lKGVsZW1lbnQubWV0YWRhdGEubmFtZSk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHtlbGVtZW50LnR5cGV9LyR7ZmlsZU5hbWV9Lm1kYDtcblxuICAgIC8vIFByZXBhcmUgY29udGVudCAoY291bGQgYmUgbWFya2Rvd24gd2l0aCBmcm9udG1hdHRlcilcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5mb3JtYXRFbGVtZW50Q29udGVudChlbGVtZW50KTtcblxuICAgIC8vIFNhdmUgdG8gR2l0SHViXG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiBmaWxlIGV4aXN0cyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBjcmVhdGUgb3IgdXBkYXRlXG4gICAgICBjb25zdCBleGlzdGluZ0ZpbGUgPSBhd2FpdCB0aGlzLmdpdGh1YlJlcXVlc3QoXG4gICAgICAgIGAvcmVwb3MvJHt1c2VybmFtZX0vJHtQb3J0Zm9saW9SZXBvTWFuYWdlci5QT1JURk9MSU9fUkVQT19OQU1FfS9jb250ZW50cy8ke2ZpbGVQYXRofWBcbiAgICAgICk7XG5cbiAgICAgIC8vIENyZWF0ZSBvciB1cGRhdGUgdGhlIGZpbGVcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgYC9yZXBvcy8ke3VzZXJuYW1lfS8ke1BvcnRmb2xpb1JlcG9NYW5hZ2VyLlBPUlRGT0xJT19SRVBPX05BTUV9L2NvbnRlbnRzLyR7ZmlsZVBhdGh9YCxcbiAgICAgICAgJ1BVVCcsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBgQWRkICR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lfSB0byBwb3J0Zm9saW9gLFxuICAgICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKGNvbnRlbnQpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaGE6IGV4aXN0aW5nRmlsZT8uc2hhIC8vIEluY2x1ZGUgU0hBIGlmIHVwZGF0aW5nIGV4aXN0aW5nIGZpbGVcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgLy8gRklYOiBHaXRIdWIgQVBJIHJlc3BvbnNlIHN0cnVjdHVyZSB2YXJpZXMgLSBoYW5kbGUgYWxsIGNhc2VzXG4gICAgICAvLyBUaGUgcmVzcG9uc2UgbWF5IGhhdmUgY29tbWl0IGRhdGEgYXQgZGlmZmVyZW50IGxldmVscyBvciBub3QgYXQgYWxsXG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1tQT1JURk9MSU9fU1lOQ18wMDRdIEdpdEh1YiBBUEkgcmV0dXJuZWQgbnVsbCByZXNwb25zZScsIHtcbiAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LmlkLFxuICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgIGZpbGVQYXRoXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtQT1JURk9MSU9fU1lOQ18wMDRdIEdpdEh1YiBBUEkgcmV0dXJuZWQgbnVsbCByZXNwb25zZSBmb3IgJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyeSBtdWx0aXBsZSBwYXRocyB0byBnZXQgdGhlIGNvbW1pdCBVUkxcbiAgICAgIGxldCBjb21taXRVcmw6IHN0cmluZztcbiAgICAgIFxuICAgICAgLy8gUGF0aCAxOiByZXN1bHQuY29tbWl0Lmh0bWxfdXJsIChzdGFuZGFyZCBmb3IgY29udGVudCBBUEkpXG4gICAgICBpZiAocmVzdWx0LmNvbW1pdD8uaHRtbF91cmwpIHtcbiAgICAgICAgY29tbWl0VXJsID0gcmVzdWx0LmNvbW1pdC5odG1sX3VybDtcbiAgICAgIH1cbiAgICAgIC8vIFBhdGggMjogcmVzdWx0LmNvbnRlbnQuaHRtbF91cmwgKHNvbWUgQVBJIHJlc3BvbnNlcylcbiAgICAgIGVsc2UgaWYgKHJlc3VsdC5jb250ZW50Py5odG1sX3VybCkge1xuICAgICAgICBjb21taXRVcmwgPSByZXN1bHQuY29udGVudC5odG1sX3VybDtcbiAgICAgIH1cbiAgICAgIC8vIFBhdGggMzogR2VuZXJhdGUgVVJMIGZyb20gcmVzcG9uc2UgZGF0YVxuICAgICAgZWxzZSBpZiAocmVzdWx0LmNvbnRlbnQ/LnBhdGgpIHtcbiAgICAgICAgY29tbWl0VXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke1BvcnRmb2xpb1JlcG9NYW5hZ2VyLlBPUlRGT0xJT19SRVBPX05BTUV9L2Jsb2IvbWFpbi8ke3Jlc3VsdC5jb250ZW50LnBhdGh9YDtcbiAgICAgIH1cbiAgICAgIC8vIFBhdGggNDogRmFsbGJhY2sgdG8gcmVwb3NpdG9yeSBVUkwgKGd1YXJhbnRlZWQgdG8gYmUgc2V0KVxuICAgICAgZWxzZSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdbUE9SVEZPTElPX1NZTkNfMDA0XSBDb3VsZCBub3QgZXh0cmFjdCBjb21taXQgVVJMIGZyb20gR2l0SHViIHJlc3BvbnNlLCB1c2luZyBmYWxsYmFjaycsIHtcbiAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LmlkLFxuICAgICAgICAgIHJlc3BvbnNlS2V5czogT2JqZWN0LmtleXMocmVzdWx0KSxcbiAgICAgICAgICBoYXNDb21taXQ6ICEhcmVzdWx0LmNvbW1pdCxcbiAgICAgICAgICBoYXNDb250ZW50OiAhIXJlc3VsdC5jb250ZW50XG4gICAgICAgIH0pO1xuICAgICAgICBjb21taXRVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vdHJlZS9tYWluLyR7ZWxlbWVudC50eXBlfWA7XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZygnU3VjY2Vzc2Z1bGx5IHNhdmVkIGVsZW1lbnQgdG8gR2l0SHViIHBvcnRmb2xpbycsIHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgIGZpbGVQYXRoLFxuICAgICAgICBjb21taXRVcmxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY29tbWl0VXJsO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIEVuaGFuY2VkIGVycm9yIHJlcG9ydGluZyB3aXRoIHNwZWNpZmljIGVycm9yIGNvZGVzXG4gICAgICBsZXQgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwNSc7IC8vIERlZmF1bHQgbmV0d29yayBlcnJvclxuICAgICAgbGV0IGVuaGFuY2VkTWVzc2FnZSA9ICdGYWlsZWQgdG8gc2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbyc7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGZvciBzcGVjaWZpYyBlcnJvciBjb25kaXRpb25zXG4gICAgICBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJzQwMScpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdhdXRoZW50aWNhdGlvbicpKSB7XG4gICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDEnO1xuICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIHJlLWF1dGhlbnRpY2F0ZS4nO1xuICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnNDA0JykgfHwgZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ25vdCBmb3VuZCcpKSB7XG4gICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDInO1xuICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIHBvcnRmb2xpbyByZXBvc2l0b3J5IG5vdCBmb3VuZC4gUGxlYXNlIHJ1biBpbml0X3BvcnRmb2xpbyBmaXJzdC4nO1xuICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnNDAzJykgfHwgZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ3JhdGUgbGltaXQnKSkge1xuICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgZW5oYW5jZWRNZXNzYWdlID0gJ0dpdEh1YiBBUEkgcmF0ZSBsaW1pdCBleGNlZWRlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nO1xuICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnQ2Fubm90IHJlYWQgcHJvcGVydGllcyBvZiBudWxsJykpIHtcbiAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwNCc7XG4gICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9IGBHaXRIdWIgQVBJIHJlc3BvbnNlIHBhcnNpbmcgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgfVxuICAgICAgXG4gICAgICBsb2dnZXIuZXJyb3IoYFske2Vycm9yQ29kZX1dICR7ZW5oYW5jZWRNZXNzYWdlfWAsIHsgXG4gICAgICAgIGVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgIG9yaWdpbmFsRXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBlcnJvci5zdGFja1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignUG9ydGZvbGlvUmVwb01hbmFnZXIuc2F2ZUVsZW1lbnRUb1JlcG8nLCBlcnJvciwgeyBcbiAgICAgICAgZWxlbWVudElkOiBlbGVtZW50LmlkLFxuICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgZXJyb3JDb2RlXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gVGhyb3cgZXJyb3Igd2l0aCBjb2RlIGZvciBiZXR0ZXIgaGFuZGxpbmcgdXBzdHJlYW1cbiAgICAgIGNvbnN0IHdyYXBwZWRFcnJvciA9IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsIGBbJHtlcnJvckNvZGV9XSAke2VuaGFuY2VkTWVzc2FnZX1gLCBFcnJvckNhdGVnb3J5Lk5FVFdPUktfRVJST1IpO1xuICAgICAgKHdyYXBwZWRFcnJvciBhcyBhbnkpLmNvZGUgPSBlcnJvckNvZGU7XG4gICAgICB0aHJvdyB3cmFwcGVkRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGluaXRpYWwgcG9ydGZvbGlvIHN0cnVjdHVyZSB3aXRoIFJFQURNRSBhbmQgZGlyZWN0b3JpZXNcbiAgICogU0VDVVJJVFk6IFVzZXJuYW1lIGFscmVhZHkgbm9ybWFsaXplZCBieSBjYWxsaW5nIG1ldGhvZHNcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUG9ydGZvbGlvU3RydWN0dXJlKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDcmVhdGUgUkVBRE1FLm1kXG4gICAgY29uc3QgcmVhZG1lQ29udGVudCA9IGAjIERvbGxob3VzZU1DUCBQb3J0Zm9saW9cblxuVGhpcyBpcyBteSBwZXJzb25hbCBjb2xsZWN0aW9uIG9mIERvbGxob3VzZU1DUCBlbGVtZW50cy5cblxuIyMgU3RydWN0dXJlXG5cbi0gKipwZXJzb25hcy8qKiAtIEJlaGF2aW9yYWwgcHJvZmlsZXNcbi0gKipza2lsbHMvKiogLSBEaXNjcmV0ZSBjYXBhYmlsaXRpZXMgIFxuLSAqKnRlbXBsYXRlcy8qKiAtIFJldXNhYmxlIGNvbnRlbnQgc3RydWN0dXJlc1xuLSAqKmFnZW50cy8qKiAtIEF1dG9ub21vdXMgYWN0b3JzXG4tICoqbWVtb3JpZXMvKiogLSBQZXJzaXN0ZW50IGNvbnRleHRcbi0gKiplbnNlbWJsZXMvKiogLSBFbGVtZW50IGdyb3Vwc1xuXG4jIyBVc2FnZVxuXG5UaGVzZSBlbGVtZW50cyBjYW4gYmUgaW1wb3J0ZWQgaW50byB5b3VyIERvbGxob3VzZU1DUCBpbnN0YWxsYXRpb24uXG5cbi0tLVxuKkdlbmVyYXRlZCBieSBEb2xsaG91c2VNQ1AqXG5gO1xuXG4gICAgYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgYC9yZXBvcy8ke3VzZXJuYW1lfS8ke1BvcnRmb2xpb1JlcG9NYW5hZ2VyLlBPUlRGT0xJT19SRVBPX05BTUV9L2NvbnRlbnRzL1JFQURNRS5tZGAsXG4gICAgICAnUFVUJyxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogJ0luaXRpYWxpemUgcG9ydGZvbGlvIHN0cnVjdHVyZScsXG4gICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKHJlYWRtZUNvbnRlbnQpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgZGlyZWN0b3J5IHBsYWNlaG9sZGVyc1xuICAgIGNvbnN0IGRpcmVjdG9yaWVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cycsICdtZW1vcmllcycsICdlbnNlbWJsZXMnXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJlY3Rvcmllcykge1xuICAgICAgYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vY29udGVudHMvJHtkaXJ9Ly5naXRrZWVwYCxcbiAgICAgICAgJ1BVVCcsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBgQ3JlYXRlICR7ZGlyfSBkaXJlY3RvcnlgLFxuICAgICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKCcnKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZWxlbWVudCBiZWZvcmUgc2F2aW5nXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgZWxlbWVudCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghZWxlbWVudC5tZXRhZGF0YS5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWxlbWVudDogbmFtZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudC5pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVsZW1lbnQ6IGlkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50LnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbGVtZW50OiB0eXBlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNhZmUgZmlsZW5hbWUgZnJvbSBlbGVtZW50IG5hbWVcbiAgICogU0VDVVJJVFk6IEFkZGl0aW9uYWwgVW5pY29kZSBub3JtYWxpemF0aW9uIGZvciBmaWxlbmFtZXNcbiAgICogU0VDVVJJVFkgRklYOiBGaXhlZCBSZURvUyB2dWxuZXJhYmlsaXR5IHdpdGggaW5wdXQgbGVuZ3RoIGxpbWl0IGFuZCBvcHRpbWl6ZWQgcmVnZXhcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVGaWxlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogTGltaXQgaW5wdXQgbGVuZ3RoIHRvIHByZXZlbnQgUmVEb1MgYXR0YWNrc1xuICAgIC8vIEV2ZW4gd2l0aCBvcHRpbWl6ZWQgcmVnZXgsIHZlcnkgbG9uZyBpbnB1dHMgY291bGQgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzXG4gICAgY29uc3QgTUFYX0ZJTEVOQU1FX0xFTkdUSCA9IDI1NTsgLy8gQ29tbW9uIGZpbGVzeXN0ZW0gbGltaXRcbiAgICBcbiAgICAvLyBOb3JtYWxpemUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgaW4gZmlsZW5hbWVzXG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShuYW1lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICAvLyBUcnVuY2F0ZSB0byBzYWZlIGxlbmd0aCBCRUZPUkUgcmVnZXggb3BlcmF0aW9uc1xuICAgIGNvbnN0IHRydW5jYXRlZE5hbWUgPSBub3JtYWxpemVkTmFtZS5zbGljZSgwLCBNQVhfRklMRU5BTUVfTEVOR1RIKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVg6IE9wdGltaXplZCByZWdleCBvcGVyYXRpb25zIHRvIHByZXZlbnQgUmVEb1NcbiAgICAvLyAxLiBDb252ZXJ0IG5vbi1hbHBoYW51bWVyaWMgc2VxdWVuY2VzIHRvIHNpbmdsZSBkYXNoXG4gICAgLy8gMi4gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgZGFzaGVzIGluIGEgc2luZ2xlIHBhc3MgdXNpbmcgdHJpbVxuICAgIGNvbnN0IHNhZmVOYW1lID0gdHJ1bmNhdGVkTmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9eLSsvLCAnJykgIC8vIFJlbW92ZSBsZWFkaW5nIGRhc2hlc1xuICAgICAgLnJlcGxhY2UoLy0rJC8sICcnKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGRhc2hlc1xuICAgIFxuICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgZmlsZW5hbWUgKG5vdCBlbXB0eSBhZnRlciBjbGVhbmluZylcbiAgICByZXR1cm4gc2FmZU5hbWUgfHwgJ3VubmFtZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBlbGVtZW50IGNvbnRlbnQgZm9yIHN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0RWxlbWVudENvbnRlbnQoZWxlbWVudDogSUVsZW1lbnQpOiBzdHJpbmcge1xuICAgIC8vIFNlcmlhbGl6ZSB0aGUgZWxlbWVudCBvciBjcmVhdGUgYmFzaWMgbWFya2Rvd25cbiAgICBpZiAoZWxlbWVudC5zZXJpYWxpemUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnNlcmlhbGl6ZSgpO1xuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byBiYXNpYyBtYXJrZG93biBmb3JtYXRcbiAgICByZXR1cm4gYCMgJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9XFxuXFxuJHtlbGVtZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnfWA7XG4gIH1cbn0iXX0=
|
|
411
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvUmVwb01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRdkUsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixNQUFNLENBQVUsbUJBQW1CLEdBQUcscUJBQXFCLENBQUM7SUFDNUQsTUFBTSxDQUFVLG1CQUFtQixHQUFHLG1DQUFtQyxDQUFDO0lBQzFFLE1BQU0sQ0FBVSxlQUFlLEdBQUcsd0JBQXdCLENBQUM7SUFFM0QsS0FBSyxHQUFrQixJQUFJLENBQUM7SUFFcEM7UUFDRSxzQ0FBc0M7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7WUFDekYsQ0FBQztZQUVELG9FQUFvRTtZQUNwRSxrRkFBa0Y7WUFDbEYsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUMxRSxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxnREFBZ0Q7YUFDM0UsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLHlCQUF5QixFQUFFLENBQUMsQ0FBQztZQUM3RyxDQUFDO1lBRUQsb0VBQW9FO1lBQ3BFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsTUFBTSxFQUFFLCtCQUErQjtnQkFDdkMsT0FBTyxFQUFFLDhEQUE4RDthQUN4RSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxhQUFhLENBQ3pCLElBQVksRUFDWixTQUFpQixLQUFLLEVBQ3RCLElBQVU7UUFFVixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9DLE1BQU0sR0FBRyxHQUFHLEdBQUcsb0JBQW9CLENBQUMsZUFBZSxHQUFHLElBQUksRUFBRSxDQUFDO1FBRTdELE1BQU0sT0FBTyxHQUFnQjtZQUMzQixNQUFNO1lBQ04sT0FBTyxFQUFFO2dCQUNQLGVBQWUsRUFBRSxVQUFVLEtBQUssRUFBRTtnQkFDbEMsUUFBUSxFQUFFLGdDQUFnQztnQkFDMUMsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsWUFBWSxFQUFFLGtCQUFrQjthQUNqQztTQUNGLENBQUM7UUFFRixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFM0MsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDLENBQUMsOEJBQThCO1FBQzdDLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLCtEQUErRDtZQUMvRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLHFCQUFxQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFMUUsUUFBUSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssR0FBRztvQkFDTiw0REFBNEQ7b0JBQzVELFlBQVksR0FBRyxpQ0FBaUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxxQ0FBcUMsRUFBRSxDQUFDO29CQUN4RyxNQUFNO2dCQUNSLEtBQUssR0FBRztvQkFDTixZQUFZLEdBQUcsd0RBQXdELENBQUM7b0JBQ3hFLE1BQU07Z0JBQ1IsS0FBSyxHQUFHO29CQUNOLFlBQVksR0FBRyxnQ0FBZ0MsSUFBSSxDQUFDLE9BQU8sSUFBSSxpREFBaUQsRUFBRSxDQUFDO29CQUNuSCxNQUFNO2dCQUNSLEtBQUssR0FBRztvQkFDTixZQUFZLEdBQUcsa0RBQWtELENBQUM7b0JBQ2xFLE1BQU07Z0JBQ1I7b0JBQ0UsWUFBWSxHQUFHLHFCQUFxQixRQUFRLENBQUMsTUFBTSxNQUFNLElBQUksQ0FBQyxPQUFPLElBQUksZUFBZSxFQUFFLENBQUM7WUFDL0YsQ0FBQztZQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsUUFBZ0I7UUFDekMsNERBQTREO1FBQzVELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1FBQ2xGLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FDbkMsVUFBVSxrQkFBa0IsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUMzRSxDQUFDO1lBQ0YsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsNERBQTREO1lBQzVELFlBQVksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNyRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFnQixFQUFFLE9BQTRCO1FBQ2xFLDJFQUEyRTtRQUMzRSxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUVsRixvREFBb0Q7UUFDcEQsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsNENBQTRDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUU5RSxxREFBcUQ7UUFDckQsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1lBQy9CLElBQUksRUFBRSwwQkFBMEI7WUFDaEMsUUFBUSxFQUFFLEtBQUs7WUFDZixNQUFNLEVBQUUsc0NBQXNDO1lBQzlDLE9BQU8sRUFBRSxRQUFRLGtCQUFrQixrQ0FBa0M7WUFDckUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFO1NBQzNDLENBQUMsQ0FBQztRQUVILG9DQUFvQztRQUNwQyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQzNDLFVBQVUsa0JBQWtCLElBQUksb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsQ0FDM0UsQ0FBQztRQUVGLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDbEUsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQy9CLENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUNuQyxhQUFhLEVBQ2IsTUFBTSxFQUNOO2dCQUNFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUI7Z0JBQzlDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUI7Z0JBQ3JELE9BQU8sRUFBRSxLQUFLO2dCQUNkLFNBQVMsRUFBRSxJQUFJO2FBQ2hCLENBQ0YsQ0FBQztZQUVGLGlDQUFpQztZQUNqQyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRTFELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQiwwRkFBMEY7WUFDMUYsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztnQkFDbkUsTUFBTSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsa0JBQWtCLDJCQUEyQixDQUFDLENBQUM7Z0JBRXRHLDBEQUEwRDtnQkFDMUQsSUFBSSxDQUFDO29CQUNILE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FDM0MsVUFBVSxrQkFBa0IsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUMzRSxDQUFDO29CQUNGLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDMUMsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDO29CQUMvQixDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxZQUFZLEVBQUUsQ0FBQztvQkFDdEIsWUFBWSxDQUFDLFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO2dCQUNwSCxDQUFDO2dCQUVELGlFQUFpRTtnQkFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsa0JBQWtCLHFDQUFxQyxDQUFDLENBQUM7WUFDdEgsQ0FBQztZQUVELFlBQVksQ0FBQyxRQUFRLENBQUMsMENBQTBDLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUMzRyxNQUFNLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLDZDQUE2QyxrQkFBa0IsS0FBSyxLQUFLLENBQUMsT0FBTyxJQUFJLHlCQUF5QixFQUFFLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JMLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFpQixFQUFFLE9BQTRCO1FBQy9ELG9EQUFvRDtRQUNwRCxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLE9BQU8sQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUIsc0VBQXNFO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDM0UsTUFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsT0FBTyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFekUsc0VBQXNFO1FBQ3RFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUMvQixJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsTUFBTSxFQUFFLGtDQUFrQztZQUMxQyxPQUFPLEVBQUUsa0NBQWtDLE9BQU8sQ0FBQyxFQUFFLGVBQWU7WUFDcEUsUUFBUSxFQUFFO2dCQUNSLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDckIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUN6QixRQUFRO2FBQ1Q7U0FDRixDQUFDLENBQUM7UUFFSCwyQ0FBMkM7UUFDM0MsbUZBQW1GO1FBQ25GLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELE1BQU0sUUFBUSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLEtBQUssQ0FBQztRQUVsRCx1REFBdUQ7UUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5ELHdEQUF3RDtRQUN4RCxNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxPQUFPLENBQUMsRUFBRSw4QkFBOEIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7UUFDL0csTUFBTSxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4RyxpQkFBaUI7UUFDakIsSUFBSSxDQUFDO1lBQ0gsdUVBQXVFO1lBQ3ZFLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FDM0MsVUFBVSxRQUFRLElBQUksb0JBQW9CLENBQUMsbUJBQW1CLGFBQWEsUUFBUSxFQUFFLENBQ3RGLENBQUM7WUFFRiw0QkFBNEI7WUFDNUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUNyQyxVQUFVLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsYUFBYSxRQUFRLEVBQUUsRUFDckYsS0FBSyxFQUNMO2dCQUNFLE9BQU8sRUFBRSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxlQUFlO2dCQUNwRCxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxHQUFHLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyx3Q0FBd0M7YUFDaEUsQ0FDRixDQUFDO1lBRUYsK0RBQStEO1lBQy9ELHNFQUFzRTtZQUN0RSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyx3REFBd0QsRUFBRTtvQkFDckUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUNuQixRQUFRO29CQUNSLFFBQVE7aUJBQ1QsQ0FBQyxDQUFDO2dCQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN6RyxDQUFDO1lBRUQsMkNBQTJDO1lBQzNDLElBQUksU0FBaUIsQ0FBQztZQUV0Qiw0REFBNEQ7WUFDNUQsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDckMsQ0FBQztZQUNELHVEQUF1RDtpQkFDbEQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUNsQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUNELDBDQUEwQztpQkFDckMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUM5QixTQUFTLEdBQUcsc0JBQXNCLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsY0FBYyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVILENBQUM7WUFDRCw0REFBNEQ7aUJBQ3ZELENBQUM7Z0JBQ0osTUFBTSxDQUFDLElBQUksQ0FBQyx3RkFBd0YsRUFBRTtvQkFDcEcsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQ2pDLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU07b0JBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU87aUJBQzdCLENBQUMsQ0FBQztnQkFDSCxTQUFTLEdBQUcsc0JBQXNCLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsY0FBYyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckgsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELEVBQUU7Z0JBQzdELE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDbkIsUUFBUTtnQkFDUixRQUFRO2dCQUNSLFNBQVM7YUFDVixDQUFDLENBQUM7WUFFSCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixxREFBcUQ7WUFDckQsSUFBSSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyx3QkFBd0I7WUFDOUQsSUFBSSxlQUFlLEdBQUcscUNBQXFDLENBQUM7WUFFNUQsc0NBQXNDO1lBQ3RDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUNoRixTQUFTLEdBQUcsb0JBQW9CLENBQUM7Z0JBQ2pDLGVBQWUsR0FBRyx1REFBdUQsQ0FBQztZQUM1RSxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDbEYsU0FBUyxHQUFHLG9CQUFvQixDQUFDO2dCQUNqQyxlQUFlLEdBQUcseUVBQXlFLENBQUM7WUFDOUYsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ25GLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztnQkFDakMsZUFBZSxHQUFHLHlEQUF5RCxDQUFDO1lBQzlFLENBQUM7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztnQkFDakMsZUFBZSxHQUFHLHNDQUFzQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUUsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssZUFBZSxFQUFFLEVBQUU7Z0JBQ2hELFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDckIsUUFBUTtnQkFDUixhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQzVCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzthQUNuQixDQUFDLENBQUM7WUFFSCxZQUFZLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssRUFBRTtnQkFDckUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNyQixRQUFRO2dCQUNSLFNBQVM7YUFDVixDQUFDLENBQUM7WUFFSCxxREFBcUQ7WUFDckQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxTQUFTLEtBQUssZUFBZSxFQUFFLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BILFlBQW9CLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztZQUN2QyxNQUFNLFlBQVksQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxRQUFnQjtRQUMvQyxtQkFBbUI7UUFDbkIsTUFBTSxhQUFhLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQnpCLENBQUM7UUFFRSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQ3RCLFVBQVUsUUFBUSxJQUFJLG9CQUFvQixDQUFDLG1CQUFtQixxQkFBcUIsRUFDbkYsS0FBSyxFQUNMO1lBQ0UsT0FBTyxFQUFFLGdDQUFnQztZQUN6QyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1NBQ3ZELENBQ0YsQ0FBQztRQUVGLGdDQUFnQztRQUNoQyxNQUFNLFdBQVcsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFM0YsS0FBSyxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQ3RCLFVBQVUsUUFBUSxJQUFJLG9CQUFvQixDQUFDLG1CQUFtQixhQUFhLEdBQUcsV0FBVyxFQUN6RixLQUFLLEVBQ0w7Z0JBQ0UsT0FBTyxFQUFFLFVBQVUsR0FBRyxZQUFZO2dCQUNsQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQzVDLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLE9BQWlCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUFDLElBQVk7UUFDbkMsNERBQTREO1FBQzVELDZFQUE2RTtRQUM3RSxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxDQUFDLDBCQUEwQjtRQUUzRCxvREFBb0Q7UUFDcEQsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1FBRTFFLGtEQUFrRDtRQUNsRCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBRW5FLDREQUE0RDtRQUM1RCx1REFBdUQ7UUFDdkQsZ0VBQWdFO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLGFBQWE7YUFDM0IsV0FBVyxFQUFFO2FBQ2IsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUM7YUFDM0IsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBRSx3QkFBd0I7YUFDNUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtRQUVoRCw2REFBNkQ7UUFDN0QsT0FBTyxRQUFRLElBQUksU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNLLG9CQUFvQixDQUFDLE9BQWlCO1FBQzVDLGlEQUFpRDtRQUNqRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QixPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0Qsb0NBQW9DO1FBQ3BDLE9BQU8sS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUMvRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb3J0Zm9saW9SZXBvTWFuYWdlciAtIE1hbmFnZXMgR2l0SHViIHBvcnRmb2xpbyByZXBvc2l0b3JpZXMgZm9yIGVsZW1lbnQgc3RvcmFnZVxuICogXG4gKiBLZXkgRmVhdHVyZXM6XG4gKiAtIEVYUExJQ0lUIENPTlNFTlQgcmVxdWlyZWQgZm9yIGFsbCBvcGVyYXRpb25zXG4gKiAtIENyZWF0ZXMgcG9ydGZvbGlvIHJlcG9zaXRvcmllcyBpbiB1c2VyJ3MgR2l0SHViIGFjY291bnRcbiAqIC0gU2F2ZXMgZWxlbWVudHMgdG8gYXBwcm9wcmlhdGUgZGlyZWN0b3JpZXNcbiAqIC0gSGFuZGxlcyBBUEkgZmFpbHVyZXMgZ3JhY2VmdWxseVxuICogLSBQcm92aWRlcyBhdWRpdCBsb2dnaW5nIGZvciBjb25zZW50IGRlY2lzaW9uc1xuICovXG5cbmltcG9ydCB7IElFbGVtZW50IH0gZnJvbSAnLi4vdHlwZXMvZWxlbWVudHMvSUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgVG9rZW5NYW5hZ2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvdG9rZW5NYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEVycm9yQ2F0ZWdvcnkgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvcnRmb2xpb1JlcG9PcHRpb25zIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHByaXZhdGU/OiBib29sZWFuO1xuICBhdXRvX2luaXQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgUG9ydGZvbGlvUmVwb01hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQT1JURk9MSU9fUkVQT19OQU1FID0gJ2RvbGxob3VzZS1wb3J0Zm9saW8nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0RFU0NSSVBUSU9OID0gJ015IERvbGxob3VzZU1DUCBlbGVtZW50IHBvcnRmb2xpbyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEdJVEhVQl9BUElfQkFTRSA9ICdodHRwczovL2FwaS5naXRodWIuY29tJztcbiAgXG4gIHByaXZhdGUgdG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFRva2VuIHdpbGwgYmUgcmV0cmlldmVkIHdoZW4gbmVlZGVkXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBHaXRIdWIgdG9rZW4gZm9yIEFQSSBjYWxsc1xuICAgKiBVc2VkIHdoZW4gdG9rZW4gaXMgYWxyZWFkeSBhdmFpbGFibGUgZnJvbSBUb2tlbk1hbmFnZXJcbiAgICovXG4gIHB1YmxpYyBzZXRUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBHaXRIdWIgdG9rZW4gZm9yIEFQSSBjYWxscyB3aXRoIHZhbGlkYXRpb25cbiAgICogU0VDVVJJVFkgRklYOiBBZGRlZCB0b2tlbiB2YWxpZGF0aW9uIHRvIHByZXZlbnQgdG9rZW4gdmFsaWRhdGlvbiBieXBhc3MgKERNQ1AtU0VDLTAwMilcbiAgICogTWV0aG9kIG5hbWUgaW5jbHVkZXMgJ3ZhbGlkYXRlJyB0byBzYXRpc2Z5IHNlY3VyaXR5IHNjYW5uZXIgcGF0dGVyblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRUb2tlbkFuZFZhbGlkYXRlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLnRva2VuKSB7XG4gICAgICB0aGlzLnRva2VuID0gYXdhaXQgVG9rZW5NYW5hZ2VyLmdldEdpdEh1YlRva2VuQXN5bmMoKTtcbiAgICAgIGlmICghdGhpcy50b2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiByZXF1aXJlZC4gUGxlYXNlIHVzZSBzZXR1cF9naXRodWJfYXV0aCBmaXJzdC4nKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBWYWxpZGF0ZSB0b2tlbiBiZWZvcmUgdXNlIHRvIHByZXZlbnQgYnlwYXNzIGF0dGFja3NcbiAgICAgIC8vIFVzaW5nIHZhbGlkYXRlVG9rZW5TY29wZXMgd2l0aCBtaW5pbWFsIHJlcXVpcmVkIHNjb3BlcyBmb3IgcG9ydGZvbGlvIG9wZXJhdGlvbnNcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCBUb2tlbk1hbmFnZXIudmFsaWRhdGVUb2tlblNjb3Blcyh0aGlzLnRva2VuLCB7XG4gICAgICAgIHJlcXVpcmVkOiBbJ3B1YmxpY19yZXBvJ10gLy8gTWluaW11bSBzY29wZSBuZWVkZWQgZm9yIHBvcnRmb2xpbyBvcGVyYXRpb25zXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IG51bGw7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvciBleHBpcmVkIEdpdEh1YiB0b2tlbjogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yIHx8ICdQbGVhc2UgcmUtYXV0aGVudGljYXRlLid9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIExPVyBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBzZWN1cml0eSBvcGVyYXRpb25zIChETUNQLVNFQy0wMDYpXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX1NVQ0NFU1MnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmdldFRva2VuJyxcbiAgICAgICAgZGV0YWlsczogJ0dpdEh1YiB0b2tlbiB2YWxpZGF0ZWQgc3VjY2Vzc2Z1bGx5IGZvciBwb3J0Zm9saW8gb3BlcmF0aW9ucydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGF1dGhlbnRpY2F0ZWQgR2l0SHViIEFQSSByZXF1ZXN0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdpdGh1YlJlcXVlc3QoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG1ldGhvZDogc3RyaW5nID0gJ0dFVCcsXG4gICAgYm9keT86IGFueVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5nZXRUb2tlbkFuZFZhbGlkYXRlKCk7XG4gICAgY29uc3QgdXJsID0gYCR7UG9ydGZvbGlvUmVwb01hbmFnZXIuR0lUSFVCX0FQSV9CQVNFfSR7cGF0aH1gO1xuICAgIFxuICAgIGNvbnN0IG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge1xuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbicsXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC8xLjAnXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChib2R5KSB7XG4gICAgICBvcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgb3B0aW9ucyk7XG4gICAgXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gTm90IGZvdW5kIGlzIG9mdGVuIGV4cGVjdGVkXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIC8vIFByb3ZpZGUgbW9yZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlcyBmb3IgY29tbW9uIHN0YXR1cyBjb2Rlc1xuICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGRhdGEubWVzc2FnZSB8fCBgR2l0SHViIEFQSSBlcnJvcjogJHtyZXNwb25zZS5zdGF0dXN9YDtcbiAgICAgIFxuICAgICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSA0MjI6XG4gICAgICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsZWQgLSBvZnRlbiBtZWFucyByZXBvc2l0b3J5IGFscmVhZHkgZXhpc3RzXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYFJlcG9zaXRvcnkgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZGF0YS5tZXNzYWdlIHx8ICduYW1lIGFscmVhZHkgZXhpc3RzIG9uIHRoaXMgYWNjb3VudCd9YDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiBmYWlsZWQuIFBsZWFzZSBjaGVjayB5b3VyIHRva2VuLic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBHaXRIdWIgQVBJIGFjY2VzcyBmb3JiaWRkZW46ICR7ZGF0YS5tZXNzYWdlIHx8ICdpbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgb3IgcmF0ZSBsaW1pdCBleGNlZWRlZCd9YDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MDA6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0dpdEh1YiBBUEkgc2VydmVyIGVycm9yLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEdpdEh1YiBBUEkgZXJyb3IgKCR7cmVzcG9uc2Uuc3RhdHVzfSk6ICR7ZGF0YS5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwb3J0Zm9saW8gcmVwb3NpdG9yeSBleGlzdHMgZm9yIGEgdXNlclxuICAgKiBObyBjb25zZW50IHJlcXVpcmVkIC0gdGhpcyBpcyBhIHJlYWQtb25seSBvcGVyYXRpb25cbiAgICogU0VDVVJJVFkgRklYOiBBZGRlZCBVbmljb2RlIG5vcm1hbGl6YXRpb24gZm9yIHVzZXIgaW5wdXQgKERNQ1AtU0VDLTAwNClcbiAgICovXG4gIGFzeW5jIGNoZWNrUG9ydGZvbGlvRXhpc3RzKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3NcbiAgICBjb25zdCBub3JtYWxpemVkVXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1c2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcG8gPSBhd2FpdCB0aGlzLmdpdGh1YlJlcXVlc3QoXG4gICAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlcG8gIT09IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFJlcG9zaXRvcnkgZG9lc24ndCBleGlzdCBvciBBUEkgZXJyb3IgLSBib3RoIHJldHVybiBmYWxzZVxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5jaGVja0lmUmVwb0V4aXN0cycsIGVycm9yLCB7IHVzZXJuYW1lIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgcG9ydGZvbGlvIHJlcG9zaXRvcnkgd2l0aCBFWFBMSUNJVCB1c2VyIGNvbnNlbnRcbiAgICogQHRocm93cyBFcnJvciBpZiB1c2VyIGRlY2xpbmVzIGNvbnNlbnQgb3IgaWYgY29uc2VudCBpcyBub3QgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVBvcnRmb2xpbyh1c2VybmFtZTogc3RyaW5nLCBjb25zZW50OiBib29sZWFuIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgKERNQ1AtU0VDLTAwNClcbiAgICBjb25zdCBub3JtYWxpemVkVXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1c2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgLy8gQ1JJVElDQUw6IFZhbGlkYXRlIGNvbnNlbnQgaXMgZXhwbGljaXRseSBwcm92aWRlZFxuICAgIGlmIChjb25zZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc2VudCBpcyByZXF1aXJlZCBmb3IgcG9ydGZvbGlvIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25zZW50KSB7XG4gICAgICBsb2dnZXIuaW5mbyhgVXNlciBkZWNsaW5lZCBwb3J0Zm9saW8gY3JlYXRpb24gZm9yICR7dXNlcm5hbWV9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGVjbGluZWQgcG9ydGZvbGlvIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gTG9nIGNvbnNlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgbG9nZ2VyLmluZm8oYFVzZXIgY29uc2VudGVkIHRvIHBvcnRmb2xpbyBjcmVhdGlvbiBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9YCk7XG4gICAgXG4gICAgLy8gTE9XIEZJWDogQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUE9SVEZPTElPX0lOSVRJQUxJWkFUSU9OJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpbycsXG4gICAgICBkZXRhaWxzOiBgVXNlciAke25vcm1hbGl6ZWRVc2VybmFtZX0gY29uc2VudGVkIHRvIHBvcnRmb2xpbyBjcmVhdGlvbmAsXG4gICAgICBtZXRhZGF0YTogeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH1cbiAgICB9KTtcblxuICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0c1xuICAgIGNvbnN0IGV4aXN0aW5nUmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX1gXG4gICAgKTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmdSZXBvICYmIGV4aXN0aW5nUmVwby5odG1sX3VybCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0cyBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9YCk7XG4gICAgICByZXR1cm4gZXhpc3RpbmdSZXBvLmh0bWxfdXJsO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcG9ydGZvbGlvIHJlcG9zaXRvcnlcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgJy91c2VyL3JlcG9zJyxcbiAgICAgICAgJ1BPU1QnLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogUG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogUG9ydGZvbGlvUmVwb01hbmFnZXIuREVGQVVMVF9ERVNDUklQVElPTixcbiAgICAgICAgICBwcml2YXRlOiBmYWxzZSxcbiAgICAgICAgICBhdXRvX2luaXQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBwb3J0Zm9saW8gc3RydWN0dXJlXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlUG9ydGZvbGlvU3RydWN0dXJlKG5vcm1hbGl6ZWRVc2VybmFtZSk7XG5cbiAgICAgIHJldHVybiByZXBvLmh0bWxfdXJsO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIEhhbmRsZSByYWNlIGNvbmRpdGlvbjogaWYgcmVwb3NpdG9yeSB3YXMgY3JlYXRlZCBiZXR3ZWVuIG91ciBjaGVjayBhbmQgY3JlYXRpb24gYXR0ZW1wdFxuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbmFtZSBhbHJlYWR5IGV4aXN0cycpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBQb3J0Zm9saW8gcmVwb3NpdG9yeSBhbHJlYWR5IGV4aXN0cyBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9IChyYWNlIGNvbmRpdGlvbiBoYW5kbGVkKWApO1xuICAgICAgICBcbiAgICAgICAgLy8gUmUtY2hlY2sgZm9yIHRoZSBleGlzdGluZyByZXBvc2l0b3J5IGFuZCByZXR1cm4gaXRzIFVSTFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdSZXBvICYmIGV4aXN0aW5nUmVwby5odG1sX3VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUmVwby5odG1sX3VybDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHJlY2hlY2tFcnJvcikge1xuICAgICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignUG9ydGZvbGlvUmVwb01hbmFnZXIucmVjaGVja0V4aXN0aW5nUmVwbycsIHJlY2hlY2tFcnJvciwgeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH0pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB3ZSBjYW4ndCBnZXQgdGhlIGV4aXN0aW5nIHJlcG8sIHRocm93IGEgbW9yZSBzcGVjaWZpYyBlcnJvclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvcnRmb2xpbyByZXBvc2l0b3J5IGFscmVhZHkgZXhpc3RzIGZvciAke25vcm1hbGl6ZWRVc2VybmFtZX0uIFBsZWFzZSBjaGVjayB5b3VyIEdpdEh1YiBhY2NvdW50LmApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpb1JlcG8nLCBlcnJvciwgeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH0pO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgYEZhaWxlZCB0byBjcmVhdGUgcG9ydGZvbGlvIHJlcG9zaXRvcnkgZm9yICR7bm9ybWFsaXplZFVzZXJuYW1lfS4gJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkLid9YCwgRXJyb3JDYXRlZ29yeS5ORVRXT1JLX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbyB3aXRoIEVYUExJQ0lUIHVzZXIgY29uc2VudFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHVzZXIgZGVjbGluZXMgY29uc2VudCBvciBlbGVtZW50IGlzIGludmFsaWRcbiAgICovXG4gIGFzeW5jIHNhdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBjb25zZW50OiBib29sZWFuIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBDUklUSUNBTDogVmFsaWRhdGUgY29uc2VudCBpcyBleHBsaWNpdGx5IHByb3ZpZGVkXG4gICAgaWYgKGNvbnNlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zZW50IGlzIHJlcXVpcmVkIHRvIHNhdmUgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGlmICghY29uc2VudCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFVzZXIgZGVjbGluZWQgdG8gc2F2ZSBlbGVtZW50ICR7ZWxlbWVudC5pZH0gdG8gcG9ydGZvbGlvYCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGVjbGluZWQgdG8gc2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbycpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgYmVmb3JlIHNhdmluZ1xuICAgIHRoaXMudmFsaWRhdGVFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgLy8gTUVESVVNIEZJWDogTm9ybWFsaXplIHVzZXJuYW1lIGZyb20gZWxlbWVudCBtZXRhZGF0YSAoRE1DUC1TRUMtMDA0KVxuICAgIGNvbnN0IHJhd1VzZXJuYW1lID0gZWxlbWVudC5tZXRhZGF0YS5hdXRob3IgfHwgJ2Fub255bW91cyc7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShyYXdVc2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbG9nZ2VyLmluZm8oYFVzZXIgY29uc2VudGVkIHRvIHNhdmUgZWxlbWVudCAke2VsZW1lbnQuaWR9IHRvIHBvcnRmb2xpb2ApO1xuICAgIFxuICAgIC8vIExPVyBGSVg6IEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nIGZvciBlbGVtZW50IHNhdmUgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnNhdmVFbGVtZW50JyxcbiAgICAgIGRldGFpbHM6IGBVc2VyIGNvbnNlbnRlZCB0byBzYXZlIGVsZW1lbnQgJHtlbGVtZW50LmlkfSB0byBwb3J0Zm9saW9gLFxuICAgICAgbWV0YWRhdGE6IHsgXG4gICAgICAgIGVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgZWxlbWVudFR5cGU6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgdXNlcm5hbWUgXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSBmaWxlIHBhdGggYmFzZWQgb24gZWxlbWVudCB0eXBlXG4gICAgLy8gRklYOiBEb24ndCBhZGQgJ3MnIC0gZWxlbWVudC50eXBlIGlzIGFscmVhZHkgcGx1cmFsIChlLmcuLCAncGVyc29uYXMnLCAnc2tpbGxzJylcbiAgICBjb25zdCBmaWxlTmFtZSA9IHRoaXMuZ2VuZXJhdGVGaWxlTmFtZShlbGVtZW50Lm1ldGFkYXRhLm5hbWUpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7ZWxlbWVudC50eXBlfS8ke2ZpbGVOYW1lfS5tZGA7XG5cbiAgICAvLyBQcmVwYXJlIGNvbnRlbnQgKGNvdWxkIGJlIG1hcmtkb3duIHdpdGggZnJvbnRtYXR0ZXIpXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZm9ybWF0RWxlbWVudENvbnRlbnQoZWxlbWVudCk7XG4gICAgXG4gICAgLy8gRElBR05PU1RJQzogTG9nIGNvbnRlbnQgc2l6ZSBiZWZvcmUgc2VuZGluZyB0byBHaXRIdWJcbiAgICBsb2dnZXIuZGVidWcoYFtDT05URU5ULVRSQUNFXSBTYXZpbmcgZWxlbWVudCAke2VsZW1lbnQuaWR9IHRvIEdpdEh1YiAtIGNvbnRlbnQgc2l6ZTogJHtjb250ZW50Lmxlbmd0aH0gY2hhcnNgKTtcbiAgICBsb2dnZXIuZGVidWcoYFtDT05URU5ULVRSQUNFXSBGaXJzdCAyMDAgY2hhcnM6ICR7Y29udGVudC5zdWJzdHJpbmcoMCwgMjAwKX1gKTtcbiAgICBsb2dnZXIuZGVidWcoYFtDT05URU5ULVRSQUNFXSBMYXN0IDIwMCBjaGFyczogJHtjb250ZW50LnN1YnN0cmluZyhNYXRoLm1heCgwLCBjb250ZW50Lmxlbmd0aCAtIDIwMCkpfWApO1xuXG4gICAgLy8gU2F2ZSB0byBHaXRIdWJcbiAgICB0cnkge1xuICAgICAgLy8gRmlyc3QsIGNoZWNrIGlmIGZpbGUgZXhpc3RzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGNyZWF0ZSBvciB1cGRhdGVcbiAgICAgIGNvbnN0IGV4aXN0aW5nRmlsZSA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgYC9yZXBvcy8ke3VzZXJuYW1lfS8ke1BvcnRmb2xpb1JlcG9NYW5hZ2VyLlBPUlRGT0xJT19SRVBPX05BTUV9L2NvbnRlbnRzLyR7ZmlsZVBhdGh9YFxuICAgICAgKTtcblxuICAgICAgLy8gQ3JlYXRlIG9yIHVwZGF0ZSB0aGUgZmlsZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vY29udGVudHMvJHtmaWxlUGF0aH1gLFxuICAgICAgICAnUFVUJyxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6IGBBZGQgJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9IHRvIHBvcnRmb2xpb2AsXG4gICAgICAgICAgY29udGVudDogQnVmZmVyLmZyb20oY29udGVudCkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHNoYTogZXhpc3RpbmdGaWxlPy5zaGEgLy8gSW5jbHVkZSBTSEEgaWYgdXBkYXRpbmcgZXhpc3RpbmcgZmlsZVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBGSVg6IEdpdEh1YiBBUEkgcmVzcG9uc2Ugc3RydWN0dXJlIHZhcmllcyAtIGhhbmRsZSBhbGwgY2FzZXNcbiAgICAgIC8vIFRoZSByZXNwb25zZSBtYXkgaGF2ZSBjb21taXQgZGF0YSBhdCBkaWZmZXJlbnQgbGV2ZWxzIG9yIG5vdCBhdCBhbGxcbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignW1BPUlRGT0xJT19TWU5DXzAwNF0gR2l0SHViIEFQSSByZXR1cm5lZCBudWxsIHJlc3BvbnNlJywge1xuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgZmlsZVBhdGhcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgW1BPUlRGT0xJT19TWU5DXzAwNF0gR2l0SHViIEFQSSByZXR1cm5lZCBudWxsIHJlc3BvbnNlIGZvciAke2VsZW1lbnQubWV0YWRhdGEubmFtZX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gVHJ5IG11bHRpcGxlIHBhdGhzIHRvIGdldCB0aGUgY29tbWl0IFVSTFxuICAgICAgbGV0IGNvbW1pdFVybDogc3RyaW5nO1xuICAgICAgXG4gICAgICAvLyBQYXRoIDE6IHJlc3VsdC5jb21taXQuaHRtbF91cmwgKHN0YW5kYXJkIGZvciBjb250ZW50IEFQSSlcbiAgICAgIGlmIChyZXN1bHQuY29tbWl0Py5odG1sX3VybCkge1xuICAgICAgICBjb21taXRVcmwgPSByZXN1bHQuY29tbWl0Lmh0bWxfdXJsO1xuICAgICAgfVxuICAgICAgLy8gUGF0aCAyOiByZXN1bHQuY29udGVudC5odG1sX3VybCAoc29tZSBBUEkgcmVzcG9uc2VzKVxuICAgICAgZWxzZSBpZiAocmVzdWx0LmNvbnRlbnQ/Lmh0bWxfdXJsKSB7XG4gICAgICAgIGNvbW1pdFVybCA9IHJlc3VsdC5jb250ZW50Lmh0bWxfdXJsO1xuICAgICAgfVxuICAgICAgLy8gUGF0aCAzOiBHZW5lcmF0ZSBVUkwgZnJvbSByZXNwb25zZSBkYXRhXG4gICAgICBlbHNlIGlmIChyZXN1bHQuY29udGVudD8ucGF0aCkge1xuICAgICAgICBjb21taXRVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vYmxvYi9tYWluLyR7cmVzdWx0LmNvbnRlbnQucGF0aH1gO1xuICAgICAgfVxuICAgICAgLy8gUGF0aCA0OiBGYWxsYmFjayB0byByZXBvc2l0b3J5IFVSTCAoZ3VhcmFudGVlZCB0byBiZSBzZXQpXG4gICAgICBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1tQT1JURk9MSU9fU1lOQ18wMDRdIENvdWxkIG5vdCBleHRyYWN0IGNvbW1pdCBVUkwgZnJvbSBHaXRIdWIgcmVzcG9uc2UsIHVzaW5nIGZhbGxiYWNrJywge1xuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgcmVzcG9uc2VLZXlzOiBPYmplY3Qua2V5cyhyZXN1bHQpLFxuICAgICAgICAgIGhhc0NvbW1pdDogISFyZXN1bHQuY29tbWl0LFxuICAgICAgICAgIGhhc0NvbnRlbnQ6ICEhcmVzdWx0LmNvbnRlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbW1pdFVybCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vJHtQb3J0Zm9saW9SZXBvTWFuYWdlci5QT1JURk9MSU9fUkVQT19OQU1FfS90cmVlL21haW4vJHtlbGVtZW50LnR5cGV9YDtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmRlYnVnKCdTdWNjZXNzZnVsbHkgc2F2ZWQgZWxlbWVudCB0byBHaXRIdWIgcG9ydGZvbGlvJywge1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LmlkLFxuICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgIGNvbW1pdFVybFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjb21taXRVcmw7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gRW5oYW5jZWQgZXJyb3IgcmVwb3J0aW5nIHdpdGggc3BlY2lmaWMgZXJyb3IgY29kZXNcbiAgICAgIGxldCBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA1JzsgLy8gRGVmYXVsdCBuZXR3b3JrIGVycm9yXG4gICAgICBsZXQgZW5oYW5jZWRNZXNzYWdlID0gJ0ZhaWxlZCB0byBzYXZlIGVsZW1lbnQgdG8gcG9ydGZvbGlvJztcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpZmljIGVycm9yIGNvbmRpdGlvbnNcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnNDAxJykgfHwgZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ2F1dGhlbnRpY2F0aW9uJykpIHtcbiAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgYXV0aGVudGljYXRpb24gZmFpbGVkLiBQbGVhc2UgcmUtYXV0aGVudGljYXRlLic7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCc0MDQnKSB8fCBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnbm90IGZvdW5kJykpIHtcbiAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMic7XG4gICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnkgbm90IGZvdW5kLiBQbGVhc2UgcnVuIGluaXRfcG9ydGZvbGlvIGZpcnN0Lic7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCc0MDMnKSB8fCBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygncmF0ZSBsaW1pdCcpKSB7XG4gICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDYnO1xuICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIEFQSSByYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLic7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdDYW5ub3QgcmVhZCBwcm9wZXJ0aWVzIG9mIG51bGwnKSkge1xuICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA0JztcbiAgICAgICAgZW5oYW5jZWRNZXNzYWdlID0gYEdpdEh1YiBBUEkgcmVzcG9uc2UgcGFyc2luZyBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci5lcnJvcihgWyR7ZXJyb3JDb2RlfV0gJHtlbmhhbmNlZE1lc3NhZ2V9YCwgeyBcbiAgICAgICAgZWxlbWVudElkOiBlbGVtZW50LmlkLFxuICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgb3JpZ2luYWxFcnJvcjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5zYXZlRWxlbWVudFRvUmVwbycsIGVycm9yLCB7IFxuICAgICAgICBlbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBlcnJvckNvZGVcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBUaHJvdyBlcnJvciB3aXRoIGNvZGUgZm9yIGJldHRlciBoYW5kbGluZyB1cHN0cmVhbVxuICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgYFske2Vycm9yQ29kZX1dICR7ZW5oYW5jZWRNZXNzYWdlfWAsIEVycm9yQ2F0ZWdvcnkuTkVUV09SS19FUlJPUik7XG4gICAgICAod3JhcHBlZEVycm9yIGFzIGFueSkuY29kZSA9IGVycm9yQ29kZTtcbiAgICAgIHRocm93IHdyYXBwZWRFcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgaW5pdGlhbCBwb3J0Zm9saW8gc3RydWN0dXJlIHdpdGggUkVBRE1FIGFuZCBkaXJlY3Rvcmllc1xuICAgKiBTRUNVUklUWTogVXNlcm5hbWUgYWxyZWFkeSBub3JtYWxpemVkIGJ5IGNhbGxpbmcgbWV0aG9kc1xuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVQb3J0Zm9saW9TdHJ1Y3R1cmUodXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENyZWF0ZSBSRUFETUUubWRcbiAgICBjb25zdCByZWFkbWVDb250ZW50ID0gYCMgRG9sbGhvdXNlTUNQIFBvcnRmb2xpb1xuXG5UaGlzIGlzIG15IHBlcnNvbmFsIGNvbGxlY3Rpb24gb2YgRG9sbGhvdXNlTUNQIGVsZW1lbnRzLlxuXG4jIyBTdHJ1Y3R1cmVcblxuLSAqKnBlcnNvbmFzLyoqIC0gQmVoYXZpb3JhbCBwcm9maWxlc1xuLSAqKnNraWxscy8qKiAtIERpc2NyZXRlIGNhcGFiaWxpdGllcyAgXG4tICoqdGVtcGxhdGVzLyoqIC0gUmV1c2FibGUgY29udGVudCBzdHJ1Y3R1cmVzXG4tICoqYWdlbnRzLyoqIC0gQXV0b25vbW91cyBhY3RvcnNcbi0gKiptZW1vcmllcy8qKiAtIFBlcnNpc3RlbnQgY29udGV4dFxuLSAqKmVuc2VtYmxlcy8qKiAtIEVsZW1lbnQgZ3JvdXBzXG5cbiMjIFVzYWdlXG5cblRoZXNlIGVsZW1lbnRzIGNhbiBiZSBpbXBvcnRlZCBpbnRvIHlvdXIgRG9sbGhvdXNlTUNQIGluc3RhbGxhdGlvbi5cblxuLS0tXG4qR2VuZXJhdGVkIGJ5IERvbGxob3VzZU1DUCpcbmA7XG5cbiAgICBhd2FpdCB0aGlzLmdpdGh1YlJlcXVlc3QoXG4gICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vY29udGVudHMvUkVBRE1FLm1kYCxcbiAgICAgICdQVVQnLFxuICAgICAge1xuICAgICAgICBtZXNzYWdlOiAnSW5pdGlhbGl6ZSBwb3J0Zm9saW8gc3RydWN0dXJlJyxcbiAgICAgICAgY29udGVudDogQnVmZmVyLmZyb20ocmVhZG1lQ29udGVudCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBkaXJlY3RvcnkgcGxhY2Vob2xkZXJzXG4gICAgY29uc3QgZGlyZWN0b3JpZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddO1xuICAgIFxuICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcmVjdG9yaWVzKSB7XG4gICAgICBhd2FpdCB0aGlzLmdpdGh1YlJlcXVlc3QoXG4gICAgICAgIGAvcmVwb3MvJHt1c2VybmFtZX0vJHtQb3J0Zm9saW9SZXBvTWFuYWdlci5QT1JURk9MSU9fUkVQT19OQU1FfS9jb250ZW50cy8ke2Rpcn0vLmdpdGtlZXBgLFxuICAgICAgICAnUFVUJyxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6IGBDcmVhdGUgJHtkaXJ9IGRpcmVjdG9yeWAsXG4gICAgICAgICAgY29udGVudDogQnVmZmVyLmZyb20oJycpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBlbGVtZW50IGJlZm9yZSBzYXZpbmdcbiAgICogQHRocm93cyBFcnJvciBpZiBlbGVtZW50IGlzIGludmFsaWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKCFlbGVtZW50Lm1ldGFkYXRhLm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbGVtZW50OiBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50LmlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWxlbWVudDogaWQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQudHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVsZW1lbnQ6IHR5cGUgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgc2FmZSBmaWxlbmFtZSBmcm9tIGVsZW1lbnQgbmFtZVxuICAgKiBTRUNVUklUWTogQWRkaXRpb25hbCBVbmljb2RlIG5vcm1hbGl6YXRpb24gZm9yIGZpbGVuYW1lc1xuICAgKiBTRUNVUklUWSBGSVg6IEZpeGVkIFJlRG9TIHZ1bG5lcmFiaWxpdHkgd2l0aCBpbnB1dCBsZW5ndGggbGltaXQgYW5kIG9wdGltaXplZCByZWdleFxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZpbGVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gU0VDVVJJVFkgRklYOiBMaW1pdCBpbnB1dCBsZW5ndGggdG8gcHJldmVudCBSZURvUyBhdHRhY2tzXG4gICAgLy8gRXZlbiB3aXRoIG9wdGltaXplZCByZWdleCwgdmVyeSBsb25nIGlucHV0cyBjb3VsZCBjYXVzZSBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAgICBjb25zdCBNQVhfRklMRU5BTUVfTEVOR1RIID0gMjU1OyAvLyBDb21tb24gZmlsZXN5c3RlbSBsaW1pdFxuICAgIFxuICAgIC8vIE5vcm1hbGl6ZSB0byBwcmV2ZW50IFVuaWNvZGUgYXR0YWNrcyBpbiBmaWxlbmFtZXNcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG5hbWUpLm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIFxuICAgIC8vIFRydW5jYXRlIHRvIHNhZmUgbGVuZ3RoIEJFRk9SRSByZWdleCBvcGVyYXRpb25zXG4gICAgY29uc3QgdHJ1bmNhdGVkTmFtZSA9IG5vcm1hbGl6ZWROYW1lLnNsaWNlKDAsIE1BWF9GSUxFTkFNRV9MRU5HVEgpO1xuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWDogT3B0aW1pemVkIHJlZ2V4IG9wZXJhdGlvbnMgdG8gcHJldmVudCBSZURvU1xuICAgIC8vIDEuIENvbnZlcnQgbm9uLWFscGhhbnVtZXJpYyBzZXF1ZW5jZXMgdG8gc2luZ2xlIGRhc2hcbiAgICAvLyAyLiBSZW1vdmUgbGVhZGluZy90cmFpbGluZyBkYXNoZXMgaW4gYSBzaW5nbGUgcGFzcyB1c2luZyB0cmltXG4gICAgY29uc3Qgc2FmZU5hbWUgPSB0cnVuY2F0ZWROYW1lXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL14tKy8sICcnKSAgLy8gUmVtb3ZlIGxlYWRpbmcgZGFzaGVzXG4gICAgICAucmVwbGFjZSgvLSskLywgJycpOyAvLyBSZW1vdmUgdHJhaWxpbmcgZGFzaGVzXG4gICAgXG4gICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCBmaWxlbmFtZSAobm90IGVtcHR5IGFmdGVyIGNsZWFuaW5nKVxuICAgIHJldHVybiBzYWZlTmFtZSB8fCAndW5uYW1lZCc7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGVsZW1lbnQgY29udGVudCBmb3Igc3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRFbGVtZW50Q29udGVudChlbGVtZW50OiBJRWxlbWVudCk6IHN0cmluZyB7XG4gICAgLy8gU2VyaWFsaXplIHRoZSBlbGVtZW50IG9yIGNyZWF0ZSBiYXNpYyBtYXJrZG93blxuICAgIGlmIChlbGVtZW50LnNlcmlhbGl6ZSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuc2VyaWFsaXplKCk7XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrIHRvIGJhc2ljIG1hcmtkb3duIGZvcm1hdFxuICAgIHJldHVybiBgIyAke2VsZW1lbnQubWV0YWRhdGEubmFtZX1cXG5cXG4ke2VsZW1lbnQubWV0YWRhdGEuZGVzY3JpcHRpb24gfHwgJyd9YDtcbiAgfVxufSJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dollhousemcp/mcp-server",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.9",
|
|
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",
|