@dollhousemcp/mcp-server 2.0.12-rc.9 → 2.0.13
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 +66 -0
- package/README.md +4 -4
- package/README.md.backup +5 -5
- package/README.npm.md +4 -4
- package/dist/di/Container.d.ts +14 -0
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +43 -26
- package/dist/elements/agents/AgentManager.d.ts +11 -4
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +38 -11
- package/dist/elements/base/BaseElementManager.d.ts +10 -0
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +26 -1
- package/dist/elements/ensembles/EnsembleManager.d.ts +1 -0
- package/dist/elements/ensembles/EnsembleManager.d.ts.map +1 -1
- package/dist/elements/ensembles/EnsembleManager.js +13 -2
- package/dist/elements/templates/Template.d.ts +33 -1
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +74 -15
- package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
- package/dist/elements/templates/TemplateManager.js +8 -1
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.d.ts.map +1 -1
- package/dist/generated/version.js +3 -3
- package/dist/handlers/element-crud/createElement.js +2 -2
- package/dist/handlers/mcp-aql/SchemaDispatcher.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/SchemaDispatcher.js +8 -1
- package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts +3 -0
- package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts.map +1 -1
- package/dist/handlers/strategies/EnsembleActivationStrategy.js +48 -9
- package/dist/index.js +19 -13
- package/dist/portfolio/DefaultElementProvider.d.ts +8 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +43 -1
- package/dist/security/contentValidator.d.ts +15 -0
- package/dist/security/contentValidator.d.ts.map +1 -1
- package/dist/security/contentValidator.js +40 -2
- package/dist/utils/TemplateRenderer.d.ts +9 -0
- package/dist/utils/TemplateRenderer.d.ts.map +1 -1
- package/dist/utils/TemplateRenderer.js +21 -1
- package/dist/web/console/IngestRoutes.d.ts.map +1 -1
- package/dist/web/console/IngestRoutes.js +193 -59
- package/dist/web/console/SessionNames.d.ts +18 -5
- package/dist/web/console/SessionNames.d.ts.map +1 -1
- package/dist/web/console/SessionNames.js +63 -8
- package/dist/web/console/StaleProcessRecovery.d.ts.map +1 -1
- package/dist/web/console/StaleProcessRecovery.js +5 -4
- package/dist/web/console/UnifiedConsole.js +3 -3
- package/dist/web/console/consoleToken.js +3 -3
- package/dist/web/portDiscovery.d.ts +1 -1
- package/dist/web/portDiscovery.d.ts.map +1 -1
- package/dist/web/portDiscovery.js +2 -2
- package/dist/web/public/app.js +65 -11
- package/dist/web/public/index.html +2 -0
- package/dist/web/public/logs.js +24 -2
- package/dist/web/public/metrics.js +22 -4
- package/dist/web/public/sessions.js +55 -8
- package/dist/web/public/setup.js +11 -2
- package/dist/web/public/styles.css +12 -0
- package/dist/web/routes/permissionRoutes.js +2 -2
- package/dist/web/routes/setupRoutes.d.ts +67 -1
- package/dist/web/routes/setupRoutes.d.ts.map +1 -1
- package/dist/web/routes/setupRoutes.js +298 -6
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +4 -2
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +14 -5
- package/package.json +5 -3
- package/server.json +2 -2
package/dist/web/routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/web/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/web/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAmd1E,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAoJ5D;AAqBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CA6H3F"}
|
package/dist/web/routes.js
CHANGED
|
@@ -303,7 +303,9 @@ function registerPortfolioRoutes(router, portfolioDir, options) {
|
|
|
303
303
|
}
|
|
304
304
|
});
|
|
305
305
|
router.get('/elements/memories/:date/:file', async (req, res) => {
|
|
306
|
-
const { date
|
|
306
|
+
const { date } = req.params;
|
|
307
|
+
// NFC-normalize file before safety checks to prevent Unicode homograph bypasses (#1736)
|
|
308
|
+
const file = normalizeInput(req.params.file);
|
|
307
309
|
if (!/^\d{4}-\d{2}-\d{2}$/.test(date)) {
|
|
308
310
|
res.status(400).json({ error: 'Invalid date format' });
|
|
309
311
|
return;
|
|
@@ -696,4 +698,4 @@ export function createGatewayApiRoutes(handler, portfolioDir) {
|
|
|
696
698
|
});
|
|
697
699
|
return router;
|
|
698
700
|
}
|
|
699
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNCQUFzQixFQUFvRCxNQUFNLHNCQUFzQixDQUFDO0FBR2hILDRFQUE0RTtBQUM1RSxTQUFTLGNBQWMsQ0FBQyxLQUFhO0lBQ25DLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBQ0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBVSxDQUFDO0FBRXRHLDZDQUE2QztBQUM3QyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUV0QyxvQ0FBb0M7QUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUUzRCx5R0FBeUc7QUFDekcsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMs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RyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLG1CQUFvQixHQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYiBVSSBBUEkgUm91dGVzXG4gKlxuICogUkVTVCBlbmRwb2ludHMgZm9yIHJlYWRpbmcgcG9ydGZvbGlvIGVsZW1lbnRzLlxuICogUmVhZC1vbmx5IOKAlCBubyBtdXRhdGlvbnMgaW4gVjEuXG4gKlxuICogQWxsIGVsZW1lbnQgY29udGVudCBpcyBzYW5pdGl6ZWQgYmVmb3JlIHNlcnZpbmcgdG8gcHJldmVudCBYU1MuXG4gKlxuICogU2VjdXJpdHkgbm90ZTogVGhpcyB3ZWIgc2VydmVyIGJpbmRzIHRvIDEyNy4wLjAuMSBvbmx5IChzZWUgc2VydmVyLnRzKS5cbiAqIFJhdGUgbGltaXRpbmcgb24gcmVhZC1vbmx5IEdFVCBlbmRwb2ludHMgaXMgbm90IHJlcXVpcmVkIGZvciBsb2NhbGhvc3Qtb25seVxuICogbWFuYWdlbWVudCBpbnRlcmZhY2VzLiBUaGUgUE9TVCAvYXBpL2luc3RhbGwgZW5kcG9pbnQgaGFzIGV4cGxpY2l0IHJhdGUgbGltaXRpbmdcbiAqIHZpYSBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIgKG1heCAxMCBwZXIgbWludXRlKS5cbiAqIGNvZGVxbFtqcy9taXNzaW5nLXJhdGUtbGltaXRpbmddIOKAlCBBY2tub3dsZWRnZWQ7IGxvY2FsaG9zdC1vbmx5IGJpbmRpbmcgbWl0aWdhdGVzIERvUyByaXNrLlxuICovXG5cbmltcG9ydCBleHByZXNzLCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgcmVhZGRpciwgcmVhZEZpbGUsIHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIGV4dG5hbWUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlRWxlbWVudENvbnRlbnQsIHR5cGUgUGlwZWxpbmVSZXN1bHQsIHR5cGUgRWxlbWVudERpc3BsYXlNZXRhZGF0YSB9IGZyb20gJy4vY29udGVudFBpcGVsaW5lLmpzJztcbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5cbi8qKiBOb3JtYWxpemUgdXNlciBpbnB1dCB0byBORkMgZm9ybSB0byBwcmV2ZW50IFVuaWNvZGUgaG9tb2dyYXBoIGF0dGFja3MgKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlucHV0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQubm9ybWFsaXplKCdORkMnKTtcbn1cbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlciB9IGZyb20gJy4uL3V0aWxzL1NsaWRpbmdXaW5kb3dSYXRlTGltaXRlci5qcyc7XG5cbmNvbnN0IEVMRU1FTlRfVFlQRVMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddIGFzIGNvbnN0O1xuXG4vKiogTWF4IGZpbGUgc2l6ZSBmb3IgZWxlbWVudCByZWFkcyAoMSBNQikgKi9cbmNvbnN0IE1BWF9GSUxFX1NJWkVfQllURVMgPSAxXzA0OF81NzY7XG5cbi8qKiBWYWxpZCBlbGVtZW50IGZpbGUgZXh0ZW5zaW9ucyAqL1xuY29uc3QgVkFMSURfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycubWQnLCAnLnlhbWwnLCAnLnltbCddKTtcblxuLyoqIEtub3duLXNhZmUgZmlsZW5hbWUgcGF0dGVybjogc3RhcnRzIGFscGhhbnVtZXJpYywgYm9keSBhbGxvd3MgaHlwaGVucy91bmRlcnNjb3JlcywgdmFsaWQgZXh0ZW5zaW9uICovXG5jb25zdCBTQUZFX0ZJTEVOQU1FX1JFID0gL15bYS16QS1aMC05XVthLXpBLVowLTlfLV0qXFwuKHlhbWx8eW1sfG1kKSQvO1xuXG4vKiogQ2hlY2sgaWYgYSBmaWxlbmFtZSBpcyBhIGJhY2t1cCBvciBjcnVmdCBmaWxlICovXG5mdW5jdGlvbiBpc0JhY2t1cE9yQ3J1ZnQoZmlsZW5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBHdWFyYW50ZWVkIHNhZmUgZmlsZW5hbWVzIHNraXAgYmxhY2tsaXN0IGNoZWNrcyBlbnRpcmVseVxuICBpZiAoU0FGRV9GSUxFTkFNRV9SRS50ZXN0KGZpbGVuYW1lKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lID09PSAnX2luZGV4Lmpzb24nKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lLmluY2x1ZGVzKCcuYmFja3VwJykgfHwgZmlsZW5hbWUuaW5jbHVkZXMoJy5zdGF0ZScpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcuYmFrJykgfHwgZmlsZW5hbWUuZW5kc1dpdGgoJ34nKSkgcmV0dXJuIHRydWU7XG4gIGlmIChmaWxlbmFtZS5pbmNsdWRlcygnIGNvcHknKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgZGlyZWN0b3J5IGZvciB2YWxpZCBlbGVtZW50cywgcnVubmluZyBlYWNoIHRocm91Z2ggdGhlIHNlY3VyaXR5XG4gKiB2YWxpZGF0aW9uIHBpcGVsaW5lLiBSZXR1cm5zIG1ldGFkYXRhIG9iamVjdHMgcmVhZHkgZm9yIEFQSSByZXNwb25zZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5FbGVtZW50RGlyZWN0b3J5KHR5cGVEaXI6IHN0cmluZywgdHlwZTogc3RyaW5nLCBsb2dQcmVmaXg6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcih0eXBlRGlyKTtcbiAgY29uc3QgZWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGlmIChpc0JhY2t1cE9yQ3J1ZnQoZmlsZSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUoZmlsZSk7XG4gICAgaWYgKCFWQUxJRF9FWFRFTlNJT05TLmhhcyhleHQpKSBjb250aW51ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4odHlwZURpciwgZmlsZSk7XG4gICAgICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFmaWxlU3RhdC5pc0ZpbGUoKSB8fCBmaWxlU3RhdC5zaXplID4gTUFYX0ZJTEVfU0laRV9CWVRFUykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVFbGVtZW50Q29udGVudChmaWxlLCBjb250ZW50LCB0eXBlKTtcblxuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgJHtsb2dQcmVmaXh9IFNraXBwaW5nIHJlamVjdGVkIGZpbGUgJHtmaWxlfTogJHt2YWxpZGF0aW9uUmVzdWx0LnJlamVjdGlvbj8ucmVhc29ufWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXRhZGF0YSB9ID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lIHx8IGZpbGUucmVwbGFjZShleHQsICcnKSxcbiAgICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICB0eXBlOiB0eXBlLnNsaWNlKDAsIC0xKSxcbiAgICAgICAgdmVyc2lvbjogbWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvciB8fCAnJyxcbiAgICAgICAgY2F0ZWdvcnk6IG1ldGFkYXRhLmNhdGVnb3J5IHx8ICcnLFxuICAgICAgICB0YWdzOiBtZXRhZGF0YS50YWdzIHx8ICcnLFxuICAgICAgICBjcmVhdGVkOiBtZXRhZGF0YS5jcmVhdGVkIHx8ICcnLFxuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGAke2xvZ1ByZWZpeH0gRmFpbGVkIHRvIHBhcnNlICR7ZmlsZX06YCwgZXJyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbi8qKiBOb3JtYWxpemUgcGx1cmFsIGVsZW1lbnQgdHlwZSB0byBzaW5ndWxhciBmb3JtICovXG5jb25zdCBQTFVSQUxfVE9fU0lOR1VMQVI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHBlcnNvbmFzOiAncGVyc29uYScsIHNraWxsczogJ3NraWxsJywgdGVtcGxhdGVzOiAndGVtcGxhdGUnLFxuICBhZ2VudHM6ICdhZ2VudCcsIG1lbW9yaWVzOiAnbWVtb3J5JywgZW5zZW1ibGVzOiAnZW5zZW1ibGUnLFxufTtcbmZ1bmN0aW9uIHRvU2luZ3VsYXJUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBQTFVSQUxfVE9fU0lOR1VMQVJbdHlwZV0gfHwgKHR5cGUuZW5kc1dpdGgoJ3MnKSA/IHR5cGUuc2xpY2UoMCwgLTEpIDogdHlwZSk7XG59XG5cbi8qKiBCdWlsZCBhIHN0cnVjdHVyZWQgdmFsaWRhdGlvbiByZXNwb25zZSBmb3IgZWxlbWVudCBkZXRhaWwgcm91dGVzICovXG5mdW5jdGlvbiBidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uOiBQaXBlbGluZVJlc3VsdCwgY29udGVudDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YTogdmFsaWRhdGlvbi5tZXRhZGF0YSxcbiAgICBib2R5OiB2YWxpZGF0aW9uLmJvZHksXG4gICAgcmF3OiBjb250ZW50LFxuICAgIHR5cGU6IHRvU2luZ3VsYXJUeXBlKHR5cGUpLFxuICAgIHZhbGlkYXRpb246IHtcbiAgICAgIHN0YXR1czogdmFsaWRhdGlvbi52YWxpZCA/ICdwYXNzJyA6ICd3YXJuJyxcbiAgICAgIC4uLih2YWxpZGF0aW9uLnJlamVjdGlvbiAmJiB7XG4gICAgICAgIHJlYXNvbjogdmFsaWRhdGlvbi5yZWplY3Rpb24ucmVhc29uLFxuICAgICAgICBzZXZlcml0eTogdmFsaWRhdGlvbi5yZWplY3Rpb24uc2V2ZXJpdHksXG4gICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uLnJlamVjdGlvbi5wYXR0ZXJucyxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGZpbGUgcGF0aCBmb3IgYW4gZWxlbWVudCwgaGFuZGxpbmcgbWVtb3J5IGRhdGUtcGF0aHNcbiAqIGFuZCBuYW1lLXdpdGgtb3Itd2l0aG91dC1leHRlbnNpb24gbWF0Y2hpbmcuXG4gKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBwYXRoIG9yIG51bGwgd2l0aCBhbiBlcnJvciB0byBzZW5kLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRWxlbWVudEZpbGVQYXRoKFxuICBwb3J0Zm9saW9EaXI6IHN0cmluZywgdHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmdcbik6IFByb21pc2U8eyBmaWxlUGF0aDogc3RyaW5nIH0gfCB7IGVycm9yOiBzdHJpbmc7IHN0YXR1czogbnVtYmVyIH0+IHtcbiAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycgJiYgbmFtZS5pbmNsdWRlcygnLycpKSB7XG4gICAgY29uc3QgcGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMiB8fCAhL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QocGFydHNbMF0pIHx8IGlzQmFja3VwT3JDcnVmdChwYXJ0c1sxXSkpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiAnSW52YWxpZCBtZW1vcnkgcGF0aCcsIHN0YXR1czogNDAwIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUsIG5hbWUpO1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoZmlsZVBhdGgpO1xuICAgIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgICAgcmV0dXJuIHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcsIHN0YXR1czogNDAwIH07XG4gICAgfVxuICAgIHJldHVybiB7IGZpbGVQYXRoIH07XG4gIH1cblxuICBjb25zdCB0eXBlRGlyID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUpO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIodHlwZURpcik7XG4gIGNvbnN0IG1hdGNoID0gZmlsZXMuZmluZChmID0+IHtcbiAgICBjb25zdCBiYXNlID0gZi5yZXBsYWNlKGV4dG5hbWUoZiksICcnKTtcbiAgICByZXR1cm4gYmFzZSA9PT0gbmFtZSB8fCBmID09PSBuYW1lO1xuICB9KTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGBFbGVtZW50IG5vdCBmb3VuZDogJHt0eXBlfS8ke25hbWV9YCwgc3RhdHVzOiA0MDQgfTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVQYXRoID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUsIG1hdGNoKTtcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShmaWxlUGF0aCk7XG4gIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgIHJldHVybiB7IGVycm9yOiAnUGF0aCB0cmF2ZXJzYWwgZGV0ZWN0ZWQnLCBzdGF0dXM6IDQwMCB9O1xuICB9XG4gIHJldHVybiB7IGZpbGVQYXRoIH07XG59XG5cbi8qKlxuICogTG9hZCBtZW1vcmllcyBmcm9tIHRoZSBfaW5kZXguanNvbiBmaWxlLlxuICogTWVtb3JpZXMgdXNlIGRhdGUtcGFydGl0aW9uZWQgc3RvcmFnZSB3aXRoIGFuIGluZGV4LCB1bmxpa2Ugb3RoZXJcbiAqIGVsZW1lbnQgdHlwZXMgd2hpY2ggYXJlIGZsYXQgZmlsZXMgaW4gYSBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRNZW1vcmllc0Zyb21JbmRleChwb3J0Zm9saW9EaXI6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gIGNvbnN0IGluZGV4UGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCAnbWVtb3JpZXMnLCAnX2luZGV4Lmpzb24nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShpbmRleFBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGluZGV4ID0gSlNPTi5wYXJzZShyYXcpIGFzIHtcbiAgICAgIGVudHJpZXM/OiBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU/OiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nOyB0YWdzPzogc3RyaW5nW107IGNyZWF0ZWQ/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IHVua25vd24gfT47XG4gICAgICBlbnRyeUNvdW50PzogbnVtYmVyO1xuICAgIH07XG5cbiAgICBjb25zdCBlbnRyaWVzID0gaW5kZXguZW50cmllcyB8fCB7fTtcbiAgICBjb25zdCBlbGVtZW50czogdW5rbm93bltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cmllcykpIHtcbiAgICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGhQYXJ0cy5wb3AoKSB8fCBwYXRoO1xuICAgICAgLy8gRXh0cmFjdCBkYXRlIGZyb20gZGlyZWN0b3J5IHBhdGggKGUuZy4sIFwiMjAyNS0wOS0xOS9jb2RlLXBhdHRlcm5zLnlhbWxcIiAtPiBcIjIwMjUtMDktMTlcIilcbiAgICAgIGNvbnN0IGRhdGVGcm9tUGF0aCA9IHBhdGhQYXJ0cy5sZW5ndGggPiAwICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHBhdGhQYXJ0c1swXSkgPyBwYXRoUGFydHNbMF0gOiAnJztcbiAgICAgIC8vIEZhbGwgYmFjayB0byBmaWxlbmFtZSBpZiBpbmRleCBoYXMgbm8gbmFtZSBvciBzdG9yZWQgXCJ1bm5hbWVkXCIgKHVwc3RyZWFtIGluZGV4ZXIgYnVnKVxuICAgICAgY29uc3QgaW5kZXhOYW1lID0gZW50cnkubmFtZSAmJiBlbnRyeS5uYW1lICE9PSAndW5uYW1lZCcgPyBlbnRyeS5uYW1lIDogbnVsbDtcbiAgICAgIGNvbnN0IG5hbWUgPSBpbmRleE5hbWUgfHwgZmlsZW5hbWUucmVwbGFjZSgvXFwuKHlhbWx8eW1sfG1kKSQvLCAnJyk7XG5cbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogZW50cnkuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIHR5cGU6ICdtZW1vcnknLFxuICAgICAgICB2ZXJzaW9uOiBlbnRyeS52ZXJzaW9uIHx8ICcxLjAuMCcsXG4gICAgICAgIGF1dGhvcjogZW50cnkuYXV0aG9yIHx8ICcnLFxuICAgICAgICBjYXRlZ29yeTogZW50cnkuY2F0ZWdvcnkgfHwgZW50cnkubWVtb3J5VHlwZSB8fCAnJyxcbiAgICAgICAgdGFnczogZW50cnkudGFncyB8fCBbXSxcbiAgICAgICAgY3JlYXRlZDogZW50cnkuY3JlYXRlZCB8fCBkYXRlRnJvbVBhdGgsXG4gICAgICAgIGZpbGVuYW1lOiBwYXRoLCAvLyBkYXRlL2ZpbGVuYW1lIHBhdGggZm9yIGNvbnRlbnQgbG9hZGluZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9IGNhdGNoIHtcbiAgICAvLyBGYWxsIGJhY2sgdG8gZW1wdHkgaWYgbm8gaW5kZXhcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqIFJhdGUgbGltaXRlciBmb3IgL2FwaS9pbnN0YWxsOiBtYXggMTAgaW5zdGFsbHMgcGVyIDYwIHNlY29uZHMgKi9cbmNvbnN0IGluc3RhbGxSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoMTAsIDYwXzAwMCk7XG5cbi8qKiBTYW5pdGl6ZSB0ZXh0IGNvbnRlbnQgdG8gcHJldmVudCBYU1MgaW4gcmVuZGVyZWQgSFRNTCAqL1xuZnVuY3Rpb24gc2FuaXRpemVGb3JIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZSgvJy9nLCAnJiMzOTsnKTtcbn1cblxuLyoqIFBhcnNlIFlBTUwgZnJvbnQgbWF0dGVyIGZyb20gYSBtYXJrZG93biBmaWxlICovXG5mdW5jdGlvbiBwYXJzZUZyb250TWF0dGVyKGNvbnRlbnQ6IHN0cmluZyk6IHsgbWV0YWRhdGE6IEVsZW1lbnREaXNwbGF5TWV0YWRhdGE7IGJvZHk6IHN0cmluZyB9IHtcbiAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxyP1xcbihbXFxzXFxTXSo/KVxccj9cXG4tLS1cXHI/XFxuPyhbXFxzXFxTXSopJC8pO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHsgbWV0YWRhdGE6IHt9LCBib2R5OiBjb250ZW50IH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKG1hdGNoWzFdKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9ICh0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBwYXJzZWQgIT09IG51bGwpID8gcGFyc2VkIGFzIEVsZW1lbnREaXNwbGF5TWV0YWRhdGEgOiB7fTtcbiAgICByZXR1cm4geyBtZXRhZGF0YSwgYm9keTogbWF0Y2hbMl0gfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgbWV0YWRhdGE6IHt9LCBib2R5OiBtYXRjaFsyXSB8fCBjb250ZW50IH07XG4gIH1cbn1cblxuLyoqIFBhcnNlIGEgWUFNTC1vbmx5IGZpbGUgKG1lbW9yaWVzKSAqL1xuZnVuY3Rpb24gcGFyc2VZYW1sRmlsZShjb250ZW50OiBzdHJpbmcpOiB7IG1ldGFkYXRhOiBFbGVtZW50RGlzcGxheU1ldGFkYXRhOyBib2R5OiBzdHJpbmcgfSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZVJhd1lhbWwoY29udGVudCk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsKSA/IHBhcnNlZCBhcyBFbGVtZW50RGlzcGxheU1ldGFkYXRhIDoge307XG4gICAgcmV0dXJuIHsgbWV0YWRhdGEsIGJvZHk6ICcnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IG1ldGFkYXRhOiB7fSwgYm9keTogY29udGVudCB9O1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgcG9ydGZvbGlvIHJvdXRlcyBzaGFyZWQgYmV0d2VlbiBzaW1wbGUgYW5kIGdhdGV3YXkgbW9kZXMuXG4gKiBUaGUgc3RydWN0dXJlZERldGFpbCBvcHRpb24gY29udHJvbHMgd2hldGhlciBkZXRhaWwgcm91dGVzIHJldHVyblxuICogc3RydWN0dXJlZCBKU09OIChnYXRld2F5KSBvciBwbGFpbiB0ZXh0IChzaW1wbGUvbGVnYWN5KS5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMoXG4gIHJvdXRlcjogUm91dGVyLFxuICBwb3J0Zm9saW9EaXI6IHN0cmluZyxcbiAgb3B0aW9uczogeyBzdHJ1Y3R1cmVkRGV0YWlsOiBib29sZWFuOyBsb2dQcmVmaXg6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHsgc3RydWN0dXJlZERldGFpbCwgbG9nUHJlZml4IH0gPSBvcHRpb25zO1xuXG4gIHJvdXRlci5nZXQoJy9lbGVtZW50cycsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlUGFyYW0gPSByZXEucXVlcnkucGFnZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBwYWdlU2l6ZVBhcmFtID0gcmVxLnF1ZXJ5LnBhZ2VTaXplIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHdhbnRQYWdpbmF0aW9uID0gcGFnZVBhcmFtICE9PSB1bmRlZmluZWQgJiYgcGFnZVNpemVQYXJhbSAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcGFnZSA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChwYWdlUGFyYW0gfHwgJzEnLCAxMCkgfHwgMSk7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IE1hdGgubWF4KDEsIE1hdGgubWluKDIwMCwgTnVtYmVyLnBhcnNlSW50KHBhZ2VTaXplUGFyYW0gfHwgJzUwJywgMTApIHx8IDUwKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPiA9IHt9O1xuICAgICAgbGV0IHRvdGFsQ291bnQgPSAwO1xuXG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgRUxFTUVOVF9UWVBFUykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnbWVtb3JpZXMnKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1FbGVtZW50cyA9IGF3YWl0IGxvYWRNZW1vcmllc0Zyb21JbmRleChwb3J0Zm9saW9EaXIpO1xuICAgICAgICAgICAgcmVzdWx0W3R5cGVdID0gbWVtRWxlbWVudHM7XG4gICAgICAgICAgICB0b3RhbENvdW50ICs9IG1lbUVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgdHlwZSk7XG4gICAgICAgICAgY29uc3QgZGlyU3RhdCA9IGF3YWl0IHN0YXQodHlwZURpcik7XG4gICAgICAgICAgaWYgKCFkaXJTdGF0LmlzRGlyZWN0b3J5KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBzY2FuRWxlbWVudERpcmVjdG9yeSh0eXBlRGlyLCB0eXBlLCBsb2dQcmVmaXgpO1xuICAgICAgICAgIHJlc3VsdFt0eXBlXSA9IGVsZW1lbnRzO1xuICAgICAgICAgIHRvdGFsQ291bnQgKz0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXN1bHRbdHlwZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAod2FudFBhZ2luYXRpb24pIHtcbiAgICAgICAgY29uc3QgYWxsRWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgRUxFTUVOVF9UWVBFUykge1xuICAgICAgICAgIGFsbEVsZW1lbnRzLnB1c2goLi4uKHJlc3VsdFt0eXBlXSB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHBhZ2VTaXplO1xuICAgICAgICBjb25zdCBwYWdlZCA9IGFsbEVsZW1lbnRzLnNsaWNlKHN0YXJ0LCBzdGFydCArIHBhZ2VTaXplKTtcbiAgICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChhbGxFbGVtZW50cy5sZW5ndGggLyBwYWdlU2l6ZSk7XG4gICAgICAgIHJlcy5qc29uKHsgZWxlbWVudHM6IHBhZ2VkLCB0b3RhbENvdW50OiBhbGxFbGVtZW50cy5sZW5ndGgsIHBhZ2UsIHBhZ2VTaXplLCB0b3RhbFBhZ2VzIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLmpzb24oeyBlbGVtZW50czogcmVzdWx0LCB0b3RhbENvdW50IH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKGAke2xvZ1ByZWZpeH0gRmFpbGVkIHRvIGxpc3QgZWxlbWVudHM6YCwgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gbGlzdCBlbGVtZW50cycgfSk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvZWxlbWVudHMvOnR5cGUnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy50eXBlKTtcbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXModHlwZSBhcyB0eXBlb2YgRUxFTUVOVF9UWVBFU1tudW1iZXJdKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEludmFsaWQgZWxlbWVudCB0eXBlOiAke3R5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycpIHtcbiAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgcmVzLmpzb24oeyB0eXBlLCBlbGVtZW50czogbWVtRWxlbWVudHMsIGNvdW50OiBtZW1FbGVtZW50cy5sZW5ndGggfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBzY2FuRWxlbWVudERpcmVjdG9yeShqb2luKHBvcnRmb2xpb0RpciwgdHlwZSksIHR5cGUsIGxvZ1ByZWZpeCk7XG4gICAgICByZXMuanNvbih7IHR5cGUsIGVsZW1lbnRzLCBjb3VudDogZWxlbWVudHMubGVuZ3RoIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7dHlwZX1gIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnL2VsZW1lbnRzL21lbW9yaWVzLzpkYXRlLzpmaWxlJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgeyBkYXRlLCBmaWxlIH0gPSByZXEucGFyYW1zO1xuXG4gICAgaWYgKCEvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdChkYXRlKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZGF0ZSBmb3JtYXQnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZmlsZS5pbmNsdWRlcygnLi4nKSB8fCBmaWxlLmluY2x1ZGVzKCcvJykgfHwgZmlsZS5pbmNsdWRlcygnXFxcXCcpIHx8IGlzQmFja3VwT3JDcnVmdChmaWxlKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZmlsZW5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCAnbWVtb3JpZXMnLCBkYXRlLCBmaWxlKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFyZXNvbHZlZFBhdGguc3RhcnRzV2l0aChyZXNvbHZlKHBvcnRmb2xpb0RpcikpKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KGZpbGVQYXRoKTtcbiAgICAgIGlmICghZmlsZVN0YXQuaXNGaWxlKCkgfHwgZmlsZVN0YXQuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfQllURVMpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhmaWxlU3RhdC5pc0ZpbGUoKSA/IDQxMyA6IDQwNCkuanNvbih7IGVycm9yOiBmaWxlU3RhdC5pc0ZpbGUoKSA/ICdGaWxlIHRvbyBsYXJnZScgOiAnTm90IGZvdW5kJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgaWYgKHN0cnVjdHVyZWREZXRhaWwpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZSwgY29udGVudCwgJ21lbW9yaWVzJyk7XG4gICAgICAgIHJlcy5qc29uKGJ1aWxkVmFsaWRhdGlvblJlc3BvbnNlKHZhbGlkYXRpb24sIGNvbnRlbnQsICdtZW1vcmllcycpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICAgIHJlcy5zZW5kKGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogYE1lbW9yeSBub3QgZm91bmQ6ICR7ZGF0ZX0vJHtmaWxlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvZWxlbWVudHMvOnR5cGUvOm5hbWUnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB0eXBlID0gcmVxLnBhcmFtcy50eXBlO1xuICAgIGNvbnN0IG5hbWUgPSBub3JtYWxpemVJbnB1dChyZXEucGFyYW1zLm5hbWUpO1xuICAgIGlmICghRUxFTUVOVF9UWVBFUy5pbmNsdWRlcyh0eXBlIGFzIHR5cGVvZiBFTEVNRU5UX1RZUEVTW251bWJlcl0pKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiBgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7dHlwZX1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuYW1lLmluY2x1ZGVzKCcuLicpIHx8IG5hbWUuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBuYW1lJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAhPT0gJ21lbW9yaWVzJyAmJiBuYW1lLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRGaWxlUGF0aChwb3J0Zm9saW9EaXIsIHR5cGUsIG5hbWUpO1xuICAgICAgaWYgKCdlcnJvcicgaW4gcmVzb2x2ZWQpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXNvbHZlZC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzb2x2ZWQuZXJyb3IgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KHJlc29sdmVkLmZpbGVQYXRoKTtcbiAgICAgIGlmIChmaWxlU3RhdC5zaXplID4gTUFYX0ZJTEVfU0laRV9CWVRFUykge1xuICAgICAgICByZXMuc3RhdHVzKDQxMykuanNvbih7IGVycm9yOiBgRmlsZSB0b28gbGFyZ2UgKCR7ZmlsZVN0YXQuc2l6ZX0gYnl0ZXMpLiBNYXggMSBNQi5gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShyZXNvbHZlZC5maWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBpZiAoc3RydWN0dXJlZERldGFpbCkge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHJlc29sdmVkLmZpbGVQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgbmFtZTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZW5hbWUsIGNvbnRlbnQsIHR5cGUpO1xuICAgICAgICByZXMuanNvbihidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uLCBjb250ZW50LCB0eXBlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcpO1xuICAgICAgICByZXMuc2VuZChjb250ZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBGYWlsZWQgdG8gZ2V0IGVsZW1lbnQ6ICR7dHlwZX0vJHtuYW1lfWAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIFJlZ2lzdGVyIGZpbGVzeXN0ZW0tYmFzZWQgc3RhdHMgcm91dGUgKHNoYXJlZCBiZXR3ZWVuIHNpbXBsZSBhbmQgZ2F0ZXdheSkgKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXI6IFJvdXRlciwgcG9ydGZvbGlvRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgcm91dGVyLmdldCgnL3N0YXRzJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgICAgbGV0IHRvdGFsID0gMDtcblxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIEVMRU1FTlRfVFlQRVMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ21lbW9yaWVzJykge1xuICAgICAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgICAgIHN0YXRzW3R5cGVdID0gbWVtRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgdG90YWwgKz0gbWVtRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgdHlwZSk7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHR5cGVEaXIpO1xuICAgICAgICAgIGNvbnN0IGNvdW50ID0gZmlsZXMuZmlsdGVyKGYgPT4gIWlzQmFja3VwT3JDcnVmdChmKSAmJiBWQUxJRF9FWFRFTlNJT05TLmhhcyhleHRuYW1lKGYpKSkubGVuZ3RoO1xuICAgICAgICAgIHN0YXRzW3R5cGVdID0gY291bnQ7XG4gICAgICAgICAgdG90YWwgKz0gY291bnQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHN0YXRzW3R5cGVdID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXMuanNvbih7IHN0YXRzLCB0b3RhbCB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gZ2V0IHN0YXRzJyB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiogUmVnaXN0ZXIgY29sbGVjdGlvbiBpbmRleCBwcm94eSByb3V0ZSAoc2hhcmVkIGJldHdlZW4gc2ltcGxlIGFuZCBnYXRld2F5KSAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJDb2xsZWN0aW9uUm91dGUocm91dGVyOiBSb3V0ZXIsIHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogdm9pZCB7XG4gIHJvdXRlci5nZXQoJy9jb2xsZWN0aW9uJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHJlcy5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vbWFpbi9wdWJsaWMvY29sbGVjdGlvbi1pbmRleC5qc29uJyk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgcmVzLnNlbmQoZGF0YSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHsgLyogR2l0SHViIHVucmVhY2hhYmxlIOKAlCBmYWxsIGJhY2sgdG8gbG9jYWwgKi8gfVxuXG4gICAgY29uc3QgbG9jYWxQYXRocyA9IFtcbiAgICAgIGpvaW4ocG9ydGZvbGlvRGlyLCAnLi4nLCAnLi4nLCAnLi4nLCAnY29sbGVjdGlvbicsICdwdWJsaWMnLCAnY29sbGVjdGlvbi1pbmRleC5qc29uJyksXG4gICAgICBqb2luKHBvcnRmb2xpb0RpciwgJy4uJywgJ2NvbGxlY3Rpb24nLCAncHVibGljJywgJ2NvbGxlY3Rpb24taW5kZXguanNvbicpLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsUGF0aCBvZiBsb2NhbFBhdGhzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUobG9jYWxQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgcmVzLnNlbmQoY29udGVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggeyAvKiB0cnkgbmV4dCAqLyB9XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ0NvbGxlY3Rpb24gaW5kZXggbm90IGF2YWlsYWJsZScgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBpUm91dGVzKHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogUm91dGVyIHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG5cbiAgcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMocm91dGVyLCBwb3J0Zm9saW9EaXIsIHsgc3RydWN0dXJlZERldGFpbDogZmFsc2UsIGxvZ1ByZWZpeDogJ1tXZWJVSV0nIH0pO1xuXG4gIHJlZ2lzdGVyU3RhdHNSb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG4gIHJlZ2lzdGVyQ29sbGVjdGlvblJvdXRlKHJvdXRlciwgcG9ydGZvbGlvRGlyKTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luc3RhbGxcbiAgICogSW5zdGFsbCBhIGNvbGxlY3Rpb24gZWxlbWVudCBpbnRvIHRoZSBsb2NhbCBwb3J0Zm9saW8uXG4gICAqIFJvdXRlcyB0aHJvdWdoIERvbGxob3VzZU1DUCdzIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IHBpcGVsaW5lXG4gICAqIGZvciBwcm9wZXIgdmFsaWRhdGlvbiwgZ2F0ZWtlZXBlciBjaGVja3MsIGFuZCBlbGVtZW50IG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBNQ1Agc2VydmVyJ3MgQ29sbGVjdGlvbkhhbmRsZXIgdG8gYmUgYXZhaWxhYmxlLlxuICAgKiBGYWxscyBiYWNrIHRvIGRpcmVjdCBmaWxlIHdyaXRlIGlmIG5vdCAoc3RhbmRhbG9uZSB3ZWIgbW9kZSkuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2luc3RhbGwnLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgaWYgKCFpbnN0YWxsUmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnVG9vIG1hbnkgaW5zdGFsbCByZXF1ZXN0cy4gTWF4IDEwIHBlciBtaW51dGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhdGg6IGVsZW1lbnRQYXRoLCBuYW1lOiByYXdOYW1lLCB0eXBlIH0gPSByZXEuYm9keSBhcyB7IHBhdGg/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmcgfTtcblxuICAgIGlmICghZWxlbWVudFBhdGggfHwgIXR5cGUgfHwgIXJhd05hbWUpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdNaXNzaW5nIHJlcXVpcmVkIGZpZWxkczogcGF0aCwgbmFtZSwgdHlwZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTkZDLW5vcm1hbGl6ZSBuYW1lIGJlZm9yZSBzYWZldHkgY2hlY2tzIHRvIHByZXZlbnQgVW5pY29kZSBob21vZ3JhcGggYnlwYXNzZXMgKCMxNzM2KVxuICAgIGNvbnN0IG5hbWUgPSBub3JtYWxpemVJbnB1dChyYXdOYW1lKTtcblxuICAgIC8vIFZhbGlkYXRlIHR5cGVcbiAgICBjb25zdCBwbHVyYWxUeXBlID0gdHlwZS5lbmRzV2l0aCgncycpID8gdHlwZSA6IGAke3R5cGV9c2A7XG4gICAgaWYgKCFFTEVNRU5UX1RZUEVTLmluY2x1ZGVzKHBsdXJhbFR5cGUgYXMgdHlwZW9mIEVMRU1FTlRfVFlQRVNbbnVtYmVyXSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IGBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJHt0eXBlfWAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUHJldmVudCBwYXRoIHRyYXZlcnNhbFxuICAgIGlmIChlbGVtZW50UGF0aC5pbmNsdWRlcygnLi4nKSB8fCBuYW1lLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXRoIG9yIG5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnRQYXRoIGNvbnRhaW5zIG9ubHkgc2FmZSBjaGFyYWN0ZXJzIChhbHBoYW51bWVyaWMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzLCBzbGFzaGVzKVxuICAgIGlmICghL15bYS16QS1aMC05L18uLV0rJC8udGVzdChlbGVtZW50UGF0aCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgcGF0aCBjaGFyYWN0ZXJzJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gRmV0Y2ggY29udGVudCBmcm9tIEdpdEh1YlxuICAgICAgY29uc3QgZ2hVcmwgPSBgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL21haW4vJHtlbGVtZW50UGF0aH1gO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgY29uc3RydWN0ZWQgVVJMIHN0YXlzIHdpdGhpbiBleHBlY3RlZCBkb21haW4gYW5kIHBhdGhcbiAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoZ2hVcmwpO1xuICAgICAgaWYgKHBhcnNlZFVybC5ob3N0bmFtZSAhPT0gJ3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20nIHx8ICFwYXJzZWRVcmwucGF0aG5hbWUuc3RhcnRzV2l0aCgnL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uLycpKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGNvbGxlY3Rpb24gcGF0aCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChnaFVybCk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNTAyKS5qc29uKHsgZXJyb3I6IGBGYWlsZWQgdG8gZmV0Y2ggZnJvbSBjb2xsZWN0aW9uOiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIGNvbnRlbnQgdGhyb3VnaCB0aGUgc2VjdXJpdHkgcGlwZWxpbmUgYmVmb3JlIHdyaXRpbmdcbiAgICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUoZWxlbWVudFBhdGgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGV4dCA9PT0gJy55YW1sJyB8fCBleHQgPT09ICcueW1sJykge1xuICAgICAgICAgIC8vIFZhbGlkYXRlIFlBTUwgY29udGVudCBmb3IgYm9tYnMsIGNpcmN1bGFyIHJlZmVyZW5jZXMsIG1hbGljaW91cyBwYXR0ZXJuc1xuICAgICAgICAgIGlmICghQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZVlhbWxDb250ZW50KGNvbnRlbnQpKSB7XG4gICAgICAgICAgICByZXMuc3RhdHVzKDQyMikuanNvbih7IGVycm9yOiAnQ29udGVudCBmYWlsZWQgWUFNTCB2YWxpZGF0aW9uIOKAlCBwb3RlbnRpYWxseSBtYWxpY2lvdXMgcGF0dGVybnMgZGV0ZWN0ZWQnIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlUmF3WWFtbChjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBWYWxpZGF0ZSBtYXJrZG93bitmcm9udG1hdHRlciBjb250ZW50XG4gICAgICAgICAgU2VjdXJlWWFtbFBhcnNlci5wYXJzZShjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocGFyc2VFcnIpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MjIpLmpzb24oeyBlcnJvcjogYENvbnRlbnQgZmFpbGVkIHBhcnNlIHZhbGlkYXRpb246ICR7KHBhcnNlRXJyIGFzIEVycm9yKS5tZXNzYWdlfWAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgY29udGVudCBib2R5IGZvciBpbmplY3Rpb24gcGF0dGVybnNcbiAgICAgIGNvbnN0IHNpbmd1bGFyVHlwZSA9IHBsdXJhbFR5cGUuc2xpY2UoMCwgLTEpO1xuICAgICAgY29uc3QgY29udGV4dFR5cGVzID0gWydwZXJzb25hJywgJ3NraWxsJywgJ3RlbXBsYXRlJywgJ2FnZW50JywgJ21lbW9yeSddIGFzIGNvbnN0O1xuICAgICAgdHlwZSBDb250ZW50Q29udGV4dCA9IHR5cGVvZiBjb250ZXh0VHlwZXNbbnVtYmVyXTtcbiAgICAgIGNvbnN0IGNvbnRlbnRDb250ZXh0ID0gY29udGV4dFR5cGVzLmluY2x1ZGVzKHNpbmd1bGFyVHlwZSBhcyBDb250ZW50Q29udGV4dCkgPyBzaW5ndWxhclR5cGUgYXMgQ29udGVudENvbnRleHQgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKGNvbnRlbnQsIHtcbiAgICAgICAgY29udGVudENvbnRleHQsXG4gICAgICB9KTtcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdbV2ViVUldIEluc3RhbGwgYmxvY2tlZCDigJQgY29udGVudCB2YWxpZGF0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgICBlbGVtZW50OiBgJHtwbHVyYWxUeXBlfS8ke25hbWV9YCxcbiAgICAgICAgICBwYXR0ZXJuczogdmFsaWRhdGlvblJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgICAgIHNldmVyaXR5OiB2YWxpZGF0aW9uUmVzdWx0LnNldmVyaXR5LFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzLnN0YXR1cyg0MjIpLmpzb24oe1xuICAgICAgICAgIGVycm9yOiAnQ29udGVudCBmYWlsZWQgc2VjdXJpdHkgdmFsaWRhdGlvbicsXG4gICAgICAgICAgcGF0dGVybnM6IHZhbGlkYXRpb25SZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgICAgICBzZXZlcml0eTogdmFsaWRhdGlvblJlc3VsdC5zZXZlcml0eSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIGZpbGVuYW1lXG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGVsZW1lbnRQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgYCR7bmFtZX0ubWRgO1xuXG4gICAgICAvLyBFbnN1cmUgdHlwZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBjb25zdCB0eXBlRGlyID0gam9pbihwb3J0Zm9saW9EaXIsIHBsdXJhbFR5cGUpO1xuICAgICAgY29uc3QgeyBta2RpciB9ID0gYXdhaXQgaW1wb3J0KCdub2RlOmZzL3Byb21pc2VzJyk7XG4gICAgICBhd2FpdCBta2Rpcih0eXBlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgLy8gV3JpdGUgdG8gcG9ydGZvbGlvXG4gICAgICBjb25zdCBkZXN0UGF0aCA9IGpvaW4odHlwZURpciwgZmlsZW5hbWUpO1xuXG4gICAgICAvLyBWZXJpZnkgcmVzb2x2ZWQgZGVzdGluYXRpb24gcGF0aCBzdGF5cyB3aXRoaW4gcG9ydGZvbGlvIGRpcmVjdG9yeSAoZGVmZW5zZSBpbiBkZXB0aClcbiAgICAgIGNvbnN0IHJlc29sdmVkRGVzdCA9IHJlc29sdmUoZGVzdFBhdGgpO1xuICAgICAgaWYgKCFyZXNvbHZlZERlc3Quc3RhcnRzV2l0aChyZXNvbHZlKHBvcnRmb2xpb0RpcikpKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc3RhdChkZXN0UGF0aCk7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA5KS5qc29uKHsgZXJyb3I6IGBFbGVtZW50IGFscmVhZHkgZXhpc3RzOiAke3BsdXJhbFR5cGV9LyR7ZmlsZW5hbWV9LiBEZWxldGUgaXQgZmlyc3Qgb3IgcmVuYW1lLmAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggeyAvKiBkb2Vzbid0IGV4aXN0IOKAlCBnb29kICovIH1cblxuICAgICAgY29uc3QgeyB3cml0ZUZpbGU6IHdyaXRlRmlsZUZzIH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZUZzKGRlc3RQYXRoLCBjb250ZW50LCAndXRmLTgnKTtcblxuICAgICAgbG9nZ2VyLmluZm8oYFtXZWJVSV0gSW5zdGFsbGVkIGNvbGxlY3Rpb24gZWxlbWVudDogJHtwbHVyYWxUeXBlfS8ke2ZpbGVuYW1lfWApO1xuICAgICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBtZXNzYWdlOiBgSW5zdGFsbGVkICR7bmFtZX0gdG8gcG9ydGZvbGlvYCwgcGF0aDogYCR7cGx1cmFsVHlwZX0vJHtmaWxlbmFtZX1gIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbV2ViVUldIEluc3RhbGwgZmFpbGVkOicsIGVycik7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiBgSW5zdGFsbCBmYWlsZWQ6ICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX1gIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJvdXRlcjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBXZWIgTUNQLUFRTCBHYXRld2F5IFJvdXRlcyAoSXNzdWUgIzc5Nilcbi8vXG4vLyBUaGVzZSByb3V0ZXMgdHJhbnNsYXRlIEhUVFAgcmVxdWVzdHMgaW50byBNQ1BBUUxIYW5kbGVyIGNhbGxzLCByb3V0aW5nIGFsbFxuLy8gcmVhZHMvd3JpdGVzIHRocm91Z2ggdGhlIGV4aXN0aW5nIGVsZW1lbnQgbWFuYWdlcnMsIHZhbGlkYXRpb24sIGFuZCBnYXRla2VlcGVyLlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRXh0cmFjdCBzaW5nbGUgb3BlcmF0aW9uIHJlc3VsdCBmcm9tIE1DUEFRTEhhbmRsZXIgcmVzcG9uc2UuXG4gKiBXZWIgcm91dGVzIG5ldmVyIHNlbmQgYmF0Y2ggcmVxdWVzdHMsIHNvIGNhc3QgaXMgc2FmZS5cbiAqL1xuaW50ZXJmYWNlIFNpbmdsZU9wUmVzdWx0IHsgc3VjY2VzczogYm9vbGVhbjsgZGF0YT86IHVua25vd247IGVycm9yPzogc3RyaW5nIH1cbmZ1bmN0aW9uIGFzU2luZ2xlUmVzdWx0KHI6IHVua25vd24pOiBTaW5nbGVPcFJlc3VsdCB7XG4gIGlmICh0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgciAhPT0gbnVsbCAmJiAnc3VjY2VzcycgaW4gcikge1xuICAgIHJldHVybiByIGFzIFNpbmdsZU9wUmVzdWx0O1xuICB9XG4gIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0ludmFsaWQgb3BlcmF0aW9uIHJlc3VsdCBmb3JtYXQnIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIEFQSSByb3V0ZXMgdGhhdCByb3V0ZSB0aHJvdWdoIE1DUEFRTEhhbmRsZXIgKGdhdGV3YXkgbW9kZSkuXG4gKiBBbGwgb3BlcmF0aW9ucyBnbyB0aHJvdWdoIHRoZSBNQ1AtQVFMIHBpcGVsaW5lOiB2YWxpZGF0aW9uLCBjYWNoZSwgZ2F0ZWtlZXBlci5cbiAqXG4gKiBGYWxscyBiYWNrIHRvIGRpcmVjdCBmaWxlc3lzdGVtIGZvciAvYXBpL2NvbGxlY3Rpb24gKGV4dGVybmFsIGZldGNoLCBubyBNQ1AtQVFMIGVxdWl2YWxlbnQpXG4gKiBhbmQgL2FwaS9zdGF0cyAobGlnaHR3ZWlnaHQgYWdncmVnYXRlLCBubyBtYXRjaGluZyBvcGVyYXRpb24pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2F0ZXdheUFwaVJvdXRlcyhoYW5kbGVyOiBNQ1BBUUxIYW5kbGVyLCBwb3J0Zm9saW9EaXI6IHN0cmluZyk6IFJvdXRlciB7XG4gIGNvbnN0IHJvdXRlciA9IFJvdXRlcigpO1xuXG4gIC8vIFNoYXJlZCBwb3J0Zm9saW8gcm91dGVzIOKAlCBzdHJ1Y3R1cmVkIEpTT04gZm9yIGRldGFpbCB2aWV3c1xuICAvLyBjb2RlcWxbanMvbWlzc2luZy1yYXRlLWxpbWl0aW5nXSDigJQgUmF0ZS1saW1pdGVkIGJ5IHJvdXRlci51c2UoKSBtaWRkbGV3YXJlIGluIHNlcnZlci50c1xuICByZWdpc3RlclBvcnRmb2xpb1JvdXRlcyhyb3V0ZXIsIHBvcnRmb2xpb0RpciwgeyBzdHJ1Y3R1cmVkRGV0YWlsOiB0cnVlLCBsb2dQcmVmaXg6ICdbV2ViVUkvR2F0ZXdheV0nIH0pO1xuICByZWdpc3RlclN0YXRzUm91dGUocm91dGVyLCBwb3J0Zm9saW9EaXIpO1xuICByZWdpc3RlckNvbGxlY3Rpb25Sb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG5cbiAgLyoqXG4gICAqIEdFVCAvYXBpL2NvbGxlY3Rpb24vY29udGVudC8qXG4gICAqIFByb3hpZXMgY29sbGVjdGlvbiBlbGVtZW50IGNvbnRlbnQgZnJvbSBHaXRIdWIsIHZhbGlkYXRlcyB0aHJvdWdoIHRoZVxuICAgKiBzZWN1cml0eSBwaXBlbGluZSwgYW5kIHJldHVybnMgc3RydWN0dXJlZCBKU09OIChzYW1lIGZvcm1hdCBhcyBwb3J0Zm9saW8gZGV0YWlsKS5cbiAgICogY29kZXFsW2pzL21pc3NpbmctcmF0ZS1saW1pdGluZ10g4oCUIFJhdGUtbGltaXRlZCBieSByb3V0ZXIudXNlKCkgbWlkZGxld2FyZSBhYm92ZS5cbiAgICovXG4gIHJvdXRlci5nZXQoJy9jb2xsZWN0aW9uL2NvbnRlbnQvOnByZWZpeC86dHlwZS86bmFtZScsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIGNvbnN0IHByZWZpeCA9IG5vcm1hbGl6ZUlucHV0KHJlcS5wYXJhbXMucHJlZml4KTtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IG5vcm1hbGl6ZUlucHV0KHJlcS5wYXJhbXMudHlwZSk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBub3JtYWxpemVJbnB1dChyZXEucGFyYW1zLm5hbWUpO1xuICAgIGNvbnN0IGVsZW1lbnRQYXRoID0gYCR7cHJlZml4fS8ke2VsZW1lbnRUeXBlfS8ke2ZpbGVuYW1lfWA7XG4gICAgaWYgKCFlbGVtZW50UGF0aCB8fCBlbGVtZW50UGF0aC5pbmNsdWRlcygnLi4nKSB8fCBlbGVtZW50UGF0aC5pbmNsdWRlcygnXFxcXCcpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBlbGVtZW50IHBhdGgnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZSBhZ2FpbnN0IGtub3duIHR5cGVzIHRvIHByZXZlbnQgYXJiaXRyYXJ5IHBhdGggY29uc3RydWN0aW9uXG4gICAgaWYgKCFFTEVNRU5UX1RZUEVTLmluY2x1ZGVzKGVsZW1lbnRUeXBlIGFzIHR5cGVvZiBFTEVNRU5UX1RZUEVTW251bWJlcl0pKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiBgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7ZWxlbWVudFR5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gY29kZXFsW2pzL3JlcXVlc3QtZm9yZ2VyeV0g4oCUIG1pdGlnYXRlZDogZG9tYWluIGFuZCByZXBvIGFyZSBoYXJkY29kZWQgY29uc3RhbnRzLFxuICAgICAgLy8gZWxlbWVudFR5cGUgaXMgdmFsaWRhdGVkIGFnYWluc3QgRUxFTUVOVF9UWVBFUyB3aGl0ZWxpc3QgYWJvdmUsIHBhdGggdHJhdmVyc2FsXG4gICAgICAvLyBpcyBjaGVja2VkLCBhbmQgdGhlIG9ubHkgcmVhY2hhYmxlIHRhcmdldCBpcyBhIHNwZWNpZmljIHB1YmxpYyBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICAgIGNvbnN0IGdpdGh1YlVybCA9IGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vbWFpbi8ke2VsZW1lbnRQYXRofWA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGdpdGh1YlVybCk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHJlcy5zdGF0dXMocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQgPyA0MDQgOiA1MDIpLmpzb24oe1xuICAgICAgICAgIGVycm9yOiByZXNwb25zZS5zdGF0dXMgPT09IDQwNFxuICAgICAgICAgICAgPyBgQ29sbGVjdGlvbiBlbGVtZW50IG5vdCBmb3VuZDogJHtlbGVtZW50UGF0aH1gXG4gICAgICAgICAgICA6IGBGYWlsZWQgdG8gZmV0Y2ggZnJvbSBHaXRIdWIgKEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9KWAsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVFbGVtZW50Q29udGVudChmaWxlbmFtZSwgY29udGVudCwgZWxlbWVudFR5cGUpO1xuICAgICAgY29uc3Qgc2luZ3VsYXJUeXBlID0gUExVUkFMX1RPX1NJTkdVTEFSW2VsZW1lbnRUeXBlXSB8fCAoZWxlbWVudFR5cGUuZW5kc1dpdGgoJ3MnKSA/IGVsZW1lbnRUeXBlLnNsaWNlKDAsIC0xKSA6IGVsZW1lbnRUeXBlKTtcblxuICAgICAgcmVzLmpzb24oe1xuICAgICAgICBtZXRhZGF0YTogdmFsaWRhdGlvbi5tZXRhZGF0YSxcbiAgICAgICAgYm9keTogdmFsaWRhdGlvbi5ib2R5LFxuICAgICAgICByYXc6IGNvbnRlbnQsXG4gICAgICAgIHR5cGU6IHNpbmd1bGFyVHlwZSxcbiAgICAgICAgdmFsaWRhdGlvbjoge1xuICAgICAgICAgIHN0YXR1czogdmFsaWRhdGlvbi52YWxpZCA/ICdwYXNzJyA6ICd3YXJuJyxcbiAgICAgICAgICAuLi4odmFsaWRhdGlvbi5yZWplY3Rpb24gJiYge1xuICAgICAgICAgICAgcmVhc29uOiB2YWxpZGF0aW9uLnJlamVjdGlvbi5yZWFzb24sXG4gICAgICAgICAgICBzZXZlcml0eTogdmFsaWRhdGlvbi5yZWplY3Rpb24uc2V2ZXJpdHksXG4gICAgICAgICAgICBwYXR0ZXJuczogdmFsaWRhdGlvbi5yZWplY3Rpb24ucGF0dGVybnMsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW1dlYlVJL0dhdGV3YXldIEZhaWxlZCB0byBmZXRjaCBjb2xsZWN0aW9uIGNvbnRlbnQ6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAyKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gZmV0Y2ggY29sbGVjdGlvbiBlbGVtZW50JyB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvaW5zdGFsbFxuICAgKiBSb3V0ZXMgdGhyb3VnaCBpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudCBNQ1AtQVFMIG9wZXJhdGlvbi5cbiAgICogQWxsIHZhbGlkYXRpb24sIGdhdGVrZWVwZXIgY2hlY2tzIGhhbmRsZWQgYnkgdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgY29uc3QgaW5zdGFsbExpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKDEwLCA2MF8wMDApO1xuICByb3V0ZXIucG9zdCgnL2luc3RhbGwnLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgaWYgKCFpbnN0YWxsTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdUb28gbWFueSBpbnN0YWxsIHJlcXVlc3RzLiBNYXggMTAgcGVyIG1pbnV0ZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGF0aDogZWxlbWVudFBhdGgsIG5hbWU6IHJhd05hbWUsIHR5cGUgfSA9IHJlcS5ib2R5IGFzIHsgcGF0aD86IHN0cmluZzsgbmFtZT86IHN0cmluZzsgdHlwZT86IHN0cmluZyB9O1xuXG4gICAgaWYgKCFlbGVtZW50UGF0aCB8fCAhdHlwZSB8fCAhcmF3TmFtZSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ01pc3NpbmcgcmVxdWlyZWQgZmllbGRzOiBwYXRoLCBuYW1lLCB0eXBlJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBORkMtbm9ybWFsaXplIG5hbWUgYmVmb3JlIHNhZmV0eSBjaGVja3MgdG8gcHJldmVudCBVbmljb2RlIGhvbW9ncmFwaCBieXBhc3NlcyAoIzE3MzYpXG4gICAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZUlucHV0KHJhd05hbWUpO1xuXG4gICAgaWYgKGVsZW1lbnRQYXRoLmluY2x1ZGVzKCcuLicpIHx8IG5hbWUuaW5jbHVkZXMoJy4uJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBhdGggb3IgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWxlbWVudFBhdGggY29udGFpbnMgb25seSBzYWZlIGNoYXJhY3RlcnMgKGFscGhhbnVtZXJpYywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMsIHNsYXNoZXMpXG4gICAgaWYgKCEvXlthLXpBLVowLTkvXy4tXSskLy50ZXN0KGVsZW1lbnRQYXRoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBwYXRoIGNoYXJhY3RlcnMnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBSb3V0ZSB0aHJvdWdoIE1DUC1BUUwgaW5zdGFsbF9jb2xsZWN0aW9uX2NvbnRlbnQgb3BlcmF0aW9uXG4gICAgICBjb25zdCBpbnN0YWxsUGF0aCA9IGVsZW1lbnRQYXRoLnJlcGxhY2UoL15saWJyYXJ5XFwvLywgJycpO1xuICAgICAgY29uc3Qgb3BSZXN1bHQgPSBhc1NpbmdsZVJlc3VsdChhd2FpdCBoYW5kbGVyLmhhbmRsZUNyZWF0ZSh7XG4gICAgICAgIG9wZXJhdGlvbjogJ2luc3RhbGxfY29sbGVjdGlvbl9jb250ZW50JyxcbiAgICAgICAgcGFyYW1zOiB7IHBhdGg6IGluc3RhbGxQYXRoIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmICghb3BSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICByZXMuc3RhdHVzKDQyMikuanNvbih7IGVycm9yOiBvcFJlc3VsdC5lcnJvciB8fCAnSW5zdGFsbCBmYWlsZWQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKGBbV2ViVUkvR2F0ZXdheV0gSW5zdGFsbGVkIGNvbGxlY3Rpb24gZWxlbWVudDogJHtpbnN0YWxsUGF0aH1gKTtcbiAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbWVzc2FnZTogYEluc3RhbGxlZCAke25hbWV9IHRvIHBvcnRmb2xpb2AsIGRhdGE6IG9wUmVzdWx0LmRhdGEgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tXZWJVSS9HYXRld2F5XSBJbnN0YWxsIGZhaWxlZDonLCBlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogYEluc3RhbGwgZmFpbGVkOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG4iXX0=
|
|
701
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNCQUFzQixFQUFvRCxNQUFNLHNCQUFzQixDQUFDO0FBR2hILDRFQUE0RTtBQUM1RSxTQUFTLGNBQWMsQ0FBQyxLQUFhO0lBQ25DLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBQ0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBVSxDQUFDO0FBRXRHLDZDQUE2QztBQUM3QyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUV0QyxvQ0FBb0M7QUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUUzRCx5R0FBeUc7QUFDekcsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMs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QUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLG1CQUFvQixHQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYiBVSSBBUEkgUm91dGVzXG4gKlxuICogUkVTVCBlbmRwb2ludHMgZm9yIHJlYWRpbmcgcG9ydGZvbGlvIGVsZW1lbnRzLlxuICogUmVhZC1vbmx5IOKAlCBubyBtdXRhdGlvbnMgaW4gVjEuXG4gKlxuICogQWxsIGVsZW1lbnQgY29udGVudCBpcyBzYW5pdGl6ZWQgYmVmb3JlIHNlcnZpbmcgdG8gcHJldmVudCBYU1MuXG4gKlxuICogU2VjdXJpdHkgbm90ZTogVGhpcyB3ZWIgc2VydmVyIGJpbmRzIHRvIDEyNy4wLjAuMSBvbmx5IChzZWUgc2VydmVyLnRzKS5cbiAqIFJhdGUgbGltaXRpbmcgb24gcmVhZC1vbmx5IEdFVCBlbmRwb2ludHMgaXMgbm90IHJlcXVpcmVkIGZvciBsb2NhbGhvc3Qtb25seVxuICogbWFuYWdlbWVudCBpbnRlcmZhY2VzLiBUaGUgUE9TVCAvYXBpL2luc3RhbGwgZW5kcG9pbnQgaGFzIGV4cGxpY2l0IHJhdGUgbGltaXRpbmdcbiAqIHZpYSBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIgKG1heCAxMCBwZXIgbWludXRlKS5cbiAqIGNvZGVxbFtqcy9taXNzaW5nLXJhdGUtbGltaXRpbmddIOKAlCBBY2tub3dsZWRnZWQ7IGxvY2FsaG9zdC1vbmx5IGJpbmRpbmcgbWl0aWdhdGVzIERvUyByaXNrLlxuICovXG5cbmltcG9ydCBleHByZXNzLCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgcmVhZGRpciwgcmVhZEZpbGUsIHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIGV4dG5hbWUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlRWxlbWVudENvbnRlbnQsIHR5cGUgUGlwZWxpbmVSZXN1bHQsIHR5cGUgRWxlbWVudERpc3BsYXlNZXRhZGF0YSB9IGZyb20gJy4vY29udGVudFBpcGVsaW5lLmpzJztcbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5cbi8qKiBOb3JtYWxpemUgdXNlciBpbnB1dCB0byBORkMgZm9ybSB0byBwcmV2ZW50IFVuaWNvZGUgaG9tb2dyYXBoIGF0dGFja3MgKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlucHV0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQubm9ybWFsaXplKCdORkMnKTtcbn1cbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlciB9IGZyb20gJy4uL3V0aWxzL1NsaWRpbmdXaW5kb3dSYXRlTGltaXRlci5qcyc7XG5cbmNvbnN0IEVMRU1FTlRfVFlQRVMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddIGFzIGNvbnN0O1xuXG4vKiogTWF4IGZpbGUgc2l6ZSBmb3IgZWxlbWVudCByZWFkcyAoMSBNQikgKi9cbmNvbnN0IE1BWF9GSUxFX1NJWkVfQllURVMgPSAxXzA0OF81NzY7XG5cbi8qKiBWYWxpZCBlbGVtZW50IGZpbGUgZXh0ZW5zaW9ucyAqL1xuY29uc3QgVkFMSURfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycubWQnLCAnLnlhbWwnLCAnLnltbCddKTtcblxuLyoqIEtub3duLXNhZmUgZmlsZW5hbWUgcGF0dGVybjogc3RhcnRzIGFscGhhbnVtZXJpYywgYm9keSBhbGxvd3MgaHlwaGVucy91bmRlcnNjb3JlcywgdmFsaWQgZXh0ZW5zaW9uICovXG5jb25zdCBTQUZFX0ZJTEVOQU1FX1JFID0gL15bYS16QS1aMC05XVthLXpBLVowLTlfLV0qXFwuKHlhbWx8eW1sfG1kKSQvO1xuXG4vKiogQ2hlY2sgaWYgYSBmaWxlbmFtZSBpcyBhIGJhY2t1cCBvciBjcnVmdCBmaWxlICovXG5mdW5jdGlvbiBpc0JhY2t1cE9yQ3J1ZnQoZmlsZW5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBHdWFyYW50ZWVkIHNhZmUgZmlsZW5hbWVzIHNraXAgYmxhY2tsaXN0IGNoZWNrcyBlbnRpcmVseVxuICBpZiAoU0FGRV9GSUxFTkFNRV9SRS50ZXN0KGZpbGVuYW1lKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lID09PSAnX2luZGV4Lmpzb24nKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lLmluY2x1ZGVzKCcuYmFja3VwJykgfHwgZmlsZW5hbWUuaW5jbHVkZXMoJy5zdGF0ZScpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcuYmFrJykgfHwgZmlsZW5hbWUuZW5kc1dpdGgoJ34nKSkgcmV0dXJuIHRydWU7XG4gIGlmIChmaWxlbmFtZS5pbmNsdWRlcygnIGNvcHknKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgZGlyZWN0b3J5IGZvciB2YWxpZCBlbGVtZW50cywgcnVubmluZyBlYWNoIHRocm91Z2ggdGhlIHNlY3VyaXR5XG4gKiB2YWxpZGF0aW9uIHBpcGVsaW5lLiBSZXR1cm5zIG1ldGFkYXRhIG9iamVjdHMgcmVhZHkgZm9yIEFQSSByZXNwb25zZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5FbGVtZW50RGlyZWN0b3J5KHR5cGVEaXI6IHN0cmluZywgdHlwZTogc3RyaW5nLCBsb2dQcmVmaXg6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcih0eXBlRGlyKTtcbiAgY29uc3QgZWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGlmIChpc0JhY2t1cE9yQ3J1ZnQoZmlsZSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUoZmlsZSk7XG4gICAgaWYgKCFWQUxJRF9FWFRFTlNJT05TLmhhcyhleHQpKSBjb250aW51ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4odHlwZURpciwgZmlsZSk7XG4gICAgICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFmaWxlU3RhdC5pc0ZpbGUoKSB8fCBmaWxlU3RhdC5zaXplID4gTUFYX0ZJTEVfU0laRV9CWVRFUykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVFbGVtZW50Q29udGVudChmaWxlLCBjb250ZW50LCB0eXBlKTtcblxuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgJHtsb2dQcmVmaXh9IFNraXBwaW5nIHJlamVjdGVkIGZpbGUgJHtmaWxlfTogJHt2YWxpZGF0aW9uUmVzdWx0LnJlamVjdGlvbj8ucmVhc29ufWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXRhZGF0YSB9ID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lIHx8IGZpbGUucmVwbGFjZShleHQsICcnKSxcbiAgICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICB0eXBlOiB0eXBlLnNsaWNlKDAsIC0xKSxcbiAgICAgICAgdmVyc2lvbjogbWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvciB8fCAnJyxcbiAgICAgICAgY2F0ZWdvcnk6IG1ldGFkYXRhLmNhdGVnb3J5IHx8ICcnLFxuICAgICAgICB0YWdzOiBtZXRhZGF0YS50YWdzIHx8ICcnLFxuICAgICAgICBjcmVhdGVkOiBtZXRhZGF0YS5jcmVhdGVkIHx8ICcnLFxuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGAke2xvZ1ByZWZpeH0gRmFpbGVkIHRvIHBhcnNlICR7ZmlsZX06YCwgZXJyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbi8qKiBOb3JtYWxpemUgcGx1cmFsIGVsZW1lbnQgdHlwZSB0byBzaW5ndWxhciBmb3JtICovXG5jb25zdCBQTFVSQUxfVE9fU0lOR1VMQVI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHBlcnNvbmFzOiAncGVyc29uYScsIHNraWxsczogJ3NraWxsJywgdGVtcGxhdGVzOiAndGVtcGxhdGUnLFxuICBhZ2VudHM6ICdhZ2VudCcsIG1lbW9yaWVzOiAnbWVtb3J5JywgZW5zZW1ibGVzOiAnZW5zZW1ibGUnLFxufTtcbmZ1bmN0aW9uIHRvU2luZ3VsYXJUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBQTFVSQUxfVE9fU0lOR1VMQVJbdHlwZV0gfHwgKHR5cGUuZW5kc1dpdGgoJ3MnKSA/IHR5cGUuc2xpY2UoMCwgLTEpIDogdHlwZSk7XG59XG5cbi8qKiBCdWlsZCBhIHN0cnVjdHVyZWQgdmFsaWRhdGlvbiByZXNwb25zZSBmb3IgZWxlbWVudCBkZXRhaWwgcm91dGVzICovXG5mdW5jdGlvbiBidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uOiBQaXBlbGluZVJlc3VsdCwgY29udGVudDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YTogdmFsaWRhdGlvbi5tZXRhZGF0YSxcbiAgICBib2R5OiB2YWxpZGF0aW9uLmJvZHksXG4gICAgcmF3OiBjb250ZW50LFxuICAgIHR5cGU6IHRvU2luZ3VsYXJUeXBlKHR5cGUpLFxuICAgIHZhbGlkYXRpb246IHtcbiAgICAgIHN0YXR1czogdmFsaWRhdGlvbi52YWxpZCA/ICdwYXNzJyA6ICd3YXJuJyxcbiAgICAgIC4uLih2YWxpZGF0aW9uLnJlamVjdGlvbiAmJiB7XG4gICAgICAgIHJlYXNvbjogdmFsaWRhdGlvbi5yZWplY3Rpb24ucmVhc29uLFxuICAgICAgICBzZXZlcml0eTogdmFsaWRhdGlvbi5yZWplY3Rpb24uc2V2ZXJpdHksXG4gICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uLnJlamVjdGlvbi5wYXR0ZXJucyxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGZpbGUgcGF0aCBmb3IgYW4gZWxlbWVudCwgaGFuZGxpbmcgbWVtb3J5IGRhdGUtcGF0aHNcbiAqIGFuZCBuYW1lLXdpdGgtb3Itd2l0aG91dC1leHRlbnNpb24gbWF0Y2hpbmcuXG4gKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBwYXRoIG9yIG51bGwgd2l0aCBhbiBlcnJvciB0byBzZW5kLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRWxlbWVudEZpbGVQYXRoKFxuICBwb3J0Zm9saW9EaXI6IHN0cmluZywgdHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmdcbik6IFByb21pc2U8eyBmaWxlUGF0aDogc3RyaW5nIH0gfCB7IGVycm9yOiBzdHJpbmc7IHN0YXR1czogbnVtYmVyIH0+IHtcbiAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycgJiYgbmFtZS5pbmNsdWRlcygnLycpKSB7XG4gICAgY29uc3QgcGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMiB8fCAhL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QocGFydHNbMF0pIHx8IGlzQmFja3VwT3JDcnVmdChwYXJ0c1sxXSkpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiAnSW52YWxpZCBtZW1vcnkgcGF0aCcsIHN0YXR1czogNDAwIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUsIG5hbWUpO1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoZmlsZVBhdGgpO1xuICAgIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgICAgcmV0dXJuIHsgZXJyb3I6ICdQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcsIHN0YXR1czogNDAwIH07XG4gICAgfVxuICAgIHJldHVybiB7IGZpbGVQYXRoIH07XG4gIH1cblxuICBjb25zdCB0eXBlRGlyID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUpO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIodHlwZURpcik7XG4gIGNvbnN0IG1hdGNoID0gZmlsZXMuZmluZChmID0+IHtcbiAgICBjb25zdCBiYXNlID0gZi5yZXBsYWNlKGV4dG5hbWUoZiksICcnKTtcbiAgICByZXR1cm4gYmFzZSA9PT0gbmFtZSB8fCBmID09PSBuYW1lO1xuICB9KTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGBFbGVtZW50IG5vdCBmb3VuZDogJHt0eXBlfS8ke25hbWV9YCwgc3RhdHVzOiA0MDQgfTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVQYXRoID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUsIG1hdGNoKTtcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShmaWxlUGF0aCk7XG4gIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgIHJldHVybiB7IGVycm9yOiAnUGF0aCB0cmF2ZXJzYWwgZGV0ZWN0ZWQnLCBzdGF0dXM6IDQwMCB9O1xuICB9XG4gIHJldHVybiB7IGZpbGVQYXRoIH07XG59XG5cbi8qKlxuICogTG9hZCBtZW1vcmllcyBmcm9tIHRoZSBfaW5kZXguanNvbiBmaWxlLlxuICogTWVtb3JpZXMgdXNlIGRhdGUtcGFydGl0aW9uZWQgc3RvcmFnZSB3aXRoIGFuIGluZGV4LCB1bmxpa2Ugb3RoZXJcbiAqIGVsZW1lbnQgdHlwZXMgd2hpY2ggYXJlIGZsYXQgZmlsZXMgaW4gYSBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRNZW1vcmllc0Zyb21JbmRleChwb3J0Zm9saW9EaXI6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gIGNvbnN0IGluZGV4UGF0aCA9IGpvaW4ocG9ydGZvbGlvRGlyLCAnbWVtb3JpZXMnLCAnX2luZGV4Lmpzb24nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShpbmRleFBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGluZGV4ID0gSlNPTi5wYXJzZShyYXcpIGFzIHtcbiAgICAgIGVudHJpZXM/OiBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU/OiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nOyB0YWdzPzogc3RyaW5nW107IGNyZWF0ZWQ/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IHVua25vd24gfT47XG4gICAgICBlbnRyeUNvdW50PzogbnVtYmVyO1xuICAgIH07XG5cbiAgICBjb25zdCBlbnRyaWVzID0gaW5kZXguZW50cmllcyB8fCB7fTtcbiAgICBjb25zdCBlbGVtZW50czogdW5rbm93bltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cmllcykpIHtcbiAgICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGhQYXJ0cy5wb3AoKSB8fCBwYXRoO1xuICAgICAgLy8gRXh0cmFjdCBkYXRlIGZyb20gZGlyZWN0b3J5IHBhdGggKGUuZy4sIFwiMjAyNS0wOS0xOS9jb2RlLXBhdHRlcm5zLnlhbWxcIiAtPiBcIjIwMjUtMDktMTlcIilcbiAgICAgIGNvbnN0IGRhdGVGcm9tUGF0aCA9IHBhdGhQYXJ0cy5sZW5ndGggPiAwICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHBhdGhQYXJ0c1swXSkgPyBwYXRoUGFydHNbMF0gOiAnJztcbiAgICAgIC8vIEZhbGwgYmFjayB0byBmaWxlbmFtZSBpZiBpbmRleCBoYXMgbm8gbmFtZSBvciBzdG9yZWQgXCJ1bm5hbWVkXCIgKHVwc3RyZWFtIGluZGV4ZXIgYnVnKVxuICAgICAgY29uc3QgaW5kZXhOYW1lID0gZW50cnkubmFtZSAmJiBlbnRyeS5uYW1lICE9PSAndW5uYW1lZCcgPyBlbnRyeS5uYW1lIDogbnVsbDtcbiAgICAgIGNvbnN0IG5hbWUgPSBpbmRleE5hbWUgfHwgZmlsZW5hbWUucmVwbGFjZSgvXFwuKHlhbWx8eW1sfG1kKSQvLCAnJyk7XG5cbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogZW50cnkuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIHR5cGU6ICdtZW1vcnknLFxuICAgICAgICB2ZXJzaW9uOiBlbnRyeS52ZXJzaW9uIHx8ICcxLjAuMCcsXG4gICAgICAgIGF1dGhvcjogZW50cnkuYXV0aG9yIHx8ICcnLFxuICAgICAgICBjYXRlZ29yeTogZW50cnkuY2F0ZWdvcnkgfHwgZW50cnkubWVtb3J5VHlwZSB8fCAnJyxcbiAgICAgICAgdGFnczogZW50cnkudGFncyB8fCBbXSxcbiAgICAgICAgY3JlYXRlZDogZW50cnkuY3JlYXRlZCB8fCBkYXRlRnJvbVBhdGgsXG4gICAgICAgIGZpbGVuYW1lOiBwYXRoLCAvLyBkYXRlL2ZpbGVuYW1lIHBhdGggZm9yIGNvbnRlbnQgbG9hZGluZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9IGNhdGNoIHtcbiAgICAvLyBGYWxsIGJhY2sgdG8gZW1wdHkgaWYgbm8gaW5kZXhcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqIFJhdGUgbGltaXRlciBmb3IgL2FwaS9pbnN0YWxsOiBtYXggMTAgaW5zdGFsbHMgcGVyIDYwIHNlY29uZHMgKi9cbmNvbnN0IGluc3RhbGxSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoMTAsIDYwXzAwMCk7XG5cbi8qKiBTYW5pdGl6ZSB0ZXh0IGNvbnRlbnQgdG8gcHJldmVudCBYU1MgaW4gcmVuZGVyZWQgSFRNTCAqL1xuZnVuY3Rpb24gc2FuaXRpemVGb3JIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZSgvJy9nLCAnJiMzOTsnKTtcbn1cblxuLyoqIFBhcnNlIFlBTUwgZnJvbnQgbWF0dGVyIGZyb20gYSBtYXJrZG93biBmaWxlICovXG5mdW5jdGlvbiBwYXJzZUZyb250TWF0dGVyKGNvbnRlbnQ6IHN0cmluZyk6IHsgbWV0YWRhdGE6IEVsZW1lbnREaXNwbGF5TWV0YWRhdGE7IGJvZHk6IHN0cmluZyB9IHtcbiAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxyP1xcbihbXFxzXFxTXSo/KVxccj9cXG4tLS1cXHI/XFxuPyhbXFxzXFxTXSopJC8pO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHsgbWV0YWRhdGE6IHt9LCBib2R5OiBjb250ZW50IH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKG1hdGNoWzFdKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9ICh0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBwYXJzZWQgIT09IG51bGwpID8gcGFyc2VkIGFzIEVsZW1lbnREaXNwbGF5TWV0YWRhdGEgOiB7fTtcbiAgICByZXR1cm4geyBtZXRhZGF0YSwgYm9keTogbWF0Y2hbMl0gfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgbWV0YWRhdGE6IHt9LCBib2R5OiBtYXRjaFsyXSB8fCBjb250ZW50IH07XG4gIH1cbn1cblxuLyoqIFBhcnNlIGEgWUFNTC1vbmx5IGZpbGUgKG1lbW9yaWVzKSAqL1xuZnVuY3Rpb24gcGFyc2VZYW1sRmlsZShjb250ZW50OiBzdHJpbmcpOiB7IG1ldGFkYXRhOiBFbGVtZW50RGlzcGxheU1ldGFkYXRhOyBib2R5OiBzdHJpbmcgfSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZVJhd1lhbWwoY29udGVudCk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsKSA/IHBhcnNlZCBhcyBFbGVtZW50RGlzcGxheU1ldGFkYXRhIDoge307XG4gICAgcmV0dXJuIHsgbWV0YWRhdGEsIGJvZHk6ICcnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IG1ldGFkYXRhOiB7fSwgYm9keTogY29udGVudCB9O1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgcG9ydGZvbGlvIHJvdXRlcyBzaGFyZWQgYmV0d2VlbiBzaW1wbGUgYW5kIGdhdGV3YXkgbW9kZXMuXG4gKiBUaGUgc3RydWN0dXJlZERldGFpbCBvcHRpb24gY29udHJvbHMgd2hldGhlciBkZXRhaWwgcm91dGVzIHJldHVyblxuICogc3RydWN0dXJlZCBKU09OIChnYXRld2F5KSBvciBwbGFpbiB0ZXh0IChzaW1wbGUvbGVnYWN5KS5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMoXG4gIHJvdXRlcjogUm91dGVyLFxuICBwb3J0Zm9saW9EaXI6IHN0cmluZyxcbiAgb3B0aW9uczogeyBzdHJ1Y3R1cmVkRGV0YWlsOiBib29sZWFuOyBsb2dQcmVmaXg6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHsgc3RydWN0dXJlZERldGFpbCwgbG9nUHJlZml4IH0gPSBvcHRpb25zO1xuXG4gIHJvdXRlci5nZXQoJy9lbGVtZW50cycsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlUGFyYW0gPSByZXEucXVlcnkucGFnZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBwYWdlU2l6ZVBhcmFtID0gcmVxLnF1ZXJ5LnBhZ2VTaXplIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHdhbnRQYWdpbmF0aW9uID0gcGFnZVBhcmFtICE9PSB1bmRlZmluZWQgJiYgcGFnZVNpemVQYXJhbSAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcGFnZSA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChwYWdlUGFyYW0gfHwgJzEnLCAxMCkgfHwgMSk7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IE1hdGgubWF4KDEsIE1hdGgubWluKDIwMCwgTnVtYmVyLnBhcnNlSW50KHBhZ2VTaXplUGFyYW0gfHwgJzUwJywgMTApIHx8IDUwKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPiA9IHt9O1xuICAgICAgbGV0IHRvdGFsQ291bnQgPSAwO1xuXG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgRUxFTUVOVF9UWVBFUykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnbWVtb3JpZXMnKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1FbGVtZW50cyA9IGF3YWl0IGxvYWRNZW1vcmllc0Zyb21JbmRleChwb3J0Zm9saW9EaXIpO1xuICAgICAgICAgICAgcmVzdWx0W3R5cGVdID0gbWVtRWxlbWVudHM7XG4gICAgICAgICAgICB0b3RhbENvdW50ICs9IG1lbUVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHR5cGVEaXIgPSBqb2luKHBvcnRmb2xpb0RpciwgdHlwZSk7XG4gICAgICAgICAgY29uc3QgZGlyU3RhdCA9IGF3YWl0IHN0YXQodHlwZURpcik7XG4gICAgICAgICAgaWYgKCFkaXJTdGF0LmlzRGlyZWN0b3J5KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBzY2FuRWxlbWVudERpcmVjdG9yeSh0eXBlRGlyLCB0eXBlLCBsb2dQcmVmaXgpO1xuICAgICAgICAgIHJlc3VsdFt0eXBlXSA9IGVsZW1lbnRzO1xuICAgICAgICAgIHRvdGFsQ291bnQgKz0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXN1bHRbdHlwZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAod2FudFBhZ2luYXRpb24pIHtcbiAgICAgICAgY29uc3QgYWxsRWxlbWVudHM6IHVua25vd25bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgRUxFTUVOVF9UWVBFUykge1xuICAgICAgICAgIGFsbEVsZW1lbnRzLnB1c2goLi4uKHJlc3VsdFt0eXBlXSB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHBhZ2VTaXplO1xuICAgICAgICBjb25zdCBwYWdlZCA9IGFsbEVsZW1lbnRzLnNsaWNlKHN0YXJ0LCBzdGFydCArIHBhZ2VTaXplKTtcbiAgICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChhbGxFbGVtZW50cy5sZW5ndGggLyBwYWdlU2l6ZSk7XG4gICAgICAgIHJlcy5qc29uKHsgZWxlbWVudHM6IHBhZ2VkLCB0b3RhbENvdW50OiBhbGxFbGVtZW50cy5sZW5ndGgsIHBhZ2UsIHBhZ2VTaXplLCB0b3RhbFBhZ2VzIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLmpzb24oeyBlbGVtZW50czogcmVzdWx0LCB0b3RhbENvdW50IH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKGAke2xvZ1ByZWZpeH0gRmFpbGVkIHRvIGxpc3QgZWxlbWVudHM6YCwgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gbGlzdCBlbGVtZW50cycgfSk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvZWxlbWVudHMvOnR5cGUnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy50eXBlKTtcbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXModHlwZSBhcyB0eXBlb2YgRUxFTUVOVF9UWVBFU1tudW1iZXJdKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEludmFsaWQgZWxlbWVudCB0eXBlOiAke3R5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycpIHtcbiAgICAgICAgY29uc3QgbWVtRWxlbWVudHMgPSBhd2FpdCBsb2FkTWVtb3JpZXNGcm9tSW5kZXgocG9ydGZvbGlvRGlyKTtcbiAgICAgICAgcmVzLmpzb24oeyB0eXBlLCBlbGVtZW50czogbWVtRWxlbWVudHMsIGNvdW50OiBtZW1FbGVtZW50cy5sZW5ndGggfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBzY2FuRWxlbWVudERpcmVjdG9yeShqb2luKHBvcnRmb2xpb0RpciwgdHlwZSksIHR5cGUsIGxvZ1ByZWZpeCk7XG4gICAgICByZXMuanNvbih7IHR5cGUsIGVsZW1lbnRzLCBjb3VudDogZWxlbWVudHMubGVuZ3RoIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7dHlwZX1gIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnL2VsZW1lbnRzL21lbW9yaWVzLzpkYXRlLzpmaWxlJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgeyBkYXRlIH0gPSByZXEucGFyYW1zO1xuICAgIC8vIE5GQy1ub3JtYWxpemUgZmlsZSBiZWZvcmUgc2FmZXR5IGNoZWNrcyB0byBwcmV2ZW50IFVuaWNvZGUgaG9tb2dyYXBoIGJ5cGFzc2VzICgjMTczNilcbiAgICBjb25zdCBmaWxlID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy5maWxlKTtcblxuICAgIGlmICghL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QoZGF0ZSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGRhdGUgZm9ybWF0JyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZpbGUuaW5jbHVkZXMoJy4uJykgfHwgZmlsZS5pbmNsdWRlcygnLycpIHx8IGZpbGUuaW5jbHVkZXMoJ1xcXFwnKSB8fCBpc0JhY2t1cE9yQ3J1ZnQoZmlsZSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGZpbGVuYW1lJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHBvcnRmb2xpb0RpciwgJ21lbW9yaWVzJywgZGF0ZSwgZmlsZSk7XG4gICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlKGZpbGVQYXRoKTtcbiAgICAgIGlmICghcmVzb2x2ZWRQYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnUGF0aCB0cmF2ZXJzYWwgZGV0ZWN0ZWQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVTdGF0ID0gYXdhaXQgc3RhdChmaWxlUGF0aCk7XG4gICAgICBpZiAoIWZpbGVTdGF0LmlzRmlsZSgpIHx8IGZpbGVTdGF0LnNpemUgPiBNQVhfRklMRV9TSVpFX0JZVEVTKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoZmlsZVN0YXQuaXNGaWxlKCkgPyA0MTMgOiA0MDQpLmpzb24oeyBlcnJvcjogZmlsZVN0YXQuaXNGaWxlKCkgPyAnRmlsZSB0b28gbGFyZ2UnIDogJ05vdCBmb3VuZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgIGlmIChzdHJ1Y3R1cmVkRGV0YWlsKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUVsZW1lbnRDb250ZW50KGZpbGUsIGNvbnRlbnQsICdtZW1vcmllcycpO1xuICAgICAgICByZXMuanNvbihidWlsZFZhbGlkYXRpb25SZXNwb25zZSh2YWxpZGF0aW9uLCBjb250ZW50LCAnbWVtb3JpZXMnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcpO1xuICAgICAgICByZXMuc2VuZChjb250ZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHsgZXJyb3I6IGBNZW1vcnkgbm90IGZvdW5kOiAke2RhdGV9LyR7ZmlsZX1gIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnL2VsZW1lbnRzLzp0eXBlLzpuYW1lJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHJlcS5wYXJhbXMudHlwZTtcbiAgICBjb25zdCBuYW1lID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy5uYW1lKTtcbiAgICBpZiAoIUVMRU1FTlRfVFlQRVMuaW5jbHVkZXModHlwZSBhcyB0eXBlb2YgRUxFTUVOVF9UWVBFU1tudW1iZXJdKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEludmFsaWQgZWxlbWVudCB0eXBlOiAke3R5cGV9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobmFtZS5pbmNsdWRlcygnLi4nKSB8fCBuYW1lLmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgbmFtZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgIT09ICdtZW1vcmllcycgJiYgbmFtZS5pbmNsdWRlcygnLycpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBlbGVtZW50IG5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVFbGVtZW50RmlsZVBhdGgocG9ydGZvbGlvRGlyLCB0eXBlLCBuYW1lKTtcbiAgICAgIGlmICgnZXJyb3InIGluIHJlc29sdmVkKSB7XG4gICAgICAgIHJlcy5zdGF0dXMocmVzb2x2ZWQuc3RhdHVzKS5qc29uKHsgZXJyb3I6IHJlc29sdmVkLmVycm9yIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVTdGF0ID0gYXdhaXQgc3RhdChyZXNvbHZlZC5maWxlUGF0aCk7XG4gICAgICBpZiAoZmlsZVN0YXQuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfQllURVMpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MTMpLmpzb24oeyBlcnJvcjogYEZpbGUgdG9vIGxhcmdlICgke2ZpbGVTdGF0LnNpemV9IGJ5dGVzKS4gTWF4IDEgTUIuYCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUocmVzb2x2ZWQuZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgaWYgKHN0cnVjdHVyZWREZXRhaWwpIHtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSByZXNvbHZlZC5maWxlUGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8IG5hbWU7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUVsZW1lbnRDb250ZW50KGZpbGVuYW1lLCBjb250ZW50LCB0eXBlKTtcbiAgICAgICAgcmVzLmpzb24oYnVpbGRWYWxpZGF0aW9uUmVzcG9uc2UodmFsaWRhdGlvbiwgY29udGVudCwgdHlwZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnKTtcbiAgICAgICAgcmVzLnNlbmQoY29udGVudCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiBgRmFpbGVkIHRvIGdldCBlbGVtZW50OiAke3R5cGV9LyR7bmFtZX1gIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKiBSZWdpc3RlciBmaWxlc3lzdGVtLWJhc2VkIHN0YXRzIHJvdXRlIChzaGFyZWQgYmV0d2VlbiBzaW1wbGUgYW5kIGdhdGV3YXkpICovXG5mdW5jdGlvbiByZWdpc3RlclN0YXRzUm91dGUocm91dGVyOiBSb3V0ZXIsIHBvcnRmb2xpb0Rpcjogc3RyaW5nKTogdm9pZCB7XG4gIHJvdXRlci5nZXQoJy9zdGF0cycsIGFzeW5jIChfcmVxLCByZXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICAgIGxldCB0b3RhbCA9IDA7XG5cbiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBFTEVNRU5UX1RZUEVTKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdtZW1vcmllcycpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbUVsZW1lbnRzID0gYXdhaXQgbG9hZE1lbW9yaWVzRnJvbUluZGV4KHBvcnRmb2xpb0Rpcik7XG4gICAgICAgICAgICBzdGF0c1t0eXBlXSA9IG1lbUVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHRvdGFsICs9IG1lbUVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0eXBlRGlyID0gam9pbihwb3J0Zm9saW9EaXIsIHR5cGUpO1xuICAgICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcih0eXBlRGlyKTtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IGZpbGVzLmZpbHRlcihmID0+ICFpc0JhY2t1cE9yQ3J1ZnQoZikgJiYgVkFMSURfRVhURU5TSU9OUy5oYXMoZXh0bmFtZShmKSkpLmxlbmd0aDtcbiAgICAgICAgICBzdGF0c1t0eXBlXSA9IGNvdW50O1xuICAgICAgICAgIHRvdGFsICs9IGNvdW50O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBzdGF0c1t0eXBlXSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzLmpzb24oeyBzdGF0cywgdG90YWwgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAnRmFpbGVkIHRvIGdldCBzdGF0cycgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIFJlZ2lzdGVyIGNvbGxlY3Rpb24gaW5kZXggcHJveHkgcm91dGUgKHNoYXJlZCBiZXR3ZWVuIHNpbXBsZSBhbmQgZ2F0ZXdheSkgKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQ29sbGVjdGlvblJvdXRlKHJvdXRlcjogUm91dGVyLCBwb3J0Zm9saW9EaXI6IHN0cmluZyk6IHZvaWQge1xuICByb3V0ZXIuZ2V0KCcvY29sbGVjdGlvbicsIGFzeW5jIChfcmVxLCByZXMpID0+IHtcbiAgICByZXMuc2V0SGVhZGVyKCdDYWNoZS1Db250cm9sJywgJ25vLWNhY2hlJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL21haW4vcHVibGljL2NvbGxlY3Rpb24taW5kZXguanNvbicpO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgIHJlcy5zZW5kKGRhdGEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCB7IC8qIEdpdEh1YiB1bnJlYWNoYWJsZSDigJQgZmFsbCBiYWNrIHRvIGxvY2FsICovIH1cblxuICAgIGNvbnN0IGxvY2FsUGF0aHMgPSBbXG4gICAgICBqb2luKHBvcnRmb2xpb0RpciwgJy4uJywgJy4uJywgJy4uJywgJ2NvbGxlY3Rpb24nLCAncHVibGljJywgJ2NvbGxlY3Rpb24taW5kZXguanNvbicpLFxuICAgICAgam9pbihwb3J0Zm9saW9EaXIsICcuLicsICdjb2xsZWN0aW9uJywgJ3B1YmxpYycsICdjb2xsZWN0aW9uLWluZGV4Lmpzb24nKSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBsb2NhbFBhdGggb2YgbG9jYWxQYXRocykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGxvY2FsUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgIHJlcy5zZW5kKGNvbnRlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIHsgLyogdHJ5IG5leHQgKi8gfVxuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHsgZXJyb3I6ICdDb2xsZWN0aW9uIGluZGV4IG5vdCBhdmFpbGFibGUnIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwaVJvdXRlcyhwb3J0Zm9saW9EaXI6IHN0cmluZyk6IFJvdXRlciB7XG4gIGNvbnN0IHJvdXRlciA9IFJvdXRlcigpO1xuXG4gIHJlZ2lzdGVyUG9ydGZvbGlvUm91dGVzKHJvdXRlciwgcG9ydGZvbGlvRGlyLCB7IHN0cnVjdHVyZWREZXRhaWw6IGZhbHNlLCBsb2dQcmVmaXg6ICdbV2ViVUldJyB9KTtcblxuICByZWdpc3RlclN0YXRzUm91dGUocm91dGVyLCBwb3J0Zm9saW9EaXIpO1xuICByZWdpc3RlckNvbGxlY3Rpb25Sb3V0ZShyb3V0ZXIsIHBvcnRmb2xpb0Rpcik7XG5cbiAgLyoqXG4gICAqIFBPU1QgL2FwaS9pbnN0YWxsXG4gICAqIEluc3RhbGwgYSBjb2xsZWN0aW9uIGVsZW1lbnQgaW50byB0aGUgbG9jYWwgcG9ydGZvbGlvLlxuICAgKiBSb3V0ZXMgdGhyb3VnaCBEb2xsaG91c2VNQ1AncyBpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudCBwaXBlbGluZVxuICAgKiBmb3IgcHJvcGVyIHZhbGlkYXRpb24sIGdhdGVrZWVwZXIgY2hlY2tzLCBhbmQgZWxlbWVudCBtYW5hZ2VtZW50LlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgTUNQIHNlcnZlcidzIENvbGxlY3Rpb25IYW5kbGVyIHRvIGJlIGF2YWlsYWJsZS5cbiAgICogRmFsbHMgYmFjayB0byBkaXJlY3QgZmlsZSB3cml0ZSBpZiBub3QgKHN0YW5kYWxvbmUgd2ViIG1vZGUpLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9pbnN0YWxsJywgZXhwcmVzcy5qc29uKCksIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIGlmICghaW5zdGFsbFJhdGVMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1RvbyBtYW55IGluc3RhbGwgcmVxdWVzdHMuIE1heCAxMCBwZXIgbWludXRlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBwYXRoOiBlbGVtZW50UGF0aCwgbmFtZTogcmF3TmFtZSwgdHlwZSB9ID0gcmVxLmJvZHkgYXMgeyBwYXRoPzogc3RyaW5nOyBuYW1lPzogc3RyaW5nOyB0eXBlPzogc3RyaW5nIH07XG5cbiAgICBpZiAoIWVsZW1lbnRQYXRoIHx8ICF0eXBlIHx8ICFyYXdOYW1lKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnTWlzc2luZyByZXF1aXJlZCBmaWVsZHM6IHBhdGgsIG5hbWUsIHR5cGUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE5GQy1ub3JtYWxpemUgbmFtZSBiZWZvcmUgc2FmZXR5IGNoZWNrcyB0byBwcmV2ZW50IFVuaWNvZGUgaG9tb2dyYXBoIGJ5cGFzc2VzICgjMTczNilcbiAgICBjb25zdCBuYW1lID0gbm9ybWFsaXplSW5wdXQocmF3TmFtZSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0eXBlXG4gICAgY29uc3QgcGx1cmFsVHlwZSA9IHR5cGUuZW5kc1dpdGgoJ3MnKSA/IHR5cGUgOiBgJHt0eXBlfXNgO1xuICAgIGlmICghRUxFTUVOVF9UWVBFUy5pbmNsdWRlcyhwbHVyYWxUeXBlIGFzIHR5cGVvZiBFTEVNRU5UX1RZUEVTW251bWJlcl0pKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiBgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7dHlwZX1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXZlbnQgcGF0aCB0cmF2ZXJzYWxcbiAgICBpZiAoZWxlbWVudFBhdGguaW5jbHVkZXMoJy4uJykgfHwgbmFtZS5pbmNsdWRlcygnLi4nKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgcGF0aCBvciBuYW1lJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlbGVtZW50UGF0aCBjb250YWlucyBvbmx5IHNhZmUgY2hhcmFjdGVycyAoYWxwaGFudW1lcmljLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgZG90cywgc2xhc2hlcylcbiAgICBpZiAoIS9eW2EtekEtWjAtOS9fLi1dKyQvLnRlc3QoZWxlbWVudFBhdGgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBlbGVtZW50IHBhdGggY2hhcmFjdGVycycgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEZldGNoIGNvbnRlbnQgZnJvbSBHaXRIdWJcbiAgICAgIGNvbnN0IGdoVXJsID0gYGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9tYWluLyR7ZWxlbWVudFBhdGh9YDtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIGNvbnN0cnVjdGVkIFVSTCBzdGF5cyB3aXRoaW4gZXhwZWN0ZWQgZG9tYWluIGFuZCBwYXRoXG4gICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKGdoVXJsKTtcbiAgICAgIGlmIChwYXJzZWRVcmwuaG9zdG5hbWUgIT09ICdyYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tJyB8fCAhcGFyc2VkVXJsLnBhdGhuYW1lLnN0YXJ0c1dpdGgoJy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi8nKSkge1xuICAgICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBjb2xsZWN0aW9uIHBhdGgnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZ2hVcmwpO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICByZXMuc3RhdHVzKDUwMikuanNvbih7IGVycm9yOiBgRmFpbGVkIHRvIGZldGNoIGZyb20gY29sbGVjdGlvbjogSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBjb250ZW50IHRocm91Z2ggdGhlIHNlY3VyaXR5IHBpcGVsaW5lIGJlZm9yZSB3cml0aW5nXG4gICAgICBjb25zdCBleHQgPSBleHRuYW1lKGVsZW1lbnRQYXRoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChleHQgPT09ICcueWFtbCcgfHwgZXh0ID09PSAnLnltbCcpIHtcbiAgICAgICAgICAvLyBWYWxpZGF0ZSBZQU1MIGNvbnRlbnQgZm9yIGJvbWJzLCBjaXJjdWxhciByZWZlcmVuY2VzLCBtYWxpY2lvdXMgcGF0dGVybnNcbiAgICAgICAgICBpZiAoIUNvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVZYW1sQ29udGVudChjb250ZW50KSkge1xuICAgICAgICAgICAgcmVzLnN0YXR1cyg0MjIpLmpzb24oeyBlcnJvcjogJ0NvbnRlbnQgZmFpbGVkIFlBTUwgdmFsaWRhdGlvbiDigJQgcG90ZW50aWFsbHkgbWFsaWNpb3VzIHBhdHRlcm5zIGRldGVjdGVkJyB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgU2VjdXJlWWFtbFBhcnNlci5wYXJzZVJhd1lhbWwoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVmFsaWRhdGUgbWFya2Rvd24rZnJvbnRtYXR0ZXIgY29udGVudFxuICAgICAgICAgIFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDIyKS5qc29uKHsgZXJyb3I6IGBDb250ZW50IGZhaWxlZCBwYXJzZSB2YWxpZGF0aW9uOiAkeyhwYXJzZUVyciBhcyBFcnJvcikubWVzc2FnZX1gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGNvbnRlbnQgYm9keSBmb3IgaW5qZWN0aW9uIHBhdHRlcm5zXG4gICAgICBjb25zdCBzaW5ndWxhclR5cGUgPSBwbHVyYWxUeXBlLnNsaWNlKDAsIC0xKTtcbiAgICAgIGNvbnN0IGNvbnRleHRUeXBlcyA9IFsncGVyc29uYScsICdza2lsbCcsICd0ZW1wbGF0ZScsICdhZ2VudCcsICdtZW1vcnknXSBhcyBjb25zdDtcbiAgICAgIHR5cGUgQ29udGVudENvbnRleHQgPSB0eXBlb2YgY29udGV4dFR5cGVzW251bWJlcl07XG4gICAgICBjb25zdCBjb250ZW50Q29udGV4dCA9IGNvbnRleHRUeXBlcy5pbmNsdWRlcyhzaW5ndWxhclR5cGUgYXMgQ29udGVudENvbnRleHQpID8gc2luZ3VsYXJUeXBlIGFzIENvbnRlbnRDb250ZXh0IDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShjb250ZW50LCB7XG4gICAgICAgIGNvbnRlbnRDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBsb2dnZXIud2FybignW1dlYlVJXSBJbnN0YWxsIGJsb2NrZWQg4oCUIGNvbnRlbnQgdmFsaWRhdGlvbiBmYWlsZWQnLCB7XG4gICAgICAgICAgZWxlbWVudDogYCR7cGx1cmFsVHlwZX0vJHtuYW1lfWAsXG4gICAgICAgICAgcGF0dGVybnM6IHZhbGlkYXRpb25SZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgICAgICBzZXZlcml0eTogdmFsaWRhdGlvblJlc3VsdC5zZXZlcml0eSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5zdGF0dXMoNDIyKS5qc29uKHtcbiAgICAgICAgICBlcnJvcjogJ0NvbnRlbnQgZmFpbGVkIHNlY3VyaXR5IHZhbGlkYXRpb24nLFxuICAgICAgICAgIHBhdHRlcm5zOiB2YWxpZGF0aW9uUmVzdWx0LmRldGVjdGVkUGF0dGVybnMsXG4gICAgICAgICAgc2V2ZXJpdHk6IHZhbGlkYXRpb25SZXN1bHQuc2V2ZXJpdHksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERldGVybWluZSBmaWxlbmFtZVxuICAgICAgY29uc3QgZmlsZW5hbWUgPSBlbGVtZW50UGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8IGAke25hbWV9Lm1kYDtcblxuICAgICAgLy8gRW5zdXJlIHR5cGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgY29uc3QgdHlwZURpciA9IGpvaW4ocG9ydGZvbGlvRGlyLCBwbHVyYWxUeXBlKTtcbiAgICAgIGNvbnN0IHsgbWtkaXIgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpmcy9wcm9taXNlcycpO1xuICAgICAgYXdhaXQgbWtkaXIodHlwZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgIC8vIFdyaXRlIHRvIHBvcnRmb2xpb1xuICAgICAgY29uc3QgZGVzdFBhdGggPSBqb2luKHR5cGVEaXIsIGZpbGVuYW1lKTtcblxuICAgICAgLy8gVmVyaWZ5IHJlc29sdmVkIGRlc3RpbmF0aW9uIHBhdGggc3RheXMgd2l0aGluIHBvcnRmb2xpbyBkaXJlY3RvcnkgKGRlZmVuc2UgaW4gZGVwdGgpXG4gICAgICBjb25zdCByZXNvbHZlZERlc3QgPSByZXNvbHZlKGRlc3RQYXRoKTtcbiAgICAgIGlmICghcmVzb2x2ZWREZXN0LnN0YXJ0c1dpdGgocmVzb2x2ZShwb3J0Zm9saW9EaXIpKSkge1xuICAgICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnUGF0aCB0cmF2ZXJzYWwgZGV0ZWN0ZWQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIGZpbGUgYWxyZWFkeSBleGlzdHNcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN0YXQoZGVzdFBhdGgpO1xuICAgICAgICByZXMuc3RhdHVzKDQwOSkuanNvbih7IGVycm9yOiBgRWxlbWVudCBhbHJlYWR5IGV4aXN0czogJHtwbHVyYWxUeXBlfS8ke2ZpbGVuYW1lfS4gRGVsZXRlIGl0IGZpcnN0IG9yIHJlbmFtZS5gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIHsgLyogZG9lc24ndCBleGlzdCDigJQgZ29vZCAqLyB9XG5cbiAgICAgIGNvbnN0IHsgd3JpdGVGaWxlOiB3cml0ZUZpbGVGcyB9ID0gYXdhaXQgaW1wb3J0KCdub2RlOmZzL3Byb21pc2VzJyk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGVGcyhkZXN0UGF0aCwgY29udGVudCwgJ3V0Zi04Jyk7XG5cbiAgICAgIGxvZ2dlci5pbmZvKGBbV2ViVUldIEluc3RhbGxlZCBjb2xsZWN0aW9uIGVsZW1lbnQ6ICR7cGx1cmFsVHlwZX0vJHtmaWxlbmFtZX1gKTtcbiAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbWVzc2FnZTogYEluc3RhbGxlZCAke25hbWV9IHRvIHBvcnRmb2xpb2AsIHBhdGg6IGAke3BsdXJhbFR5cGV9LyR7ZmlsZW5hbWV9YCB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW1dlYlVJXSBJbnN0YWxsIGZhaWxlZDonLCBlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogYEluc3RhbGwgZmFpbGVkOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gV2ViIE1DUC1BUUwgR2F0ZXdheSBSb3V0ZXMgKElzc3VlICM3OTYpXG4vL1xuLy8gVGhlc2Ugcm91dGVzIHRyYW5zbGF0ZSBIVFRQIHJlcXVlc3RzIGludG8gTUNQQVFMSGFuZGxlciBjYWxscywgcm91dGluZyBhbGxcbi8vIHJlYWRzL3dyaXRlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBlbGVtZW50IG1hbmFnZXJzLCB2YWxpZGF0aW9uLCBhbmQgZ2F0ZWtlZXBlci5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEV4dHJhY3Qgc2luZ2xlIG9wZXJhdGlvbiByZXN1bHQgZnJvbSBNQ1BBUUxIYW5kbGVyIHJlc3BvbnNlLlxuICogV2ViIHJvdXRlcyBuZXZlciBzZW5kIGJhdGNoIHJlcXVlc3RzLCBzbyBjYXN0IGlzIHNhZmUuXG4gKi9cbmludGVyZmFjZSBTaW5nbGVPcFJlc3VsdCB7IHN1Y2Nlc3M6IGJvb2xlYW47IGRhdGE/OiB1bmtub3duOyBlcnJvcj86IHN0cmluZyB9XG5mdW5jdGlvbiBhc1NpbmdsZVJlc3VsdChyOiB1bmtub3duKTogU2luZ2xlT3BSZXN1bHQge1xuICBpZiAodHlwZW9mIHIgPT09ICdvYmplY3QnICYmIHIgIT09IG51bGwgJiYgJ3N1Y2Nlc3MnIGluIHIpIHtcbiAgICByZXR1cm4gciBhcyBTaW5nbGVPcFJlc3VsdDtcbiAgfVxuICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdJbnZhbGlkIG9wZXJhdGlvbiByZXN1bHQgZm9ybWF0JyB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBBUEkgcm91dGVzIHRoYXQgcm91dGUgdGhyb3VnaCBNQ1BBUUxIYW5kbGVyIChnYXRld2F5IG1vZGUpLlxuICogQWxsIG9wZXJhdGlvbnMgZ28gdGhyb3VnaCB0aGUgTUNQLUFRTCBwaXBlbGluZTogdmFsaWRhdGlvbiwgY2FjaGUsIGdhdGVrZWVwZXIuXG4gKlxuICogRmFsbHMgYmFjayB0byBkaXJlY3QgZmlsZXN5c3RlbSBmb3IgL2FwaS9jb2xsZWN0aW9uIChleHRlcm5hbCBmZXRjaCwgbm8gTUNQLUFRTCBlcXVpdmFsZW50KVxuICogYW5kIC9hcGkvc3RhdHMgKGxpZ2h0d2VpZ2h0IGFnZ3JlZ2F0ZSwgbm8gbWF0Y2hpbmcgb3BlcmF0aW9uKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdhdGV3YXlBcGlSb3V0ZXMoaGFuZGxlcjogTUNQQVFMSGFuZGxlciwgcG9ydGZvbGlvRGlyOiBzdHJpbmcpOiBSb3V0ZXIge1xuICBjb25zdCByb3V0ZXIgPSBSb3V0ZXIoKTtcblxuICAvLyBTaGFyZWQgcG9ydGZvbGlvIHJvdXRlcyDigJQgc3RydWN0dXJlZCBKU09OIGZvciBkZXRhaWwgdmlld3NcbiAgLy8gY29kZXFsW2pzL21pc3NpbmctcmF0ZS1saW1pdGluZ10g4oCUIFJhdGUtbGltaXRlZCBieSByb3V0ZXIudXNlKCkgbWlkZGxld2FyZSBpbiBzZXJ2ZXIudHNcbiAgcmVnaXN0ZXJQb3J0Zm9saW9Sb3V0ZXMocm91dGVyLCBwb3J0Zm9saW9EaXIsIHsgc3RydWN0dXJlZERldGFpbDogdHJ1ZSwgbG9nUHJlZml4OiAnW1dlYlVJL0dhdGV3YXldJyB9KTtcbiAgcmVnaXN0ZXJTdGF0c1JvdXRlKHJvdXRlciwgcG9ydGZvbGlvRGlyKTtcbiAgcmVnaXN0ZXJDb2xsZWN0aW9uUm91dGUocm91dGVyLCBwb3J0Zm9saW9EaXIpO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9jb2xsZWN0aW9uL2NvbnRlbnQvKlxuICAgKiBQcm94aWVzIGNvbGxlY3Rpb24gZWxlbWVudCBjb250ZW50IGZyb20gR2l0SHViLCB2YWxpZGF0ZXMgdGhyb3VnaCB0aGVcbiAgICogc2VjdXJpdHkgcGlwZWxpbmUsIGFuZCByZXR1cm5zIHN0cnVjdHVyZWQgSlNPTiAoc2FtZSBmb3JtYXQgYXMgcG9ydGZvbGlvIGRldGFpbCkuXG4gICAqIGNvZGVxbFtqcy9taXNzaW5nLXJhdGUtbGltaXRpbmddIOKAlCBSYXRlLWxpbWl0ZWQgYnkgcm91dGVyLnVzZSgpIG1pZGRsZXdhcmUgYWJvdmUuXG4gICAqL1xuICByb3V0ZXIuZ2V0KCcvY29sbGVjdGlvbi9jb250ZW50LzpwcmVmaXgvOnR5cGUvOm5hbWUnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCBwcmVmaXggPSBub3JtYWxpemVJbnB1dChyZXEucGFyYW1zLnByZWZpeCk7XG4gICAgY29uc3QgZWxlbWVudFR5cGUgPSBub3JtYWxpemVJbnB1dChyZXEucGFyYW1zLnR5cGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gbm9ybWFsaXplSW5wdXQocmVxLnBhcmFtcy5uYW1lKTtcbiAgICBjb25zdCBlbGVtZW50UGF0aCA9IGAke3ByZWZpeH0vJHtlbGVtZW50VHlwZX0vJHtmaWxlbmFtZX1gO1xuICAgIGlmICghZWxlbWVudFBhdGggfHwgZWxlbWVudFBhdGguaW5jbHVkZXMoJy4uJykgfHwgZWxlbWVudFBhdGguaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgZWxlbWVudCBwYXRoJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlbGVtZW50IHR5cGUgYWdhaW5zdCBrbm93biB0eXBlcyB0byBwcmV2ZW50IGFyYml0cmFyeSBwYXRoIGNvbnN0cnVjdGlvblxuICAgIGlmICghRUxFTUVOVF9UWVBFUy5pbmNsdWRlcyhlbGVtZW50VHlwZSBhcyB0eXBlb2YgRUxFTUVOVF9UWVBFU1tudW1iZXJdKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEludmFsaWQgZWxlbWVudCB0eXBlOiAke2VsZW1lbnRUeXBlfWAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGNvZGVxbFtqcy9yZXF1ZXN0LWZvcmdlcnldIOKAlCBtaXRpZ2F0ZWQ6IGRvbWFpbiBhbmQgcmVwbyBhcmUgaGFyZGNvZGVkIGNvbnN0YW50cyxcbiAgICAgIC8vIGVsZW1lbnRUeXBlIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IEVMRU1FTlRfVFlQRVMgd2hpdGVsaXN0IGFib3ZlLCBwYXRoIHRyYXZlcnNhbFxuICAgICAgLy8gaXMgY2hlY2tlZCwgYW5kIHRoZSBvbmx5IHJlYWNoYWJsZSB0YXJnZXQgaXMgYSBzcGVjaWZpYyBwdWJsaWMgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAgICBjb25zdCBnaXRodWJVcmwgPSBgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL21haW4vJHtlbGVtZW50UGF0aH1gO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChnaXRodWJVcmwpO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICByZXMuc3RhdHVzKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0ID8gNDA0IDogNTAyKS5qc29uKHtcbiAgICAgICAgICBlcnJvcjogcmVzcG9uc2Uuc3RhdHVzID09PSA0MDRcbiAgICAgICAgICAgID8gYENvbGxlY3Rpb24gZWxlbWVudCBub3QgZm91bmQ6ICR7ZWxlbWVudFBhdGh9YFxuICAgICAgICAgICAgOiBgRmFpbGVkIHRvIGZldGNoIGZyb20gR2l0SHViIChIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSlgLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlRWxlbWVudENvbnRlbnQoZmlsZW5hbWUsIGNvbnRlbnQsIGVsZW1lbnRUeXBlKTtcbiAgICAgIGNvbnN0IHNpbmd1bGFyVHlwZSA9IFBMVVJBTF9UT19TSU5HVUxBUltlbGVtZW50VHlwZV0gfHwgKGVsZW1lbnRUeXBlLmVuZHNXaXRoKCdzJykgPyBlbGVtZW50VHlwZS5zbGljZSgwLCAtMSkgOiBlbGVtZW50VHlwZSk7XG5cbiAgICAgIHJlcy5qc29uKHtcbiAgICAgICAgbWV0YWRhdGE6IHZhbGlkYXRpb24ubWV0YWRhdGEsXG4gICAgICAgIGJvZHk6IHZhbGlkYXRpb24uYm9keSxcbiAgICAgICAgcmF3OiBjb250ZW50LFxuICAgICAgICB0eXBlOiBzaW5ndWxhclR5cGUsXG4gICAgICAgIHZhbGlkYXRpb246IHtcbiAgICAgICAgICBzdGF0dXM6IHZhbGlkYXRpb24udmFsaWQgPyAncGFzcycgOiAnd2FybicsXG4gICAgICAgICAgLi4uKHZhbGlkYXRpb24ucmVqZWN0aW9uICYmIHtcbiAgICAgICAgICAgIHJlYXNvbjogdmFsaWRhdGlvbi5yZWplY3Rpb24ucmVhc29uLFxuICAgICAgICAgICAgc2V2ZXJpdHk6IHZhbGlkYXRpb24ucmVqZWN0aW9uLnNldmVyaXR5LFxuICAgICAgICAgICAgcGF0dGVybnM6IHZhbGlkYXRpb24ucmVqZWN0aW9uLnBhdHRlcm5zLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tXZWJVSS9HYXRld2F5XSBGYWlsZWQgdG8gZmV0Y2ggY29sbGVjdGlvbiBjb250ZW50OicsIGVycik7XG4gICAgICByZXMuc3RhdHVzKDUwMikuanNvbih7IGVycm9yOiAnRmFpbGVkIHRvIGZldGNoIGNvbGxlY3Rpb24gZWxlbWVudCcgfSk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luc3RhbGxcbiAgICogUm91dGVzIHRocm91Z2ggaW5zdGFsbF9jb2xsZWN0aW9uX2NvbnRlbnQgTUNQLUFRTCBvcGVyYXRpb24uXG4gICAqIEFsbCB2YWxpZGF0aW9uLCBnYXRla2VlcGVyIGNoZWNrcyBoYW5kbGVkIGJ5IHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGNvbnN0IGluc3RhbGxMaW1pdGVyID0gbmV3IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlcigxMCwgNjBfMDAwKTtcbiAgcm91dGVyLnBvc3QoJy9pbnN0YWxsJywgZXhwcmVzcy5qc29uKCksIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIGlmICghaW5zdGFsbExpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnVG9vIG1hbnkgaW5zdGFsbCByZXF1ZXN0cy4gTWF4IDEwIHBlciBtaW51dGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhdGg6IGVsZW1lbnRQYXRoLCBuYW1lOiByYXdOYW1lLCB0eXBlIH0gPSByZXEuYm9keSBhcyB7IHBhdGg/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmcgfTtcblxuICAgIGlmICghZWxlbWVudFBhdGggfHwgIXR5cGUgfHwgIXJhd05hbWUpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdNaXNzaW5nIHJlcXVpcmVkIGZpZWxkczogcGF0aCwgbmFtZSwgdHlwZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTkZDLW5vcm1hbGl6ZSBuYW1lIGJlZm9yZSBzYWZldHkgY2hlY2tzIHRvIHByZXZlbnQgVW5pY29kZSBob21vZ3JhcGggYnlwYXNzZXMgKCMxNzM2KVxuICAgIGNvbnN0IG5hbWUgPSBub3JtYWxpemVJbnB1dChyYXdOYW1lKTtcblxuICAgIGlmIChlbGVtZW50UGF0aC5pbmNsdWRlcygnLi4nKSB8fCBuYW1lLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXRoIG9yIG5hbWUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnRQYXRoIGNvbnRhaW5zIG9ubHkgc2FmZSBjaGFyYWN0ZXJzIChhbHBoYW51bWVyaWMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzLCBzbGFzaGVzKVxuICAgIGlmICghL15bYS16QS1aMC05L18uLV0rJC8udGVzdChlbGVtZW50UGF0aCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgcGF0aCBjaGFyYWN0ZXJzJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gUm91dGUgdGhyb3VnaCBNQ1AtQVFMIGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IG9wZXJhdGlvblxuICAgICAgY29uc3QgaW5zdGFsbFBhdGggPSBlbGVtZW50UGF0aC5yZXBsYWNlKC9ebGlicmFyeVxcLy8sICcnKTtcbiAgICAgIGNvbnN0IG9wUmVzdWx0ID0gYXNTaW5nbGVSZXN1bHQoYXdhaXQgaGFuZGxlci5oYW5kbGVDcmVhdGUoe1xuICAgICAgICBvcGVyYXRpb246ICdpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudCcsXG4gICAgICAgIHBhcmFtczogeyBwYXRoOiBpbnN0YWxsUGF0aCB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoIW9wUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MjIpLmpzb24oeyBlcnJvcjogb3BSZXN1bHQuZXJyb3IgfHwgJ0luc3RhbGwgZmFpbGVkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJL0dhdGV3YXldIEluc3RhbGxlZCBjb2xsZWN0aW9uIGVsZW1lbnQ6ICR7aW5zdGFsbFBhdGh9YCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6IGBJbnN0YWxsZWQgJHtuYW1lfSB0byBwb3J0Zm9saW9gLCBkYXRhOiBvcFJlc3VsdC5kYXRhIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbV2ViVUkvR2F0ZXdheV0gSW5zdGFsbCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBJbnN0YWxsIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuIl19
|
package/dist/web/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AA4CnE,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAQxC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAOxC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,SAAS,EAAE,MAAM,EAAE,CAAC;IAC/C;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9E,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,KAAK,IAAI,CAAC;IACrF,yCAAyC;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgOxF;AA6DD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AA2DtG;;;;;;;;;;;;GAYG;AACH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAmDD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4BlG"}
|