sonamu 0.8.13 → 0.8.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +2 -3
- package/dist/auth/auth-generator.d.ts +8 -0
- package/dist/auth/auth-generator.d.ts.map +1 -1
- package/dist/auth/auth-generator.js +33 -1
- package/dist/auth/better-auth-entities.d.ts.map +1 -1
- package/dist/auth/better-auth-entities.js +12 -2
- package/dist/bin/cli.js +18 -3
- package/dist/cone/cone-generator.js +10 -4
- package/dist/database/knex.d.ts.map +1 -1
- package/dist/database/knex.js +64 -2
- package/dist/database/puri.d.ts +9 -1
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +42 -1
- package/dist/database/puri.types.d.ts +2 -0
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +6 -2
- package/dist/entity/entity-manager.d.ts +149 -1
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +68 -4
- package/dist/migration/__tests__/code-generation.search-text.test.js +435 -0
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +696 -32
- package/dist/migration/migration-set.js +3 -1
- package/dist/migration/postgresql-schema-reader.d.ts +16 -2
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +281 -7
- package/dist/stream/sse.js +5 -3
- package/dist/template/__tests__/generated.template.search-text.test.js +99 -0
- package/dist/template/generated.template.test-d.js +24 -0
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +2 -2
- package/dist/template/implementations/init_types.template.d.ts.map +1 -1
- package/dist/template/implementations/init_types.template.js +11 -3
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +6 -2
- package/dist/testing/dev-test-routes.d.ts.map +1 -1
- package/dist/testing/dev-test-routes.js +5 -3
- package/dist/testing/fixture-generator.d.ts +13 -0
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +105 -8
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +19 -2
- package/dist/types/__tests__/entity-json-schema-search-text.test.js +256 -0
- package/dist/types/types.d.ts +494 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +117 -13
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +14 -2
- package/dist/ui/cdd-service.d.ts +16 -14
- package/dist/ui/cdd-service.d.ts.map +1 -1
- package/dist/ui/cdd-service.js +145 -37
- package/dist/ui/cdd-types.d.ts +60 -0
- package/dist/ui/cdd-types.d.ts.map +1 -0
- package/dist/ui/cdd-types.js +3 -0
- package/dist/ui-web/assets/index-D4XFBV-f.css +1 -0
- package/dist/ui-web/assets/{index-CQ_S40bD.js → index-D_19-Pi4.js} +87 -87
- package/dist/ui-web/index.html +2 -2
- package/package.json +7 -3
- package/src/api/sonamu.ts +1 -2
- package/src/auth/auth-generator.ts +38 -0
- package/src/auth/better-auth-entities.ts +18 -1
- package/src/bin/cli.ts +15 -1
- package/src/cone/cone-generator.ts +9 -3
- package/src/database/knex.ts +62 -4
- package/src/database/puri.ts +71 -0
- package/src/database/puri.types.ts +2 -0
- package/src/entity/entity-manager.ts +95 -3
- package/src/migration/__tests__/code-generation.search-text.test.ts +390 -0
- package/src/migration/code-generation.ts +848 -34
- package/src/migration/migration-set.ts +2 -0
- package/src/migration/postgresql-schema-reader.ts +366 -9
- package/src/skills/sonamu/auth-migration.md +80 -0
- package/src/skills/sonamu/cdd.md +148 -28
- package/src/skills/sonamu/cone.md +16 -0
- package/src/skills/sonamu/entity-relations.md +1 -1
- package/src/skills/sonamu/fixture-cli.md +4 -0
- package/src/skills/sonamu/frontend.md +65 -0
- package/src/skills/sonamu/migration.md +3 -1
- package/src/skills/sonamu/model.md +28 -0
- package/src/skills/sonamu/workflow.md +12 -5
- package/src/stream/sse.ts +4 -2
- package/src/template/__tests__/generated.template.search-text.test.ts +89 -0
- package/src/template/generated.template.test-d.ts +46 -0
- package/src/template/implementations/generated.template.ts +4 -1
- package/src/template/implementations/init_types.template.ts +20 -5
- package/src/template/zod-converter.ts +5 -0
- package/src/testing/dev-test-routes.ts +4 -2
- package/src/testing/fixture-generator.ts +157 -9
- package/src/testing/fixture-manager.ts +15 -1
- package/src/types/__tests__/entity-json-schema-search-text.test.ts +179 -0
- package/src/types/types.ts +168 -12
- package/src/ui/api.ts +24 -1
- package/src/ui/cdd-service.ts +195 -55
- package/src/ui/cdd-types.ts +73 -0
- package/dist/ui-web/assets/index-egkMxKos.css +0 -1
|
@@ -21,7 +21,7 @@ import path from "path";
|
|
|
21
21
|
import { z } from "zod";
|
|
22
22
|
import { Sonamu } from "../api/sonamu.js";
|
|
23
23
|
import { EntityManager } from "../entity/entity-manager.js";
|
|
24
|
-
import { BUILT_IN_TYPE_IDS, isBelongsToOneRelationProp, isBigIntegerArrayProp, isBigIntegerSingleProp, isBooleanArrayProp, isBooleanSingleProp, isDateArrayProp, isDateSingleProp, isEnumArrayProp, isEnumSingleProp, isIntegerArrayProp, isIntegerSingleProp, isJsonProp, isNumberArrayProp, isNumberSingleProp, isNumericArrayProp, isNumericSingleProp, isOneToOneRelationProp, isRelationProp, isStringArrayProp, isStringSingleProp, isTsVectorProp, isUuidArrayProp, isUuidSingleProp, isVectorArrayProp, isVectorSingleProp, isVirtualProp, SonamuFileArraySchema, SonamuFileSchema } from "../types/types.js";
|
|
24
|
+
import { BUILT_IN_TYPE_IDS, isBelongsToOneRelationProp, isBigIntegerArrayProp, isBigIntegerSingleProp, isBooleanArrayProp, isBooleanSingleProp, isDateArrayProp, isDateSingleProp, isEnumArrayProp, isEnumSingleProp, isIntegerArrayProp, isIntegerSingleProp, isJsonProp, isNumberArrayProp, isNumberSingleProp, isNumericArrayProp, isNumericSingleProp, isOneToOneRelationProp, isRelationProp, isSearchTextProp, isStringArrayProp, isStringSingleProp, isTsVectorProp, isUuidArrayProp, isUuidSingleProp, isVectorArrayProp, isVectorSingleProp, isVirtualProp, SonamuFileArraySchema, SonamuFileSchema } from "../types/types.js";
|
|
25
25
|
import { createImportUrl } from "../utils/esm-utils.js";
|
|
26
26
|
import { runtimePath } from "../utils/path-utils.js";
|
|
27
27
|
/**
|
|
@@ -182,6 +182,8 @@ import { runtimePath } from "../utils/path-utils.js";
|
|
|
182
182
|
zodType = z.uuid().array();
|
|
183
183
|
} else if (isJsonProp(prop)) {
|
|
184
184
|
zodType = await getZodTypeById(prop.id);
|
|
185
|
+
} else if (isSearchTextProp(prop)) {
|
|
186
|
+
zodType = z.string();
|
|
185
187
|
} else if (isVectorSingleProp(prop)) {
|
|
186
188
|
zodType = z.array(z.number());
|
|
187
189
|
} else if (isVectorArrayProp(prop)) {
|
|
@@ -284,6 +286,8 @@ import { runtimePath } from "../utils/path-utils.js";
|
|
|
284
286
|
stmt = `${prop.name}: ${prop.id}`;
|
|
285
287
|
injectImportKeys.push(prop.id);
|
|
286
288
|
}
|
|
289
|
+
} else if (isSearchTextProp(prop)) {
|
|
290
|
+
stmt = `${prop.name}: z.string()`;
|
|
287
291
|
} else if (isVectorSingleProp(prop)) {
|
|
288
292
|
stmt = `${prop.name}: z.array(z.number())`;
|
|
289
293
|
} else if (isVectorArrayProp(prop)) {
|
|
@@ -672,4 +676,4 @@ export function zodTypeToTsTypeDef(zt) {
|
|
|
672
676
|
}
|
|
673
677
|
}
|
|
674
678
|
|
|
675
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS96b2QtY29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogem9kLWNvbnZlcnRlciDqtazshLFcbiAqIDEuIOycoO2LuOumrO2LsFxuICogIC0gZ2V0Wm9kVHlwZUJ5SWRcbiAqXG4gKiAyLiBab2Qg7YOA7J6FIOuzgO2ZmCAoRW50aXR5UHJvcCAtPiBab2RUeXBlKVxuICogIC0gcHJvcFRvWm9kVHlwZVxuICpcbiAqIDMuIEVudGl0eVByb3AvTm9kZSAtPiBab2Qg7L2U65OcIOusuOyekOyXtFxuICogIC0gcHJvcFRvWm9kVHlwZURlZlxuICogIC0gcHJvcE5vZGVUb1pvZFR5cGVEZWZcbiAqXG4gKiA0LiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYIChab2RUeXBlIC0+IFpvZENvZGUpXG4gKiAgLSB6b2RUeXBlVG9ab2RDb2RlXG4gKlxuICogNS4gWm9kIO2DgOyeheydhCBVSSDroIzrjZTrp4Hsl5Ag7IKs7Jqp7ZWgIOyImCDsnojripQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZggKFpvZFR5cGUgLT4gUmVuZGVyaW5nTm9kZSlcbiAqICAtIHpvZFR5cGVUb1JlbmRlcmluZ05vZGVcbiAqICAtIHJlc29sdmVSZW5kZXJUeXBlXG4gKi9cblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyAkWm9kTG9vc2VTaGFwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEVudGl0eVByb3BOb2RlLFxuICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNCaWdJbnRlZ2VyQXJyYXlQcm9wLFxuICBpc0JpZ0ludGVnZXJTaW5nbGVQcm9wLFxuICBpc0Jvb2xlYW5BcnJheVByb3AsXG4gIGlzQm9vbGVhblNpbmdsZVByb3AsXG4gIGlzRGF0ZUFycmF5UHJvcCxcbiAgaXNEYXRlU2luZ2xlUHJvcCxcbiAgaXNFbnVtQXJyYXlQcm9wLFxuICBpc0VudW1TaW5nbGVQcm9wLFxuICBpc0ludGVnZXJBcnJheVByb3AsXG4gIGlzSW50ZWdlclNpbmdsZVByb3AsXG4gIGlzSnNvblByb3AsXG4gIGlzTnVtYmVyQXJyYXlQcm9wLFxuICBpc051bWJlclNpbmdsZVByb3AsXG4gIGlzTnVtZXJpY0FycmF5UHJvcCxcbiAgaXNOdW1lcmljU2luZ2xlUHJvcCxcbiAgaXNPbmVUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNSZWxhdGlvblByb3AsXG4gIGlzU3RyaW5nQXJyYXlQcm9wLFxuICBpc1N0cmluZ1NpbmdsZVByb3AsXG4gIGlzVHNWZWN0b3JQcm9wLFxuICBpc1V1aWRBcnJheVByb3AsXG4gIGlzVXVpZFNpbmdsZVByb3AsXG4gIGlzVmVjdG9yQXJyYXlQcm9wLFxuICBpc1ZlY3RvclNpbmdsZVByb3AsXG4gIGlzVmlydHVhbFByb3AsXG4gIHR5cGUgUmVuZGVyaW5nTm9kZSxcbiAgU29uYW11RmlsZUFycmF5U2NoZW1hLFxuICBTb25hbXVGaWxlU2NoZW1hLFxuICB0eXBlIFpvZFN0cmluZ0Zvcm1hdCxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVJbXBvcnRVcmwgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyBydW50aW1lUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8vIDxhbnk+66W8IOyekOygnO2VmOqzoCwgWm9k7JeQ7IScIOygnOyVve2VmOuKlCDquLDrs7jsoIHsnbggR2VuZXJpYyBUeXBlIFBhcmFtZXRlcuulvCDsgqzsmqntlaguXG50eXBlIEFueVpvZFJlY29yZCA9IHouWm9kUmVjb3JkPHouWm9kU3RyaW5nIHwgei5ab2ROdW1iZXIgfCB6LlpvZFN5bWJvbCwgei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kT2JqZWN0ID0gei5ab2RPYmplY3Q8JFpvZExvb3NlU2hhcGU+O1xudHlwZSBBbnlab2ROdWxsYWJsZSA9IHouWm9kTnVsbGFibGU8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kRGVmYXVsdCA9IHouWm9kRGVmYXVsdDx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RVbmlvbiA9IHouWm9kVW5pb248ei5ab2RUeXBlW10+O1xudHlwZSBBbnlab2RBcnJheSA9IHouWm9kQXJyYXk8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kT3B0aW9uYWwgPSB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT47XG50eXBlIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCA9IHouWm9kVGVtcGxhdGVMaXRlcmFsPHN0cmluZz47XG5cbi8qKlxuICog64K07J6lIO2DgOyehSDsoJXsnZggKFpvZCDsiqTtgqTrp4ggKyBVSSDroIzrjZTrp4Eg7YOA7J6FKVxuICovXG5leHBvcnQgY29uc3QgQlVJTFRfSU5fVFlQRVMgPSB7XG4gIFNvbmFtdUZpbGU6IHtcbiAgICBzY2hlbWE6IFNvbmFtdUZpbGVTY2hlbWEsXG4gICAgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGVcIixcbiAgICBzY2hlbWFOYW1lOiBcIlNvbmFtdUZpbGVTY2hlbWFcIixcbiAgfSxcbiAgXCJTb25hbXVGaWxlW11cIjoge1xuICAgIHNjaGVtYTogU29uYW11RmlsZUFycmF5U2NoZW1hLFxuICAgIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlLWFycmF5XCIsXG4gICAgc2NoZW1hTmFtZTogXCJTb25hbXVGaWxlQXJyYXlTY2hlbWFcIixcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogem9kRm9ybWF07J2EIFpvZCA0IOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICogWm9kIDTsl5DshJzripQgei5lbWFpbCgpLCB6LnV1aWQoKSDrk7Eg64+F66a97KCB7J24IO2VqOyImCDtmJXtg5zrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiB6b2RGb3JtYXRUb0NvZGUoZm9ybWF0OiBab2RTdHJpbmdGb3JtYXQpOiBzdHJpbmcge1xuICAvLyBJU08g7Y+s66e37J2AIHouaXNvLnh4eCgpIO2Yle2DnFxuICBjb25zdCBpc29Gb3JtYXRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGlzb0RhdGU6IFwiei5pc28uZGF0ZSgpXCIsXG4gICAgaXNvVGltZTogXCJ6Lmlzby50aW1lKClcIixcbiAgICBpc29EYXRldGltZTogXCJ6Lmlzby5kYXRldGltZSgpXCIsXG4gICAgaXNvRHVyYXRpb246IFwiei5pc28uZHVyYXRpb24oKVwiLFxuICB9O1xuXG4gIC8vIGhhc2gg7Y+s66e37J2AIHouaGFzaChcImFsZ29yaXRobVwiKSDtmJXtg5xcbiAgY29uc3QgaGFzaEZvcm1hdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgaGFzaE1kNTogJ3ouaGFzaChcIm1kNVwiKScsXG4gICAgaGFzaFNoYTE6ICd6Lmhhc2goXCJzaGExXCIpJyxcbiAgICBoYXNoU2hhMjU2OiAnei5oYXNoKFwic2hhMjU2XCIpJyxcbiAgICBoYXNoU2hhMzg0OiAnei5oYXNoKFwic2hhMzg0XCIpJyxcbiAgICBoYXNoU2hhNTEyOiAnei5oYXNoKFwic2hhNTEyXCIpJyxcbiAgfTtcblxuICBpZiAoZm9ybWF0IGluIGlzb0Zvcm1hdHMpIHtcbiAgICByZXR1cm4gaXNvRm9ybWF0c1tmb3JtYXRdO1xuICB9XG5cbiAgaWYgKGZvcm1hdCBpbiBoYXNoRm9ybWF0cykge1xuICAgIHJldHVybiBoYXNoRm9ybWF0c1tmb3JtYXRdO1xuICB9XG5cbiAgLy8g6riw67O4IO2PrOunt+ydgCB6Lnh4eCgpIO2Yle2DnCAoWm9kIDQpXG4gIHJldHVybiBgei4ke2Zvcm1hdH0oKWA7XG59XG5cbi8qKlxuICogem9kRm9ybWF07J2EIFpvZCA0IO2DgOyeheycvOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBab2QgNOyXkOyEnOuKlCB6LmVtYWlsKCksIHoudXVpZCgpIOuTsSDrj4Xrpr3soIHsnbgg7ZWo7IiYIO2Yle2DnOulvCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHpvZEZvcm1hdFRvVHlwZShmb3JtYXQ6IFpvZFN0cmluZ0Zvcm1hdCk6IHouWm9kVHlwZSB7XG4gIC8vIElTTyDtj6zrp7fsnYAgei5pc28ueHh4KCkg7ZiV7YOcXG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSBcImlzb0RhdGVcIjpcbiAgICAgIHJldHVybiB6Lmlzby5kYXRlKCk7XG4gICAgY2FzZSBcImlzb1RpbWVcIjpcbiAgICAgIHJldHVybiB6Lmlzby50aW1lKCk7XG4gICAgY2FzZSBcImlzb0RhdGV0aW1lXCI6XG4gICAgICByZXR1cm4gei5pc28uZGF0ZXRpbWUoKTtcbiAgICBjYXNlIFwiaXNvRHVyYXRpb25cIjpcbiAgICAgIHJldHVybiB6Lmlzby5kdXJhdGlvbigpO1xuICAgIC8vIGhhc2gg7Y+s66e37J2AIHouaGFzaChcImFsZ29yaXRobVwiKSDtmJXtg5xcbiAgICBjYXNlIFwiaGFzaE1kNVwiOlxuICAgICAgcmV0dXJuIHouaGFzaChcIm1kNVwiKTtcbiAgICBjYXNlIFwiaGFzaFNoYTFcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGExXCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhMjU2XCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwic2hhMjU2XCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhMzg0XCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwic2hhMzg0XCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhNTEyXCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwic2hhNTEyXCIpO1xuICAgIC8vIOq4sOuzuCDtj6zrp7fsnYAgei54eHgoKSDtmJXtg5wgKFpvZCA0KVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gKHogYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB6LlpvZFR5cGU+KVtmb3JtYXRdKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIElE66Gc67aA7YSwIOuPmeyggeycvOuhnCBab2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqIOuCtOyepSDtg4DsnoUoQlVJTFRfSU5fVFlQRV9JRFMp7J2AIOuwlOuhnCDrsJjtmZjtlZjqs6AsXG4gKiDqt7gg7Jm464qUIGRpc3Qg65SU66CJ7Yag66as7JeQ7IScIEVTTeycvOuhnCBpbXBvcnTtlZjsl6wg6rCA7KC47Ji164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Wm9kVHlwZUJ5SWQoem9kVHlwZUlkOiBzdHJpbmcpOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICAvLyDrgrTsnqUg7YOA7J6FIOyymOumrFxuICBpZiAoKEJVSUxUX0lOX1RZUEVfSURTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh6b2RUeXBlSWQpKSB7XG4gICAgY29uc3QgYnVpbHRJblR5cGUgPSBCVUlMVF9JTl9UWVBFU1t6b2RUeXBlSWQgYXMga2V5b2YgdHlwZW9mIEJVSUxUX0lOX1RZUEVTXTtcbiAgICBpZiAoIWJ1aWx0SW5UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOuCtOyepSDtg4DsnoUgJHt6b2RUeXBlSWR97J2YIOyKpO2CpOuniOqwgCDsoJXsnZjrkJjsp4Ag7JWK7JWY7Iq164uI64ukYCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsdEluVHlwZS5zY2hlbWEuZGVzY3JpYmUoem9kVHlwZUlkKTtcbiAgfVxuXG4gIC8vIO2UhOuhnOygne2KuOyXkOyEnCDsoJXsnZjtlZwg7YOA7J6FIOuPmeyggSDroZzrk5xcbiAgY29uc3QgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aCh6b2RUeXBlSWQpO1xuICBjb25zdCBtb2R1bGVBYnNQYXRoID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChgZGlzdC9hcHBsaWNhdGlvbi8ke21vZHVsZVBhdGh9LmpzYCksXG4gICk7XG4gIGNvbnN0IGltcG9ydFVybCA9IGNyZWF0ZUltcG9ydFVybChtb2R1bGVBYnNQYXRoKTtcbiAgY29uc3QgaW1wb3J0ZWQgPSBhd2FpdCBpbXBvcnQoaW1wb3J0VXJsKTtcblxuICBpZiAoIWltcG9ydGVkW3pvZFR5cGVJZF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgem9kVHlwZUlkICR7em9kVHlwZUlkfWApO1xuICB9XG4gIHJldHVybiBpbXBvcnRlZFt6b2RUeXBlSWRdLmRlc2NyaWJlKHpvZFR5cGVJZCk7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSBwcm9w7J2YIO2DgOyeheyXkCDrlLDrnbwg7KCB7KCI7ZWcIFpvZCB2YWxpZGF0b3Lrpbwg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvcFRvWm9kVHlwZShwcm9wOiBFbnRpdHlQcm9wKTogUHJvbWlzZTx6LlpvZFR5cGVBbnk+IHtcbiAgbGV0IHpvZFR5cGU6IHouWm9kVHlwZUFueSA9IHoudW5rbm93bigpO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICB9IGVsc2UgaWYgKGlzSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJpZ2ludCgpO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJpZ2ludCgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNFbnVtU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc0VudW1BcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gKGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzU3RyaW5nU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIGlmIChwcm9wLnpvZEZvcm1hdCkge1xuICAgICAgem9kVHlwZSA9IHpvZEZvcm1hdFRvVHlwZShwcm9wLnpvZEZvcm1hdCk7XG4gICAgICBpZiAocHJvcC5sZW5ndGggJiYgXCJtYXhcIiBpbiB6b2RUeXBlKSB7XG4gICAgICAgIHpvZFR5cGUgPSAoem9kVHlwZSBhcyB6LlpvZFN0cmluZykubWF4KHByb3AubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdBcnJheVByb3AocHJvcCkpIHtcbiAgICBsZXQgZWxlbWVudFR5cGU6IHouWm9kVHlwZTtcbiAgICBpZiAocHJvcC56b2RGb3JtYXQpIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gem9kRm9ybWF0VG9UeXBlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCAmJiBcIm1heFwiIGluIGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGVsZW1lbnRUeXBlID0gKGVsZW1lbnRUeXBlIGFzIHouWm9kU3RyaW5nKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gei5zdHJpbmcoKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50VHlwZSA9IHouc3RyaW5nKCk7XG4gICAgfVxuICAgIHpvZFR5cGUgPSBlbGVtZW50VHlwZS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouc3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouc3RyaW5nKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJvb2xlYW4oKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzRGF0ZVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouZGF0ZSgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNVdWlkU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei51dWlkKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0pzb25Qcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmFycmF5KHoubnVtYmVyKCkpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5hcnJheSh6Lm51bWJlcigpKSk7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyDtg4DsnoXsnYQg7LC47KGwIOyXlO2LsO2LsCBQSyDtg4DsnoXsl5Ag65Sw6528IOqysOyglVxuICAgICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocHJvcC53aXRoKTtcbiAgICAgIGNvbnN0IHBrVHlwZSA9IHJlbEVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICAgIGlmIChwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIikge1xuICAgICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3DsnYQgem9kVHlwZeycvOuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7YyoICR7cHJvcH19YCk7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICB6b2RUeXBlID0gKHpvZFR5cGUgYXMgei5ab2ROdW1iZXIpLm5vbm5lZ2F0aXZlKCk7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICB6b2RUeXBlID0gem9kVHlwZS5udWxsYWJsZSgpO1xuICB9XG5cbiAgcmV0dXJuIHpvZFR5cGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BUb1pvZFR5cGVEZWYocHJvcDogRW50aXR5UHJvcCwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgc3RtdDogc3RyaW5nO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmludCgpYDtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYmlnaW50KClgO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfWA7XG4gICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9LmFycmF5KClgO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC56b2RGb3JtYXQpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB6b2RGb3JtYXRUb0NvZGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke2Jhc2V9Lm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICBjb25zdCBiYXNlID0gem9kRm9ybWF0VG9Db2RlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtiYXNlfS5tYXgoJHtwcm9wLmxlbmd0aH0pLmFycmF5KClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX0uYXJyYXkoKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkubWF4KCR7cHJvcC5sZW5ndGh9KS5hcnJheSgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpYDtcbiAgfSBlbHNlIGlmIChpc051bWJlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmRhdGUoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5ib29sZWFuKClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoudXVpZCgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIC8vIOuCtOyepSDtg4DsnoXsnbgg6rK97JqwIOyKpO2CpOuniCDsnbTrpoTsnLzroZwg67OA7ZmYXG4gICAgaWYgKChCVUlMVF9JTl9UWVBFX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocHJvcC5pZCkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBwcm9wLmlkID09PSBcIlNvbmFtdUZpbGVcIiA/IFwiU29uYW11RmlsZVNjaGVtYVwiIDogXCJTb25hbXVGaWxlQXJyYXlTY2hlbWFcIjtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3NjaGVtYU5hbWV9YDtcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChzY2hlbWFOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZlY3RvclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6Lm51bWJlcigpKWA7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6LmFycmF5KHoubnVtYmVyKCkpKWA7XG4gIH0gZWxzZSBpZiAoaXNUc1ZlY3RvclByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHwgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSkge1xuICAgICAgLy8gRksgWm9kIO2DgOyeheydhCDssLjsobAg7JeU7Yuw7YuwIFBLIO2DgOyeheyXkCDrlLDrnbwg6rKw7KCVXG4gICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuICAgICAgY29uc3QgcGtUeXBlID0gcmVsRW50aXR5LmdldFBrVHlwZSgpO1xuICAgICAgaWYgKHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9X2lkOiB6LnN0cmluZygpYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9X2lkOiB6LmludCgpYDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8g6re47Jm4IHJlbGF0aW9uIOy8gOydtOyKpCDsoJzsmbhcbiAgICAgIHJldHVybiBgLy8gJHtwcm9wLm5hbWV9OiAke3Byb3AucmVsYXRpb25UeXBlfSAke3Byb3Aud2l0aH1gO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCIvLyB1bmFibGUgdG8gcmVzb2x2ZVwiO1xuICB9XG5cbiAgaWYgKChwcm9wIGFzIHsgdW5zaWduZWQ/OiBib29sZWFuIH0pLnVuc2lnbmVkKSB7XG4gICAgc3RtdCArPSBcIi5ub25uZWdhdGl2ZSgpXCI7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICBzdG10ICs9IFwiLm51bGxhYmxlKClcIjtcbiAgfVxuXG4gIC8vIG51bWVyaWMg7YOA7J6F7J2YIOqyveyasCBudWxsYWJsZSDsnbTtm4Tsl5AgbWV0YSDstpTqsIAgKOuplO2DgOuNsOydtO2EsOqwgCDstZzsg4HsnIQg66CI67Ko7JeQIOyeiOyWtOyVvCDtlagpXG4gIGlmIChpc051bWVyaWNTaW5nbGVQcm9wKHByb3ApIHx8IGlzTnVtZXJpY0FycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgKz0gJy5tZXRhKHsgU29uYW11UHJvcFR5cGU6IFwibnVtZXJpY1wiIH0pJztcbiAgfVxuXG4gIHJldHVybiBgJHtzdG10fSxgO1xufVxuXG4vKipcbiAqIEVudGl0eVByb3BOb2Rl66W8IFpvZCDtg4DsnoUg7KCV7J2YIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICogcGxhaW4sIGFycmF5LCBvYmplY3Qg64W465OcIO2DgOyeheydhCDsnqzqt4DsoIHsnLzroZwg7LKY66as7ZWY7JesIOykkeyyqSDqtazsobDrpbwg7KeA7JuQ7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGU6IEVudGl0eVByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJwbGFpblwiKSB7XG4gICAgcmV0dXJuIHByb3BUb1pvZFR5cGVEZWYocHJvcE5vZGUucHJvcCwgaW5qZWN0SW1wb3J0S2V5cyk7XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgIHJldHVybiBbXG4gICAgICBwcm9wTm9kZS5wcm9wID8gYCR7cHJvcE5vZGUucHJvcC5uYW1lfTogYCA6IFwiXCIsXG4gICAgICBcInouYXJyYXkoei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIFwifSkpLFwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBbXG4gICAgICBwcm9wTm9kZS5wcm9wID8gYCR7cHJvcE5vZGUucHJvcC5uYW1lfTogYCA6IFwiXCIsXG4gICAgICBcInoub2JqZWN0KHtcIixcbiAgICAgIHByb3BOb2RlLmNoaWxkcmVuXG4gICAgICAgIC5tYXAoKGNoaWxkUHJvcE5vZGUpID0+IHByb3BOb2RlVG9ab2RUeXBlRGVmKGNoaWxkUHJvcE5vZGUsIGluamVjdEltcG9ydEtleXMpKVxuICAgICAgICAuam9pbihcIlxcblwiKSxcbiAgICAgIFwiXCIsXG4gICAgICBgfSkke3Byb3BOb2RlLnByb3A/Lm51bGxhYmxlID8gXCIubnVsbGFibGUoKVwiIDogXCJcIn0sYCxcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1RzVHlwZURlZih6dDogei5ab2RUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICBjYXNlIFwibnVsbFwiOlxuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICBjYXNlIFwibmV2ZXJcIjpcbiAgICAgIHJldHVybiB6dC5kZWYudHlwZTtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZE51bGxhYmxlKS5kZWYuaW5uZXJUeXBlKX0gfCBudWxsYDtcbiAgICBjYXNlIFwiZGVmYXVsdFwiOlxuICAgICAgcmV0dXJuIHpvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kRGVmYXVsdCkuZGVmLmlubmVyVHlwZSk7XG4gICAgY2FzZSBcInJlY29yZFwiOiB7XG4gICAgICBjb25zdCByZWNvcmRUeXBlID0genQgYXMgQW55Wm9kUmVjb3JkO1xuICAgICAgcmV0dXJuIGB7IFsga2V5OiAke3pvZFR5cGVUb1RzVHlwZURlZihyZWNvcmRUeXBlLmRlZi5rZXlUeXBlKX0gXTogJHt6b2RUeXBlVG9Uc1R5cGVEZWYocmVjb3JkVHlwZS5kZWYudmFsdWVUeXBlKX19YDtcbiAgICB9XG4gICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKCh6dCBhcyB6LlpvZExpdGVyYWwpLnZhbHVlcylcbiAgICAgICAgLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYG51bGxgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYHVuZGVmaW5lZGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiIHwgXCIpO1xuICAgIGNhc2UgXCJ1bmlvblwiOlxuICAgICAgcmV0dXJuIGAkeyh6dCBhcyBBbnlab2RVbmlvbikub3B0aW9uc1xuICAgICAgICAubWFwKChvcHRpb24pID0+IHpvZFR5cGVUb1RzVHlwZURlZihvcHRpb24pKVxuICAgICAgICAuam9pbihcIiB8IFwiKX1gO1xuICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICByZXR1cm4gYCR7KHp0IGFzIHouWm9kRW51bSkub3B0aW9ucy5tYXAoKHZhbCkgPT4gYFwiJHt2YWx9XCJgKS5qb2luKFwiIHwgXCIpfWA7XG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2RBcnJheSkuZWxlbWVudCl9W11gO1xuICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgY29uc3Qgc2hhcGUgPSAoenQgYXMgQW55Wm9kT2JqZWN0KS5zaGFwZTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwie1wiLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyhzaGFwZSkubWFwKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoc2hhcGVba2V5XS5kZWYudHlwZSA9PT0gXCJvcHRpb25hbFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fT86ICR7em9kVHlwZVRvVHNUeXBlRGVmKHNoYXBlW2tleV0uZGVmLmlubmVyVHlwZSl9LGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiAke3pvZFR5cGVUb1RzVHlwZURlZihzaGFwZVtrZXldKX0sYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBcIn1cIixcbiAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgY2FzZSBcIm9wdGlvbmFsXCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2RPcHRpb25hbCkuZGVmLmlubmVyVHlwZSl9IHwgdW5kZWZpbmVkYDtcbiAgICBjYXNlIFwidGVtcGxhdGVfbGl0ZXJhbFwiOiB7XG4gICAgICBjb25zdCBkZWYgPSAoenQgYXMgQW55Wm9kVGVtcGxhdGVMaXRlcmFsKS5kZWY7XG5cbiAgICAgIC8vIOu5iCB0ZW1wbGF0ZSBsaXRlcmFs7J2AIHN0cmluZ+ycvOuhnCDtj7TrsLFcbiAgICAgIGlmICghZGVmLnBhcnRzIHx8IGRlZi5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIOqwgSBwYXJ066W8IFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZhcbiAgICAgIGNvbnN0IHBhcnRzID0gZGVmLnBhcnRzLm1hcCgocGFydDogdW5rbm93bikgPT4ge1xuICAgICAgICAvLyDrpqzthLDrn7Qg6rCSIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgbnVsbCwgdW5kZWZpbmVkKVxuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7cGFydH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWm9kVHlwZSAtIOyerOq3gOyggeycvOuhnCDrs4DtmZhcbiAgICAgICAgaWYgKHBhcnQgJiYgdHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIgJiYgKHBhcnQgYXMgei5ab2RUeXBlKS5fem9kKSB7XG4gICAgICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVHlwZVRvVHNUeXBlRGVmKHBhcnQgYXMgei5ab2RUeXBlKTtcbiAgICAgICAgICByZXR1cm4gYCRcXHske2lubmVyVHlwZX19YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIO2PtOuwsVxuICAgICAgICByZXR1cm4gYFxcJHtzdHJpbmd9YDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYFxcYCR7cGFydHMuam9pbihcIlwiKX1cXGBgO1xuICAgIH1cbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIFwiRmlsZVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyymOumrOuQmOyngCDslYrsnYAgWm9kVHlwZSAke3p0LmRlZi50eXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogWm9kIO2DgOyehSDsnbjsiqTthLTsiqTrpbwg7ZW064u57ZWY64qUIFpvZCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1pvZENvZGUoenQ6IHouWm9kVHlwZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoenQuZGVmLnR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gXCJ6LnN0cmluZygpXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIFwiei5udW1iZXIoKVwiO1xuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgIHJldHVybiBcInouYmlnaW50KClcIjtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIFwiei5ib29sZWFuKClcIjtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiei5kYXRlKClcIjtcbiAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgcmV0dXJuIFwiei5udWxsKClcIjtcbiAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICByZXR1cm4gXCJ6LnVuZGVmaW5lZCgpXCI7XG4gICAgY2FzZSBcImFueVwiOlxuICAgICAgcmV0dXJuIFwiei5hbnkoKVwiO1xuICAgIGNhc2UgXCJ1bmtub3duXCI6XG4gICAgICByZXR1cm4gXCJ6LnVua25vd24oKVwiO1xuICAgIGNhc2UgXCJuZXZlclwiOlxuICAgICAgcmV0dXJuIFwiei5uZXZlcigpXCI7XG4gICAgY2FzZSBcIm51bGxhYmxlXCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgQW55Wm9kTnVsbGFibGUpLmRlZi5pbm5lclR5cGUpfS5udWxsYWJsZSgpYDtcbiAgICBjYXNlIFwiZGVmYXVsdFwiOiB7XG4gICAgICBjb25zdCB6RGVmYXVsdERlZiA9ICh6dCBhcyBBbnlab2REZWZhdWx0KS5kZWY7XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvWm9kQ29kZSh6RGVmYXVsdERlZi5pbm5lclR5cGUpfS5kZWZhdWx0KCR7ekRlZmF1bHREZWYuZGVmYXVsdFZhbHVlfSlgO1xuICAgIH1cbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHpSZWNvcmREZWYgPSAoenQgYXMgQW55Wm9kUmVjb3JkKS5kZWY7XG4gICAgICByZXR1cm4gYHoucmVjb3JkKCR7em9kVHlwZVRvWm9kQ29kZSh6UmVjb3JkRGVmLmtleVR5cGUpfSwgJHt6b2RUeXBlVG9ab2RDb2RlKFxuICAgICAgICB6UmVjb3JkRGVmLnZhbHVlVHlwZSxcbiAgICAgICl9KWA7XG4gICAgfVxuICAgIGNhc2UgXCJsaXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbSgoenQgYXMgei5ab2RMaXRlcmFsPHN0cmluZyB8IG51bWJlcj4pLnZhbHVlcykubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGBcIiR7dmFsdWV9XCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGBudWxsYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGB1bmRlZmluZWRgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYHoubGl0ZXJhbCgke2l0ZW1zWzBdfSlgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGB6LmxpdGVyYWwoWyR7aXRlbXMuam9pbihcIiwgXCIpfV0pYDtcbiAgICB9XG4gICAgY2FzZSBcInVuaW9uXCI6XG4gICAgICByZXR1cm4gYHoudW5pb24oWyR7KHp0IGFzIEFueVpvZFVuaW9uKS5kZWYub3B0aW9uc1xuICAgICAgICAubWFwKChvcHRpb246IHouWm9kVHlwZSkgPT4gem9kVHlwZVRvWm9kQ29kZShvcHRpb24pKVxuICAgICAgICAuam9pbihcIixcIil9XSlgO1xuICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAvLyBOT1RFOiB6LmVudW0oW1wiQVwiLCBcIkJcIl0p64+EIHouZW51bSh7IEE6IFwiQVwiLCBCOiBcIkJcIiB9KeuhnCDsspjrpqzrkKguXG4gICAgICByZXR1cm4gYHouZW51bSh7JHtPYmplY3QuZW50cmllcygoenQgYXMgei5ab2RFbnVtKS5kZWYuZW50cmllcylcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsXSkgPT4gKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgPyBgJHtrZXl9OiBcIiR7dmFsfVwiYCA6IGAke2tleX06ICR7dmFsfWApKVxuICAgICAgICAuam9pbihcIiwgXCIpfX0pYDtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBgei5hcnJheSgke3pvZFR5cGVUb1pvZENvZGUoKHp0IGFzIHouWm9kQXJyYXk8ei5ab2RUeXBlPikuZGVmLmVsZW1lbnQpfSlgO1xuICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgY29uc3Qgc2hhcGUgPSAoenQgYXMgQW55Wm9kT2JqZWN0KS5zaGFwZTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyhzaGFwZSkubWFwKChrZXkpID0+IGAke2tleX06ICR7em9kVHlwZVRvWm9kQ29kZShzaGFwZVtrZXldKX0sYCksXG4gICAgICAgIFwifSlcIixcbiAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgY2FzZSBcIm9wdGlvbmFsXCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlKX0ub3B0aW9uYWwoKWA7XG4gICAgY2FzZSBcImZpbGVcIjpcbiAgICAgIHJldHVybiBgei5maWxlKClgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9ICh6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWwpLmRlZjtcblxuICAgICAgLy8g67mIIHRlbXBsYXRlIGxpdGVyYWxcbiAgICAgIGlmICghZGVmLnBhcnRzIHx8IGRlZi5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFwiei50ZW1wbGF0ZUxpdGVyYWwoW10pXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIOqwgSBwYXJ066W8IFpvZCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmFxuICAgICAgY29uc3QgcGFydHMgPSBkZWYucGFydHMubWFwKChwYXJ0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIC8vIOusuOyekOyXtCDrpqzthLDrn7RcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGBcIiR7cGFydH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gWm9kVHlwZSAtIOyerOq3gOyggeycvOuhnCDrs4DtmZhcbiAgICAgICAgaWYgKHBhcnQgJiYgdHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIgJiYgKHBhcnQgYXMgei5ab2RUeXBlKS5fem9kKSB7XG4gICAgICAgICAgcmV0dXJuIHpvZFR5cGVUb1pvZENvZGUocGFydCBhcyB6LlpvZFR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYHoudGVtcGxhdGVMaXRlcmFsKFske3BhcnRzLmpvaW4oXCIsIFwiKX1dKWA7XG4gICAgfVxuICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgY29uc3QgekludGVyc2VjdGlvbkRlZiA9ICh6dCBhcyB6LlpvZEludGVyc2VjdGlvbjx6LlpvZFR5cGUsIHouWm9kVHlwZT4pLmRlZjtcbiAgICAgIHJldHVybiBgei5pbnRlcnNlY3Rpb24oJHt6b2RUeXBlVG9ab2RDb2RlKHpJbnRlcnNlY3Rpb25EZWYubGVmdCl9LCAke3pvZFR5cGVUb1pvZENvZGUoekludGVyc2VjdGlvbkRlZi5yaWdodCl9KWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyymOumrOuQmOyngCDslYrsnYAgWm9kVHlwZSAke3p0LmRlZi50eXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogWm9kIO2DgOyeheydhCBVSSDroIzrjZTrp4Hsl5Ag7IKs7Jqp7ZWgIOyImCDsnojripQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsnqzqt4DsoIHsnLzroZwg7KSR7LKp65CcIO2DgOyeheuTpOydhCDsspjrpqztlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKFxuICB6b2RUeXBlOiB6LlpvZFR5cGVBbnksXG4gIGJhc2VLZXk6IHN0cmluZyA9IFwicm9vdFwiLFxuKTogUmVuZGVyaW5nTm9kZSB7XG4gIGNvbnN0IGRlZiA9IHtcbiAgICBuYW1lOiBiYXNlS2V5LFxuICAgIGxhYmVsOiBpbmZsZWN0aW9uLmNhbWVsaXplKGJhc2VLZXksIGZhbHNlKSxcbiAgICB6b2RUeXBlLFxuICB9O1xuXG4gIC8qKlxuICAgKiDsvIDsnbTsiqQg7LKY66asIOyInOyEnFxuICAgKlxuICAgKiAxLiDtirnsiJgg7LyA7J207IqkIChkZXNjcmlwdGlvbiDquLDrsJgpXG4gICAqICAgIC0gU29uYW11RmlsZS9Tb25hbXVGaWxlW10gOiB6Lm9iamVjdC96LmFycmF57J207KeA66eMIO2MjOydvCDsl4XroZzrk5zsmqkg64K07J6lIO2DgOyehVxuICAgKlxuICAgKiAyLiDsnbzrsJgg7LyA7J207IqkIChpbnN0YW5jZW9mIOq4sOuwmClcbiAgICogICAgLSB6LlpvZE9iamVjdCA6IOydvOuwmCDqsJ3ssrRcbiAgICogICAgLSB6LlpvZEFycmF5IDog7J2867CYIOuwsOyXtFxuICAgKiAgICAgIC0gdmVjdG9yIDogei5hcnJheSh6Lm51bWJlcinsnbTsp4Drp4wg64Sk7J2067CNIOq4sOuwmOycvOuhnCDrsqHthLAg7J6E67Kg65SpXG4gICAqICAgICAgLSDsnbzrsJgg67Cw7Je0IDog6re4IOyZuFxuICAgKiAgICAtIHouWm9kVW5pb24sIHouWm9kT3B0aW9uYWwsIHouWm9kTnVsbGFibGUgOiDsnKDti7jrpqzti7Ag7YOA7J6FXG4gICAqICAgIC0g6riw7YOAIDogcmVzb2x2ZVJlbmRlclR5cGUoKeycvOuhnCDsspjrpqxcbiAgICovXG5cbiAgLy8g7Yq57IiYIOy8gOydtOyKpDogU29uYW11RmlsZVtdIO2DgOyehSDqsJDsp4BcbiAgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU29uYW11RmlsZVtdXCIpIHtcbiAgICByZXR1cm4geyAuLi5kZWYsIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlLWFycmF5XCIgfTtcbiAgfVxuXG4gIC8vIO2KueyImCDsvIDsnbTsiqQ6IFNvbmFtdUZpbGUg64uo7J28IO2DgOyehSDqsJDsp4BcbiAgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU29uYW11RmlsZVwiKSB7XG4gICAgcmV0dXJuIHsgLi4uZGVmLCByZW5kZXJUeXBlOiBcImpzb24tc29uYW11ZmlsZVwiIH07XG4gIH1cblxuICAvLyDsnbzrsJgg7LyA7J207IqkOiBab2RPYmplY3Qg7LK07YGsXG4gIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICBjb25zdCBjb2x1bW5LZXlzID0gT2JqZWN0LmtleXMoem9kVHlwZS5zaGFwZSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjb2x1bW5LZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlLnNoYXBlW2tleV07XG4gICAgICByZXR1cm4gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGtleSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgY29uc3QgaW5uZXJUeXBlID0gKHpvZFR5cGUgYXMgei5ab2RBcnJheTx6LlpvZFR5cGVBbnk+KS5kZWYuZWxlbWVudDtcbiAgICAvLyB2ZWN0b3Ig7YOA7J6FIO2MkOuzhDogbnVtYmVyIOuwsOyXtOydtOuptOyEnCBlbWJlZGRpbmcsIHZlY3RvciDrk7HsnZgg7J2066aE7J2EIOqwgOynhCDqsr3smrBcbiAgICBpZiAoXG4gICAgICBpbm5lclR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlciAmJlxuICAgICAgKGJhc2VLZXkuaW5jbHVkZXMoXCJlbWJlZGRpbmdcIikgfHwgYmFzZUtleS5pbmNsdWRlcyhcInZlY3RvclwiKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZixcbiAgICAgICAgcmVuZGVyVHlwZTogXCJ2ZWN0b3JcIixcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWYsXG4gICAgICByZW5kZXJUeXBlOiBcImFycmF5XCIsXG4gICAgICBlbGVtZW50OiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgfTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmlvbikge1xuICAgIGNvbnN0IG9wdGlvbk5vZGVzID0gKHpvZFR5cGUgYXMgei5ab2RVbmlvbjx6LlpvZFR5cGVbXT4pLmRlZi5vcHRpb25zLm1hcCgob3B0KSA9PlxuICAgICAgem9kVHlwZVRvUmVuZGVyaW5nTm9kZShvcHQsIGJhc2VLZXkpLFxuICAgICk7XG4gICAgLy8gVE9ETzogWm9kVW5pb27snbQg65Ok7Ja07J6I64qUIOqyveyasCDtlbjrk6Trp4FcbiAgICByZXR1cm4gb3B0aW9uTm9kZXNbMF07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT3B0aW9uYWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uem9kVHlwZVRvUmVuZGVyaW5nTm9kZSgoem9kVHlwZSBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUsIGJhc2VLZXkpLFxuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdWxsYWJsZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi56b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCh6b2RUeXBlIGFzIHouWm9kTnVsbGFibGU8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWYsXG4gICAgICByZW5kZXJUeXBlOiByZXNvbHZlUmVuZGVyVHlwZShiYXNlS2V5LCB6b2RUeXBlKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogWm9kIO2DgOyeheqzvCDtgqQg7J2066aE7Jy866Gc67aA7YSwIOyggeygiO2VnCBSZW5kZXJUeXBl7J2EIOqysOygle2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlbmRlclR5cGUoa2V5OiBzdHJpbmcsIHpvZFR5cGU6IHouWm9kVHlwZUFueSk6IFJlbmRlcmluZ05vZGVbXCJyZW5kZXJUeXBlXCJdIHtcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZERhdGUpIHtcbiAgICByZXR1cm4gXCJkYXRldGltZVwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LmNvcmUuJFpvZFN0cmluZykge1xuICAgIC8vIE5PVEU6IHouWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VmOuptCB6LnVybCgpLCB6LmVtYWlsKCkg65Ox7J2YIO2DgOyeheyXkOyEnCDrrLjsoJzqsIAg7IOd6riw66+A66GcIHouY29yZS4kWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VqFxuICAgIC8vIEZJWE1FOiBlbWFpbOydtOuCmCB1cmwg7YOA7J6FIOuTseyXkCDrjIDtlZwg7LKY66as6rCAIO2VhOyalO2VqFxuICAgIGlmICh6b2RUeXBlLmRlc2NyaXB0aW9uID09PSBcIlNRTERhdGVUaW1lU3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1kYXRldGltZVwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiZGF0ZVwiKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGVcIjtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctaWRcIjtcbiAgICB9IGVsc2UgaWYgKGtleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWZrX2lkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICBpZiAoa2V5ID09PSBcImlkXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1pZFwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiX2lkXCIpKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItZmtfaWRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLXBsYWluXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEJvb2xlYW4pIHtcbiAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgIHJldHVybiBcImVudW1zXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kUmVjb3JkKSB7XG4gICAgcmV0dXJuIFwicmVjb3JkXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQW55IHx8IHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVua25vd24pIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmlvbikge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZExpdGVyYWwpIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RUZW1wbGF0ZUxpdGVyYWwpIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlLmRlZi50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7IuxIOu2iOqwgCAke2tleX0gJHt6b2RUeXBlLmRlZi50eXBlfWApO1xuICB9XG59XG4iXSwibmFtZXMiOlsiaW5mbGVjdGlvbiIsInBhdGgiLCJ6IiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIkJVSUxUX0lOX1RZUEVfSURTIiwiaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AiLCJpc0JpZ0ludGVnZXJBcnJheVByb3AiLCJpc0JpZ0ludGVnZXJTaW5nbGVQcm9wIiwiaXNCb29sZWFuQXJyYXlQcm9wIiwiaXNCb29sZWFuU2luZ2xlUHJvcCIsImlzRGF0ZUFycmF5UHJvcCIsImlzRGF0ZVNpbmdsZVByb3AiLCJpc0VudW1BcnJheVByb3AiLCJpc0VudW1TaW5nbGVQcm9wIiwiaXNJbnRlZ2VyQXJyYXlQcm9wIiwiaXNJbnRlZ2VyU2luZ2xlUHJvcCIsImlzSnNvblByb3AiLCJpc051bWJlckFycmF5UHJvcCIsImlzTnVtYmVyU2luZ2xlUHJvcCIsImlzTnVtZXJpY0FycmF5UHJvcCIsImlzTnVtZXJpY1NpbmdsZVByb3AiLCJpc09uZVRvT25lUmVsYXRpb25Qcm9wIiwiaXNSZWxhdGlvblByb3AiLCJpc1N0cmluZ0FycmF5UHJvcCIsImlzU3RyaW5nU2luZ2xlUHJvcCIsImlzVHNWZWN0b3JQcm9wIiwiaXNVdWlkQXJyYXlQcm9wIiwiaXNVdWlkU2luZ2xlUHJvcCIsImlzVmVjdG9yQXJyYXlQcm9wIiwiaXNWZWN0b3JTaW5nbGVQcm9wIiwiaXNWaXJ0dWFsUHJvcCIsIlNvbmFtdUZpbGVBcnJheVNjaGVtYSIsIlNvbmFtdUZpbGVTY2hlbWEiLCJjcmVhdGVJbXBvcnRVcmwiLCJydW50aW1lUGF0aCIsIkJVSUxUX0lOX1RZUEVTIiwiU29uYW11RmlsZSIsInNjaGVtYSIsInJlbmRlclR5cGUiLCJzY2hlbWFOYW1lIiwiem9kRm9ybWF0VG9Db2RlIiwiZm9ybWF0IiwiaXNvRm9ybWF0cyIsImlzb0RhdGUiLCJpc29UaW1lIiwiaXNvRGF0ZXRpbWUiLCJpc29EdXJhdGlvbiIsImhhc2hGb3JtYXRzIiwiaGFzaE1kNSIsImhhc2hTaGExIiwiaGFzaFNoYTI1NiIsImhhc2hTaGEzODQiLCJoYXNoU2hhNTEyIiwiem9kRm9ybWF0VG9UeXBlIiwiaXNvIiwiZGF0ZSIsInRpbWUiLCJkYXRldGltZSIsImR1cmF0aW9uIiwiaGFzaCIsImdldFpvZFR5cGVCeUlkIiwiem9kVHlwZUlkIiwiaW5jbHVkZXMiLCJidWlsdEluVHlwZSIsIkVycm9yIiwiZGVzY3JpYmUiLCJtb2R1bGVQYXRoIiwiZ2V0TW9kdWxlUGF0aCIsIm1vZHVsZUFic1BhdGgiLCJqb2luIiwiYXBpUm9vdFBhdGgiLCJpbXBvcnRVcmwiLCJpbXBvcnRlZCIsInByb3BUb1pvZFR5cGUiLCJwcm9wIiwiem9kVHlwZSIsInVua25vd24iLCJudW1iZXIiLCJpbnQiLCJhcnJheSIsImJpZ2ludCIsImlkIiwiem9kRm9ybWF0IiwibGVuZ3RoIiwibWF4Iiwic3RyaW5nIiwiZWxlbWVudFR5cGUiLCJib29sZWFuIiwidXVpZCIsImhhc0pvaW5Db2x1bW4iLCJyZWxFbnRpdHkiLCJnZXQiLCJ3aXRoIiwicGtUeXBlIiwiZ2V0UGtUeXBlIiwidW5zaWduZWQiLCJub25uZWdhdGl2ZSIsIm51bGxhYmxlIiwicHJvcFRvWm9kVHlwZURlZiIsImluamVjdEltcG9ydEtleXMiLCJzdG10IiwibmFtZSIsInB1c2giLCJiYXNlIiwicmVsYXRpb25UeXBlIiwicHJvcE5vZGVUb1pvZFR5cGVEZWYiLCJwcm9wTm9kZSIsIm5vZGVUeXBlIiwiY2hpbGRyZW4iLCJtYXAiLCJjaGlsZFByb3BOb2RlIiwiem9kVHlwZVRvVHNUeXBlRGVmIiwienQiLCJkZWYiLCJ0eXBlIiwiaW5uZXJUeXBlIiwicmVjb3JkVHlwZSIsImtleVR5cGUiLCJ2YWx1ZVR5cGUiLCJBcnJheSIsImZyb20iLCJ2YWx1ZXMiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIm9wdGlvbnMiLCJvcHRpb24iLCJ2YWwiLCJlbGVtZW50Iiwic2hhcGUiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwicGFydHMiLCJwYXJ0IiwiX3pvZCIsInpvZFR5cGVUb1pvZENvZGUiLCJ6RGVmYXVsdERlZiIsImRlZmF1bHRWYWx1ZSIsInpSZWNvcmREZWYiLCJpdGVtcyIsImVudHJpZXMiLCJ6SW50ZXJzZWN0aW9uRGVmIiwibGVmdCIsInJpZ2h0Iiwiem9kVHlwZVRvUmVuZGVyaW5nTm9kZSIsImJhc2VLZXkiLCJsYWJlbCIsImNhbWVsaXplIiwiZGVzY3JpcHRpb24iLCJab2RPYmplY3QiLCJjb2x1bW5LZXlzIiwiWm9kQXJyYXkiLCJab2ROdW1iZXIiLCJab2RVbmlvbiIsIm9wdGlvbk5vZGVzIiwib3B0IiwiWm9kT3B0aW9uYWwiLCJvcHRpb25hbCIsIlpvZE51bGxhYmxlIiwicmVzb2x2ZVJlbmRlclR5cGUiLCJab2REYXRlIiwiY29yZSIsIiRab2RTdHJpbmciLCJlbmRzV2l0aCIsIlpvZEJvb2xlYW4iLCJab2RFbnVtIiwiWm9kUmVjb3JkIiwiWm9kQW55IiwiWm9kVW5rbm93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
|
|
679
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS96b2QtY29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogem9kLWNvbnZlcnRlciDqtazshLFcbiAqIDEuIOycoO2LuOumrO2LsFxuICogIC0gZ2V0Wm9kVHlwZUJ5SWRcbiAqXG4gKiAyLiBab2Qg7YOA7J6FIOuzgO2ZmCAoRW50aXR5UHJvcCAtPiBab2RUeXBlKVxuICogIC0gcHJvcFRvWm9kVHlwZVxuICpcbiAqIDMuIEVudGl0eVByb3AvTm9kZSAtPiBab2Qg7L2U65OcIOusuOyekOyXtFxuICogIC0gcHJvcFRvWm9kVHlwZURlZlxuICogIC0gcHJvcE5vZGVUb1pvZFR5cGVEZWZcbiAqXG4gKiA0LiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYIChab2RUeXBlIC0+IFpvZENvZGUpXG4gKiAgLSB6b2RUeXBlVG9ab2RDb2RlXG4gKlxuICogNS4gWm9kIO2DgOyeheydhCBVSSDroIzrjZTrp4Hsl5Ag7IKs7Jqp7ZWgIOyImCDsnojripQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZggKFpvZFR5cGUgLT4gUmVuZGVyaW5nTm9kZSlcbiAqICAtIHpvZFR5cGVUb1JlbmRlcmluZ05vZGVcbiAqICAtIHJlc29sdmVSZW5kZXJUeXBlXG4gKi9cblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyAkWm9kTG9vc2VTaGFwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEVudGl0eVByb3BOb2RlLFxuICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNCaWdJbnRlZ2VyQXJyYXlQcm9wLFxuICBpc0JpZ0ludGVnZXJTaW5nbGVQcm9wLFxuICBpc0Jvb2xlYW5BcnJheVByb3AsXG4gIGlzQm9vbGVhblNpbmdsZVByb3AsXG4gIGlzRGF0ZUFycmF5UHJvcCxcbiAgaXNEYXRlU2luZ2xlUHJvcCxcbiAgaXNFbnVtQXJyYXlQcm9wLFxuICBpc0VudW1TaW5nbGVQcm9wLFxuICBpc0ludGVnZXJBcnJheVByb3AsXG4gIGlzSW50ZWdlclNpbmdsZVByb3AsXG4gIGlzSnNvblByb3AsXG4gIGlzTnVtYmVyQXJyYXlQcm9wLFxuICBpc051bWJlclNpbmdsZVByb3AsXG4gIGlzTnVtZXJpY0FycmF5UHJvcCxcbiAgaXNOdW1lcmljU2luZ2xlUHJvcCxcbiAgaXNPbmVUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNSZWxhdGlvblByb3AsXG4gIGlzU2VhcmNoVGV4dFByb3AsXG4gIGlzU3RyaW5nQXJyYXlQcm9wLFxuICBpc1N0cmluZ1NpbmdsZVByb3AsXG4gIGlzVHNWZWN0b3JQcm9wLFxuICBpc1V1aWRBcnJheVByb3AsXG4gIGlzVXVpZFNpbmdsZVByb3AsXG4gIGlzVmVjdG9yQXJyYXlQcm9wLFxuICBpc1ZlY3RvclNpbmdsZVByb3AsXG4gIGlzVmlydHVhbFByb3AsXG4gIHR5cGUgUmVuZGVyaW5nTm9kZSxcbiAgU29uYW11RmlsZUFycmF5U2NoZW1hLFxuICBTb25hbXVGaWxlU2NoZW1hLFxuICB0eXBlIFpvZFN0cmluZ0Zvcm1hdCxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVJbXBvcnRVcmwgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyBydW50aW1lUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8vIDxhbnk+66W8IOyekOygnO2VmOqzoCwgWm9k7JeQ7IScIOygnOyVve2VmOuKlCDquLDrs7jsoIHsnbggR2VuZXJpYyBUeXBlIFBhcmFtZXRlcuulvCDsgqzsmqntlaguXG50eXBlIEFueVpvZFJlY29yZCA9IHouWm9kUmVjb3JkPHouWm9kU3RyaW5nIHwgei5ab2ROdW1iZXIgfCB6LlpvZFN5bWJvbCwgei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kT2JqZWN0ID0gei5ab2RPYmplY3Q8JFpvZExvb3NlU2hhcGU+O1xudHlwZSBBbnlab2ROdWxsYWJsZSA9IHouWm9kTnVsbGFibGU8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kRGVmYXVsdCA9IHouWm9kRGVmYXVsdDx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RVbmlvbiA9IHouWm9kVW5pb248ei5ab2RUeXBlW10+O1xudHlwZSBBbnlab2RBcnJheSA9IHouWm9kQXJyYXk8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kT3B0aW9uYWwgPSB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT47XG50eXBlIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCA9IHouWm9kVGVtcGxhdGVMaXRlcmFsPHN0cmluZz47XG5cbi8qKlxuICog64K07J6lIO2DgOyehSDsoJXsnZggKFpvZCDsiqTtgqTrp4ggKyBVSSDroIzrjZTrp4Eg7YOA7J6FKVxuICovXG5leHBvcnQgY29uc3QgQlVJTFRfSU5fVFlQRVMgPSB7XG4gIFNvbmFtdUZpbGU6IHtcbiAgICBzY2hlbWE6IFNvbmFtdUZpbGVTY2hlbWEsXG4gICAgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGVcIixcbiAgICBzY2hlbWFOYW1lOiBcIlNvbmFtdUZpbGVTY2hlbWFcIixcbiAgfSxcbiAgXCJTb25hbXVGaWxlW11cIjoge1xuICAgIHNjaGVtYTogU29uYW11RmlsZUFycmF5U2NoZW1hLFxuICAgIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlLWFycmF5XCIsXG4gICAgc2NoZW1hTmFtZTogXCJTb25hbXVGaWxlQXJyYXlTY2hlbWFcIixcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogem9kRm9ybWF07J2EIFpvZCA0IOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICogWm9kIDTsl5DshJzripQgei5lbWFpbCgpLCB6LnV1aWQoKSDrk7Eg64+F66a97KCB7J24IO2VqOyImCDtmJXtg5zrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiB6b2RGb3JtYXRUb0NvZGUoZm9ybWF0OiBab2RTdHJpbmdGb3JtYXQpOiBzdHJpbmcge1xuICAvLyBJU08g7Y+s66e37J2AIHouaXNvLnh4eCgpIO2Yle2DnFxuICBjb25zdCBpc29Gb3JtYXRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGlzb0RhdGU6IFwiei5pc28uZGF0ZSgpXCIsXG4gICAgaXNvVGltZTogXCJ6Lmlzby50aW1lKClcIixcbiAgICBpc29EYXRldGltZTogXCJ6Lmlzby5kYXRldGltZSgpXCIsXG4gICAgaXNvRHVyYXRpb246IFwiei5pc28uZHVyYXRpb24oKVwiLFxuICB9O1xuXG4gIC8vIGhhc2gg7Y+s66e37J2AIHouaGFzaChcImFsZ29yaXRobVwiKSDtmJXtg5xcbiAgY29uc3QgaGFzaEZvcm1hdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgaGFzaE1kNTogJ3ouaGFzaChcIm1kNVwiKScsXG4gICAgaGFzaFNoYTE6ICd6Lmhhc2goXCJzaGExXCIpJyxcbiAgICBoYXNoU2hhMjU2OiAnei5oYXNoKFwic2hhMjU2XCIpJyxcbiAgICBoYXNoU2hhMzg0OiAnei5oYXNoKFwic2hhMzg0XCIpJyxcbiAgICBoYXNoU2hhNTEyOiAnei5oYXNoKFwic2hhNTEyXCIpJyxcbiAgfTtcblxuICBpZiAoZm9ybWF0IGluIGlzb0Zvcm1hdHMpIHtcbiAgICByZXR1cm4gaXNvRm9ybWF0c1tmb3JtYXRdO1xuICB9XG5cbiAgaWYgKGZvcm1hdCBpbiBoYXNoRm9ybWF0cykge1xuICAgIHJldHVybiBoYXNoRm9ybWF0c1tmb3JtYXRdO1xuICB9XG5cbiAgLy8g6riw67O4IO2PrOunt+ydgCB6Lnh4eCgpIO2Yle2DnCAoWm9kIDQpXG4gIHJldHVybiBgei4ke2Zvcm1hdH0oKWA7XG59XG5cbi8qKlxuICogem9kRm9ybWF07J2EIFpvZCA0IO2DgOyeheycvOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBab2QgNOyXkOyEnOuKlCB6LmVtYWlsKCksIHoudXVpZCgpIOuTsSDrj4Xrpr3soIHsnbgg7ZWo7IiYIO2Yle2DnOulvCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHpvZEZvcm1hdFRvVHlwZShmb3JtYXQ6IFpvZFN0cmluZ0Zvcm1hdCk6IHouWm9kVHlwZSB7XG4gIC8vIElTTyDtj6zrp7fsnYAgei5pc28ueHh4KCkg7ZiV7YOcXG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSBcImlzb0RhdGVcIjpcbiAgICAgIHJldHVybiB6Lmlzby5kYXRlKCk7XG4gICAgY2FzZSBcImlzb1RpbWVcIjpcbiAgICAgIHJldHVybiB6Lmlzby50aW1lKCk7XG4gICAgY2FzZSBcImlzb0RhdGV0aW1lXCI6XG4gICAgICByZXR1cm4gei5pc28uZGF0ZXRpbWUoKTtcbiAgICBjYXNlIFwiaXNvRHVyYXRpb25cIjpcbiAgICAgIHJldHVybiB6Lmlzby5kdXJhdGlvbigpO1xuICAgIC8vIGhhc2gg7Y+s66e37J2AIHouaGFzaChcImFsZ29yaXRobVwiKSDtmJXtg5xcbiAgICBjYXNlIFwiaGFzaE1kNVwiOlxuICAgICAgcmV0dXJuIHouaGFzaChcIm1kNVwiKTtcbiAgICBjYXNlIFwiaGFzaFNoYTFcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGExXCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhMjU2XCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwic2hhMjU2XCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhMzg0XCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwic2hhMzg0XCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhNTEyXCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwic2hhNTEyXCIpO1xuICAgIC8vIOq4sOuzuCDtj6zrp7fsnYAgei54eHgoKSDtmJXtg5wgKFpvZCA0KVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gKHogYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB6LlpvZFR5cGU+KVtmb3JtYXRdKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIElE66Gc67aA7YSwIOuPmeyggeycvOuhnCBab2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqIOuCtOyepSDtg4DsnoUoQlVJTFRfSU5fVFlQRV9JRFMp7J2AIOuwlOuhnCDrsJjtmZjtlZjqs6AsXG4gKiDqt7gg7Jm464qUIGRpc3Qg65SU66CJ7Yag66as7JeQ7IScIEVTTeycvOuhnCBpbXBvcnTtlZjsl6wg6rCA7KC47Ji164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Wm9kVHlwZUJ5SWQoem9kVHlwZUlkOiBzdHJpbmcpOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICAvLyDrgrTsnqUg7YOA7J6FIOyymOumrFxuICBpZiAoKEJVSUxUX0lOX1RZUEVfSURTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh6b2RUeXBlSWQpKSB7XG4gICAgY29uc3QgYnVpbHRJblR5cGUgPSBCVUlMVF9JTl9UWVBFU1t6b2RUeXBlSWQgYXMga2V5b2YgdHlwZW9mIEJVSUxUX0lOX1RZUEVTXTtcbiAgICBpZiAoIWJ1aWx0SW5UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOuCtOyepSDtg4DsnoUgJHt6b2RUeXBlSWR97J2YIOyKpO2CpOuniOqwgCDsoJXsnZjrkJjsp4Ag7JWK7JWY7Iq164uI64ukYCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsdEluVHlwZS5zY2hlbWEuZGVzY3JpYmUoem9kVHlwZUlkKTtcbiAgfVxuXG4gIC8vIO2UhOuhnOygne2KuOyXkOyEnCDsoJXsnZjtlZwg7YOA7J6FIOuPmeyggSDroZzrk5xcbiAgY29uc3QgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aCh6b2RUeXBlSWQpO1xuICBjb25zdCBtb2R1bGVBYnNQYXRoID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChgZGlzdC9hcHBsaWNhdGlvbi8ke21vZHVsZVBhdGh9LmpzYCksXG4gICk7XG4gIGNvbnN0IGltcG9ydFVybCA9IGNyZWF0ZUltcG9ydFVybChtb2R1bGVBYnNQYXRoKTtcbiAgY29uc3QgaW1wb3J0ZWQgPSBhd2FpdCBpbXBvcnQoaW1wb3J0VXJsKTtcblxuICBpZiAoIWltcG9ydGVkW3pvZFR5cGVJZF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgem9kVHlwZUlkICR7em9kVHlwZUlkfWApO1xuICB9XG4gIHJldHVybiBpbXBvcnRlZFt6b2RUeXBlSWRdLmRlc2NyaWJlKHpvZFR5cGVJZCk7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSBwcm9w7J2YIO2DgOyeheyXkCDrlLDrnbwg7KCB7KCI7ZWcIFpvZCB2YWxpZGF0b3Lrpbwg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvcFRvWm9kVHlwZShwcm9wOiBFbnRpdHlQcm9wKTogUHJvbWlzZTx6LlpvZFR5cGVBbnk+IHtcbiAgbGV0IHpvZFR5cGU6IHouWm9kVHlwZUFueSA9IHoudW5rbm93bigpO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICB9IGVsc2UgaWYgKGlzSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJpZ2ludCgpO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJpZ2ludCgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNFbnVtU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc0VudW1BcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gKGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzU3RyaW5nU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIGlmIChwcm9wLnpvZEZvcm1hdCkge1xuICAgICAgem9kVHlwZSA9IHpvZEZvcm1hdFRvVHlwZShwcm9wLnpvZEZvcm1hdCk7XG4gICAgICBpZiAocHJvcC5sZW5ndGggJiYgXCJtYXhcIiBpbiB6b2RUeXBlKSB7XG4gICAgICAgIHpvZFR5cGUgPSAoem9kVHlwZSBhcyB6LlpvZFN0cmluZykubWF4KHByb3AubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdBcnJheVByb3AocHJvcCkpIHtcbiAgICBsZXQgZWxlbWVudFR5cGU6IHouWm9kVHlwZTtcbiAgICBpZiAocHJvcC56b2RGb3JtYXQpIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gem9kRm9ybWF0VG9UeXBlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCAmJiBcIm1heFwiIGluIGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGVsZW1lbnRUeXBlID0gKGVsZW1lbnRUeXBlIGFzIHouWm9kU3RyaW5nKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gei5zdHJpbmcoKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50VHlwZSA9IHouc3RyaW5nKCk7XG4gICAgfVxuICAgIHpvZFR5cGUgPSBlbGVtZW50VHlwZS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouc3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouc3RyaW5nKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJvb2xlYW4oKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzRGF0ZVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouZGF0ZSgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNVdWlkU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei51dWlkKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0pzb25Qcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzU2VhcmNoVGV4dFByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5hcnJheSh6Lm51bWJlcigpKTtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvckFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmFycmF5KHouYXJyYXkoei5udW1iZXIoKSkpO1xuICB9IGVsc2UgaWYgKGlzVmlydHVhbFByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHwgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSkge1xuICAgICAgLy8gRksg7YOA7J6F7J2EIOywuOyhsCDsl5Tti7Dti7AgUEsg7YOA7J6F7JeQIOuUsOudvCDqsrDsoJVcbiAgICAgIGNvbnN0IHJlbEVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICBjb25zdCBwa1R5cGUgPSByZWxFbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgICBpZiAocGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIpIHtcbiAgICAgICAgem9kVHlwZSA9IHouc3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB6b2RUeXBlID0gei5udW1iZXIoKS5pbnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBwcm9w7J2EIHpvZFR5cGXsnLzroZwg67OA7ZmY7ZWY64qU642wIOyLpO2MqCAke3Byb3B9fWApO1xuICB9XG5cbiAgaWYgKChwcm9wIGFzIHsgdW5zaWduZWQ/OiBib29sZWFuIH0pLnVuc2lnbmVkKSB7XG4gICAgem9kVHlwZSA9ICh6b2RUeXBlIGFzIHouWm9kTnVtYmVyKS5ub25uZWdhdGl2ZSgpO1xuICB9XG4gIGlmIChwcm9wLm51bGxhYmxlKSB7XG4gICAgem9kVHlwZSA9IHpvZFR5cGUubnVsbGFibGUoKTtcbiAgfVxuXG4gIHJldHVybiB6b2RUeXBlO1xufVxuXG4vKipcbiAqIEVudGl0eVByb3DsnYQgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlRGVmKHByb3A6IEVudGl0eVByb3AsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgbGV0IHN0bXQ6IHN0cmluZztcbiAgaWYgKGlzSW50ZWdlclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKWA7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouaW50KCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5iaWdpbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc0VudW1BcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfS5hcnJheSgpYDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICBjb25zdCBiYXNlID0gem9kRm9ybWF0VG9Db2RlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtiYXNlfS5tYXgoJHtwcm9wLmxlbmd0aH0pYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke2Jhc2V9YDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5tYXgoJHtwcm9wLmxlbmd0aH0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKClgO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZ0FycmF5UHJvcChwcm9wKSkge1xuICAgIGlmIChwcm9wLnpvZEZvcm1hdCkge1xuICAgICAgY29uc3QgYmFzZSA9IHpvZEZvcm1hdFRvQ29kZShwcm9wLnpvZEZvcm1hdCk7XG4gICAgICBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX0ubWF4KCR7cHJvcC5sZW5ndGh9KS5hcnJheSgpYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke2Jhc2V9LmFycmF5KClgO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSkuYXJyYXkoKWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLmFycmF5KClgO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc051bWJlclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5udW1iZXIoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5udW1iZXIoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKClgO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY0FycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRGF0ZVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5kYXRlKClgO1xuICB9IGVsc2UgaWYgKGlzRGF0ZUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmRhdGUoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYm9vbGVhbigpYDtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5BcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5ib29sZWFuKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNVdWlkU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnV1aWQoKWA7XG4gIH0gZWxzZSBpZiAoaXNVdWlkQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoudXVpZCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzSnNvblByb3AocHJvcCkpIHtcbiAgICAvLyDrgrTsnqUg7YOA7J6F7J24IOqyveyasCDsiqTtgqTrp4gg7J2066aE7Jy866GcIOuzgO2ZmFxuICAgIGlmICgoQlVJTFRfSU5fVFlQRV9JRFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHByb3AuaWQpKSB7XG4gICAgICBjb25zdCBzY2hlbWFOYW1lID0gcHJvcC5pZCA9PT0gXCJTb25hbXVGaWxlXCIgPyBcIlNvbmFtdUZpbGVTY2hlbWFcIiA6IFwiU29uYW11RmlsZUFycmF5U2NoZW1hXCI7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtzY2hlbWFOYW1lfWA7XG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2goc2NoZW1hTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpYDtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6Lm51bWJlcigpKWA7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6LmFycmF5KHoubnVtYmVyKCkpKWA7XG4gIH0gZWxzZSBpZiAoaXNUc1ZlY3RvclByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHwgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSkge1xuICAgICAgLy8gRksgWm9kIO2DgOyeheydhCDssLjsobAg7JeU7Yuw7YuwIFBLIO2DgOyeheyXkCDrlLDrnbwg6rKw7KCVXG4gICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuICAgICAgY29uc3QgcGtUeXBlID0gcmVsRW50aXR5LmdldFBrVHlwZSgpO1xuICAgICAgaWYgKHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9X2lkOiB6LnN0cmluZygpYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9X2lkOiB6LmludCgpYDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8g6re47Jm4IHJlbGF0aW9uIOy8gOydtOyKpCDsoJzsmbhcbiAgICAgIHJldHVybiBgLy8gJHtwcm9wLm5hbWV9OiAke3Byb3AucmVsYXRpb25UeXBlfSAke3Byb3Aud2l0aH1gO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCIvLyB1bmFibGUgdG8gcmVzb2x2ZVwiO1xuICB9XG5cbiAgaWYgKChwcm9wIGFzIHsgdW5zaWduZWQ/OiBib29sZWFuIH0pLnVuc2lnbmVkKSB7XG4gICAgc3RtdCArPSBcIi5ub25uZWdhdGl2ZSgpXCI7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICBzdG10ICs9IFwiLm51bGxhYmxlKClcIjtcbiAgfVxuXG4gIC8vIG51bWVyaWMg7YOA7J6F7J2YIOqyveyasCBudWxsYWJsZSDsnbTtm4Tsl5AgbWV0YSDstpTqsIAgKOuplO2DgOuNsOydtO2EsOqwgCDstZzsg4HsnIQg66CI67Ko7JeQIOyeiOyWtOyVvCDtlagpXG4gIGlmIChpc051bWVyaWNTaW5nbGVQcm9wKHByb3ApIHx8IGlzTnVtZXJpY0FycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgKz0gJy5tZXRhKHsgU29uYW11UHJvcFR5cGU6IFwibnVtZXJpY1wiIH0pJztcbiAgfVxuXG4gIHJldHVybiBgJHtzdG10fSxgO1xufVxuXG4vKipcbiAqIEVudGl0eVByb3BOb2Rl66W8IFpvZCDtg4DsnoUg7KCV7J2YIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICogcGxhaW4sIGFycmF5LCBvYmplY3Qg64W465OcIO2DgOyeheydhCDsnqzqt4DsoIHsnLzroZwg7LKY66as7ZWY7JesIOykkeyyqSDqtazsobDrpbwg7KeA7JuQ7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGU6IEVudGl0eVByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJwbGFpblwiKSB7XG4gICAgcmV0dXJuIHByb3BUb1pvZFR5cGVEZWYocHJvcE5vZGUucHJvcCwgaW5qZWN0SW1wb3J0S2V5cyk7XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgIHJldHVybiBbXG4gICAgICBwcm9wTm9kZS5wcm9wID8gYCR7cHJvcE5vZGUucHJvcC5uYW1lfTogYCA6IFwiXCIsXG4gICAgICBcInouYXJyYXkoei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIFwifSkpLFwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBbXG4gICAgICBwcm9wTm9kZS5wcm9wID8gYCR7cHJvcE5vZGUucHJvcC5uYW1lfTogYCA6IFwiXCIsXG4gICAgICBcInoub2JqZWN0KHtcIixcbiAgICAgIHByb3BOb2RlLmNoaWxkcmVuXG4gICAgICAgIC5tYXAoKGNoaWxkUHJvcE5vZGUpID0+IHByb3BOb2RlVG9ab2RUeXBlRGVmKGNoaWxkUHJvcE5vZGUsIGluamVjdEltcG9ydEtleXMpKVxuICAgICAgICAuam9pbihcIlxcblwiKSxcbiAgICAgIFwiXCIsXG4gICAgICBgfSkke3Byb3BOb2RlLnByb3A/Lm51bGxhYmxlID8gXCIubnVsbGFibGUoKVwiIDogXCJcIn0sYCxcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1RzVHlwZURlZih6dDogei5ab2RUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICBjYXNlIFwibnVsbFwiOlxuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICBjYXNlIFwibmV2ZXJcIjpcbiAgICAgIHJldHVybiB6dC5kZWYudHlwZTtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZE51bGxhYmxlKS5kZWYuaW5uZXJUeXBlKX0gfCBudWxsYDtcbiAgICBjYXNlIFwiZGVmYXVsdFwiOlxuICAgICAgcmV0dXJuIHpvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kRGVmYXVsdCkuZGVmLmlubmVyVHlwZSk7XG4gICAgY2FzZSBcInJlY29yZFwiOiB7XG4gICAgICBjb25zdCByZWNvcmRUeXBlID0genQgYXMgQW55Wm9kUmVjb3JkO1xuICAgICAgcmV0dXJuIGB7IFsga2V5OiAke3pvZFR5cGVUb1RzVHlwZURlZihyZWNvcmRUeXBlLmRlZi5rZXlUeXBlKX0gXTogJHt6b2RUeXBlVG9Uc1R5cGVEZWYocmVjb3JkVHlwZS5kZWYudmFsdWVUeXBlKX19YDtcbiAgICB9XG4gICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKCh6dCBhcyB6LlpvZExpdGVyYWwpLnZhbHVlcylcbiAgICAgICAgLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYG51bGxgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYHVuZGVmaW5lZGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiIHwgXCIpO1xuICAgIGNhc2UgXCJ1bmlvblwiOlxuICAgICAgcmV0dXJuIGAkeyh6dCBhcyBBbnlab2RVbmlvbikub3B0aW9uc1xuICAgICAgICAubWFwKChvcHRpb24pID0+IHpvZFR5cGVUb1RzVHlwZURlZihvcHRpb24pKVxuICAgICAgICAuam9pbihcIiB8IFwiKX1gO1xuICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICByZXR1cm4gYCR7KHp0IGFzIHouWm9kRW51bSkub3B0aW9ucy5tYXAoKHZhbCkgPT4gYFwiJHt2YWx9XCJgKS5qb2luKFwiIHwgXCIpfWA7XG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2RBcnJheSkuZWxlbWVudCl9W11gO1xuICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgY29uc3Qgc2hhcGUgPSAoenQgYXMgQW55Wm9kT2JqZWN0KS5zaGFwZTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwie1wiLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyhzaGFwZSkubWFwKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoc2hhcGVba2V5XS5kZWYudHlwZSA9PT0gXCJvcHRpb25hbFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fT86ICR7em9kVHlwZVRvVHNUeXBlRGVmKHNoYXBlW2tleV0uZGVmLmlubmVyVHlwZSl9LGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiAke3pvZFR5cGVUb1RzVHlwZURlZihzaGFwZVtrZXldKX0sYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBcIn1cIixcbiAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgY2FzZSBcIm9wdGlvbmFsXCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2RPcHRpb25hbCkuZGVmLmlubmVyVHlwZSl9IHwgdW5kZWZpbmVkYDtcbiAgICBjYXNlIFwidGVtcGxhdGVfbGl0ZXJhbFwiOiB7XG4gICAgICBjb25zdCBkZWYgPSAoenQgYXMgQW55Wm9kVGVtcGxhdGVMaXRlcmFsKS5kZWY7XG5cbiAgICAgIC8vIOu5iCB0ZW1wbGF0ZSBsaXRlcmFs7J2AIHN0cmluZ+ycvOuhnCDtj7TrsLFcbiAgICAgIGlmICghZGVmLnBhcnRzIHx8IGRlZi5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIOqwgSBwYXJ066W8IFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZhcbiAgICAgIGNvbnN0IHBhcnRzID0gZGVmLnBhcnRzLm1hcCgocGFydDogdW5rbm93bikgPT4ge1xuICAgICAgICAvLyDrpqzthLDrn7Qg6rCSIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgbnVsbCwgdW5kZWZpbmVkKVxuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7cGFydH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWm9kVHlwZSAtIOyerOq3gOyggeycvOuhnCDrs4DtmZhcbiAgICAgICAgaWYgKHBhcnQgJiYgdHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIgJiYgKHBhcnQgYXMgei5ab2RUeXBlKS5fem9kKSB7XG4gICAgICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVHlwZVRvVHNUeXBlRGVmKHBhcnQgYXMgei5ab2RUeXBlKTtcbiAgICAgICAgICByZXR1cm4gYCRcXHske2lubmVyVHlwZX19YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIO2PtOuwsVxuICAgICAgICByZXR1cm4gYFxcJHtzdHJpbmd9YDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYFxcYCR7cGFydHMuam9pbihcIlwiKX1cXGBgO1xuICAgIH1cbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIFwiRmlsZVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyymOumrOuQmOyngCDslYrsnYAgWm9kVHlwZSAke3p0LmRlZi50eXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogWm9kIO2DgOyehSDsnbjsiqTthLTsiqTrpbwg7ZW064u57ZWY64qUIFpvZCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1pvZENvZGUoenQ6IHouWm9kVHlwZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoenQuZGVmLnR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gXCJ6LnN0cmluZygpXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIFwiei5udW1iZXIoKVwiO1xuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgIHJldHVybiBcInouYmlnaW50KClcIjtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIFwiei5ib29sZWFuKClcIjtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiei5kYXRlKClcIjtcbiAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgcmV0dXJuIFwiei5udWxsKClcIjtcbiAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICByZXR1cm4gXCJ6LnVuZGVmaW5lZCgpXCI7XG4gICAgY2FzZSBcImFueVwiOlxuICAgICAgcmV0dXJuIFwiei5hbnkoKVwiO1xuICAgIGNhc2UgXCJ1bmtub3duXCI6XG4gICAgICByZXR1cm4gXCJ6LnVua25vd24oKVwiO1xuICAgIGNhc2UgXCJuZXZlclwiOlxuICAgICAgcmV0dXJuIFwiei5uZXZlcigpXCI7XG4gICAgY2FzZSBcIm51bGxhYmxlXCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgQW55Wm9kTnVsbGFibGUpLmRlZi5pbm5lclR5cGUpfS5udWxsYWJsZSgpYDtcbiAgICBjYXNlIFwiZGVmYXVsdFwiOiB7XG4gICAgICBjb25zdCB6RGVmYXVsdERlZiA9ICh6dCBhcyBBbnlab2REZWZhdWx0KS5kZWY7XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvWm9kQ29kZSh6RGVmYXVsdERlZi5pbm5lclR5cGUpfS5kZWZhdWx0KCR7ekRlZmF1bHREZWYuZGVmYXVsdFZhbHVlfSlgO1xuICAgIH1cbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHpSZWNvcmREZWYgPSAoenQgYXMgQW55Wm9kUmVjb3JkKS5kZWY7XG4gICAgICByZXR1cm4gYHoucmVjb3JkKCR7em9kVHlwZVRvWm9kQ29kZSh6UmVjb3JkRGVmLmtleVR5cGUpfSwgJHt6b2RUeXBlVG9ab2RDb2RlKFxuICAgICAgICB6UmVjb3JkRGVmLnZhbHVlVHlwZSxcbiAgICAgICl9KWA7XG4gICAgfVxuICAgIGNhc2UgXCJsaXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbSgoenQgYXMgei5ab2RMaXRlcmFsPHN0cmluZyB8IG51bWJlcj4pLnZhbHVlcykubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGBcIiR7dmFsdWV9XCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGBudWxsYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGB1bmRlZmluZWRgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYHoubGl0ZXJhbCgke2l0ZW1zWzBdfSlgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGB6LmxpdGVyYWwoWyR7aXRlbXMuam9pbihcIiwgXCIpfV0pYDtcbiAgICB9XG4gICAgY2FzZSBcInVuaW9uXCI6XG4gICAgICByZXR1cm4gYHoudW5pb24oWyR7KHp0IGFzIEFueVpvZFVuaW9uKS5kZWYub3B0aW9uc1xuICAgICAgICAubWFwKChvcHRpb246IHouWm9kVHlwZSkgPT4gem9kVHlwZVRvWm9kQ29kZShvcHRpb24pKVxuICAgICAgICAuam9pbihcIixcIil9XSlgO1xuICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAvLyBOT1RFOiB6LmVudW0oW1wiQVwiLCBcIkJcIl0p64+EIHouZW51bSh7IEE6IFwiQVwiLCBCOiBcIkJcIiB9KeuhnCDsspjrpqzrkKguXG4gICAgICByZXR1cm4gYHouZW51bSh7JHtPYmplY3QuZW50cmllcygoenQgYXMgei5ab2RFbnVtKS5kZWYuZW50cmllcylcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsXSkgPT4gKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgPyBgJHtrZXl9OiBcIiR7dmFsfVwiYCA6IGAke2tleX06ICR7dmFsfWApKVxuICAgICAgICAuam9pbihcIiwgXCIpfX0pYDtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBgei5hcnJheSgke3pvZFR5cGVUb1pvZENvZGUoKHp0IGFzIHouWm9kQXJyYXk8ei5ab2RUeXBlPikuZGVmLmVsZW1lbnQpfSlgO1xuICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgY29uc3Qgc2hhcGUgPSAoenQgYXMgQW55Wm9kT2JqZWN0KS5zaGFwZTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyhzaGFwZSkubWFwKChrZXkpID0+IGAke2tleX06ICR7em9kVHlwZVRvWm9kQ29kZShzaGFwZVtrZXldKX0sYCksXG4gICAgICAgIFwifSlcIixcbiAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgY2FzZSBcIm9wdGlvbmFsXCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlKX0ub3B0aW9uYWwoKWA7XG4gICAgY2FzZSBcImZpbGVcIjpcbiAgICAgIHJldHVybiBgei5maWxlKClgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9ICh6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWwpLmRlZjtcblxuICAgICAgLy8g67mIIHRlbXBsYXRlIGxpdGVyYWxcbiAgICAgIGlmICghZGVmLnBhcnRzIHx8IGRlZi5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFwiei50ZW1wbGF0ZUxpdGVyYWwoW10pXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIOqwgSBwYXJ066W8IFpvZCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmFxuICAgICAgY29uc3QgcGFydHMgPSBkZWYucGFydHMubWFwKChwYXJ0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIC8vIOusuOyekOyXtCDrpqzthLDrn7RcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGBcIiR7cGFydH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gWm9kVHlwZSAtIOyerOq3gOyggeycvOuhnCDrs4DtmZhcbiAgICAgICAgaWYgKHBhcnQgJiYgdHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIgJiYgKHBhcnQgYXMgei5ab2RUeXBlKS5fem9kKSB7XG4gICAgICAgICAgcmV0dXJuIHpvZFR5cGVUb1pvZENvZGUocGFydCBhcyB6LlpvZFR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYHoudGVtcGxhdGVMaXRlcmFsKFske3BhcnRzLmpvaW4oXCIsIFwiKX1dKWA7XG4gICAgfVxuICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgY29uc3QgekludGVyc2VjdGlvbkRlZiA9ICh6dCBhcyB6LlpvZEludGVyc2VjdGlvbjx6LlpvZFR5cGUsIHouWm9kVHlwZT4pLmRlZjtcbiAgICAgIHJldHVybiBgei5pbnRlcnNlY3Rpb24oJHt6b2RUeXBlVG9ab2RDb2RlKHpJbnRlcnNlY3Rpb25EZWYubGVmdCl9LCAke3pvZFR5cGVUb1pvZENvZGUoekludGVyc2VjdGlvbkRlZi5yaWdodCl9KWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyymOumrOuQmOyngCDslYrsnYAgWm9kVHlwZSAke3p0LmRlZi50eXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogWm9kIO2DgOyeheydhCBVSSDroIzrjZTrp4Hsl5Ag7IKs7Jqp7ZWgIOyImCDsnojripQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsnqzqt4DsoIHsnLzroZwg7KSR7LKp65CcIO2DgOyeheuTpOydhCDsspjrpqztlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKFxuICB6b2RUeXBlOiB6LlpvZFR5cGVBbnksXG4gIGJhc2VLZXk6IHN0cmluZyA9IFwicm9vdFwiLFxuKTogUmVuZGVyaW5nTm9kZSB7XG4gIGNvbnN0IGRlZiA9IHtcbiAgICBuYW1lOiBiYXNlS2V5LFxuICAgIGxhYmVsOiBpbmZsZWN0aW9uLmNhbWVsaXplKGJhc2VLZXksIGZhbHNlKSxcbiAgICB6b2RUeXBlLFxuICB9O1xuXG4gIC8qKlxuICAgKiDsvIDsnbTsiqQg7LKY66asIOyInOyEnFxuICAgKlxuICAgKiAxLiDtirnsiJgg7LyA7J207IqkIChkZXNjcmlwdGlvbiDquLDrsJgpXG4gICAqICAgIC0gU29uYW11RmlsZS9Tb25hbXVGaWxlW10gOiB6Lm9iamVjdC96LmFycmF57J207KeA66eMIO2MjOydvCDsl4XroZzrk5zsmqkg64K07J6lIO2DgOyehVxuICAgKlxuICAgKiAyLiDsnbzrsJgg7LyA7J207IqkIChpbnN0YW5jZW9mIOq4sOuwmClcbiAgICogICAgLSB6LlpvZE9iamVjdCA6IOydvOuwmCDqsJ3ssrRcbiAgICogICAgLSB6LlpvZEFycmF5IDog7J2867CYIOuwsOyXtFxuICAgKiAgICAgIC0gdmVjdG9yIDogei5hcnJheSh6Lm51bWJlcinsnbTsp4Drp4wg64Sk7J2067CNIOq4sOuwmOycvOuhnCDrsqHthLAg7J6E67Kg65SpXG4gICAqICAgICAgLSDsnbzrsJgg67Cw7Je0IDog6re4IOyZuFxuICAgKiAgICAtIHouWm9kVW5pb24sIHouWm9kT3B0aW9uYWwsIHouWm9kTnVsbGFibGUgOiDsnKDti7jrpqzti7Ag7YOA7J6FXG4gICAqICAgIC0g6riw7YOAIDogcmVzb2x2ZVJlbmRlclR5cGUoKeycvOuhnCDsspjrpqxcbiAgICovXG5cbiAgLy8g7Yq57IiYIOy8gOydtOyKpDogU29uYW11RmlsZVtdIO2DgOyehSDqsJDsp4BcbiAgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU29uYW11RmlsZVtdXCIpIHtcbiAgICByZXR1cm4geyAuLi5kZWYsIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlLWFycmF5XCIgfTtcbiAgfVxuXG4gIC8vIO2KueyImCDsvIDsnbTsiqQ6IFNvbmFtdUZpbGUg64uo7J28IO2DgOyehSDqsJDsp4BcbiAgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU29uYW11RmlsZVwiKSB7XG4gICAgcmV0dXJuIHsgLi4uZGVmLCByZW5kZXJUeXBlOiBcImpzb24tc29uYW11ZmlsZVwiIH07XG4gIH1cblxuICAvLyDsnbzrsJgg7LyA7J207IqkOiBab2RPYmplY3Qg7LK07YGsXG4gIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICBjb25zdCBjb2x1bW5LZXlzID0gT2JqZWN0LmtleXMoem9kVHlwZS5zaGFwZSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjb2x1bW5LZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlLnNoYXBlW2tleV07XG4gICAgICByZXR1cm4gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGtleSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgY29uc3QgaW5uZXJUeXBlID0gKHpvZFR5cGUgYXMgei5ab2RBcnJheTx6LlpvZFR5cGVBbnk+KS5kZWYuZWxlbWVudDtcbiAgICAvLyB2ZWN0b3Ig7YOA7J6FIO2MkOuzhDogbnVtYmVyIOuwsOyXtOydtOuptOyEnCBlbWJlZGRpbmcsIHZlY3RvciDrk7HsnZgg7J2066aE7J2EIOqwgOynhCDqsr3smrBcbiAgICBpZiAoXG4gICAgICBpbm5lclR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlciAmJlxuICAgICAgKGJhc2VLZXkuaW5jbHVkZXMoXCJlbWJlZGRpbmdcIikgfHwgYmFzZUtleS5pbmNsdWRlcyhcInZlY3RvclwiKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZixcbiAgICAgICAgcmVuZGVyVHlwZTogXCJ2ZWN0b3JcIixcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWYsXG4gICAgICByZW5kZXJUeXBlOiBcImFycmF5XCIsXG4gICAgICBlbGVtZW50OiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgfTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmlvbikge1xuICAgIGNvbnN0IG9wdGlvbk5vZGVzID0gKHpvZFR5cGUgYXMgei5ab2RVbmlvbjx6LlpvZFR5cGVbXT4pLmRlZi5vcHRpb25zLm1hcCgob3B0KSA9PlxuICAgICAgem9kVHlwZVRvUmVuZGVyaW5nTm9kZShvcHQsIGJhc2VLZXkpLFxuICAgICk7XG4gICAgLy8gVE9ETzogWm9kVW5pb27snbQg65Ok7Ja07J6I64qUIOqyveyasCDtlbjrk6Trp4FcbiAgICByZXR1cm4gb3B0aW9uTm9kZXNbMF07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT3B0aW9uYWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uem9kVHlwZVRvUmVuZGVyaW5nTm9kZSgoem9kVHlwZSBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUsIGJhc2VLZXkpLFxuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdWxsYWJsZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi56b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCh6b2RUeXBlIGFzIHouWm9kTnVsbGFibGU8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWYsXG4gICAgICByZW5kZXJUeXBlOiByZXNvbHZlUmVuZGVyVHlwZShiYXNlS2V5LCB6b2RUeXBlKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogWm9kIO2DgOyeheqzvCDtgqQg7J2066aE7Jy866Gc67aA7YSwIOyggeygiO2VnCBSZW5kZXJUeXBl7J2EIOqysOygle2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlbmRlclR5cGUoa2V5OiBzdHJpbmcsIHpvZFR5cGU6IHouWm9kVHlwZUFueSk6IFJlbmRlcmluZ05vZGVbXCJyZW5kZXJUeXBlXCJdIHtcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZERhdGUpIHtcbiAgICByZXR1cm4gXCJkYXRldGltZVwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LmNvcmUuJFpvZFN0cmluZykge1xuICAgIC8vIE5PVEU6IHouWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VmOuptCB6LnVybCgpLCB6LmVtYWlsKCkg65Ox7J2YIO2DgOyeheyXkOyEnCDrrLjsoJzqsIAg7IOd6riw66+A66GcIHouY29yZS4kWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VqFxuICAgIC8vIEZJWE1FOiBlbWFpbOydtOuCmCB1cmwg7YOA7J6FIOuTseyXkCDrjIDtlZwg7LKY66as6rCAIO2VhOyalO2VqFxuICAgIGlmICh6b2RUeXBlLmRlc2NyaXB0aW9uID09PSBcIlNRTERhdGVUaW1lU3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1kYXRldGltZVwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiZGF0ZVwiKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGVcIjtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctaWRcIjtcbiAgICB9IGVsc2UgaWYgKGtleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWZrX2lkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICBpZiAoa2V5ID09PSBcImlkXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1pZFwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiX2lkXCIpKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItZmtfaWRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLXBsYWluXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEJvb2xlYW4pIHtcbiAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgIHJldHVybiBcImVudW1zXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kUmVjb3JkKSB7XG4gICAgcmV0dXJuIFwicmVjb3JkXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQW55IHx8IHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVua25vd24pIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmlvbikge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZExpdGVyYWwpIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RUZW1wbGF0ZUxpdGVyYWwpIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlLmRlZi50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7IuxIOu2iOqwgCAke2tleX0gJHt6b2RUeXBlLmRlZi50eXBlfWApO1xuICB9XG59XG4iXSwibmFtZXMiOlsiaW5mbGVjdGlvbiIsInBhdGgiLCJ6IiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIkJVSUxUX0lOX1RZUEVfSURTIiwiaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AiLCJpc0JpZ0ludGVnZXJBcnJheVByb3AiLCJpc0JpZ0ludGVnZXJTaW5nbGVQcm9wIiwiaXNCb29sZWFuQXJyYXlQcm9wIiwiaXNCb29sZWFuU2luZ2xlUHJvcCIsImlzRGF0ZUFycmF5UHJvcCIsImlzRGF0ZVNpbmdsZVByb3AiLCJpc0VudW1BcnJheVByb3AiLCJpc0VudW1TaW5nbGVQcm9wIiwiaXNJbnRlZ2VyQXJyYXlQcm9wIiwiaXNJbnRlZ2VyU2luZ2xlUHJvcCIsImlzSnNvblByb3AiLCJpc051bWJlckFycmF5UHJvcCIsImlzTnVtYmVyU2luZ2xlUHJvcCIsImlzTnVtZXJpY0FycmF5UHJvcCIsImlzTnVtZXJpY1NpbmdsZVByb3AiLCJpc09uZVRvT25lUmVsYXRpb25Qcm9wIiwiaXNSZWxhdGlvblByb3AiLCJpc1NlYXJjaFRleHRQcm9wIiwiaXNTdHJpbmdBcnJheVByb3AiLCJpc1N0cmluZ1NpbmdsZVByb3AiLCJpc1RzVmVjdG9yUHJvcCIsImlzVXVpZEFycmF5UHJvcCIsImlzVXVpZFNpbmdsZVByb3AiLCJpc1ZlY3RvckFycmF5UHJvcCIsImlzVmVjdG9yU2luZ2xlUHJvcCIsImlzVmlydHVhbFByb3AiLCJTb25hbXVGaWxlQXJyYXlTY2hlbWEiLCJTb25hbXVGaWxlU2NoZW1hIiwiY3JlYXRlSW1wb3J0VXJsIiwicnVudGltZVBhdGgiLCJCVUlMVF9JTl9UWVBFUyIsIlNvbmFtdUZpbGUiLCJzY2hlbWEiLCJyZW5kZXJUeXBlIiwic2NoZW1hTmFtZSIsInpvZEZvcm1hdFRvQ29kZSIsImZvcm1hdCIsImlzb0Zvcm1hdHMiLCJpc29EYXRlIiwiaXNvVGltZSIsImlzb0RhdGV0aW1lIiwiaXNvRHVyYXRpb24iLCJoYXNoRm9ybWF0cyIsImhhc2hNZDUiLCJoYXNoU2hhMSIsImhhc2hTaGEyNTYiLCJoYXNoU2hhMzg0IiwiaGFzaFNoYTUxMiIsInpvZEZvcm1hdFRvVHlwZSIsImlzbyIsImRhdGUiLCJ0aW1lIiwiZGF0ZXRpbWUiLCJkdXJhdGlvbiIsImhhc2giLCJnZXRab2RUeXBlQnlJZCIsInpvZFR5cGVJZCIsImluY2x1ZGVzIiwiYnVpbHRJblR5cGUiLCJFcnJvciIsImRlc2NyaWJlIiwibW9kdWxlUGF0aCIsImdldE1vZHVsZVBhdGgiLCJtb2R1bGVBYnNQYXRoIiwiam9pbiIsImFwaVJvb3RQYXRoIiwiaW1wb3J0VXJsIiwiaW1wb3J0ZWQiLCJwcm9wVG9ab2RUeXBlIiwicHJvcCIsInpvZFR5cGUiLCJ1bmtub3duIiwibnVtYmVyIiwiaW50IiwiYXJyYXkiLCJiaWdpbnQiLCJpZCIsInpvZEZvcm1hdCIsImxlbmd0aCIsIm1heCIsInN0cmluZyIsImVsZW1lbnRUeXBlIiwiYm9vbGVhbiIsInV1aWQiLCJoYXNKb2luQ29sdW1uIiwicmVsRW50aXR5IiwiZ2V0Iiwid2l0aCIsInBrVHlwZSIsImdldFBrVHlwZSIsInVuc2lnbmVkIiwibm9ubmVnYXRpdmUiLCJudWxsYWJsZSIsInByb3BUb1pvZFR5cGVEZWYiLCJpbmplY3RJbXBvcnRLZXlzIiwic3RtdCIsIm5hbWUiLCJwdXNoIiwiYmFzZSIsInJlbGF0aW9uVHlwZSIsInByb3BOb2RlVG9ab2RUeXBlRGVmIiwicHJvcE5vZGUiLCJub2RlVHlwZSIsImNoaWxkcmVuIiwibWFwIiwiY2hpbGRQcm9wTm9kZSIsInpvZFR5cGVUb1RzVHlwZURlZiIsInp0IiwiZGVmIiwidHlwZSIsImlubmVyVHlwZSIsInJlY29yZFR5cGUiLCJrZXlUeXBlIiwidmFsdWVUeXBlIiwiQXJyYXkiLCJmcm9tIiwidmFsdWVzIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJvcHRpb25zIiwib3B0aW9uIiwidmFsIiwiZWxlbWVudCIsInNoYXBlIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInBhcnRzIiwicGFydCIsIl96b2QiLCJ6b2RUeXBlVG9ab2RDb2RlIiwiekRlZmF1bHREZWYiLCJkZWZhdWx0VmFsdWUiLCJ6UmVjb3JkRGVmIiwiaXRlbXMiLCJlbnRyaWVzIiwiekludGVyc2VjdGlvbkRlZiIsImxlZnQiLCJyaWdodCIsInpvZFR5cGVUb1JlbmRlcmluZ05vZGUiLCJiYXNlS2V5IiwibGFiZWwiLCJjYW1lbGl6ZSIsImRlc2NyaXB0aW9uIiwiWm9kT2JqZWN0IiwiY29sdW1uS2V5cyIsIlpvZEFycmF5IiwiWm9kTnVtYmVyIiwiWm9kVW5pb24iLCJvcHRpb25Ob2RlcyIsIm9wdCIsIlpvZE9wdGlvbmFsIiwib3B0aW9uYWwiLCJab2ROdWxsYWJsZSIsInJlc29sdmVSZW5kZXJUeXBlIiwiWm9kRGF0ZSIsImNvcmUiLCIkWm9kU3RyaW5nIiwiZW5kc1dpdGgiLCJab2RCb29sZWFuIiwiWm9kRW51bSIsIlpvZFJlY29yZCIsIlpvZEFueSIsIlpvZFVua25vd24iLCJab2RMaXRlcmFsIiwiWm9kVGVtcGxhdGVMaXRlcmFsIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JDLEdBRUQsT0FBT0EsZ0JBQWdCLGFBQWE7QUFDcEMsT0FBT0MsVUFBVSxPQUFPO0FBQ3hCLFNBQVNDLENBQUMsUUFBUSxNQUFNO0FBRXhCLFNBQVNDLE1BQU0sUUFBUSxtQkFBZ0I7QUFDdkMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUN6RCxTQUNFQyxpQkFBaUIsRUFHakJDLDBCQUEwQixFQUMxQkMscUJBQXFCLEVBQ3JCQyxzQkFBc0IsRUFDdEJDLGtCQUFrQixFQUNsQkMsbUJBQW1CLEVBQ25CQyxlQUFlLEVBQ2ZDLGdCQUFnQixFQUNoQkMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGtCQUFrQixFQUNsQkMsbUJBQW1CLEVBQ25CQyxVQUFVLEVBQ1ZDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxrQkFBa0IsRUFDbEJDLG1CQUFtQixFQUNuQkMsc0JBQXNCLEVBQ3RCQyxjQUFjLEVBQ2RDLGdCQUFnQixFQUNoQkMsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsRUFDbEJDLGNBQWMsRUFDZEMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxhQUFhLEVBRWJDLHFCQUFxQixFQUNyQkMsZ0JBQWdCLFFBRVgsb0JBQWlCO0FBQ3hCLFNBQVNDLGVBQWUsUUFBUSx3QkFBcUI7QUFDckQsU0FBU0MsV0FBVyxRQUFRLHlCQUFzQjtBQVlsRDs7Q0FFQyxHQUNELE9BQU8sTUFBTUMsaUJB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-test-routes.d.ts","sourceRoot":"","sources":["../../src/testing/dev-test-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAqJ3D,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"dev-test-routes.d.ts","sourceRoot":"","sources":["../../src/testing/dev-test-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAqJ3D,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA+Hf"}
|
|
@@ -175,10 +175,12 @@ export async function registerDevTestRoutes(server, config) {
|
|
|
175
175
|
sse.publish(key, data);
|
|
176
176
|
};
|
|
177
177
|
manager.addEventListener(listener);
|
|
178
|
-
|
|
178
|
+
const cleanup = ()=>{
|
|
179
179
|
clearInterval(heartbeatTimer);
|
|
180
180
|
manager.removeEventListener(listener);
|
|
181
|
-
}
|
|
181
|
+
};
|
|
182
|
+
request.socket.on("close", cleanup);
|
|
183
|
+
request.socket.on("error", cleanup);
|
|
182
184
|
});
|
|
183
185
|
}
|
|
184
186
|
server.post(`${prefix}/run`, async (request, reply)=>{
|
|
@@ -254,4 +256,4 @@ export async function registerDevTestRoutes(server, config) {
|
|
|
254
256
|
});
|
|
255
257
|
}
|
|
256
258
|
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi10ZXN0LXJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11RGV2UnVubmVyQ29uZmlnIH0gZnJvbSBcIi4uL2FwaS9jb25maWdcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6ZWRUcmFjZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlU1NFRmFjdG9yeSwgdHlwZSBTU0VDb25uZWN0aW9uIH0gZnJvbSBcIi4uL3N0cmVhbS9zc2VcIjtcbmltcG9ydCB0eXBlIHsgTWFuYWdlclN0YXR1cywgUnVuUmVzdWx0LCBUZXN0Q2FzZVJlc3VsdCB9IGZyb20gXCIuL2Rldi12aXRlc3QtbWFuYWdlclwiO1xuaW1wb3J0IHsgRGV2Vml0ZXN0TWFuYWdlciB9IGZyb20gXCIuL2Rldi12aXRlc3QtbWFuYWdlclwiO1xuXG5jb25zdCBTQ0hFTUFfVkVSU0lPTiA9IDE7XG5jb25zdCBIRUFSVEJFQVRfSU5URVJWQUxfTVMgPSAzMF8wMDA7XG5cbmNvbnN0IFNlcmlhbGl6ZWRUcmFjZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAga2V5OiB6LnN0cmluZygpLFxuICB2YWx1ZTogei51bmtub3duKCksXG4gIGZpbGVQYXRoOiB6LnN0cmluZygpLFxuICBsaW5lTnVtYmVyOiB6Lm51bWJlcigpLFxuICBhdDogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBUZXN0Q2FzZVJlc3VsdFNjaGVtYTogei5ab2RUeXBlPFRlc3RDYXNlUmVzdWx0PiA9IHoubGF6eSgoKSA9PlxuICB6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAga2luZDogei5lbnVtKFtcImZpbGVcIiwgXCJzdWl0ZVwiLCBcInRlc3RcIl0pLFxuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgZnVsbE5hbWU6IHouc3RyaW5nKCksXG4gICAgZmlsZTogei5zdHJpbmcoKSxcbiAgICBzdGF0ZTogei5lbnVtKFtcInBhc3NlZFwiLCBcImZhaWxlZFwiLCBcInNraXBwZWRcIiwgXCJ0b2RvXCIsIFwicnVubmluZ1wiLCBcInVua25vd25cIl0pLFxuICAgIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICBjb3VudHM6IHoub2JqZWN0KHtcbiAgICAgIHRvdGFsOiB6Lm51bWJlcigpLFxuICAgICAgcGFzc2VkOiB6Lm51bWJlcigpLFxuICAgICAgZmFpbGVkOiB6Lm51bWJlcigpLFxuICAgICAgc2tpcHBlZDogei5udW1iZXIoKSxcbiAgICB9KSxcbiAgICBlcnJvcjogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgICAgIHN0YWNrOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLm51bGxhYmxlKCksXG4gICAgdHJhY2VzOiB6LmFycmF5KFNlcmlhbGl6ZWRUcmFjZVNjaGVtYSksXG4gICAgY2hpbGRyZW46IHouYXJyYXkoVGVzdENhc2VSZXN1bHRTY2hlbWEpLFxuICB9KSxcbik7XG5cbmNvbnN0IFRlc3RFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc25hcHNob3Q6IHoub2JqZWN0KHtcbiAgICBzY2hlbWFWZXJzaW9uOiB6Lm51bWJlcigpLFxuICAgIHNlcnZlclRpbWU6IHouc3RyaW5nKCksXG4gICAgc3RhdHVzOiB6Lm9iamVjdCh7XG4gICAgICByZWFkeTogei5ib29sZWFuKCksXG4gICAgICBydW5uaW5nOiB6LmJvb2xlYW4oKSxcbiAgICAgIGxhc3RSdW5BdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuUXVldWVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBxdWV1ZWRBdDogei5zdHJpbmcoKSxcbiAgICByZXF1ZXN0OiB6Lm9iamVjdCh7XG4gICAgICBmaWxlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgICAgcGF0dGVybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuU3RhcnRlZDogei5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubnVtYmVyKCksXG4gICAgcnVuSWQ6IHouc3RyaW5nKCksXG4gICAgc3RhcnRlZEF0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgcnVuQ29tcGxldGVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBzdGFydGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZmluaXNoZWRBdDogei5zdHJpbmcoKSxcbiAgICByZXN1bHQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSxcbiAgfSksXG4gIHJ1bkVycm9yZWQ6IHoub2JqZWN0KHtcbiAgICBzY2hlbWFWZXJzaW9uOiB6Lm51bWJlcigpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIGZpbmlzaGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZXJyb3I6IHoub2JqZWN0KHtcbiAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgICBzdGFjazogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuTm9kZVByb2dyZXNzOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5saXRlcmFsKDEpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIHN0YXJ0ZWRBdDogei5zdHJpbmcoKSxcbiAgICBhdDogei5zdHJpbmcoKSxcbiAgICBraW5kOiB6LmVudW0oW1wiZmlsZVwiLCBcInN1aXRlXCIsIFwidGVzdFwiXSksXG4gICAgcGhhc2U6IHouZW51bShbXCJyZWFkeVwiLCBcInJlc3VsdFwiXSksXG4gICAgZmlsZUlkOiB6LnN0cmluZygpLFxuICAgIG5vZGVJZDogei5zdHJpbmcoKSxcbiAgICBwYXJlbnRJZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIG5vZGU6IFRlc3RDYXNlUmVzdWx0U2NoZW1hLFxuICB9KSxcbiAgaGVhcnRiZWF0OiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBhdDogei5zdHJpbmcoKSxcbiAgfSksXG59KTtcblxudHlwZSBUZXN0RXZlbnRzID0gei5pbmZlcjx0eXBlb2YgVGVzdEV2ZW50U2NoZW1hPjtcblxuZnVuY3Rpb24gdG9QYXRoUHJlZml4KGJhc2VQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYmFzZVBhdGguZW5kc1dpdGgoXCIvXCIpID8gYmFzZVBhdGggOiBgJHtiYXNlUGF0aH0vYDtcbn1cblxuZnVuY3Rpb24gcmVsYXRpdml6ZVRyYWNlKHRyYWNlOiBTZXJpYWxpemVkVHJhY2UsIHByZWZpeDogc3RyaW5nKTogU2VyaWFsaXplZFRyYWNlIHtcbiAgcmV0dXJuIHsgLi4udHJhY2UsIGZpbGVQYXRoOiB0cmFjZS5maWxlUGF0aC5yZXBsYWNlKHByZWZpeCwgXCJcIikgfTtcbn1cblxuZnVuY3Rpb24gcmVsYXRpdml6ZU5vZGUobm9kZTogVGVzdENhc2VSZXN1bHQsIGJhc2VQYXRoOiBzdHJpbmcpOiBUZXN0Q2FzZVJlc3VsdCB7XG4gIGNvbnN0IHByZWZpeCA9IHRvUGF0aFByZWZpeChiYXNlUGF0aCk7XG4gIHJldHVybiB7XG4gICAgLi4ubm9kZSxcbiAgICBuYW1lOiBub2RlLm5hbWUucmVwbGFjZShwcmVmaXgsIFwiXCIpLFxuICAgIGZpbGU6IG5vZGUuZmlsZS5yZXBsYWNlKHByZWZpeCwgXCJcIiksXG4gICAgdHJhY2VzOiBub2RlLnRyYWNlcy5tYXAoKHQpID0+IHJlbGF0aXZpemVUcmFjZSh0LCBwcmVmaXgpKSxcbiAgICBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbi5tYXAoKGMpID0+IHJlbGF0aXZpemVOb2RlKGMsIHByZWZpeCkpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1J1bk5vZGVQcm9ncmVzc0RhdGEoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgVGVzdEV2ZW50c1tcInJ1bk5vZGVQcm9ncmVzc1wiXSB7XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCBkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGQgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXR1cm4gKFxuICAgIGQuc2NoZW1hVmVyc2lvbiA9PT0gMSAmJlxuICAgIHR5cGVvZiBkLnJ1bklkID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIGQuc3RhcnRlZEF0ID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIGQuYXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAoZC5raW5kID09PSBcImZpbGVcIiB8fCBkLmtpbmQgPT09IFwic3VpdGVcIiB8fCBkLmtpbmQgPT09IFwidGVzdFwiKSAmJlxuICAgIChkLnBoYXNlID09PSBcInJlYWR5XCIgfHwgZC5waGFzZSA9PT0gXCJyZXN1bHRcIikgJiZcbiAgICB0eXBlb2YgZC5maWxlSWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2YgZC5ub2RlSWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAoZC5wYXJlbnRJZCA9PT0gbnVsbCB8fCB0eXBlb2YgZC5wYXJlbnRJZCA9PT0gXCJzdHJpbmdcIikgJiZcbiAgICB0eXBlb2YgZC5ub2RlID09PSBcIm9iamVjdFwiICYmXG4gICAgZC5ub2RlICE9PSBudWxsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbGF0aXZpemVSZXN1bHQocmVzdWx0OiBSdW5SZXN1bHQsIGJhc2VQYXRoOiBzdHJpbmcpOiBSdW5SZXN1bHQge1xuICBjb25zdCBwcmVmaXggPSB0b1BhdGhQcmVmaXgoYmFzZVBhdGgpO1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3VsdCxcbiAgICByZXN1bHRzOiByZXN1bHQucmVzdWx0cy5tYXAoKG4pID0+IHJlbGF0aXZpemVOb2RlKG4sIHByZWZpeCkpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJEZXZUZXN0Um91dGVzKFxuICBzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSxcbiAgY29uZmlnOiBTb25hbXVEZXZSdW5uZXJDb25maWcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJlZml4ID0gY29uZmlnLnJvdXRlUHJlZml4ID8/IFwiL19fdGVzdF9fXCI7XG5cbiAgY29uc3QgbWFuYWdlciA9IG5ldyBEZXZWaXRlc3RNYW5hZ2VyKCk7XG4gIGF3YWl0IG1hbmFnZXIuc3RhcnQoY29uZmlnLnZpdGVzdENvbmZpZ1BhdGgpO1xuICBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlciA9IG1hbmFnZXI7XG5cbiAgY29uc3Qgc3NlQXZhaWxhYmxlID0gISFTb25hbXUuY29uZmlnLnNlcnZlci5wbHVnaW5zPy5zc2U7XG5cbiAgaWYgKHNzZUF2YWlsYWJsZSkge1xuICAgIHNlcnZlci5nZXQoYCR7cHJlZml4fS9ldmVudHNgLCAocmVxdWVzdCwgcmVwbHkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHNzZTogU1NFQ29ubmVjdGlvbjx0eXBlb2YgVGVzdEV2ZW50U2NoZW1hPiA9IGNyZWF0ZVNTRUZhY3RvcnkoXG4gICAgICAgIHJlcXVlc3Quc29ja2V0LFxuICAgICAgICByZXBseSxcbiAgICAgICAgVGVzdEV2ZW50U2NoZW1hLFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3RhdHVzOiBNYW5hZ2VyU3RhdHVzID0gbWFuYWdlci5nZXRTdGF0dXMoKTtcbiAgICAgIHNzZS5wdWJsaXNoKFwic25hcHNob3RcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgc2VydmVyVGltZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGVhcnRiZWF0VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHNzZS5wdWJsaXNoKFwiaGVhcnRiZWF0XCIsIHtcbiAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgIH0sIEhFQVJUQkVBVF9JTlRFUlZBTF9NUyk7XG5cbiAgICAgIGNvbnN0IGJhc2VQYXRoID0gU29uYW11LmFwaVJvb3RQYXRoO1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudCBhcyBrZXlvZiBUZXN0RXZlbnRzO1xuICAgICAgICBpZiAoa2V5ID09PSBcInJ1bk5vZGVQcm9ncmVzc1wiKSB7XG4gICAgICAgICAgaWYgKCFpc1J1bk5vZGVQcm9ncmVzc0RhdGEoZGF0YSkpIHJldHVybjtcbiAgICAgICAgICBjb25zdCByZWxhdGl2aXplZCA9IHtcbiAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICBub2RlOiByZWxhdGl2aXplTm9kZShkYXRhLm5vZGUsIGJhc2VQYXRoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNzZS5wdWJsaXNoKGtleSwgcmVsYXRpdml6ZWQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzc2UucHVibGlzaChrZXksIGRhdGEgYXMgVGVzdEV2ZW50c1t0eXBlb2Yga2V5XSk7XG4gICAgICB9O1xuICAgICAgbWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgcmVxdWVzdC5zb2NrZXQub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaGVhcnRiZWF0VGltZXIpO1xuICAgICAgICBtYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzZXJ2ZXIucG9zdChgJHtwcmVmaXh9L3J1bmAsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgIGlmICghU29uYW11LmRldlZpdGVzdE1hbmFnZXIpIHtcbiAgICAgIHJlcGx5LnN0YXR1cyg1MDMpO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJEZXZWaXRlc3RNYW5hZ2VyIGlzIG5vdCBpbml0aWFsaXplZFwiIH07XG4gICAgfVxuXG4gICAgY29uc3QgcnVuSWQgPSByYW5kb21VVUlEKCk7XG4gICAgY29uc3QgYm9keSA9IHJlcXVlc3QuYm9keSBhcyB7IGZpbGVzPzogc3RyaW5nW107IHBhdHRlcm4/OiBzdHJpbmcgfSB8IG51bGw7XG4gICAgY29uc3QgcnVuUmVxdWVzdCA9IHtcbiAgICAgIGZpbGVzOiBib2R5Py5maWxlcyxcbiAgICAgIHBhdHRlcm46IGJvZHk/LnBhdHRlcm4sXG4gICAgfTtcblxuICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuUXVldWVkXCIsIHtcbiAgICAgIHNjaGVtYVZlcnNpb246IFNDSEVNQV9WRVJTSU9OLFxuICAgICAgcnVuSWQsXG4gICAgICBxdWV1ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgcmVxdWVzdDogcnVuUmVxdWVzdCxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBtYW5hZ2VyLmVtaXRFdmVudChcInJ1blN0YXJ0ZWRcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIHN0YXJ0ZWRBdCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByYXdSZXN1bHQ6IFJ1blJlc3VsdCA9IGF3YWl0IFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyLnJ1bihydW5SZXF1ZXN0LCBydW5JZCk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZWxhdGl2aXplUmVzdWx0KHJhd1Jlc3VsdCwgU29uYW11LmFwaVJvb3RQYXRoKTtcblxuICAgICAgY29uc3QgZmluaXNoZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuQ29tcGxldGVkXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICAgIHJ1bklkLFxuICAgICAgICBzdGFydGVkQXQsXG4gICAgICAgIGZpbmlzaGVkQXQsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZmluaXNoZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuRXJyb3JlZFwiLCB7XG4gICAgICAgIHNjaGVtYVZlcnNpb246IFNDSEVNQV9WRVJTSU9OLFxuICAgICAgICBydW5JZCxcbiAgICAgICAgZmluaXNoZWRBdCxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICAgICAgc3RhY2s6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJlcGx5LnN0YXR1cyg1MDApO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH07XG4gICAgfVxuICB9KTtcblxuICBzZXJ2ZXIuZ2V0KGAke3ByZWZpeH0vc3RhdHVzYCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1czogTWFuYWdlclN0YXR1cyA9IFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyPy5nZXRTdGF0dXMoKSA/PyB7XG4gICAgICByZWFkeTogZmFsc2UsXG4gICAgICBydW5uaW5nOiBmYWxzZSxcbiAgICAgIGxhc3RSdW5BdDogbnVsbCxcbiAgICB9O1xuICAgIHJldHVybiB7IC4uLnN0YXR1cywgc3NlQXZhaWxhYmxlIH07XG4gIH0pO1xuXG4gIHNlcnZlci5hZGRIb29rKFwib25DbG9zZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgU29uYW11LmRldlZpdGVzdE1hbmFnZXI/LnNodXRkb3duKCk7XG4gICAgU29uYW11LmRldlZpdGVzdE1hbmFnZXIgPSBudWxsO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJyYW5kb21VVUlEIiwieiIsIlNvbmFtdSIsImNyZWF0ZVNTRUZhY3RvcnkiLCJEZXZWaXRlc3RNYW5hZ2VyIiwiU0NIRU1BX1ZFUlNJT04iLCJIRUFSVEJFQVRfSU5URVJWQUxfTVMiLCJTZXJpYWxpemVkVHJhY2VTY2hlbWEiLCJvYmplY3QiLCJrZXkiLCJzdHJpbmciLCJ2YWx1ZSIsInVua25vd24iLCJmaWxlUGF0aCIsImxpbmVOdW1iZXIiLCJudW1iZXIiLCJhdCIsIlRlc3RDYXNlUmVzdWx0U2NoZW1hIiwibGF6eSIsImlkIiwia2luZCIsImVudW0iLCJuYW1lIiwiZnVsbE5hbWUiLCJmaWxlIiwic3RhdGUiLCJkdXJhdGlvbk1zIiwibnVsbGFibGUiLCJjb3VudHMiLCJ0b3RhbCIsInBhc3NlZCIsImZhaWxlZCIsInNraXBwZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsIm9wdGlvbmFsIiwidHJhY2VzIiwiYXJyYXkiLCJjaGlsZHJlbiIsIlRlc3RFdmVudFNjaGVtYSIsInNuYXBzaG90Iiwic2NoZW1hVmVyc2lvbiIsInNlcnZlclRpbWUiLCJzdGF0dXMiLCJyZWFkeSIsImJvb2xlYW4iLCJydW5uaW5nIiwibGFzdFJ1bkF0IiwicnVuUXVldWVkIiwicnVuSWQiLCJxdWV1ZWRBdCIsInJlcXVlc3QiLCJmaWxlcyIsInBhdHRlcm4iLCJydW5TdGFydGVkIiwic3RhcnRlZEF0IiwicnVuQ29tcGxldGVkIiwiZmluaXNoZWRBdCIsInJlc3VsdCIsInJlY29yZCIsInJ1bkVycm9yZWQiLCJydW5Ob2RlUHJvZ3Jlc3MiLCJsaXRlcmFsIiwicGhhc2UiLCJmaWxlSWQiLCJub2RlSWQiLCJwYXJlbnRJZCIsIm5vZGUiLCJoZWFydGJlYXQiLCJ0b1BhdGhQcmVmaXgiLCJiYXNlUGF0aCIsImVuZHNXaXRoIiwicmVsYXRpdml6ZVRyYWNlIiwidHJhY2UiLCJwcmVmaXgiLCJyZXBsYWNlIiwicmVsYXRpdml6ZU5vZGUiLCJtYXAiLCJ0IiwiYyIsImlzUnVuTm9kZVByb2dyZXNzRGF0YSIsImRhdGEiLCJkIiwicmVsYXRpdml6ZVJlc3VsdCIsInJlc3VsdHMiLCJuIiwicmVnaXN0ZXJEZXZUZXN0Um91dGVzIiwic2VydmVyIiwiY29uZmlnIiwicm91dGVQcmVmaXgiLCJtYW5hZ2VyIiwic3RhcnQiLCJ2aXRlc3RDb25maWdQYXRoIiwiZGV2Vml0ZXN0TWFuYWdlciIsInNzZUF2YWlsYWJsZSIsInBsdWdpbnMiLCJzc2UiLCJnZXQiLCJyZXBseSIsInNvY2tldCIsImdldFN0YXR1cyIsInB1Ymxpc2giLCJEYXRlIiwidG9JU09TdHJpbmciLCJoZWFydGJlYXRUaW1lciIsInNldEludGVydmFsIiwiYXBpUm9vdFBhdGgiLCJsaXN0ZW5lciIsImV2ZW50IiwicmVsYXRpdml6ZWQiLCJhZGRFdmVudExpc3RlbmVyIiwib24iLCJjbGVhckludGVydmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInBvc3QiLCJvayIsImJvZHkiLCJydW5SZXF1ZXN0IiwiZW1pdEV2ZW50IiwicmF3UmVzdWx0Iiwi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
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi10ZXN0LXJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11RGV2UnVubmVyQ29uZmlnIH0gZnJvbSBcIi4uL2FwaS9jb25maWdcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6ZWRUcmFjZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlU1NFRmFjdG9yeSwgdHlwZSBTU0VDb25uZWN0aW9uIH0gZnJvbSBcIi4uL3N0cmVhbS9zc2VcIjtcbmltcG9ydCB0eXBlIHsgTWFuYWdlclN0YXR1cywgUnVuUmVzdWx0LCBUZXN0Q2FzZVJlc3VsdCB9IGZyb20gXCIuL2Rldi12aXRlc3QtbWFuYWdlclwiO1xuaW1wb3J0IHsgRGV2Vml0ZXN0TWFuYWdlciB9IGZyb20gXCIuL2Rldi12aXRlc3QtbWFuYWdlclwiO1xuXG5jb25zdCBTQ0hFTUFfVkVSU0lPTiA9IDE7XG5jb25zdCBIRUFSVEJFQVRfSU5URVJWQUxfTVMgPSAzMF8wMDA7XG5cbmNvbnN0IFNlcmlhbGl6ZWRUcmFjZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAga2V5OiB6LnN0cmluZygpLFxuICB2YWx1ZTogei51bmtub3duKCksXG4gIGZpbGVQYXRoOiB6LnN0cmluZygpLFxuICBsaW5lTnVtYmVyOiB6Lm51bWJlcigpLFxuICBhdDogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBUZXN0Q2FzZVJlc3VsdFNjaGVtYTogei5ab2RUeXBlPFRlc3RDYXNlUmVzdWx0PiA9IHoubGF6eSgoKSA9PlxuICB6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAga2luZDogei5lbnVtKFtcImZpbGVcIiwgXCJzdWl0ZVwiLCBcInRlc3RcIl0pLFxuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgZnVsbE5hbWU6IHouc3RyaW5nKCksXG4gICAgZmlsZTogei5zdHJpbmcoKSxcbiAgICBzdGF0ZTogei5lbnVtKFtcInBhc3NlZFwiLCBcImZhaWxlZFwiLCBcInNraXBwZWRcIiwgXCJ0b2RvXCIsIFwicnVubmluZ1wiLCBcInVua25vd25cIl0pLFxuICAgIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICBjb3VudHM6IHoub2JqZWN0KHtcbiAgICAgIHRvdGFsOiB6Lm51bWJlcigpLFxuICAgICAgcGFzc2VkOiB6Lm51bWJlcigpLFxuICAgICAgZmFpbGVkOiB6Lm51bWJlcigpLFxuICAgICAgc2tpcHBlZDogei5udW1iZXIoKSxcbiAgICB9KSxcbiAgICBlcnJvcjogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgICAgIHN0YWNrOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLm51bGxhYmxlKCksXG4gICAgdHJhY2VzOiB6LmFycmF5KFNlcmlhbGl6ZWRUcmFjZVNjaGVtYSksXG4gICAgY2hpbGRyZW46IHouYXJyYXkoVGVzdENhc2VSZXN1bHRTY2hlbWEpLFxuICB9KSxcbik7XG5cbmNvbnN0IFRlc3RFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc25hcHNob3Q6IHoub2JqZWN0KHtcbiAgICBzY2hlbWFWZXJzaW9uOiB6Lm51bWJlcigpLFxuICAgIHNlcnZlclRpbWU6IHouc3RyaW5nKCksXG4gICAgc3RhdHVzOiB6Lm9iamVjdCh7XG4gICAgICByZWFkeTogei5ib29sZWFuKCksXG4gICAgICBydW5uaW5nOiB6LmJvb2xlYW4oKSxcbiAgICAgIGxhc3RSdW5BdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuUXVldWVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBxdWV1ZWRBdDogei5zdHJpbmcoKSxcbiAgICByZXF1ZXN0OiB6Lm9iamVjdCh7XG4gICAgICBmaWxlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgICAgcGF0dGVybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuU3RhcnRlZDogei5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubnVtYmVyKCksXG4gICAgcnVuSWQ6IHouc3RyaW5nKCksXG4gICAgc3RhcnRlZEF0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgcnVuQ29tcGxldGVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBzdGFydGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZmluaXNoZWRBdDogei5zdHJpbmcoKSxcbiAgICByZXN1bHQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSxcbiAgfSksXG4gIHJ1bkVycm9yZWQ6IHoub2JqZWN0KHtcbiAgICBzY2hlbWFWZXJzaW9uOiB6Lm51bWJlcigpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIGZpbmlzaGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZXJyb3I6IHoub2JqZWN0KHtcbiAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgICBzdGFjazogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuTm9kZVByb2dyZXNzOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5saXRlcmFsKDEpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIHN0YXJ0ZWRBdDogei5zdHJpbmcoKSxcbiAgICBhdDogei5zdHJpbmcoKSxcbiAgICBraW5kOiB6LmVudW0oW1wiZmlsZVwiLCBcInN1aXRlXCIsIFwidGVzdFwiXSksXG4gICAgcGhhc2U6IHouZW51bShbXCJyZWFkeVwiLCBcInJlc3VsdFwiXSksXG4gICAgZmlsZUlkOiB6LnN0cmluZygpLFxuICAgIG5vZGVJZDogei5zdHJpbmcoKSxcbiAgICBwYXJlbnRJZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIG5vZGU6IFRlc3RDYXNlUmVzdWx0U2NoZW1hLFxuICB9KSxcbiAgaGVhcnRiZWF0OiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBhdDogei5zdHJpbmcoKSxcbiAgfSksXG59KTtcblxudHlwZSBUZXN0RXZlbnRzID0gei5pbmZlcjx0eXBlb2YgVGVzdEV2ZW50U2NoZW1hPjtcblxuZnVuY3Rpb24gdG9QYXRoUHJlZml4KGJhc2VQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYmFzZVBhdGguZW5kc1dpdGgoXCIvXCIpID8gYmFzZVBhdGggOiBgJHtiYXNlUGF0aH0vYDtcbn1cblxuZnVuY3Rpb24gcmVsYXRpdml6ZVRyYWNlKHRyYWNlOiBTZXJpYWxpemVkVHJhY2UsIHByZWZpeDogc3RyaW5nKTogU2VyaWFsaXplZFRyYWNlIHtcbiAgcmV0dXJuIHsgLi4udHJhY2UsIGZpbGVQYXRoOiB0cmFjZS5maWxlUGF0aC5yZXBsYWNlKHByZWZpeCwgXCJcIikgfTtcbn1cblxuZnVuY3Rpb24gcmVsYXRpdml6ZU5vZGUobm9kZTogVGVzdENhc2VSZXN1bHQsIGJhc2VQYXRoOiBzdHJpbmcpOiBUZXN0Q2FzZVJlc3VsdCB7XG4gIGNvbnN0IHByZWZpeCA9IHRvUGF0aFByZWZpeChiYXNlUGF0aCk7XG4gIHJldHVybiB7XG4gICAgLi4ubm9kZSxcbiAgICBuYW1lOiBub2RlLm5hbWUucmVwbGFjZShwcmVmaXgsIFwiXCIpLFxuICAgIGZpbGU6IG5vZGUuZmlsZS5yZXBsYWNlKHByZWZpeCwgXCJcIiksXG4gICAgdHJhY2VzOiBub2RlLnRyYWNlcy5tYXAoKHQpID0+IHJlbGF0aXZpemVUcmFjZSh0LCBwcmVmaXgpKSxcbiAgICBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbi5tYXAoKGMpID0+IHJlbGF0aXZpemVOb2RlKGMsIHByZWZpeCkpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1J1bk5vZGVQcm9ncmVzc0RhdGEoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgVGVzdEV2ZW50c1tcInJ1bk5vZGVQcm9ncmVzc1wiXSB7XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCBkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGQgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXR1cm4gKFxuICAgIGQuc2NoZW1hVmVyc2lvbiA9PT0gMSAmJlxuICAgIHR5cGVvZiBkLnJ1bklkID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIGQuc3RhcnRlZEF0ID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIGQuYXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAoZC5raW5kID09PSBcImZpbGVcIiB8fCBkLmtpbmQgPT09IFwic3VpdGVcIiB8fCBkLmtpbmQgPT09IFwidGVzdFwiKSAmJlxuICAgIChkLnBoYXNlID09PSBcInJlYWR5XCIgfHwgZC5waGFzZSA9PT0gXCJyZXN1bHRcIikgJiZcbiAgICB0eXBlb2YgZC5maWxlSWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2YgZC5ub2RlSWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAoZC5wYXJlbnRJZCA9PT0gbnVsbCB8fCB0eXBlb2YgZC5wYXJlbnRJZCA9PT0gXCJzdHJpbmdcIikgJiZcbiAgICB0eXBlb2YgZC5ub2RlID09PSBcIm9iamVjdFwiICYmXG4gICAgZC5ub2RlICE9PSBudWxsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbGF0aXZpemVSZXN1bHQocmVzdWx0OiBSdW5SZXN1bHQsIGJhc2VQYXRoOiBzdHJpbmcpOiBSdW5SZXN1bHQge1xuICBjb25zdCBwcmVmaXggPSB0b1BhdGhQcmVmaXgoYmFzZVBhdGgpO1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3VsdCxcbiAgICByZXN1bHRzOiByZXN1bHQucmVzdWx0cy5tYXAoKG4pID0+IHJlbGF0aXZpemVOb2RlKG4sIHByZWZpeCkpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJEZXZUZXN0Um91dGVzKFxuICBzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSxcbiAgY29uZmlnOiBTb25hbXVEZXZSdW5uZXJDb25maWcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJlZml4ID0gY29uZmlnLnJvdXRlUHJlZml4ID8/IFwiL19fdGVzdF9fXCI7XG5cbiAgY29uc3QgbWFuYWdlciA9IG5ldyBEZXZWaXRlc3RNYW5hZ2VyKCk7XG4gIGF3YWl0IG1hbmFnZXIuc3RhcnQoY29uZmlnLnZpdGVzdENvbmZpZ1BhdGgpO1xuICBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlciA9IG1hbmFnZXI7XG5cbiAgY29uc3Qgc3NlQXZhaWxhYmxlID0gISFTb25hbXUuY29uZmlnLnNlcnZlci5wbHVnaW5zPy5zc2U7XG5cbiAgaWYgKHNzZUF2YWlsYWJsZSkge1xuICAgIHNlcnZlci5nZXQoYCR7cHJlZml4fS9ldmVudHNgLCAocmVxdWVzdCwgcmVwbHkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHNzZTogU1NFQ29ubmVjdGlvbjx0eXBlb2YgVGVzdEV2ZW50U2NoZW1hPiA9IGNyZWF0ZVNTRUZhY3RvcnkoXG4gICAgICAgIHJlcXVlc3Quc29ja2V0LFxuICAgICAgICByZXBseSxcbiAgICAgICAgVGVzdEV2ZW50U2NoZW1hLFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3RhdHVzOiBNYW5hZ2VyU3RhdHVzID0gbWFuYWdlci5nZXRTdGF0dXMoKTtcbiAgICAgIHNzZS5wdWJsaXNoKFwic25hcHNob3RcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgc2VydmVyVGltZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGVhcnRiZWF0VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHNzZS5wdWJsaXNoKFwiaGVhcnRiZWF0XCIsIHtcbiAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgIH0sIEhFQVJUQkVBVF9JTlRFUlZBTF9NUyk7XG5cbiAgICAgIGNvbnN0IGJhc2VQYXRoID0gU29uYW11LmFwaVJvb3RQYXRoO1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudCBhcyBrZXlvZiBUZXN0RXZlbnRzO1xuICAgICAgICBpZiAoa2V5ID09PSBcInJ1bk5vZGVQcm9ncmVzc1wiKSB7XG4gICAgICAgICAgaWYgKCFpc1J1bk5vZGVQcm9ncmVzc0RhdGEoZGF0YSkpIHJldHVybjtcbiAgICAgICAgICBjb25zdCByZWxhdGl2aXplZCA9IHtcbiAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICBub2RlOiByZWxhdGl2aXplTm9kZShkYXRhLm5vZGUsIGJhc2VQYXRoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNzZS5wdWJsaXNoKGtleSwgcmVsYXRpdml6ZWQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzc2UucHVibGlzaChrZXksIGRhdGEgYXMgVGVzdEV2ZW50c1t0eXBlb2Yga2V5XSk7XG4gICAgICB9O1xuICAgICAgbWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChoZWFydGJlYXRUaW1lcik7XG4gICAgICAgIG1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB9O1xuICAgICAgcmVxdWVzdC5zb2NrZXQub24oXCJjbG9zZVwiLCBjbGVhbnVwKTtcbiAgICAgIHJlcXVlc3Quc29ja2V0Lm9uKFwiZXJyb3JcIiwgY2xlYW51cCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXJ2ZXIucG9zdChgJHtwcmVmaXh9L3J1bmAsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgIGlmICghU29uYW11LmRldlZpdGVzdE1hbmFnZXIpIHtcbiAgICAgIHJlcGx5LnN0YXR1cyg1MDMpO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJEZXZWaXRlc3RNYW5hZ2VyIGlzIG5vdCBpbml0aWFsaXplZFwiIH07XG4gICAgfVxuXG4gICAgY29uc3QgcnVuSWQgPSByYW5kb21VVUlEKCk7XG4gICAgY29uc3QgYm9keSA9IHJlcXVlc3QuYm9keSBhcyB7IGZpbGVzPzogc3RyaW5nW107IHBhdHRlcm4/OiBzdHJpbmcgfSB8IG51bGw7XG4gICAgY29uc3QgcnVuUmVxdWVzdCA9IHtcbiAgICAgIGZpbGVzOiBib2R5Py5maWxlcyxcbiAgICAgIHBhdHRlcm46IGJvZHk/LnBhdHRlcm4sXG4gICAgfTtcblxuICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuUXVldWVkXCIsIHtcbiAgICAgIHNjaGVtYVZlcnNpb246IFNDSEVNQV9WRVJTSU9OLFxuICAgICAgcnVuSWQsXG4gICAgICBxdWV1ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgcmVxdWVzdDogcnVuUmVxdWVzdCxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBtYW5hZ2VyLmVtaXRFdmVudChcInJ1blN0YXJ0ZWRcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIHN0YXJ0ZWRBdCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByYXdSZXN1bHQ6IFJ1blJlc3VsdCA9IGF3YWl0IFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyLnJ1bihydW5SZXF1ZXN0LCBydW5JZCk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZWxhdGl2aXplUmVzdWx0KHJhd1Jlc3VsdCwgU29uYW11LmFwaVJvb3RQYXRoKTtcblxuICAgICAgY29uc3QgZmluaXNoZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuQ29tcGxldGVkXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICAgIHJ1bklkLFxuICAgICAgICBzdGFydGVkQXQsXG4gICAgICAgIGZpbmlzaGVkQXQsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZmluaXNoZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuRXJyb3JlZFwiLCB7XG4gICAgICAgIHNjaGVtYVZlcnNpb246IFNDSEVNQV9WRVJTSU9OLFxuICAgICAgICBydW5JZCxcbiAgICAgICAgZmluaXNoZWRBdCxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICAgICAgc3RhY2s6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJlcGx5LnN0YXR1cyg1MDApO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH07XG4gICAgfVxuICB9KTtcblxuICBzZXJ2ZXIuZ2V0KGAke3ByZWZpeH0vc3RhdHVzYCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1czogTWFuYWdlclN0YXR1cyA9IFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyPy5nZXRTdGF0dXMoKSA/PyB7XG4gICAgICByZWFkeTogZmFsc2UsXG4gICAgICBydW5uaW5nOiBmYWxzZSxcbiAgICAgIGxhc3RSdW5BdDogbnVsbCxcbiAgICB9O1xuICAgIHJldHVybiB7IC4uLnN0YXR1cywgc3NlQXZhaWxhYmxlIH07XG4gIH0pO1xuXG4gIHNlcnZlci5hZGRIb29rKFwib25DbG9zZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgU29uYW11LmRldlZpdGVzdE1hbmFnZXI/LnNodXRkb3duKCk7XG4gICAgU29uYW11LmRldlZpdGVzdE1hbmFnZXIgPSBudWxsO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJyYW5kb21VVUlEIiwieiIsIlNvbmFtdSIsImNyZWF0ZVNTRUZhY3RvcnkiLCJEZXZWaXRlc3RNYW5hZ2VyIiwiU0NIRU1BX1ZFUlNJT04iLCJIRUFSVEJFQVRfSU5URVJWQUxfTVMiLCJTZXJpYWxpemVkVHJhY2VTY2hlbWEiLCJvYmplY3QiLCJrZXkiLCJzdHJpbmciLCJ2YWx1ZSIsInVua25vd24iLCJmaWxlUGF0aCIsImxpbmVOdW1iZXIiLCJudW1iZXIiLCJhdCIsIlRlc3RDYXNlUmVzdWx0U2NoZW1hIiwibGF6eSIsImlkIiwia2luZCIsImVudW0iLCJuYW1lIiwiZnVsbE5hbWUiLCJmaWxlIiwic3RhdGUiLCJkdXJhdGlvbk1zIiwibnVsbGFibGUiLCJjb3VudHMiLCJ0b3RhbCIsInBhc3NlZCIsImZhaWxlZCIsInNraXBwZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsIm9wdGlvbmFsIiwidHJhY2VzIiwiYXJyYXkiLCJjaGlsZHJlbiIsIlRlc3RFdmVudFNjaGVtYSIsInNuYXBzaG90Iiwic2NoZW1hVmVyc2lvbiIsInNlcnZlclRpbWUiLCJzdGF0dXMiLCJyZWFkeSIsImJvb2xlYW4iLCJydW5uaW5nIiwibGFzdFJ1bkF0IiwicnVuUXVldWVkIiwicnVuSWQiLCJxdWV1ZWRBdCIsInJlcXVlc3QiLCJmaWxlcyIsInBhdHRlcm4iLCJydW5TdGFydGVkIiwic3RhcnRlZEF0IiwicnVuQ29tcGxldGVkIiwiZmluaXNoZWRBdCIsInJlc3VsdCIsInJlY29yZCIsInJ1bkVycm9yZWQiLCJydW5Ob2RlUHJvZ3Jlc3MiLCJsaXRlcmFsIiwicGhhc2UiLCJmaWxlSWQiLCJub2RlSWQiLCJwYXJlbnRJZCIsIm5vZGUiLCJoZWFydGJlYXQiLCJ0b1BhdGhQcmVmaXgiLCJiYXNlUGF0aCIsImVuZHNXaXRoIiwicmVsYXRpdml6ZVRyYWNlIiwidHJhY2UiLCJwcmVmaXgiLCJyZXBsYWNlIiwicmVsYXRpdml6ZU5vZGUiLCJtYXAiLCJ0IiwiYyIsImlzUnVuTm9kZVByb2dyZXNzRGF0YSIsImRhdGEiLCJkIiwicmVsYXRpdml6ZVJlc3VsdCIsInJlc3VsdHMiLCJuIiwicmVnaXN0ZXJEZXZUZXN0Um91dGVzIiwic2VydmVyIiwiY29uZmlnIiwicm91dGVQcmVmaXgiLCJtYW5hZ2VyIiwic3RhcnQiLCJ2aXRlc3RDb25maWdQYXRoIiwiZGV2Vml0ZXN0TWFuYWdlciIsInNzZUF2YWlsYWJsZSIsInBsdWdpbnMiLCJzc2UiLCJnZXQiLCJyZXBseSIsInNvY2tldCIsImdldFN0YXR1cyIsInB1Ymxpc2giLCJEYXRlIiwidG9JU09TdHJpbmciLCJoZWFydGJlYXRUaW1lciIsInNldEludGVydmFsIiwiYXBpUm9vdFBhdGgiLCJsaXN0ZW5lciIsImV2ZW50IiwicmVsYXRpdml6ZWQiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xlYW51cCIsImNsZWFySW50ZXJ2YWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib24iLCJwb3N0Iiwib2siLCJib2R5IiwicnVuUmVxdWVzdCIsImVtaXRFdmVudCIsInJhd1Jlc3VsdCIsInJ1biIsImVyciIsIkVycm9yIiwiU3RyaW5nIiwidW5kZWZpbmVkIiwiYWRkSG9vayIsInNodXRkb3duIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxVQUFVLFFBQVEsU0FBUztBQUVwQyxTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUV4QixTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBRXZDLFNBQVNDLGdCQUFnQixRQUE0QixtQkFBZ0I7QUFFckUsU0FBU0MsZ0JBQWdCLFFBQVEsMEJBQXVCO0FBRXhELE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyx3QkFBd0I7QUFFOUIsTUFBTUMsd0JBQXdCTixFQUFFTyxNQUFNLENBQUM7SUFDckNDLEtBQUtSLEVBQUVTLE1BQU07SUFDYkMsT0FBT1YsRUFBRVcsT0FBTztJQUNoQkMsVUFBVVosRUFBRVMsTUFBTTtJQUNsQkksWUFBWWIsRUFBRWMsTUFBTTtJQUNwQkMsSUFBSWYsRUFBRVMsTUFBTTtBQUNkO0FBRUEsTUFBTU8sdUJBQWtEaEIsRUFBRWlCLElBQUksQ0FBQyxJQUM3RGpCLEVBQUVPLE1BQU0sQ0FBQztRQUNQVyxJQUFJbEIsRUFBRVMsTUFBTTtRQUNaVSxNQUFNbkIsRUFBRW9CLElBQUksQ0FBQztZQUFDO1lBQVE7WUFBUztTQUFPO1FBQ3RDQyxNQUFNckIsRUFBRVMsTUFBTTtRQUNkYSxVQUFVdEIsRUFBRVMsTUFBTTtRQUNsQmMsTUFBTXZCLEVBQUVTLE1BQU07UUFDZGUsT0FBT3hCLEVBQUVvQixJQUFJLENBQUM7WUFBQztZQUFVO1lBQVU7WUFBVztZQUFRO1lBQVc7U0FBVTtRQUMzRUssWUFBWXpCLEVBQUVjLE1BQU0sR0FBR1ksUUFBUTtRQUMvQkMsUUFBUTNCLEVBQUVPLE1BQU0sQ0FBQztZQUNmcUIsT0FBTzVCLEVBQUVjLE1BQU07WUFDZmUsUUFBUTdCLEVBQUVjLE1BQU07WUFDaEJn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
|
|
@@ -181,6 +181,19 @@ export declare class FixtureGenerator {
|
|
|
181
181
|
count: number;
|
|
182
182
|
overrides?: Record<string, unknown>;
|
|
183
183
|
}>): Promise<FixtureImportResult[]>;
|
|
184
|
+
/**
|
|
185
|
+
* 부모 fixture 결과를 기반으로 fixtureCompanions에 선언된 companion Entity를 생성합니다.
|
|
186
|
+
*
|
|
187
|
+
* generateBatch()에서만 호출되며, companion 생성 시 재귀를 방지하기 위해
|
|
188
|
+
* generateBatch()를 다시 호출하지 않고 직접 삽입합니다.
|
|
189
|
+
*/
|
|
190
|
+
private generateCompanions;
|
|
191
|
+
/**
|
|
192
|
+
* overrides 값의 "{{fieldName}}" 템플릿을 부모 fixture 데이터로 치환합니다.
|
|
193
|
+
*
|
|
194
|
+
* 예: { "account_id": "{{email}}" } → { "account_id": "user@example.com" }
|
|
195
|
+
*/
|
|
196
|
+
private resolveTemplateOverrides;
|
|
184
197
|
/**
|
|
185
198
|
* 실제 DB(sourceDb)에서 데이터를 조회하여 fixture DB(targetDb)에 import합니다.
|
|
186
199
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture-generator.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAc,mBAAmB,EAAiB,MAAM,gBAAgB,CAAC;AAGrF,OAAO,EAEL,KAAK,2BAA2B,EAEjC,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,6BAA6B;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/C,kCAAkC;IAClC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAEvD,4CAA4C;IAC5C,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,qBAAa,gBAAgB;IASzB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IAbvB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,OAAO,CAA0B;gBAG/B,QAAQ,EAAE,IAAI,EAGtB,SAAS,EAAE,IAAI,EACP,YAAY,EAAE,SAAS,GAAG,MAAM,GAAG,mBAAmB,EACtD,aAAa,EAAE,OAAO,aAAa,EAC3C,OAAO,CAAC,EAAE,uBAAuB;IAanC;;;OAGG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,OAAO,GAAE,gBAAuC,GAC/C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"fixture-generator.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAc,mBAAmB,EAAiB,MAAM,gBAAgB,CAAC;AAGrF,OAAO,EAEL,KAAK,2BAA2B,EAEjC,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,6BAA6B;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/C,kCAAkC;IAClC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAEvD,4CAA4C;IAC5C,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,qBAAa,gBAAgB;IASzB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IAbvB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,OAAO,CAA0B;gBAG/B,QAAQ,EAAE,IAAI,EAGtB,SAAS,EAAE,IAAI,EACP,YAAY,EAAE,SAAS,GAAG,MAAM,GAAG,mBAAmB,EACtD,aAAa,EAAE,OAAO,aAAa,EAC3C,OAAO,CAAC,EAAE,uBAAuB;IAanC;;;OAGG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,OAAO,GAAE,gBAAuC,GAC/C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAmInC;;OAEG;YACW,qBAAqB;IAwFnC;;;;;OAKG;YACW,mBAAmB;IA8FjC;;;;;;OAMG;YACW,gBAAgB;IAoE9B;;;;;;;;;OASG;YACW,oBAAoB;IAkLlC;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAyC1B;;;;;;;;;OASG;YACW,sBAAsB;IAuDpC;;;;;;;;;OASG;YACW,eAAe;IA+D7B;;OAEG;YACW,qBAAqB;IA8BnC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwEzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,gBAAgB;IAyCxB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAiC1B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,gBAAgB;IA0BxB;;;;;;OAMG;YACW,YAAY;IAY1B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAiG1B;;OAEG;IACH,gBAAgB;;;;IAOhB;;OAEG;IACH,aAAa;IAIb;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;;;;;OAQG;IACG,aAAa,CACjB,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GACnF,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoDjC;;;;;OAKG;YACW,kBAAkB;IA4FhC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;;;;;;;;;;;;;;;;;;OAmBG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,EAAE,CAAC;CA4DlC"}
|