sonamu 0.12.0 → 0.13.1
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/_virtual/_rolldown/runtime.js +1 -2
- package/dist/ai/agents/agent.js +2 -3
- package/dist/ai/agents/index.js +1 -2
- package/dist/ai/index.js +1 -2
- package/dist/ai/providers/rtzr/api.js +1 -2
- package/dist/ai/providers/rtzr/error.js +2 -3
- package/dist/ai/providers/rtzr/model.js +1 -2
- package/dist/ai/providers/rtzr/options.js +1 -2
- package/dist/ai/providers/rtzr/provider.js +1 -2
- package/dist/ai/providers/rtzr/utils.js +1 -2
- package/dist/api/base-frame.js +4 -4
- package/dist/api/caster.d.ts +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +9 -9
- package/dist/api/code-converters.js +6 -5
- package/dist/api/config.d.ts +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +2 -3
- package/dist/api/context.d.ts +2 -3
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +2 -3
- package/dist/api/decorators.js +2 -3
- package/dist/api/http-validator.js +2 -3
- package/dist/api/index.js +8 -3
- package/dist/api/secret.js +1 -2
- package/dist/api/sonamu.d.ts +3 -5
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +19 -18
- package/dist/api/validator.js +1 -2
- package/dist/api/websocket-helpers.js +2 -3
- package/dist/auth/audit-log/builders.js +1 -2
- package/dist/auth/audit-log/client-ip.js +2 -3
- package/dist/auth/audit-log/events.js +1 -2
- package/dist/auth/audit-log/plugin.d.ts.map +1 -1
- package/dist/auth/audit-log/plugin.js +2 -3
- package/dist/auth/audit-log-ingestor.js +2 -3
- package/dist/auth/auth-generator.js +2 -3
- package/dist/auth/better-auth-entities.js +1 -2
- package/dist/auth/better-auth-request.js +2 -3
- package/dist/auth/index.js +2 -3
- package/dist/auth/knex-adapter.js +2 -3
- package/dist/auth/plugins/entity-definitions/admin.js +1 -2
- package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
- package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
- package/dist/auth/plugins/entity-definitions/index.js +1 -2
- package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
- package/dist/auth/plugins/entity-definitions/organization.js +1 -2
- package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
- package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
- package/dist/auth/plugins/entity-definitions/sso.js +1 -2
- package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
- package/dist/auth/plugins/entity-definitions/username.js +1 -2
- package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
- package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/admin.js +2 -3
- package/dist/auth/plugins/wrappers/anonymous.js +2 -3
- package/dist/auth/plugins/wrappers/api-key.js +2 -3
- package/dist/auth/plugins/wrappers/jwt.js +2 -3
- package/dist/auth/plugins/wrappers/organization.js +2 -3
- package/dist/auth/plugins/wrappers/passkey.js +2 -3
- package/dist/auth/plugins/wrappers/phone-number.d.ts +43 -1
- package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/phone-number.js +2 -3
- package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
- package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/sso.js +1 -2
- package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
- package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/two-factor.js +2 -3
- package/dist/auth/plugins/wrappers/username.d.ts +39 -5
- package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/username.js +2 -3
- package/dist/bin/build-config.js +5 -5
- package/dist/bin/compiler-policy.js +2 -3
- package/dist/bin/fixture.js +7 -5
- package/dist/bin/hmr-hook-register.js +1 -2
- package/dist/bin/migrate-targets.js +2 -3
- package/dist/bin/test-command.js +2 -3
- package/dist/bin/ts-loader-register.js +2 -3
- package/dist/bin/ts-loader-registration.js +2 -3
- package/dist/bin/typecheck-web.js +2 -3
- package/dist/cache/cache-manager.js +1 -2
- package/dist/cache/decorator.js +2 -3
- package/dist/cache/drivers.js +1 -2
- package/dist/cache/index.js +2 -3
- package/dist/cache-control/cache-control.js +1 -2
- package/dist/code-formatting/index.js +2 -3
- package/dist/code-formatting/oxfmt.js +2 -3
- package/dist/code-formatting/oxlint.js +2 -3
- package/dist/compress/compress.js +1 -2
- package/dist/compress/index.js +2 -2
- package/dist/compress/types.d.ts +1 -1
- package/dist/compress/types.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +2 -3
- package/dist/database/_batch_update.js +1 -2
- package/dist/database/base-model.js +4 -4
- package/dist/database/db.js +4 -4
- package/dist/database/knex.js +2 -3
- package/dist/database/puri-wrapper.js +2 -3
- package/dist/database/puri.js +23 -22
- package/dist/database/puri.types.js +1 -2
- package/dist/database/transaction-context.js +1 -2
- package/dist/database/upsert-builder.js +2 -3
- package/dist/dict/en.js +2 -3
- package/dist/dict/index.js +3 -3
- package/dist/dict/ko.js +2 -3
- package/dist/dict/rc-keys.js +1 -2
- package/dist/dict/sd.js +2 -3
- package/dist/dict/sonamu-dictionary.js +7 -6
- package/dist/dict/utils.js +2 -3
- package/dist/entity/entity-manager.d.ts +66 -66
- package/dist/entity/entity-manager.js +4 -4
- package/dist/entity/entity-template-cone.js +2 -3
- package/dist/entity/entity.js +21 -18
- package/dist/env.js +1 -2
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +2 -3
- package/dist/exceptions/so-exceptions.js +2 -3
- package/dist/filter/index.js +3 -2
- package/dist/filter/types.js +1 -2
- package/dist/filter/utils.js +7 -6
- package/dist/index.js +39 -5
- package/dist/logger/category.js +2 -3
- package/dist/logger/configure.js +5 -5
- package/dist/migration/code-generation.js +23 -16
- package/dist/migration/index-where-predicate.js +2 -3
- package/dist/migration/migration-set.js +2 -3
- package/dist/migration/migrator.js +2 -3
- package/dist/migration/postgresql-schema-reader.js +6 -9
- package/dist/migration/slack-confirm.js +2 -3
- package/dist/naite/naite-reporter.js +2 -3
- package/dist/naite/naite.js +10 -8
- package/dist/runtime-type.js +2 -3
- package/dist/ssr/hmr-opt-out.js +1 -2
- package/dist/ssr/index.js +7 -4
- package/dist/ssr/registry.js +1 -2
- package/dist/ssr/renderer.js +2 -3
- package/dist/storage/base-file.js +1 -2
- package/dist/storage/buffered-file.js +2 -3
- package/dist/storage/drivers.js +1 -2
- package/dist/storage/index.js +2 -3
- package/dist/storage/s3-driver.js +1 -2
- package/dist/storage/storage-manager.js +2 -3
- package/dist/storage/uploaded-file.js +2 -3
- package/dist/stream/__tests__/ws-test-helpers.js +2 -3
- package/dist/stream/index.js +11 -2
- package/dist/stream/sse.js +1 -2
- package/dist/stream/ws-audience-resolver.js +2 -3
- package/dist/stream/ws-audience.js +1 -2
- package/dist/stream/ws-cluster-bus.js +1 -2
- package/dist/stream/ws-delivery.js +2 -3
- package/dist/stream/ws-frame.js +1 -2
- package/dist/stream/ws-local-connection-store.js +2 -3
- package/dist/stream/ws-presence-index.js +1 -2
- package/dist/stream/ws-presence-store.js +2 -3
- package/dist/stream/ws-registry.js +2 -3
- package/dist/stream/ws-session-id.js +1 -2
- package/dist/stream/ws-telemetry-memory.js +3 -4
- package/dist/stream/ws-telemetry-trace.js +1 -2
- package/dist/stream/ws-telemetry.js +2 -3
- package/dist/stream/ws.js +2 -3
- package/dist/syncer/api-parser.js +2 -3
- package/dist/syncer/checksum.js +4 -4
- package/dist/syncer/code-generator.js +4 -4
- package/dist/syncer/entity-operations.js +2 -3
- package/dist/syncer/event-batcher.js +1 -2
- package/dist/syncer/file-copy.js +2 -3
- package/dist/syncer/file-patterns.js +2 -3
- package/dist/syncer/file-tracking.js +2 -3
- package/dist/syncer/filesystem-dependencies.js +1 -2
- package/dist/syncer/index.js +8 -2
- package/dist/syncer/module-loader.js +8 -6
- package/dist/syncer/syncer-actions.js +8 -7
- package/dist/syncer/syncer.js +13 -8
- package/dist/syncer/watcher.js +2 -3
- package/dist/tasks/decorator.js +1 -2
- package/dist/tasks/step-wrapper.js +2 -3
- package/dist/tasks/workflow-manager.js +2 -3
- package/dist/template/entity-converter.js +17 -16
- package/dist/template/helpers.js +2 -3
- package/dist/template/implementations/entity.template.js +2 -3
- package/dist/template/implementations/entry-server.template.js +2 -3
- package/dist/template/implementations/generated.template.js +2 -3
- package/dist/template/implementations/generated_http.template.js +6 -6
- package/dist/template/implementations/generated_sso.template.js +2 -3
- package/dist/template/implementations/http_validators.template.js +2 -3
- package/dist/template/implementations/init_types.template.js +2 -3
- package/dist/template/implementations/model.template.js +4 -4
- package/dist/template/implementations/model_test.template.js +2 -3
- package/dist/template/implementations/queries.template.js +2 -3
- package/dist/template/implementations/sd.template.js +2 -3
- package/dist/template/implementations/services.template.js +2 -3
- package/dist/template/implementations/view_form.template.js +12 -9
- package/dist/template/implementations/view_id_all_select.template.js +2 -3
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +19 -17
- package/dist/template/implementations/view_search_input.template.js +2 -3
- package/dist/template/index.js +9 -3
- package/dist/template/template-manager.js +2 -3
- package/dist/template/template-types.js +1 -2
- package/dist/template/template.js +2 -3
- package/dist/template/zod-converter.js +54 -47
- package/dist/testing/_relation-graph.js +2 -3
- package/dist/testing/bootstrap.js +2 -3
- package/dist/testing/data-explorer.js +2 -3
- package/dist/testing/dev-test-routes.js +2 -3
- package/dist/testing/dev-vitest-manager.js +15 -12
- package/dist/testing/faker-mappings.js +1 -2
- package/dist/testing/filesystem.js +2 -3
- package/dist/testing/fixture-generator.js +2 -3
- package/dist/testing/fixture-loader.js +1 -2
- package/dist/testing/fixture-manager.js +12 -9
- package/dist/testing/global-setup.js +5 -5
- package/dist/testing/index.js +6 -3
- package/dist/testing/naite-vitest-reporter.js +1 -2
- package/dist/testing/parallel-db-manager.js +2 -3
- package/dist/testing/vitest-helpers.js +2 -3
- package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
- package/dist/tooling/cdd-service.js +1 -2
- package/dist/tooling/cli-tooling.js +1 -2
- package/dist/tooling/fixture-service.js +1 -2
- package/dist/tooling/index.js +1 -2
- package/dist/tooling/test-run-client.js +2 -3
- package/dist/tsdown.api.config.js +1 -2
- package/dist/types/types.js +2 -3
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +4 -5
- package/dist/ui/ai-client.d.ts +2 -2
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +9 -8
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +11 -8
- package/dist/ui/async-route.js +1 -2
- package/dist/ui/cdd-service.js +22 -21
- package/dist/ui/migrations-api.js +6 -5
- package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
- package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/async-utils.js +1 -2
- package/dist/utils/class-name.js +1 -2
- package/dist/utils/console-util.js +1 -2
- package/dist/utils/controller.js +2 -3
- package/dist/utils/esm-utils.js +1 -2
- package/dist/utils/fs-utils.js +2 -3
- package/dist/utils/lodash-able.js +1 -2
- package/dist/utils/model.js +1 -2
- package/dist/utils/object-utils.js +2 -3
- package/dist/utils/path-utils.js +2 -3
- package/dist/utils/process-utils.js +2 -3
- package/dist/utils/runtime-value.js +1 -2
- package/dist/utils/sql-parser.js +2 -3
- package/dist/utils/type-utils.js +8 -8
- package/dist/utils/utils.js +2 -3
- package/dist/utils/zod-error.js +2 -3
- package/dist/vector/chunking.js +1 -2
- package/dist/vector/config.js +1 -2
- package/dist/vector/embedding.js +4 -4
- package/package.json +67 -67
- package/src/ai/agents/agent.ts +1 -1
- package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
- package/src/api/__tests__/sonamu.websocket.test.ts +6 -10
- package/src/api/config.ts +1 -1
- package/src/api/context.ts +2 -8
- package/src/api/sonamu.ts +26 -21
- package/src/auth/audit-log/plugin.ts +2 -0
- package/src/compress/types.ts +1 -1
- package/src/exceptions/error-handler.ts +3 -2
- package/src/template/implementations/model.template.ts +3 -3
- package/src/template/implementations/view_list.template.ts +12 -13
- package/src/ui/ai-api.ts +4 -2
- package/src/ui/ai-client.ts +2 -2
- package/src/ui/api.ts +58 -62
- package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
- package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
|
@@ -4,7 +4,7 @@ import { Sonamu, init_sonamu } from "../../api/sonamu.js";
|
|
|
4
4
|
import { Template, init_template } from "../template.js";
|
|
5
5
|
import inflection from "inflection";
|
|
6
6
|
import { diff, unique } from "radashi";
|
|
7
|
-
|
|
7
|
+
// src/template/implementations/queries.template.ts
|
|
8
8
|
init_code_converters();
|
|
9
9
|
init_sonamu();
|
|
10
10
|
init_types();
|
|
@@ -87,7 +87,6 @@ ${functions.join("\n\n")}
|
|
|
87
87
|
};
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
|
-
//#endregion
|
|
91
90
|
export { Template__queries };
|
|
92
91
|
|
|
93
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVtcGxhdGUvaW1wbGVtZW50YXRpb25zL3F1ZXJpZXMudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGRpZmYsIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IGFwaVBhcmFtVG9Uc0NvZGUsIGFwaVBhcmFtVHlwZVRvVHNUeXBlIH0gZnJvbSBcIi4uLy4uL2FwaS9jb2RlLWNvbnZlcnRlcnNcIjtcbmltcG9ydCB7IHR5cGUgRXh0ZW5kZWRBcGkgfSBmcm9tIFwiLi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3F1ZXJpZXMgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwicXVlcmllc1wiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBxdWVyaWVzLmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7fTogVGVtcGxhdGVPcHRpb25zW1wicXVlcmllc1wiXSkge1xuICAgIGNvbnN0IHsgYXBpcyB9ID0gU29uYW11LnN5bmNlcjtcblxuICAgIC8vIHRhbnN0YWNrLXF1ZXJ566W8IO2PrO2VqO2VnCBBUEnrp4wg7ZWE7YSw66eBXG4gICAgY29uc3QgcXVlcnlBcGlzID0gYXBpcy5maWx0ZXIoKGFwaSkgPT4gYXBpLm9wdGlvbnMuY2xpZW50cz8uaW5jbHVkZXMoXCJ0YW5zdGFjay1xdWVyeVwiKSk7XG5cbiAgICAvLyDrqqjrjbjrs4TroZwg6re466O57ZmUXG4gICAgY29uc3QgYXBpc0J5TW9kZWwgPSBuZXcgTWFwPHN0cmluZywgRXh0ZW5kZWRBcGlbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGFwaSBvZiBxdWVyeUFwaXMpIHtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IGFwaS5tb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIik7XG4gICAgICBpZiAoIWFwaXNCeU1vZGVsLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgIGFwaXNCeU1vZGVsLnNldChtb2RlbE5hbWUsIFtdKTtcbiAgICAgIH1cbiAgICAgIGFwaXNCeU1vZGVsLmdldChtb2RlbE5hbWUpPy5wdXNoKGFwaSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZXNwYWNlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCB0eXBlUGFyYW1OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW21vZGVsTmFtZSwgbW9kZWxBcGlzXSBvZiBhcGlzQnlNb2RlbCkge1xuICAgICAgY29uc3QgZnVuY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwaSBvZiBtb2RlbEFwaXMpIHtcbiAgICAgICAgLy8gQ29udGV4dCDsoJzsmbjtlZwg7YyM652866+47YSwXG4gICAgICAgIGNvbnN0IHBhcmFtc1dpdGhvdXRDb250ZXh0ID0gYXBpLnBhcmFtZXRlcnMuZmlsdGVyKFxuICAgICAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzUmVmS25leChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIShwYXJhbS5vcHRpb25hbCAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyDtg4DsnoUg7YyM652866+47YSwIOydtOumhCDsiJjsp5FcbiAgICAgICAgdHlwZVBhcmFtTmFtZXMgPSB0eXBlUGFyYW1OYW1lcy5jb25jYXQoYXBpLnR5cGVQYXJhbWV0ZXJzLm1hcCgodHApID0+IHRwLmlkKSk7XG5cbiAgICAgICAgLy8g7YOA7J6FIO2MjOudvOuvuO2EsCDsoJXsnZhcbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA9IGFwaS50eXBlUGFyYW1ldGVyc1xuICAgICAgICAgIC5tYXAoKHR5cGVQYXJhbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHR5cGVQYXJhbSwgaW1wb3J0S2V5cyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpO1xuICAgICAgICBjb25zdCB0eXBlUGFyYW1zRGVmID0gdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA/IGA8JHt0eXBlUGFyYW1ldGVyc0FzVHNUeXBlfT5gIDogXCJcIjtcblxuICAgICAgICAvLyDtjIzrnbzrr7jthLAg7KCV7J2YXG4gICAgICAgIGNvbnN0IHBhcmFtc0RlZiA9IGFwaVBhcmFtVG9Uc0NvZGUocGFyYW1zV2l0aG91dENvbnRleHQsIGltcG9ydEtleXMpO1xuICAgICAgICBjb25zdCBwYXJhbU5hbWVzID0gcGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBwLm5hbWUpLmpvaW4oXCIsIFwiKTtcblxuICAgICAgICAvLyBzZXJ2aWNlTWV0aG9kTmFtZSDqs4TsgrAgKHNlcnZpY2VzLnRlbXBsYXRlLnRz7JmAIOuPmeydvO2VnCDroZzsp4EpXG4gICAgICAgIGNvbnN0IHNlcnZpY2VNZXRob2ROYW1lID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgPyBgZ2V0JHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgICAgIDogYXBpLm1ldGhvZE5hbWU7XG5cbiAgICAgICAgLy8gU1NSUXVlcnkg7ZWo7IiYIOyDneyEsSAo7ZWo7IiY66qF64+EIHNlcnZpY2VNZXRob2ROYW1lIOyCrOyaqSlcbiAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgYFxuICBleHBvcnQgY29uc3QgJHtzZXJ2aWNlTWV0aG9kTmFtZX0gPSAke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSk6IFNTUlF1ZXJ5ID0+XG4gICAgY3JlYXRlU1NSUXVlcnkoJyR7YXBpLm1vZGVsTmFtZX0nLCAnJHthcGkubWV0aG9kTmFtZX0nLCBbJHtwYXJhbU5hbWVzfV0sIFsnJHttb2RlbE5hbWV9JywgJyR7c2VydmljZU1ldGhvZE5hbWV9J10pO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBuYW1lc3BhY2VzLnB1c2goXG4gICAgICAgIGBcbmV4cG9ydCBuYW1lc3BhY2UgJHttb2RlbE5hbWV9U2VydmljZSB7XG4ke2Z1bmN0aW9ucy5qb2luKFwiXFxuXFxuXCIpfVxufVxuICAgICAgYC50cmltKCksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHRhbnN0YWNrLXF1ZXJ5IEFQSeqwgCDsl4bsnLzrqbQg7Zes7Y28IO2VqOyImOyZgCBpbXBvcnTrpbwg7Y+
|
|
92
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVtcGxhdGUvaW1wbGVtZW50YXRpb25zL3F1ZXJpZXMudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGRpZmYsIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IGFwaVBhcmFtVG9Uc0NvZGUsIGFwaVBhcmFtVHlwZVRvVHNUeXBlIH0gZnJvbSBcIi4uLy4uL2FwaS9jb2RlLWNvbnZlcnRlcnNcIjtcbmltcG9ydCB7IHR5cGUgRXh0ZW5kZWRBcGkgfSBmcm9tIFwiLi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3F1ZXJpZXMgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwicXVlcmllc1wiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBxdWVyaWVzLmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7fTogVGVtcGxhdGVPcHRpb25zW1wicXVlcmllc1wiXSkge1xuICAgIGNvbnN0IHsgYXBpcyB9ID0gU29uYW11LnN5bmNlcjtcblxuICAgIC8vIHRhbnN0YWNrLXF1ZXJ566W8IO2PrO2VqO2VnCBBUEnrp4wg7ZWE7YSw66eBXG4gICAgY29uc3QgcXVlcnlBcGlzID0gYXBpcy5maWx0ZXIoKGFwaSkgPT4gYXBpLm9wdGlvbnMuY2xpZW50cz8uaW5jbHVkZXMoXCJ0YW5zdGFjay1xdWVyeVwiKSk7XG5cbiAgICAvLyDrqqjrjbjrs4TroZwg6re466O57ZmUXG4gICAgY29uc3QgYXBpc0J5TW9kZWwgPSBuZXcgTWFwPHN0cmluZywgRXh0ZW5kZWRBcGlbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGFwaSBvZiBxdWVyeUFwaXMpIHtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IGFwaS5tb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIik7XG4gICAgICBpZiAoIWFwaXNCeU1vZGVsLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgIGFwaXNCeU1vZGVsLnNldChtb2RlbE5hbWUsIFtdKTtcbiAgICAgIH1cbiAgICAgIGFwaXNCeU1vZGVsLmdldChtb2RlbE5hbWUpPy5wdXNoKGFwaSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZXNwYWNlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCB0eXBlUGFyYW1OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW21vZGVsTmFtZSwgbW9kZWxBcGlzXSBvZiBhcGlzQnlNb2RlbCkge1xuICAgICAgY29uc3QgZnVuY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwaSBvZiBtb2RlbEFwaXMpIHtcbiAgICAgICAgLy8gQ29udGV4dCDsoJzsmbjtlZwg7YyM652866+47YSwXG4gICAgICAgIGNvbnN0IHBhcmFtc1dpdGhvdXRDb250ZXh0ID0gYXBpLnBhcmFtZXRlcnMuZmlsdGVyKFxuICAgICAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzUmVmS25leChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIShwYXJhbS5vcHRpb25hbCAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyDtg4DsnoUg7YyM652866+47YSwIOydtOumhCDsiJjsp5FcbiAgICAgICAgdHlwZVBhcmFtTmFtZXMgPSB0eXBlUGFyYW1OYW1lcy5jb25jYXQoYXBpLnR5cGVQYXJhbWV0ZXJzLm1hcCgodHApID0+IHRwLmlkKSk7XG5cbiAgICAgICAgLy8g7YOA7J6FIO2MjOudvOuvuO2EsCDsoJXsnZhcbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA9IGFwaS50eXBlUGFyYW1ldGVyc1xuICAgICAgICAgIC5tYXAoKHR5cGVQYXJhbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHR5cGVQYXJhbSwgaW1wb3J0S2V5cyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpO1xuICAgICAgICBjb25zdCB0eXBlUGFyYW1zRGVmID0gdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA/IGA8JHt0eXBlUGFyYW1ldGVyc0FzVHNUeXBlfT5gIDogXCJcIjtcblxuICAgICAgICAvLyDtjIzrnbzrr7jthLAg7KCV7J2YXG4gICAgICAgIGNvbnN0IHBhcmFtc0RlZiA9IGFwaVBhcmFtVG9Uc0NvZGUocGFyYW1zV2l0aG91dENvbnRleHQsIGltcG9ydEtleXMpO1xuICAgICAgICBjb25zdCBwYXJhbU5hbWVzID0gcGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBwLm5hbWUpLmpvaW4oXCIsIFwiKTtcblxuICAgICAgICAvLyBzZXJ2aWNlTWV0aG9kTmFtZSDqs4TsgrAgKHNlcnZpY2VzLnRlbXBsYXRlLnRz7JmAIOuPmeydvO2VnCDroZzsp4EpXG4gICAgICAgIGNvbnN0IHNlcnZpY2VNZXRob2ROYW1lID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgPyBgZ2V0JHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgICAgIDogYXBpLm1ldGhvZE5hbWU7XG5cbiAgICAgICAgLy8gU1NSUXVlcnkg7ZWo7IiYIOyDneyEsSAo7ZWo7IiY66qF64+EIHNlcnZpY2VNZXRob2ROYW1lIOyCrOyaqSlcbiAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgYFxuICBleHBvcnQgY29uc3QgJHtzZXJ2aWNlTWV0aG9kTmFtZX0gPSAke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSk6IFNTUlF1ZXJ5ID0+XG4gICAgY3JlYXRlU1NSUXVlcnkoJyR7YXBpLm1vZGVsTmFtZX0nLCAnJHthcGkubWV0aG9kTmFtZX0nLCBbJHtwYXJhbU5hbWVzfV0sIFsnJHttb2RlbE5hbWV9JywgJyR7c2VydmljZU1ldGhvZE5hbWV9J10pO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBuYW1lc3BhY2VzLnB1c2goXG4gICAgICAgIGBcbmV4cG9ydCBuYW1lc3BhY2UgJHttb2RlbE5hbWV9U2VydmljZSB7XG4ke2Z1bmN0aW9ucy5qb2luKFwiXFxuXFxuXCIpfVxufVxuICAgICAgYC50cmltKCksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHRhbnN0YWNrLXF1ZXJ5IEFQSeqwgCDsl4bsnLzrqbQg7Zes7Y28IO2VqOyImOyZgCBpbXBvcnTrpbwg7Y+s7ZWo7ZWY7KeAIOyViuyKteuLiOuLpC5cbiAgICAvLyDsg4gg7ZSE66Gc7KCd7Yq47JeQ7IScIOyyqyDruYzrk5wg7IucIHN5bmPqsIAg7JWE7KeBIOyViCDrkJjslrQgbmFtZXNwYWNl6rCAIOu5hOyWtOyeiOydhCDsiJgg7J6I6rOgLFxuICAgIC8vIOydtOuVjCBjcmVhdGVTU1JRdWVyeeqwgCB1bnVzZWTroZwg67mM65OcIOyXkOufrOqwgCDrsJzsg53tlZjripQg6rKD7J2EIOuwqeyngO2VqeuLiOuLpC5cbiAgICBjb25zdCBoYXNRdWVyaWVzID0gbmFtZXNwYWNlcy5sZW5ndGggPiAwO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keTogbmFtZXNwYWNlcy5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgaW1wb3J0S2V5czogZGlmZih1bmlxdWUoaW1wb3J0S2V5cyksIHR5cGVQYXJhbU5hbWVzKSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IGhhc1F1ZXJpZXNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBcIi8qKlwiLFxuICAgICAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgICAgICBcIiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgICAgICAgXCIgKi9cIixcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIi8qIG94bGludC1kaXNhYmxlICovXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgYGltcG9ydCB0eXBlIHsgU1NSUXVlcnkgfSBmcm9tICdzb25hbXUvc3NyJztgLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIGAvLyBTU1JRdWVyeSDtl6ztjbwg7ZWo7IiYYCxcbiAgICAgICAgICAgIGBmdW5jdGlvbiBjcmVhdGVTU1JRdWVyeShtb2RlbE5hbWU6IHN0cmluZywgbWV0aG9kTmFtZTogc3RyaW5nLCBwYXJhbXM6IGFueVtdLCBzZXJ2aWNlS2V5OiBbc3RyaW5nLCBzdHJpbmddKTogU1NSUXVlcnkge2AsXG4gICAgICAgICAgICBgICByZXR1cm4geyBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIHBhcmFtcywgc2VydmljZUtleSwgX19icmFuZDogJ1NTUlF1ZXJ5JyB9IGFzIFNTUlF1ZXJ5O2AsXG4gICAgICAgICAgICBgfWAsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICBcIi8qKlwiLFxuICAgICAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgICAgICBcIiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgICAgICAgXCIgKi9cIixcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIi8qIG94bGludC1kaXNhYmxlICovXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR2tGLHFCQUFBO0FBRXpDLFlBQUE7QUFFTyxXQUFBO0FBQ1YsY0FBQTtBQUV0QyxJQUFhLG9CQUFiLGNBQXVDLFNBQVM7Q0FDOUMsY0FBYztFQUNaLE1BQU0sU0FBUztDQUNqQjtDQUVBLG1CQUFtQjtFQUNqQixNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87RUFDOUIsT0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTTtFQUNSO0NBQ0Y7Q0FFQSxPQUFPLElBQWdDO0VBQ3JDLE1BQU0sRUFBRSxTQUFTLE9BQU87RUFHeEIsTUFBTSxZQUFZLEtBQUssUUFBUSxRQUFRLElBQUksUUFBUSxTQUFTLFNBQVMsZ0JBQWdCLENBQUM7RUFHdEYsTUFBTSw4QkFBYyxJQUFJLElBQTJCO0VBQ25ELEtBQUssTUFBTSxPQUFPLFdBQVc7R0FDM0IsTUFBTSxZQUFZLElBQUksVUFBVSxRQUFRLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxVQUFVLEVBQUU7R0FDMUUsSUFBSSxDQUFDLFlBQVksSUFBSSxTQUFTLEdBQzVCLFlBQVksSUFBSSxXQUFXLENBQUMsQ0FBQztHQUUvQixZQUFZLElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxHQUFHO0VBQ3RDO0VBRUEsTUFBTSxhQUF1QixDQUFDO0VBQzlCLE1BQU0sYUFBdUIsQ0FBQztFQUM5QixJQUFJLGlCQUEyQixDQUFDO0VBRWhDLEtBQUssTUFBTSxDQUFDLFdBQVcsY0FBYyxhQUFhO0dBQ2hELE1BQU0sWUFBc0IsQ0FBQztHQUU3QixLQUFLLE1BQU0sT0FBTyxXQUFXO0lBRTNCLE1BQU0sdUJBQXVCLElBQUksV0FBVyxRQUN6QyxVQUNDLENBQUMsYUFBYSxVQUFVLE1BQU0sSUFBSSxLQUNsQyxDQUFDLGFBQWEsVUFBVSxNQUFNLElBQUksS0FDbEMsRUFBRSxNQUFNLFlBQVksTUFBTSxLQUFLLFdBQVcsR0FBRyxFQUNqRDtJQUdBLGlCQUFpQixlQUFlLE9BQU8sSUFBSSxlQUFlLEtBQUssT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUc1RSxNQUFNLHlCQUF5QixJQUFJLGVBQ2hDLEtBQUssY0FBYztLQUNsQixPQUFPLHFCQUFxQixXQUFXLFVBQVU7SUFDbkQsQ0FBQyxDQUFDLENBQ0QsS0FBSyxJQUFJO0lBQ1osTUFBTSxnQkFBZ0IseUJBQXlCLElBQUksdUJBQXVCLEtBQUs7SUFHL0UsTUFBTSxZQUFZLGlCQUFpQixzQkFBc0IsVUFBVTtJQUNuRSxNQUFNLGFBQWEscUJBQXFCLEtBQUssTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSTtJQUdwRSxNQUFNLG9CQUFvQixJQUFJLFFBQVEsZUFDbEMsTUFBTSxXQUFXLFNBQVMsSUFBSSxRQUFRLFlBQVksTUFDbEQsSUFBSTtJQUdSLFVBQVUsS0FDUjtpQkFDTyxrQkFBa0IsS0FBSyxjQUFjLEdBQUcsVUFBVTtzQkFDN0MsSUFBSSxVQUFVLE1BQU0sSUFBSSxXQUFXLE1BQU0sV0FBVyxPQUFPLFVBQVUsTUFBTSxrQkFBa0I7WUFDdkcsS0FBSyxDQUNUO0dBQ0Y7R0FFQSxXQUFXLEtBQ1Q7bUJBQ1csVUFBVTtFQUMzQixVQUFVLEtBQUssTUFBTSxFQUFFOztRQUVqQixLQUFLLENBQ1A7RUFDRjtFQUtBLE1BQU0sYUFBYSxXQUFXLFNBQVM7RUFFdkMsT0FBTztHQUNMLEdBQUcsS0FBSyxpQkFBaUI7R0FDekIsTUFBTSxXQUFXLEtBQUssTUFBTTtHQUM1QixZQUFZLEtBQUssT0FBTyxVQUFVLEdBQUcsY0FBYztHQUNuRCxlQUFlLGFBQ1g7SUFDRTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0dBQ0YsSUFDQTtJQUNFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0dBQ0Y7RUFDTjtDQUNGO0FBQ0YifQ==
|
|
@@ -5,7 +5,7 @@ import { extractObjectDeclaration, init_helpers } from "../helpers.js";
|
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import fs from "node:fs";
|
|
7
7
|
import { fileURLToPath } from "node:url";
|
|
8
|
-
|
|
8
|
+
// src/template/implementations/sd.template.ts
|
|
9
9
|
init_sonamu();
|
|
10
10
|
init_entity_manager();
|
|
11
11
|
init_helpers();
|
|
@@ -354,7 +354,6 @@ ${labels.map(({ key, value }) => ` "${key}": "${this.escapeString(value)}",`).j
|
|
|
354
354
|
return str.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\n/g, "\\n");
|
|
355
355
|
}
|
|
356
356
|
};
|
|
357
|
-
//#endregion
|
|
358
357
|
export { Template__sd };
|
|
359
358
|
|
|
360
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QudGVtcGxhdGUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9zZC50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbiB9IGZyb20gXCIuLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG4vKipcbiAqIFNvbmFtdSBEaWN0aW9uYXJ5IChTRCkg7YWc7ZSM66a/XG4gKiBpMThu7J2EIOychO2VnCBzZC5nZW5lcmF0ZWQudHMg7YyM7J287J2EIOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19zZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJzZFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoX25hbWVzPzogRW50aXR5TmFtZXNSZWNvcmQsIHNkVGFyZ2V0PzogXCJhcGlcIiB8IFwid2ViXCIgfCBcImFwcFwiKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2RUYXJnZXQgPz8gXCJhcGlcIjtcbiAgICAvLyBhcGkuZGly7J2AIOyDgeuMgCDqsr3roZwoXCJhcGlcIinsnbTrr4DroZwsIHdlYi9hcHDrj4Qg7IOB64yAIOqyveuhnOuhnCDrp57stqRcbiAgICBjb25zdCBkaXIgPSB0YXJnZXQgPT09IFwiYXBpXCIgPyBTb25hbXUuY29uZmlnLmFwaS5kaXIgOiB0YXJnZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9pMThuYCxcbiAgICAgIHBhdGg6IFwic2QuZ2VuZXJhdGVkLnRzXCIsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcihvcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbXCJzZFwiXSkge1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGkxOG5Db25maWcgPSBTb25hbXUuY29uZmlnLmkxOG47XG5cbiAgICBjb25zdCB7IGRlZmF1bHRMb2NhbGUsIHN1cHBvcnRlZExvY2FsZXMgfSA9IGkxOG5Db25maWc7XG5cbiAgICAvLyBlbnRpdHkuanNvbuyXkOyEnCBlbnRpdHkgbGFiZWxzIOy2lOy2nFxuICAgIGNvbnN0IGVudGl0eUxhYmVscyA9IHRoaXMuZXh0cmFjdEVudGl0eUxhYmVscygpO1xuXG4gICAgLy8gcmMta2V5cyDshozsiqQg7L2U65OcIOy2lOy2nFxuICAgIGNvbnN0IHJjS2V5c1NvdXJjZUNvZGUgPSB0aGlzLmV4dHJhY3RSQ0tleXNTb3VyY2VDb2RlKCk7XG5cbiAgICAvLyDtlIzrnqvtj7zrs4QgbG9jYWxlIOq0gOumrCDsvZTrk5xcbiAgICBjb25zdCBsb2NhbGVNYW5hZ2VtZW50Q29kZSA9XG4gICAgICB0YXJnZXQgPT09IFwiYXBpXCJcbiAgICAgICAgPyBgXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7XG5cbmNvbnN0IERFRkFVTFRfTE9DQUxFID0gXCIke2RlZmF1bHRMb2NhbGV9XCIgYXMgY29uc3Q7XG5jb25zdCBTVVBQT1JURURfTE9DQUxFUyA9ICR7SlNPTi5zdHJpbmdpZnkoc3VwcG9ydGVkTG9jYWxlcyl9IGFzIGNvbnN0O1xuZnVuY3Rpb24gZ2V0Q3VycmVudExvY2FsZSgpOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjdHggPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIHJldHVybiBjdHgubG9jYWxlIGFzICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0gPz8gREVGQVVMVF9MT0NBTEU7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gREVGQVVMVF9MT0NBTEU7XG4gIH1cbn1cbmAudHJpbSgpXG4gICAgICAgIDogYFxuY29uc3QgREVGQVVMVF9MT0NBTEUgPSBcIiR7ZGVmYXVsdExvY2FsZX1cIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfTE9DQUxFUyA9ICR7SlNPTi5zdHJpbmdpZnkoc3VwcG9ydGVkTG9jYWxlcyl9IGFzIGNvbnN0O1xubGV0IF9jdXJyZW50TG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdID0gREVGQVVMVF9MT0NBTEU7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2NhbGUobG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdKSB7XG4gIF9jdXJyZW50TG9jYWxlID0gbG9jYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2FsZSgpOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdIHtcbiAgcmV0dXJuIF9jdXJyZW50TG9jYWxlO1xufVxuYC50cmltKCk7XG5cbiAgICAvLyBsb2NhbGUgaW1wb3J0XG4gICAgY29uc3QgbG9jYWxlSW1wb3J0cyA9IHN1cHBvcnRlZExvY2FsZXNcbiAgICAgIC5tYXAoKGxvY2FsZSkgPT4gYGltcG9ydCAke2xvY2FsZX0gZnJvbSBcIi4vJHtsb2NhbGV9XCI7YClcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gICAgLy8gZW50aXR5TGFiZWxz66W8IOy9lOuTnOuhnCDrs4DtmZhcbiAgICBjb25zdCBlbnRpdHlMYWJlbHNDb2RlID0gdGhpcy5nZW5lcmF0ZUVudGl0eUxhYmVsc0NvZGUoZW50aXR5TGFiZWxzKTtcblxuICAgIC8vIGxvY2FsZeuzhCByY0tleXMg67OA7IiY66qFIOunpO2VkVxuICAgIGNvbnN0IGdldFJDS2V5c1Zhck5hbWUgPSAobG9jYWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIHN1cHBvcnRlZExvY2FsZXPsl5Ag7Y+s7ZWo65CcIGxvY2FsZeunjCDtlbTri7kg67OA7IiYIOuwmO2ZmFxuICAgICAgaWYgKGxvY2FsZSA9PT0gXCJrb1wiICYmIHN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoXCJrb1wiKSkgcmV0dXJuIFwicmNLZXlzS29cIjtcbiAgICAgIGlmIChsb2NhbGUgPT09IFwiZW5cIiAmJiBzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwiZW5cIikpIHJldHVybiBcInJjS2V5c0VuXCI7XG4gICAgICAvLyBmYWxsYmFjazogZGVmYXVsdExvY2FsZeydmCByY0tleXNcbiAgICAgIGlmIChsb2NhbGUgIT09IGRlZmF1bHRMb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGdldFJDS2V5c1Zhck5hbWUoZGVmYXVsdExvY2FsZSk7XG4gICAgICB9XG4gICAgICAvLyBkZWZhdWx0TG9jYWxl7KGw7LCoIOyXhuuKlCDqsr3smrAgZW7snYQgZmFsbGJhY2vsnLzroZwg7IKs7JqpXG4gICAgICByZXR1cm4gXCJyY0tleXNFblwiO1xuICAgIH07XG5cbiAgICBjb25zdCBib2R5ID0gYFxuJHtsb2NhbGVNYW5hZ2VtZW50Q29kZX1cblxuJHtsb2NhbGVJbXBvcnRzfVxuXG4vLyByZWFjdC1jb21wb25lbnRzIGkxOG4ga2V5c1xuJHtzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwia29cIikgPyByY0tleXNTb3VyY2VDb2RlLmtvIDogXCJcIn1cblxuJHtzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwiZW5cIikgPyByY0tleXNTb3VyY2VDb2RlLmVuIDogXCJcIn1cblxuLy8gZW50aXR5Lmpzb27sl5DshJwg7LaU7Lac7ZWcIGVudGl0eSBsYWJlbHMgKGRlZmF1bHRMb2NhbGUg7KCE7JqpKVxuJHtlbnRpdHlMYWJlbHNDb2RlfVxuXG4vLyBkZWZhdWx0TG9jYWxl7J2YIGRpY3Rpb25hcnnrpbwg6riw7KSA7Jy866GcIO2CpCDstpTstpxcbnR5cGUgUkNLZXlzID0gdHlwZW9mICR7Z2V0UkNLZXlzVmFyTmFtZShkZWZhdWx0TG9jYWxlKX07XG50eXBlIFByb2plY3REaWN0aW9uYXJ5ID0gdHlwZW9mICR7ZGVmYXVsdExvY2FsZX07XG50eXBlIEVudGl0eUxhYmVscyA9IHR5cGVvZiBlbnRpdHlMYWJlbHM7XG50eXBlIFJhd01lcmdlZERpY3Rpb25hcnkgPSBSQ0tleXMgJiBPbWl0PEVudGl0eUxhYmVscywga2V5b2YgKFJDS2V5cyAmIFByb2plY3REaWN0aW9uYXJ5KT4gJiBQcm9qZWN0RGljdGlvbmFyeTtcblxuLy8g7YKk64qUIOycoOyngO2VmOuQmCwg6rCSIO2DgOyeheydgCBzdHJpbmcg65iQ64qUIO2VqOyImOuhnCDsnbzrsJjtmZQgKOuLpOuluCBsb2NhbGXsnZgg66as7YSw65+0IO2DgOyehSDstqnrj4wg67Cp7KeAKVxuZXhwb3J0IHR5cGUgTWVyZ2VkRGljdGlvbmFyeSA9IHtcbiAgW0sgaW4ga2V5b2YgUmF3TWVyZ2VkRGljdGlvbmFyeV06IFJhd01lcmdlZERpY3Rpb25hcnlbS10gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgUCkgPT4gc3RyaW5nXG4gICAgPyAoLi4uYXJnczogUCkgPT4gc3RyaW5nXG4gICAgOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRGljdEtleSA9IGtleW9mIE1lcmdlZERpY3Rpb25hcnk7XG5leHBvcnQgdHlwZSBMb2NhbGl6ZWRTdHJpbmcgPSBzdHJpbmcgJiB7IF9fYnJhbmQ6IFwiTG9jYWxpemVkU3RyaW5nXCIgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUxvY2FsZShkaWN0OiBQYXJ0aWFsPE1lcmdlZERpY3Rpb25hcnk+KSB7XG4gIHJldHVybiBkaWN0O1xufVxuXG4vLyDqsIEgbG9jYWxl67OE66GcIHJjLWtleXMgKyBlbnRpdHkgbGFiZWxzICsg7ZSE66Gc7KCd7Yq4IGRpY3Qg7ZWp7LmoXG5jb25zdCBkaWN0aW9uYXJpZXM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8TWVyZ2VkRGljdGlvbmFyeT4+ID0ge1xuICAke2RlZmF1bHRMb2NhbGV9OiB7IC4uLiR7Z2V0UkNLZXlzVmFyTmFtZShkZWZhdWx0TG9jYWxlKX0sIC4uLmVudGl0eUxhYmVscywgLi4uJHtkZWZhdWx0TG9jYWxlfSB9LFxuICAke3N1cHBvcnRlZExvY2FsZXNcbiAgICAuZmlsdGVyKChsb2NhbGUpID0+IGxvY2FsZSAhPT0gZGVmYXVsdExvY2FsZSlcbiAgICAubWFwKChsb2NhbGUpID0+IGAgICR7bG9jYWxlfTogeyAuLi4ke2dldFJDS2V5c1Zhck5hbWUobG9jYWxlKX0sIC4uLiR7bG9jYWxlfSB9LGApXG4gICAgLmpvaW4oXCJcXG5cIil9XG59O1xuXG50eXBlIFNEUmV0dXJuVHlwZTxLIGV4dGVuZHMgRGljdEtleT4gPSBNZXJnZWREaWN0aW9uYXJ5W0tdIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIFApID0+IHN0cmluZ1xuICA/ICguLi5hcmdzOiBQKSA9PiBMb2NhbGl6ZWRTdHJpbmdcbiAgOiBMb2NhbGl6ZWRTdHJpbmc7XG5cbmZ1bmN0aW9uIGdldERpY3RWYWx1ZTxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLLCBsb2NhbGU6IHN0cmluZyk6IFNEUmV0dXJuVHlwZTxLPiB7XG4gIC8vIDEuIOyngOygleuQnCBsb2NhbGXsl5DshJwg7KGw7ZqMXG4gIGNvbnN0IGRpY3QgPSBkaWN0aW9uYXJpZXNbbG9jYWxlXTtcbiAgaWYgKGRpY3Q/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGljdFtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICB9XG5cbiAgLy8gMi4gZGVmYXVsdCBsb2NhbGXsl5DshJwg7KGw7ZqMXG4gIGlmIChsb2NhbGUgIT09IERFRkFVTFRfTE9DQUxFICYmIGRpY3Rpb25hcmllc1tERUZBVUxUX0xPQ0FMRV0/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGljdGlvbmFyaWVzW0RFRkFVTFRfTE9DQUxFXVtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICB9XG5cbiAgLy8gMy4gc3VwcG9ydGVkIGxvY2FsZXMg7Iic7ZqMXG4gIGZvciAoY29uc3Qgc3VwcG9ydGVkTG9jYWxlIG9mIFNVUFBPUlRFRF9MT0NBTEVTKSB7XG4gICAgaWYgKHN1cHBvcnRlZExvY2FsZSAhPT0gbG9jYWxlICYmIHN1cHBvcnRlZExvY2FsZSAhPT0gREVGQVVMVF9MT0NBTEUpIHtcbiAgICAgIGlmIChkaWN0aW9uYXJpZXNbc3VwcG9ydGVkTG9jYWxlXT8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZGljdGlvbmFyaWVzW3N1cHBvcnRlZExvY2FsZV1ba2V5XSBhcyB1bmtub3duIGFzIFNEUmV0dXJuVHlwZTxLPjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyA0LiDrqqjrkZAg7Iuk7YyoIOyLnCBrZXkg67CY7ZmYXG4gIHJldHVybiBrZXkgYXMgdW5rbm93biBhcyBTRFJldHVyblR5cGU8Sz47XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkg7ZWo7IiYXG4gKiBsb2NhbGXsl5Ag66ee64qUIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTRChcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCLsoIDsnqVcIiAoTG9jYWxpemVkU3RyaW5nKVxuICogU0QoXCJ1c2VyLm5vdEZvdW5kXCIpKDEpICAvLyDihpIgXCLsobTsnqztlZjsp4Ag7JWK64qUIFVzZXIgSUQgMVwiIChMb2NhbGl6ZWRTdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTRDxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLKTogU0RSZXR1cm5UeXBlPEs+IHtcbiAgY29uc3QgbG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn1cblxuLyoqXG4gKiDtirnsoJUgbG9jYWxl7J2YIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWY64qUIO2VqOyImOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IEVOID0gU0QubG9jYWxlKFwiZW5cIik7XG4gKiBFTihcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCJTYXZlXCJcbiAqL1xuU0QubG9jYWxlID0gKGxvY2FsZTogKHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXSkgPT4gPEsgZXh0ZW5kcyBEaWN0S2V5PihrZXk6IEspOiBTRFJldHVyblR5cGU8Sz4gPT4ge1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn07XG5cbi8vIExvY2FsaXplZCDqsIDriqXtlZwgQ29sdW1uIO2DgOyehSDqs4TsgrBcbnR5cGUgTG9jYWxpemVkQmFzZUNvbHVtbjxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVCAmIHN0cmluZ106IEsgZXh0ZW5kcyBcXGBcXCR7aW5mZXIgQmFzZX1fXFwkeyh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl19XFxgID8gQmFzZSA6IEs7XG59W2tleW9mIFQgJiBzdHJpbmddO1xuXG4vKipcbiAqIGxvY2FsZeyXkCDrlLDrnbwg7KCB7KCI7ZWcIOy7rOufvCDqsJLsnYQg67CY7ZmY7ZWp64uI64ukLlxuICogRELsl5AgbmFtZSwgbmFtZV9rbywgbmFtZV9lbuyymOufvCBsb2NhbGl6ZWQgY29sdW1u7J20IOyeiOydhCDrlYwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIOyasOyEoOyInOychCAo7KeA7JuQIOuhnOy8gOydvOydgCBrby9qcC9lbuydtOqzoCwg7ISc67mE7Iqk7J2YIOq4sOuzuCDroZzsvIDsnbzsnYAga28sIOyCrOyaqeyekOydmCDroZzsvIDsnbzsnYAganDsnbwg65WMKTogY29sdW1uX2pwIOKGkiBjb2x1bW4g4oaSIGNvbHVtbl9rbyDihpIgY29sdW1uX2VuXG4gKiDsmrDshKDsiJzsnIQgKOyngOybkCDroZzsvIDsnbzsnYAga28vanAvZW7snbTqs6AsIOyEnOu5hOyKpOydmCDquLDrs7gg66Gc7LyA7J287J2AIGVuLCDsgqzsmqnsnpDsnZgg66Gc7LyA7J287J2AIGtv7J28IOuVjCk6IGNvbHVtbl9rbyDihpIgY29sdW1uIOKGkiBjb2x1bW5fZW4g4oaSIGNvbHVtbl9qcFxuICpcbiAqIEBleGFtcGxlXG4gKiBsb2NhbGl6ZWRDb2x1bW4odGFnLCBcIm5hbWVcIilcbiAqL1xudHlwZSBMb2NhbGl6ZWRDb2x1bW5TY2FsYXJWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBiaWdpbnQ7XG50eXBlIExvY2FsaXplZENvbHVtblZhbHVlID0gc3RyaW5nIHwgc3RyaW5nW107XG50eXBlIE5lc3RlZExvY2FsaXplZENvbHVtblZhbHVlRnJvbTxWPiA9IFYgZXh0ZW5kcyBzdHJpbmdcbiAgPyBzdHJpbmdcbiAgOiBWIGV4dGVuZHMgcmVhZG9ubHkgc3RyaW5nW11cbiAgICA/IHN0cmluZ1tdXG4gICAgOiBuZXZlcjtcbnR5cGUgTG9jYWxpemVkQ29sdW1uVmFsdWVGcm9tPFY+ID0gViBleHRlbmRzIHN0cmluZ1xuICA/IHN0cmluZ1xuICA6IFYgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXVxuICAgID8gc3RyaW5nW11cbiAgICA6IFYgZXh0ZW5kcyBudW1iZXIgfCBib29sZWFuIHwgYmlnaW50XG4gICAgICA/IHN0cmluZ1xuICAgICAgOiBWIGV4dGVuZHMgUGFydGlhbDxSZWNvcmQ8KHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXSwgaW5mZXIgTFY+PlxuICAgICAgICA/IE5lc3RlZExvY2FsaXplZENvbHVtblZhbHVlRnJvbTxMVj5cbiAgICAgIDogbmV2ZXI7XG50eXBlIExvY2FsaXplZENvbHVtbkNhbmRpZGF0ZTxULCBLIGV4dGVuZHMgc3RyaW5nPiA9XG4gIHwgKEsgZXh0ZW5kcyBrZXlvZiBUID8gVFtLXSA6IG5ldmVyKVxuICB8IHtcbiAgICAgIFtMIGluICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl1dOiBcXGBcXCR7S31fXFwke0x9XFxgIGV4dGVuZHMga2V5b2YgVCA/IFRbXFxgXFwke0t9X1xcJHtMfVxcYF0gOiBuZXZlcjtcbiAgICB9Wyh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl1dO1xudHlwZSBMb2NhbGl6ZWRDb2x1bW5SZXR1cm48VCwgSyBleHRlbmRzIHN0cmluZz4gPVxuICB8IExvY2FsaXplZENvbHVtblZhbHVlRnJvbTxMb2NhbGl6ZWRDb2x1bW5DYW5kaWRhdGU8VCwgSz4+XG4gIHwgdW5kZWZpbmVkO1xudHlwZSBMb2NhbGVWYWx1ZU1hcCA9IFBhcnRpYWw8UmVjb3JkPCh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0sIHVua25vd24+PjtcblxuZnVuY3Rpb24gaXNMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIExvY2FsaXplZENvbHVtblZhbHVlIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkoKGl0ZW0pID0+IHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSk7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWxpemVkQ29sdW1uU2NhbGFyVmFsdWUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBMb2NhbGl6ZWRDb2x1bW5TY2FsYXJWYWx1ZSB7XG4gIHJldHVybiBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiYmlnaW50XCJdLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHlMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgfCBcIlwiIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldE5lc3RlZExvY2FsZVZhbHVlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgSyBleHRlbmRzIExvY2FsaXplZEJhc2VDb2x1bW48VD4+KFxuICByb3c6IFQsXG4gIGNvbHVtbjogSyxcbiAgbG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdLFxuKTogdW5rbm93biB7XG4gIGNvbnN0IGNvbHVtblZhbHVlID0gcm93W2NvbHVtbl07XG4gIGlmIChjb2x1bW5WYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgY29sdW1uVmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShjb2x1bW5WYWx1ZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChjb2x1bW5WYWx1ZSBhcyBMb2NhbGVWYWx1ZU1hcClbbG9jYWxlXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsaXplZENvbHVtbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIEsgZXh0ZW5kcyBMb2NhbGl6ZWRCYXNlQ29sdW1uPFQ+PihcbiAgcm93OiBULFxuICBjb2x1bW46IEssXG4pOiBMb2NhbGl6ZWRDb2x1bW5SZXR1cm48VCwgSz4ge1xuICBjb25zdCBjdXJyZW50TG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICBjb25zdCBsb2NhbGUgPSBTVVBQT1JURURfTE9DQUxFUy5pbmNsdWRlcyhjdXJyZW50TG9jYWxlKSA/IGN1cnJlbnRMb2NhbGUgOiBERUZBVUxUX0xPQ0FMRTtcbiAgY29uc3Qgb3RoZXJMb2NhbGVzID0gU1VQUE9SVEVEX0xPQ0FMRVMuZmlsdGVyKChsOiBzdHJpbmcpID0+IGwgIT09IGxvY2FsZSAmJiBsICE9PSBERUZBVUxUX0xPQ0FMRSk7XG4gIGNvbnN0IGxvY2FsaXplZEtleSA9IChjb2x1bW46IEssIGxvY2FsZTogKHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXSkgPT4gXFxgXFwke2NvbHVtbn1fXFwke2xvY2FsZX1cXGA7XG4gIGNvbnN0IHZhbHVlcyA9IFtcbiAgICB7IHZhbHVlOiByb3dbbG9jYWxpemVkS2V5KGNvbHVtbiwgbG9jYWxlKV0sIHNvdXJjZTogXCJkaXJlY3RcIiB9LFxuICAgIHsgdmFsdWU6IGdldE5lc3RlZExvY2FsZVZhbHVlKHJvdywgY29sdW1uLCBsb2NhbGUpLCBzb3VyY2U6IFwibmVzdGVkXCIgfSxcbiAgICB7IHZhbHVlOiByb3dbY29sdW1uXSwgc291cmNlOiBcImRpcmVjdFwiIH0sXG4gICAgeyB2YWx1ZTogcm93W2xvY2FsaXplZEtleShjb2x1bW4sIERFRkFVTFRfTE9DQUxFKV0sIHNvdXJjZTogXCJkaXJlY3RcIiB9LFxuICAgIHsgdmFsdWU6IGdldE5lc3RlZExvY2FsZVZhbHVlKHJvdywgY29sdW1uLCBERUZBVUxUX0xPQ0FMRSksIHNvdXJjZTogXCJuZXN0ZWRcIiB9LFxuICAgIC4uLm90aGVyTG9jYWxlcy5mbGF0TWFwKChsKSA9PiBbXG4gICAgICB7IHZhbHVlOiByb3dbbG9jYWxpemVkS2V5KGNvbHVtbiwgbCldLCBzb3VyY2U6IFwiZGlyZWN0XCIgfSxcbiAgICAgIHsgdmFsdWU6IGdldE5lc3RlZExvY2FsZVZhbHVlKHJvdywgY29sdW1uLCBsKSwgc291cmNlOiBcIm5lc3RlZFwiIH0sXG4gICAgXSksXG4gIF07XG5cbiAgZm9yIChjb25zdCB7IHZhbHVlLCBzb3VyY2UgfSBvZiB2YWx1ZXMpIHtcbiAgICBpZiAoIWlzRW1wdHlMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZSkgJiYgaXNMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBMb2NhbGl6ZWRDb2x1bW5SZXR1cm48VCwgSz47XG4gICAgfVxuICAgIGlmIChzb3VyY2UgPT09IFwiZGlyZWN0XCIgJiYgIWlzRW1wdHlMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZSkgJiYgaXNMb2NhbGl6ZWRDb2x1bW5TY2FsYXJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpIGFzIExvY2FsaXplZENvbHVtblJldHVybjxULCBLPjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEVudW3snZggbG9jYWxpemVkIGxhYmVsc+ulvCBQcm94eeuhnCDrsJjtmZjtlanri4jri6QuXG4gKiBTZWxlY3Qg7Lu07Y+s64SM7Yq4IOuTseyXkOyEnCBFbnVtTGFiZWxba2V5XSDrjIDsi6Ag7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTRC5lbnVtTGFiZWxzKFwiVGFnT3JkZXJCeVwiKVtrZXldICAvLyDihpIg7ZiE7J6sIGxvY2FsZeydmCDrnbzrsqhcbiAqL1xuU0QuZW51bUxhYmVscyA9IChlbnVtTmFtZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgTG9jYWxpemVkU3RyaW5nPiA9PiB7XG4gIHJldHVybiBuZXcgUHJveHkoe30gYXMgUmVjb3JkPHN0cmluZywgTG9jYWxpemVkU3RyaW5nPiwge1xuICAgIGdldChfLCBrZXk6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGljdEtleSA9IFxcYGVudW0uXFwke2VudW1OYW1lfS5cXCR7a2V5fVxcYCBhcyBEaWN0S2V5O1xuICAgICAgcmV0dXJuIGdldERpY3RWYWx1ZShkaWN0S2V5LCBnZXRDdXJyZW50TG9jYWxlKCkpO1xuICAgIH1cbiAgfSk7XG59O1xuYC50cmltKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKHVuZGVmaW5lZCwgdGFyZ2V0KSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIFwiLy8gU29uYW11IOyDneyEsSDsvZTrk5zsnZgg7YOA7J6FIOqzhOyVveydhCDsnKDsp4DtlZjquLAg7JyE7ZW0IGFudGktc2xvcCDqsoDsgqzrp4wg7KCc7Jm47ZWp64uI64ukLlwiLFxuICAgICAgICBcIi8qIG94bGludC1kaXNhYmxlIGFudGktc2xvcC9uby1jaGFpbmVkLXR5cGUtYXNzZXJ0aW9ucywgYW50aS1zbG9wL25vLWNvbmRpdGlvbmFsLWVtcHR5LW9iamVjdC1zcHJlYWQsIGFudGktc2xvcC9uby1rbm93bi12YWx1ZS13aWRlbmluZywgYW50aS1zbG9wL25vLW1vZHVsZS1tb2NraW5nLCBhbnRpLXNsb3Avbm8tb2JqZWN0LXBhcmFtZXRlcnMsIGFudGktc2xvcC9uby1yZWZsZWN0LWFwcGx5LCBhbnRpLXNsb3Avbm8tcmVmbGVjdC1nZXQsIGFudGktc2xvcC9uby1ydW50aW1lLXR5cGVvZiwgYW50aS1zbG9wL25vLXNoYXBlLWluLXN5bWJvbC1uYW1lcywgYW50aS1zbG9wL25vLXVua25vd24tcGFyYW1ldGVycywgYW50aS1zbG9wL25vLXVua25vd24tcmV0dXJucywgYW50aS1zbG9wL25vLXVua25vd24tdHlwZS1hbGlhc2VzLCBhbnRpLXNsb3Avbm8tdW5zYWZlLWRpY3Rpb25hcnktdHlwZSwgYW50aS1zbG9wL25vLXdpZGVuLXRoZW4tYXNzZXJ0LCBhbnRpLXNsb3AvcmVxdWlyZS1zYWZldHktY29tbWVudC1mb3ItdHlwZS1hc3NlcnRpb24gKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWFjdC1jb21wb25lbnRz7J2YIHJjLWtleXPrpbwg7LaU7Lac7ZWpXG4gICAqIHNvbmFtdS9zcmMvZGljdC9yYy1rZXlzLnRzIO2MjOydvOydmCDshozsiqQg7L2U65Oc66W8IOyngeygkSDsnb3slrTshJwg67CY7ZmYXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RSQ0tleXNTb3VyY2VDb2RlKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyByYy1rZXlzLnRzIO2MjOydvCDqsr3roZxcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoY3VycmVudEZpbGVuYW1lKTtcblxuICAgICAgLy8gZGlzdOyXkOyEnCDsi6TtlonrkKAg65WM64qUIHNyY+uhnCDqsr3roZwg67OA6rK9XG4gICAgICBjb25zdCBiYXNlUGF0aCA9IGN1cnJlbnREaXJlY3RvcnkuaW5jbHVkZXMoXCIvZGlzdC9cIilcbiAgICAgICAgPyBjdXJyZW50RGlyZWN0b3J5LnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKVxuICAgICAgICA6IGN1cnJlbnREaXJlY3Rvcnk7XG5cbiAgICAgIGNvbnN0IHJjS2V5c1BhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIFwiLi4vLi4vZGljdC9yYy1rZXlzLnRzXCIpO1xuXG4gICAgICAvLyDtjIzsnbwg7J296riwXG4gICAgICBjb25zdCBzb3VyY2VDb2RlID0gZnMucmVhZEZpbGVTeW5jKHJjS2V5c1BhdGgsIFwidXRmLThcIik7XG5cbiAgICAgIC8vIHJjS2V5c0tvIOy2lOy2nCAo7KSR6rSE7Zi4IOy5tOyatO2MhSDrsKnsi50pXG4gICAgICBjb25zdCBrb0NvZGUgPSBleHRyYWN0T2JqZWN0RGVjbGFyYXRpb24oc291cmNlQ29kZSwgXCJyY0tleXNLb1wiKTtcblxuICAgICAgLy8gcmNLZXlzRW4g7LaU7LacICjspJHqtITtmLgg7Lm07Jq07YyFIOuwqeyLnSlcbiAgICAgIGNvbnN0IGVuQ29kZSA9IGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlLCBcInJjS2V5c0VuXCIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBrbzoga29Db2RlLnJlcGxhY2UoL15leHBvcnQgLywgXCJcIiksXG4gICAgICAgIGVuOiBlbkNvZGUucmVwbGFjZSgvXmV4cG9ydCAvLCBcIlwiKS5yZXBsYWNlKC8gc2F0aXNmaWVzIFJDS2V5cy8sIFwiIGFzIGNvbnN0XCIpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gcmMta2V5cyDtjIzsnbzsnbQg7JeG64qUIOqyveyasCDruYgg7L2U65OcIOuwmO2ZmFxuICAgICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcmMta2V5cyBzb3VyY2U6XCIsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtvOiBcImNvbnN0IHJjS2V5c0tvID0ge30gYXMgY29uc3Q7XCIsXG4gICAgICAgIGVuOiBcImNvbnN0IHJjS2V5c0VuID0ge30gYXMgY29uc3Q7XCIsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDrqqjrk6AgZW50aXR5Lmpzb27sl5DshJwgZW50aXR5IGxhYmVscyDstpTstpxcbiAgICogZW50aXR5Lmpzb27sl5DshJwg7KeB7KCRIOq0gOumrOuQmOuKlCDqsJLrp4wg7Y+s7ZWoICjsnpDrj5kg7IOd7ISxIOqwkiDsoJzsmbgpXG4gICAqIC0gZW50aXR5LntlbnRpdHlJZH06IGVudGl0eSB0aXRsZVxuICAgKiAtIGVudGl0eS57ZW50aXR5SWR9Lntwcm9wTmFtZX06IHByb3AgZGVzY1xuICAgKiAtIGVudW0ue0VudW1JZH0ue3ZhbHVlfTogZW51bSBsYWJlbFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0RW50aXR5TGFiZWxzKCk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIHtcbiAgICBjb25zdCBsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG5cbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICByZXR1cm4gbGFiZWxzO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIGVudGl0eUlkcykge1xuICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAvLyBlbnRpdHkgdGl0bGUgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9YCwgdmFsdWU6IGVudGl0eS50aXRsZSB9KTtcblxuICAgICAgLy8gcHJvcCBsYWJlbHMgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBlbnRpdHkucHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3AuZGVzYykge1xuICAgICAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9LiR7cHJvcC5uYW1lfWAsIHZhbHVlOiBwcm9wLmRlc2MgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZW51bSBsYWJlbHMgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGZvciAoY29uc3QgW2VudW1JZCwgZW51bUxhYmVsc01hcF0gb2YgT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgW3ZhbHVlLCBsYWJlbF0gb2YgT2JqZWN0LmVudHJpZXMoZW51bUxhYmVsc01hcCkpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaCh7IGtleTogYGVudW0uJHtlbnVtSWR9LiR7dmFsdWV9YCwgdmFsdWU6IGxhYmVsIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnRpdHlMYWJlbHPrpbwgVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmYXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlRW50aXR5TGFiZWxzQ29kZShsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdKTogc3RyaW5nIHtcbiAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiY29uc3QgZW50aXR5TGFiZWxzID0ge30gYXMgY29uc3Q7XCI7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllcyA9IGxhYmVscy5tYXAoKHsga2V5LCB2YWx1ZSB9KSA9PiBgICBcIiR7a2V5fVwiOiBcIiR7dGhpcy5lc2NhcGVTdHJpbmcodmFsdWUpfVwiLGApO1xuXG4gICAgcmV0dXJuIGBjb25zdCBlbnRpdHlMYWJlbHMgPSB7XG4ke2VudHJpZXMuam9pbihcIlxcblwiKX1cbn0gYXMgY29uc3Q7YDtcbiAgfVxuXG4gIHByaXZhdGUgZXNjYXBlU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7WUFJeUM7b0JBQ2tCO2FBR047Y0FDZjs7Ozs7QUFNdEMsSUFBYSxlQUFiLGNBQWtDLFNBQVM7Q0FDekMsY0FBYztFQUNaLE1BQU0sSUFBSTtDQUNaO0NBRUEsaUJBQWlCLFFBQTRCLFVBQWtDO0VBQzdFLE1BQU0sU0FBUyxZQUFZO0VBSTNCLE9BQU87R0FDTCxRQUFR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
|
|
359
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QudGVtcGxhdGUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9zZC50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbiB9IGZyb20gXCIuLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG4vKipcbiAqIFNvbmFtdSBEaWN0aW9uYXJ5IChTRCkg7YWc7ZSM66a/XG4gKiBpMThu7J2EIOychO2VnCBzZC5nZW5lcmF0ZWQudHMg7YyM7J287J2EIOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19zZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJzZFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoX25hbWVzPzogRW50aXR5TmFtZXNSZWNvcmQsIHNkVGFyZ2V0PzogXCJhcGlcIiB8IFwid2ViXCIgfCBcImFwcFwiKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2RUYXJnZXQgPz8gXCJhcGlcIjtcbiAgICAvLyBhcGkuZGly7J2AIOyDgeuMgCDqsr3roZwoXCJhcGlcIinsnbTrr4DroZwsIHdlYi9hcHDrj4Qg7IOB64yAIOqyveuhnOuhnCDrp57stqRcbiAgICBjb25zdCBkaXIgPSB0YXJnZXQgPT09IFwiYXBpXCIgPyBTb25hbXUuY29uZmlnLmFwaS5kaXIgOiB0YXJnZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9pMThuYCxcbiAgICAgIHBhdGg6IFwic2QuZ2VuZXJhdGVkLnRzXCIsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcihvcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbXCJzZFwiXSkge1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGkxOG5Db25maWcgPSBTb25hbXUuY29uZmlnLmkxOG47XG5cbiAgICBjb25zdCB7IGRlZmF1bHRMb2NhbGUsIHN1cHBvcnRlZExvY2FsZXMgfSA9IGkxOG5Db25maWc7XG5cbiAgICAvLyBlbnRpdHkuanNvbuyXkOyEnCBlbnRpdHkgbGFiZWxzIOy2lOy2nFxuICAgIGNvbnN0IGVudGl0eUxhYmVscyA9IHRoaXMuZXh0cmFjdEVudGl0eUxhYmVscygpO1xuXG4gICAgLy8gcmMta2V5cyDshozsiqQg7L2U65OcIOy2lOy2nFxuICAgIGNvbnN0IHJjS2V5c1NvdXJjZUNvZGUgPSB0aGlzLmV4dHJhY3RSQ0tleXNTb3VyY2VDb2RlKCk7XG5cbiAgICAvLyDtlIzrnqvtj7zrs4QgbG9jYWxlIOq0gOumrCDsvZTrk5xcbiAgICBjb25zdCBsb2NhbGVNYW5hZ2VtZW50Q29kZSA9XG4gICAgICB0YXJnZXQgPT09IFwiYXBpXCJcbiAgICAgICAgPyBgXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7XG5cbmNvbnN0IERFRkFVTFRfTE9DQUxFID0gXCIke2RlZmF1bHRMb2NhbGV9XCIgYXMgY29uc3Q7XG5jb25zdCBTVVBQT1JURURfTE9DQUxFUyA9ICR7SlNPTi5zdHJpbmdpZnkoc3VwcG9ydGVkTG9jYWxlcyl9IGFzIGNvbnN0O1xuZnVuY3Rpb24gZ2V0Q3VycmVudExvY2FsZSgpOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjdHggPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIHJldHVybiBjdHgubG9jYWxlIGFzICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0gPz8gREVGQVVMVF9MT0NBTEU7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gREVGQVVMVF9MT0NBTEU7XG4gIH1cbn1cbmAudHJpbSgpXG4gICAgICAgIDogYFxuY29uc3QgREVGQVVMVF9MT0NBTEUgPSBcIiR7ZGVmYXVsdExvY2FsZX1cIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfTE9DQUxFUyA9ICR7SlNPTi5zdHJpbmdpZnkoc3VwcG9ydGVkTG9jYWxlcyl9IGFzIGNvbnN0O1xubGV0IF9jdXJyZW50TG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdID0gREVGQVVMVF9MT0NBTEU7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2NhbGUobG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdKSB7XG4gIF9jdXJyZW50TG9jYWxlID0gbG9jYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2FsZSgpOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdIHtcbiAgcmV0dXJuIF9jdXJyZW50TG9jYWxlO1xufVxuYC50cmltKCk7XG5cbiAgICAvLyBsb2NhbGUgaW1wb3J0XG4gICAgY29uc3QgbG9jYWxlSW1wb3J0cyA9IHN1cHBvcnRlZExvY2FsZXNcbiAgICAgIC5tYXAoKGxvY2FsZSkgPT4gYGltcG9ydCAke2xvY2FsZX0gZnJvbSBcIi4vJHtsb2NhbGV9XCI7YClcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gICAgLy8gZW50aXR5TGFiZWxz66W8IOy9lOuTnOuhnCDrs4DtmZhcbiAgICBjb25zdCBlbnRpdHlMYWJlbHNDb2RlID0gdGhpcy5nZW5lcmF0ZUVudGl0eUxhYmVsc0NvZGUoZW50aXR5TGFiZWxzKTtcblxuICAgIC8vIGxvY2FsZeuzhCByY0tleXMg67OA7IiY66qFIOunpO2VkVxuICAgIGNvbnN0IGdldFJDS2V5c1Zhck5hbWUgPSAobG9jYWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIHN1cHBvcnRlZExvY2FsZXPsl5Ag7Y+s7ZWo65CcIGxvY2FsZeunjCDtlbTri7kg67OA7IiYIOuwmO2ZmFxuICAgICAgaWYgKGxvY2FsZSA9PT0gXCJrb1wiICYmIHN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoXCJrb1wiKSkgcmV0dXJuIFwicmNLZXlzS29cIjtcbiAgICAgIGlmIChsb2NhbGUgPT09IFwiZW5cIiAmJiBzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwiZW5cIikpIHJldHVybiBcInJjS2V5c0VuXCI7XG4gICAgICAvLyBmYWxsYmFjazogZGVmYXVsdExvY2FsZeydmCByY0tleXNcbiAgICAgIGlmIChsb2NhbGUgIT09IGRlZmF1bHRMb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGdldFJDS2V5c1Zhck5hbWUoZGVmYXVsdExvY2FsZSk7XG4gICAgICB9XG4gICAgICAvLyBkZWZhdWx0TG9jYWxl7KGw7LCoIOyXhuuKlCDqsr3smrAgZW7snYQgZmFsbGJhY2vsnLzroZwg7IKs7JqpXG4gICAgICByZXR1cm4gXCJyY0tleXNFblwiO1xuICAgIH07XG5cbiAgICBjb25zdCBib2R5ID0gYFxuJHtsb2NhbGVNYW5hZ2VtZW50Q29kZX1cblxuJHtsb2NhbGVJbXBvcnRzfVxuXG4vLyByZWFjdC1jb21wb25lbnRzIGkxOG4ga2V5c1xuJHtzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwia29cIikgPyByY0tleXNTb3VyY2VDb2RlLmtvIDogXCJcIn1cblxuJHtzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwiZW5cIikgPyByY0tleXNTb3VyY2VDb2RlLmVuIDogXCJcIn1cblxuLy8gZW50aXR5Lmpzb27sl5DshJwg7LaU7Lac7ZWcIGVudGl0eSBsYWJlbHMgKGRlZmF1bHRMb2NhbGUg7KCE7JqpKVxuJHtlbnRpdHlMYWJlbHNDb2RlfVxuXG4vLyBkZWZhdWx0TG9jYWxl7J2YIGRpY3Rpb25hcnnrpbwg6riw7KSA7Jy866GcIO2CpCDstpTstpxcbnR5cGUgUkNLZXlzID0gdHlwZW9mICR7Z2V0UkNLZXlzVmFyTmFtZShkZWZhdWx0TG9jYWxlKX07XG50eXBlIFByb2plY3REaWN0aW9uYXJ5ID0gdHlwZW9mICR7ZGVmYXVsdExvY2FsZX07XG50eXBlIEVudGl0eUxhYmVscyA9IHR5cGVvZiBlbnRpdHlMYWJlbHM7XG50eXBlIFJhd01lcmdlZERpY3Rpb25hcnkgPSBSQ0tleXMgJiBPbWl0PEVudGl0eUxhYmVscywga2V5b2YgKFJDS2V5cyAmIFByb2plY3REaWN0aW9uYXJ5KT4gJiBQcm9qZWN0RGljdGlvbmFyeTtcblxuLy8g7YKk64qUIOycoOyngO2VmOuQmCwg6rCSIO2DgOyeheydgCBzdHJpbmcg65iQ64qUIO2VqOyImOuhnCDsnbzrsJjtmZQgKOuLpOuluCBsb2NhbGXsnZgg66as7YSw65+0IO2DgOyehSDstqnrj4wg67Cp7KeAKVxuZXhwb3J0IHR5cGUgTWVyZ2VkRGljdGlvbmFyeSA9IHtcbiAgW0sgaW4ga2V5b2YgUmF3TWVyZ2VkRGljdGlvbmFyeV06IFJhd01lcmdlZERpY3Rpb25hcnlbS10gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgUCkgPT4gc3RyaW5nXG4gICAgPyAoLi4uYXJnczogUCkgPT4gc3RyaW5nXG4gICAgOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRGljdEtleSA9IGtleW9mIE1lcmdlZERpY3Rpb25hcnk7XG5leHBvcnQgdHlwZSBMb2NhbGl6ZWRTdHJpbmcgPSBzdHJpbmcgJiB7IF9fYnJhbmQ6IFwiTG9jYWxpemVkU3RyaW5nXCIgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUxvY2FsZShkaWN0OiBQYXJ0aWFsPE1lcmdlZERpY3Rpb25hcnk+KSB7XG4gIHJldHVybiBkaWN0O1xufVxuXG4vLyDqsIEgbG9jYWxl67OE66GcIHJjLWtleXMgKyBlbnRpdHkgbGFiZWxzICsg7ZSE66Gc7KCd7Yq4IGRpY3Qg7ZWp7LmoXG5jb25zdCBkaWN0aW9uYXJpZXM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8TWVyZ2VkRGljdGlvbmFyeT4+ID0ge1xuICAke2RlZmF1bHRMb2NhbGV9OiB7IC4uLiR7Z2V0UkNLZXlzVmFyTmFtZShkZWZhdWx0TG9jYWxlKX0sIC4uLmVudGl0eUxhYmVscywgLi4uJHtkZWZhdWx0TG9jYWxlfSB9LFxuICAke3N1cHBvcnRlZExvY2FsZXNcbiAgICAuZmlsdGVyKChsb2NhbGUpID0+IGxvY2FsZSAhPT0gZGVmYXVsdExvY2FsZSlcbiAgICAubWFwKChsb2NhbGUpID0+IGAgICR7bG9jYWxlfTogeyAuLi4ke2dldFJDS2V5c1Zhck5hbWUobG9jYWxlKX0sIC4uLiR7bG9jYWxlfSB9LGApXG4gICAgLmpvaW4oXCJcXG5cIil9XG59O1xuXG50eXBlIFNEUmV0dXJuVHlwZTxLIGV4dGVuZHMgRGljdEtleT4gPSBNZXJnZWREaWN0aW9uYXJ5W0tdIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIFApID0+IHN0cmluZ1xuICA/ICguLi5hcmdzOiBQKSA9PiBMb2NhbGl6ZWRTdHJpbmdcbiAgOiBMb2NhbGl6ZWRTdHJpbmc7XG5cbmZ1bmN0aW9uIGdldERpY3RWYWx1ZTxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLLCBsb2NhbGU6IHN0cmluZyk6IFNEUmV0dXJuVHlwZTxLPiB7XG4gIC8vIDEuIOyngOygleuQnCBsb2NhbGXsl5DshJwg7KGw7ZqMXG4gIGNvbnN0IGRpY3QgPSBkaWN0aW9uYXJpZXNbbG9jYWxlXTtcbiAgaWYgKGRpY3Q/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGljdFtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICB9XG5cbiAgLy8gMi4gZGVmYXVsdCBsb2NhbGXsl5DshJwg7KGw7ZqMXG4gIGlmIChsb2NhbGUgIT09IERFRkFVTFRfTE9DQUxFICYmIGRpY3Rpb25hcmllc1tERUZBVUxUX0xPQ0FMRV0/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGljdGlvbmFyaWVzW0RFRkFVTFRfTE9DQUxFXVtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICB9XG5cbiAgLy8gMy4gc3VwcG9ydGVkIGxvY2FsZXMg7Iic7ZqMXG4gIGZvciAoY29uc3Qgc3VwcG9ydGVkTG9jYWxlIG9mIFNVUFBPUlRFRF9MT0NBTEVTKSB7XG4gICAgaWYgKHN1cHBvcnRlZExvY2FsZSAhPT0gbG9jYWxlICYmIHN1cHBvcnRlZExvY2FsZSAhPT0gREVGQVVMVF9MT0NBTEUpIHtcbiAgICAgIGlmIChkaWN0aW9uYXJpZXNbc3VwcG9ydGVkTG9jYWxlXT8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZGljdGlvbmFyaWVzW3N1cHBvcnRlZExvY2FsZV1ba2V5XSBhcyB1bmtub3duIGFzIFNEUmV0dXJuVHlwZTxLPjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyA0LiDrqqjrkZAg7Iuk7YyoIOyLnCBrZXkg67CY7ZmYXG4gIHJldHVybiBrZXkgYXMgdW5rbm93biBhcyBTRFJldHVyblR5cGU8Sz47XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkg7ZWo7IiYXG4gKiBsb2NhbGXsl5Ag66ee64qUIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTRChcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCLsoIDsnqVcIiAoTG9jYWxpemVkU3RyaW5nKVxuICogU0QoXCJ1c2VyLm5vdEZvdW5kXCIpKDEpICAvLyDihpIgXCLsobTsnqztlZjsp4Ag7JWK64qUIFVzZXIgSUQgMVwiIChMb2NhbGl6ZWRTdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTRDxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLKTogU0RSZXR1cm5UeXBlPEs+IHtcbiAgY29uc3QgbG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn1cblxuLyoqXG4gKiDtirnsoJUgbG9jYWxl7J2YIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWY64qUIO2VqOyImOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IEVOID0gU0QubG9jYWxlKFwiZW5cIik7XG4gKiBFTihcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCJTYXZlXCJcbiAqL1xuU0QubG9jYWxlID0gKGxvY2FsZTogKHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXSkgPT4gPEsgZXh0ZW5kcyBEaWN0S2V5PihrZXk6IEspOiBTRFJldHVyblR5cGU8Sz4gPT4ge1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn07XG5cbi8vIExvY2FsaXplZCDqsIDriqXtlZwgQ29sdW1uIO2DgOyehSDqs4TsgrBcbnR5cGUgTG9jYWxpemVkQmFzZUNvbHVtbjxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVCAmIHN0cmluZ106IEsgZXh0ZW5kcyBcXGBcXCR7aW5mZXIgQmFzZX1fXFwkeyh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl19XFxgID8gQmFzZSA6IEs7XG59W2tleW9mIFQgJiBzdHJpbmddO1xuXG4vKipcbiAqIGxvY2FsZeyXkCDrlLDrnbwg7KCB7KCI7ZWcIOy7rOufvCDqsJLsnYQg67CY7ZmY7ZWp64uI64ukLlxuICogRELsl5AgbmFtZSwgbmFtZV9rbywgbmFtZV9lbuyymOufvCBsb2NhbGl6ZWQgY29sdW1u7J20IOyeiOydhCDrlYwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIOyasOyEoOyInOychCAo7KeA7JuQIOuhnOy8gOydvOydgCBrby9qcC9lbuydtOqzoCwg7ISc67mE7Iqk7J2YIOq4sOuzuCDroZzsvIDsnbzsnYAga28sIOyCrOyaqeyekOydmCDroZzsvIDsnbzsnYAganDsnbwg65WMKTogY29sdW1uX2pwIOKGkiBjb2x1bW4g4oaSIGNvbHVtbl9rbyDihpIgY29sdW1uX2VuXG4gKiDsmrDshKDsiJzsnIQgKOyngOybkCDroZzsvIDsnbzsnYAga28vanAvZW7snbTqs6AsIOyEnOu5hOyKpOydmCDquLDrs7gg66Gc7LyA7J287J2AIGVuLCDsgqzsmqnsnpDsnZgg66Gc7LyA7J287J2AIGtv7J28IOuVjCk6IGNvbHVtbl9rbyDihpIgY29sdW1uIOKGkiBjb2x1bW5fZW4g4oaSIGNvbHVtbl9qcFxuICpcbiAqIEBleGFtcGxlXG4gKiBsb2NhbGl6ZWRDb2x1bW4odGFnLCBcIm5hbWVcIilcbiAqL1xudHlwZSBMb2NhbGl6ZWRDb2x1bW5TY2FsYXJWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBiaWdpbnQ7XG50eXBlIExvY2FsaXplZENvbHVtblZhbHVlID0gc3RyaW5nIHwgc3RyaW5nW107XG50eXBlIE5lc3RlZExvY2FsaXplZENvbHVtblZhbHVlRnJvbTxWPiA9IFYgZXh0ZW5kcyBzdHJpbmdcbiAgPyBzdHJpbmdcbiAgOiBWIGV4dGVuZHMgcmVhZG9ubHkgc3RyaW5nW11cbiAgICA/IHN0cmluZ1tdXG4gICAgOiBuZXZlcjtcbnR5cGUgTG9jYWxpemVkQ29sdW1uVmFsdWVGcm9tPFY+ID0gViBleHRlbmRzIHN0cmluZ1xuICA/IHN0cmluZ1xuICA6IFYgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXVxuICAgID8gc3RyaW5nW11cbiAgICA6IFYgZXh0ZW5kcyBudW1iZXIgfCBib29sZWFuIHwgYmlnaW50XG4gICAgICA/IHN0cmluZ1xuICAgICAgOiBWIGV4dGVuZHMgUGFydGlhbDxSZWNvcmQ8KHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXSwgaW5mZXIgTFY+PlxuICAgICAgICA/IE5lc3RlZExvY2FsaXplZENvbHVtblZhbHVlRnJvbTxMVj5cbiAgICAgIDogbmV2ZXI7XG50eXBlIExvY2FsaXplZENvbHVtbkNhbmRpZGF0ZTxULCBLIGV4dGVuZHMgc3RyaW5nPiA9XG4gIHwgKEsgZXh0ZW5kcyBrZXlvZiBUID8gVFtLXSA6IG5ldmVyKVxuICB8IHtcbiAgICAgIFtMIGluICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl1dOiBcXGBcXCR7S31fXFwke0x9XFxgIGV4dGVuZHMga2V5b2YgVCA/IFRbXFxgXFwke0t9X1xcJHtMfVxcYF0gOiBuZXZlcjtcbiAgICB9Wyh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl1dO1xudHlwZSBMb2NhbGl6ZWRDb2x1bW5SZXR1cm48VCwgSyBleHRlbmRzIHN0cmluZz4gPVxuICB8IExvY2FsaXplZENvbHVtblZhbHVlRnJvbTxMb2NhbGl6ZWRDb2x1bW5DYW5kaWRhdGU8VCwgSz4+XG4gIHwgdW5kZWZpbmVkO1xudHlwZSBMb2NhbGVWYWx1ZU1hcCA9IFBhcnRpYWw8UmVjb3JkPCh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0sIHVua25vd24+PjtcblxuZnVuY3Rpb24gaXNMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIExvY2FsaXplZENvbHVtblZhbHVlIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkoKGl0ZW0pID0+IHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSk7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWxpemVkQ29sdW1uU2NhbGFyVmFsdWUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBMb2NhbGl6ZWRDb2x1bW5TY2FsYXJWYWx1ZSB7XG4gIHJldHVybiBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiYmlnaW50XCJdLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHlMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgfCBcIlwiIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldE5lc3RlZExvY2FsZVZhbHVlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgSyBleHRlbmRzIExvY2FsaXplZEJhc2VDb2x1bW48VD4+KFxuICByb3c6IFQsXG4gIGNvbHVtbjogSyxcbiAgbG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdLFxuKTogdW5rbm93biB7XG4gIGNvbnN0IGNvbHVtblZhbHVlID0gcm93W2NvbHVtbl07XG4gIGlmIChjb2x1bW5WYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgY29sdW1uVmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShjb2x1bW5WYWx1ZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChjb2x1bW5WYWx1ZSBhcyBMb2NhbGVWYWx1ZU1hcClbbG9jYWxlXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsaXplZENvbHVtbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIEsgZXh0ZW5kcyBMb2NhbGl6ZWRCYXNlQ29sdW1uPFQ+PihcbiAgcm93OiBULFxuICBjb2x1bW46IEssXG4pOiBMb2NhbGl6ZWRDb2x1bW5SZXR1cm48VCwgSz4ge1xuICBjb25zdCBjdXJyZW50TG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICBjb25zdCBsb2NhbGUgPSBTVVBQT1JURURfTE9DQUxFUy5pbmNsdWRlcyhjdXJyZW50TG9jYWxlKSA/IGN1cnJlbnRMb2NhbGUgOiBERUZBVUxUX0xPQ0FMRTtcbiAgY29uc3Qgb3RoZXJMb2NhbGVzID0gU1VQUE9SVEVEX0xPQ0FMRVMuZmlsdGVyKChsOiBzdHJpbmcpID0+IGwgIT09IGxvY2FsZSAmJiBsICE9PSBERUZBVUxUX0xPQ0FMRSk7XG4gIGNvbnN0IGxvY2FsaXplZEtleSA9IChjb2x1bW46IEssIGxvY2FsZTogKHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXSkgPT4gXFxgXFwke2NvbHVtbn1fXFwke2xvY2FsZX1cXGA7XG4gIGNvbnN0IHZhbHVlcyA9IFtcbiAgICB7IHZhbHVlOiByb3dbbG9jYWxpemVkS2V5KGNvbHVtbiwgbG9jYWxlKV0sIHNvdXJjZTogXCJkaXJlY3RcIiB9LFxuICAgIHsgdmFsdWU6IGdldE5lc3RlZExvY2FsZVZhbHVlKHJvdywgY29sdW1uLCBsb2NhbGUpLCBzb3VyY2U6IFwibmVzdGVkXCIgfSxcbiAgICB7IHZhbHVlOiByb3dbY29sdW1uXSwgc291cmNlOiBcImRpcmVjdFwiIH0sXG4gICAgeyB2YWx1ZTogcm93W2xvY2FsaXplZEtleShjb2x1bW4sIERFRkFVTFRfTE9DQUxFKV0sIHNvdXJjZTogXCJkaXJlY3RcIiB9LFxuICAgIHsgdmFsdWU6IGdldE5lc3RlZExvY2FsZVZhbHVlKHJvdywgY29sdW1uLCBERUZBVUxUX0xPQ0FMRSksIHNvdXJjZTogXCJuZXN0ZWRcIiB9LFxuICAgIC4uLm90aGVyTG9jYWxlcy5mbGF0TWFwKChsKSA9PiBbXG4gICAgICB7IHZhbHVlOiByb3dbbG9jYWxpemVkS2V5KGNvbHVtbiwgbCldLCBzb3VyY2U6IFwiZGlyZWN0XCIgfSxcbiAgICAgIHsgdmFsdWU6IGdldE5lc3RlZExvY2FsZVZhbHVlKHJvdywgY29sdW1uLCBsKSwgc291cmNlOiBcIm5lc3RlZFwiIH0sXG4gICAgXSksXG4gIF07XG5cbiAgZm9yIChjb25zdCB7IHZhbHVlLCBzb3VyY2UgfSBvZiB2YWx1ZXMpIHtcbiAgICBpZiAoIWlzRW1wdHlMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZSkgJiYgaXNMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBMb2NhbGl6ZWRDb2x1bW5SZXR1cm48VCwgSz47XG4gICAgfVxuICAgIGlmIChzb3VyY2UgPT09IFwiZGlyZWN0XCIgJiYgIWlzRW1wdHlMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZSkgJiYgaXNMb2NhbGl6ZWRDb2x1bW5TY2FsYXJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpIGFzIExvY2FsaXplZENvbHVtblJldHVybjxULCBLPjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEVudW3snZggbG9jYWxpemVkIGxhYmVsc+ulvCBQcm94eeuhnCDrsJjtmZjtlanri4jri6QuXG4gKiBTZWxlY3Qg7Lu07Y+s64SM7Yq4IOuTseyXkOyEnCBFbnVtTGFiZWxba2V5XSDrjIDsi6Ag7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTRC5lbnVtTGFiZWxzKFwiVGFnT3JkZXJCeVwiKVtrZXldICAvLyDihpIg7ZiE7J6sIGxvY2FsZeydmCDrnbzrsqhcbiAqL1xuU0QuZW51bUxhYmVscyA9IChlbnVtTmFtZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgTG9jYWxpemVkU3RyaW5nPiA9PiB7XG4gIHJldHVybiBuZXcgUHJveHkoe30gYXMgUmVjb3JkPHN0cmluZywgTG9jYWxpemVkU3RyaW5nPiwge1xuICAgIGdldChfLCBrZXk6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGljdEtleSA9IFxcYGVudW0uXFwke2VudW1OYW1lfS5cXCR7a2V5fVxcYCBhcyBEaWN0S2V5O1xuICAgICAgcmV0dXJuIGdldERpY3RWYWx1ZShkaWN0S2V5LCBnZXRDdXJyZW50TG9jYWxlKCkpO1xuICAgIH1cbiAgfSk7XG59O1xuYC50cmltKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKHVuZGVmaW5lZCwgdGFyZ2V0KSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIFwiLy8gU29uYW11IOyDneyEsSDsvZTrk5zsnZgg7YOA7J6FIOqzhOyVveydhCDsnKDsp4DtlZjquLAg7JyE7ZW0IGFudGktc2xvcCDqsoDsgqzrp4wg7KCc7Jm47ZWp64uI64ukLlwiLFxuICAgICAgICBcIi8qIG94bGludC1kaXNhYmxlIGFudGktc2xvcC9uby1jaGFpbmVkLXR5cGUtYXNzZXJ0aW9ucywgYW50aS1zbG9wL25vLWNvbmRpdGlvbmFsLWVtcHR5LW9iamVjdC1zcHJlYWQsIGFudGktc2xvcC9uby1rbm93bi12YWx1ZS13aWRlbmluZywgYW50aS1zbG9wL25vLW1vZHVsZS1tb2NraW5nLCBhbnRpLXNsb3Avbm8tb2JqZWN0LXBhcmFtZXRlcnMsIGFudGktc2xvcC9uby1yZWZsZWN0LWFwcGx5LCBhbnRpLXNsb3Avbm8tcmVmbGVjdC1nZXQsIGFudGktc2xvcC9uby1ydW50aW1lLXR5cGVvZiwgYW50aS1zbG9wL25vLXNoYXBlLWluLXN5bWJvbC1uYW1lcywgYW50aS1zbG9wL25vLXVua25vd24tcGFyYW1ldGVycywgYW50aS1zbG9wL25vLXVua25vd24tcmV0dXJucywgYW50aS1zbG9wL25vLXVua25vd24tdHlwZS1hbGlhc2VzLCBhbnRpLXNsb3Avbm8tdW5zYWZlLWRpY3Rpb25hcnktdHlwZSwgYW50aS1zbG9wL25vLXdpZGVuLXRoZW4tYXNzZXJ0LCBhbnRpLXNsb3AvcmVxdWlyZS1zYWZldHktY29tbWVudC1mb3ItdHlwZS1hc3NlcnRpb24gKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWFjdC1jb21wb25lbnRz7J2YIHJjLWtleXPrpbwg7LaU7Lac7ZWpXG4gICAqIHNvbmFtdS9zcmMvZGljdC9yYy1rZXlzLnRzIO2MjOydvOydmCDshozsiqQg7L2U65Oc66W8IOyngeygkSDsnb3slrTshJwg67CY7ZmYXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RSQ0tleXNTb3VyY2VDb2RlKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyByYy1rZXlzLnRzIO2MjOydvCDqsr3roZxcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoY3VycmVudEZpbGVuYW1lKTtcblxuICAgICAgLy8gZGlzdOyXkOyEnCDsi6TtlonrkKAg65WM64qUIHNyY+uhnCDqsr3roZwg67OA6rK9XG4gICAgICBjb25zdCBiYXNlUGF0aCA9IGN1cnJlbnREaXJlY3RvcnkuaW5jbHVkZXMoXCIvZGlzdC9cIilcbiAgICAgICAgPyBjdXJyZW50RGlyZWN0b3J5LnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKVxuICAgICAgICA6IGN1cnJlbnREaXJlY3Rvcnk7XG5cbiAgICAgIGNvbnN0IHJjS2V5c1BhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIFwiLi4vLi4vZGljdC9yYy1rZXlzLnRzXCIpO1xuXG4gICAgICAvLyDtjIzsnbwg7J296riwXG4gICAgICBjb25zdCBzb3VyY2VDb2RlID0gZnMucmVhZEZpbGVTeW5jKHJjS2V5c1BhdGgsIFwidXRmLThcIik7XG5cbiAgICAgIC8vIHJjS2V5c0tvIOy2lOy2nCAo7KSR6rSE7Zi4IOy5tOyatO2MhSDrsKnsi50pXG4gICAgICBjb25zdCBrb0NvZGUgPSBleHRyYWN0T2JqZWN0RGVjbGFyYXRpb24oc291cmNlQ29kZSwgXCJyY0tleXNLb1wiKTtcblxuICAgICAgLy8gcmNLZXlzRW4g7LaU7LacICjspJHqtITtmLgg7Lm07Jq07YyFIOuwqeyLnSlcbiAgICAgIGNvbnN0IGVuQ29kZSA9IGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlLCBcInJjS2V5c0VuXCIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBrbzoga29Db2RlLnJlcGxhY2UoL15leHBvcnQgLywgXCJcIiksXG4gICAgICAgIGVuOiBlbkNvZGUucmVwbGFjZSgvXmV4cG9ydCAvLCBcIlwiKS5yZXBsYWNlKC8gc2F0aXNmaWVzIFJDS2V5cy8sIFwiIGFzIGNvbnN0XCIpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gcmMta2V5cyDtjIzsnbzsnbQg7JeG64qUIOqyveyasCDruYgg7L2U65OcIOuwmO2ZmFxuICAgICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcmMta2V5cyBzb3VyY2U6XCIsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtvOiBcImNvbnN0IHJjS2V5c0tvID0ge30gYXMgY29uc3Q7XCIsXG4gICAgICAgIGVuOiBcImNvbnN0IHJjS2V5c0VuID0ge30gYXMgY29uc3Q7XCIsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDrqqjrk6AgZW50aXR5Lmpzb27sl5DshJwgZW50aXR5IGxhYmVscyDstpTstpxcbiAgICogZW50aXR5Lmpzb27sl5DshJwg7KeB7KCRIOq0gOumrOuQmOuKlCDqsJLrp4wg7Y+s7ZWoICjsnpDrj5kg7IOd7ISxIOqwkiDsoJzsmbgpXG4gICAqIC0gZW50aXR5LntlbnRpdHlJZH06IGVudGl0eSB0aXRsZVxuICAgKiAtIGVudGl0eS57ZW50aXR5SWR9Lntwcm9wTmFtZX06IHByb3AgZGVzY1xuICAgKiAtIGVudW0ue0VudW1JZH0ue3ZhbHVlfTogZW51bSBsYWJlbFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0RW50aXR5TGFiZWxzKCk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIHtcbiAgICBjb25zdCBsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG5cbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICByZXR1cm4gbGFiZWxzO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIGVudGl0eUlkcykge1xuICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAvLyBlbnRpdHkgdGl0bGUgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9YCwgdmFsdWU6IGVudGl0eS50aXRsZSB9KTtcblxuICAgICAgLy8gcHJvcCBsYWJlbHMgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBlbnRpdHkucHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3AuZGVzYykge1xuICAgICAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9LiR7cHJvcC5uYW1lfWAsIHZhbHVlOiBwcm9wLmRlc2MgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZW51bSBsYWJlbHMgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGZvciAoY29uc3QgW2VudW1JZCwgZW51bUxhYmVsc01hcF0gb2YgT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgW3ZhbHVlLCBsYWJlbF0gb2YgT2JqZWN0LmVudHJpZXMoZW51bUxhYmVsc01hcCkpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaCh7IGtleTogYGVudW0uJHtlbnVtSWR9LiR7dmFsdWV9YCwgdmFsdWU6IGxhYmVsIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnRpdHlMYWJlbHPrpbwgVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmYXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlRW50aXR5TGFiZWxzQ29kZShsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdKTogc3RyaW5nIHtcbiAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiY29uc3QgZW50aXR5TGFiZWxzID0ge30gYXMgY29uc3Q7XCI7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllcyA9IGxhYmVscy5tYXAoKHsga2V5LCB2YWx1ZSB9KSA9PiBgICBcIiR7a2V5fVwiOiBcIiR7dGhpcy5lc2NhcGVTdHJpbmcodmFsdWUpfVwiLGApO1xuXG4gICAgcmV0dXJuIGBjb25zdCBlbnRpdHlMYWJlbHMgPSB7XG4ke2VudHJpZXMuam9pbihcIlxcblwiKX1cbn0gYXMgY29uc3Q7YDtcbiAgfVxuXG4gIHByaXZhdGUgZXNjYXBlU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFJeUMsWUFBQTtBQUNrQixvQkFBQTtBQUdOLGFBQUE7QUFDZixjQUFBOzs7OztBQU10QyxJQUFhLGVBQWIsY0FBa0MsU0FBUztDQUN6QyxjQUFjO0VBQ1osTUFBTSxJQUFJO0NBQ1o7Q0FFQSxpQkFBaUIsUUFBNEIsVUFBa0M7RUFDN0UsTUFBTSxTQUFTLFlBQVk7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
|
|
@@ -8,7 +8,7 @@ import { Template, init_template } from "../template.js";
|
|
|
8
8
|
import { BUILT_IN_TYPES, init_zod_converter, zodTypeToTsTypeDef } from "../zod-converter.js";
|
|
9
9
|
import inflection from "inflection";
|
|
10
10
|
import { diff, unique } from "radashi";
|
|
11
|
-
|
|
11
|
+
// src/template/implementations/services.template.ts
|
|
12
12
|
init_code_converters();
|
|
13
13
|
init_sonamu();
|
|
14
14
|
init_entity_manager();
|
|
@@ -299,7 +299,6 @@ export const ${names.capital}AsyncIdConfig: AsyncIdConfig<${names.capital}Subset
|
|
|
299
299
|
};
|
|
300
300
|
}
|
|
301
301
|
};
|
|
302
|
-
//#endregion
|
|
303
302
|
export { Template__services };
|
|
304
303
|
|
|
305
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMudGVtcGxhdGUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9zZXJ2aWNlcy50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgZGlmZiwgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcblxuaW1wb3J0IHtcbiAgYXBpUGFyYW1Ub1RzQ29kZSxcbiAgYXBpUGFyYW1UeXBlVG9Uc1R5cGUsXG4gIHVud3JhcFByb21pc2VPbmNlLFxufSBmcm9tIFwiLi4vLi4vYXBpL2NvZGUtY29udmVydGVyc1wiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi8uLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc1N0cmluZ1ZhbHVlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcbmltcG9ydCB7IGFzc2VydERlZmluZWQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBCVUlMVF9JTl9UWVBFUywgem9kVHlwZVRvVHNUeXBlRGVmIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19zZXJ2aWNlcyBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJzZXJ2aWNlc1wiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCI6dGFyZ2V0L3NyYy9zZXJ2aWNlc1wiLFxuICAgICAgcGF0aDogYHNlcnZpY2VzLmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7fTogVGVtcGxhdGVPcHRpb25zW1wic2VydmljZXNcIl0pIHtcbiAgICBjb25zdCB7IGFwaXMgfSA9IFNvbmFtdS5zeW5jZXI7XG5cbiAgICAvLyDrqqjrjbjrs4TroZwg6re466O57ZmUXG4gICAgY29uc3QgYXBpc0J5TW9kZWwgPSBuZXcgTWFwPHN0cmluZywgRXh0ZW5kZWRBcGlbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGFwaSBvZiBhcGlzKSB7XG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSBhcGkubW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpO1xuICAgICAgaWYgKCFhcGlzQnlNb2RlbC5oYXMobW9kZWxOYW1lKSkge1xuICAgICAgICBhcGlzQnlNb2RlbC5zZXQobW9kZWxOYW1lLCBbXSk7XG4gICAgICB9XG4gICAgICBhcGlzQnlNb2RlbC5nZXQobW9kZWxOYW1lKT8ucHVzaChhcGkpO1xuICAgIH1cblxuICAgIGNvbnN0IGltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbmFtZXNwYWNlczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgdHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcmVzb2x2ZVdlYlNvY2tldEV2ZW50VHlwZURlZiA9IChcbiAgICAgIHR5cGVSZWY6IEFwaVBhcmFtVHlwZS5SZWYgfCB1bmRlZmluZWQsXG4gICAgICBzY2hlbWE6IFBhcmFtZXRlcnM8dHlwZW9mIHpvZFR5cGVUb1RzVHlwZURlZj5bMF0sXG4gICAgKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICh0eXBlUmVmKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZUltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVR5cGVEZWYgPSBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlUmVmLCBjYW5kaWRhdGVJbXBvcnRLZXlzKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHVuaXF1ZShjYW5kaWRhdGVJbXBvcnRLZXlzKSkge1xuICAgICAgICAgICAgRW50aXR5TWFuYWdlci5nZXRNb2R1bGVQYXRoKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydEtleXMucHVzaCguLi5jYW5kaWRhdGVJbXBvcnRLZXlzKTtcbiAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlVHlwZURlZjtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8g66Gc7LusIGNvbnN0IOuTsSBpbXBvcnQg6rCA64ql7ZWcIOyLrOuzvOydtCDslYTri4jrqbQg6riw7KG0IGlubGluZSDsg53shLHsnLzroZwg7ZuE7Ye0XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHpvZFR5cGVUb1RzVHlwZURlZihzY2hlbWEpO1xuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IFttb2RlbE5hbWUsIG1vZGVsQXBpc10gb2YgYXBpc0J5TW9kZWwpIHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcGkgb2YgbW9kZWxBcGlzKSB7XG4gICAgICAgIC8vIEBzdHJlYW0g642w7L2U66CI7J207YSw6rCAIOyeiOycvOuptCBTU0Ug7Iqk7Yq466a8IO2VqOyImCDsg53shLFcbiAgICAgICAgaWYgKGFwaS5zdHJlYW1PcHRpb25zKSB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zV2l0aG91dENvbnRleHQgPSBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGFwaUJhc2VVcmwgPSBgJHtTb25hbXUuY29uZmlnLmFwaS5yb3V0ZS5wcmVmaXh9JHthcGkucGF0aH1gO1xuXG4gICAgICAgICAgY29uc3QgbWV0aG9kTmFtZVN0cmVhbSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgICAgPyBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgICAgICAgOiBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lKX1gO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWVTdHJlYW1DYW1lbGl6ZWQgPSBpbmZsZWN0aW9uLmNhbWVsaXplKG1ldGhvZE5hbWVTdHJlYW0sIHRydWUpO1xuXG4gICAgICAgICAgY29uc3QgZXZlbnRzVHlwZURlZiA9IHpvZFR5cGVUb1RzVHlwZURlZihhcGkuc3RyZWFtT3B0aW9ucy5ldmVudHMpO1xuXG4gICAgICAgICAgLy8g7YyM652866+47YSw66W8IOqwneyytCDtmJXtg5zroZwg7KCV7J2YICjtg4DsnoXqs7wg7Iuk7KCcIOqwkiDrqqjrkZDsl5Ag7IKs7JqpKVxuICAgICAgICAgIGNvbnN0IHBhcmFtc0RlZkFzT2JqZWN0ID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgeyAke3BhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gYCR7cC5uYW1lfTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwLnR5cGUsIGltcG9ydEtleXMpfWApLmpvaW4oXCIsIFwiKX0gfWBcbiAgICAgICAgICAgICAgOiBcInt9XCI7XG5cbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBmdW5jdGlvbiAke21ldGhvZE5hbWVTdHJlYW1DYW1lbGl6ZWR9KFxuICBwYXJhbXM6ICR7cGFyYW1zRGVmQXNPYmplY3R9LFxuICBoYW5kbGVyczogRXZlbnRIYW5kbGVyczwke2V2ZW50c1R5cGVEZWZ9ICYgeyBlbmQ/OiAoKSA9PiB2b2lkIH0+LFxuICBvcHRpb25zOiBTU0VTdHJlYW1PcHRpb25zXG4pIHtcbiAgcmV0dXJuIHVzZVNTRVN0cmVhbTwke2V2ZW50c1R5cGVEZWZ9PihcXGAke2FwaUJhc2VVcmx9XFxgLCBwYXJhbXMsIGhhbmRsZXJzLCBvcHRpb25zKTtcbn1cbiAgICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXBpLndlYnNvY2tldE9wdGlvbnMpIHtcbiAgICAgICAgICAvLyB3ZWJzb2NrZXQgc3VyZmFjZeuKlCBmZXRjaCDtlajsiJgg64yA7IugIHR5cGVkIGhvb2vsnYQg7IOd7ISx7ZWoXG4gICAgICAgICAgY29uc3QgcGFyYW1zV2l0aG91dENvbnRleHQgPSBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGFwaUJhc2VVcmwgPSBgJHtTb25hbXUuY29uZmlnLmFwaS5yb3V0ZS5wcmVmaXh9JHthcGkucGF0aH1gO1xuXG4gICAgICAgICAgY29uc3QgbWV0aG9kTmFtZVdlYlNvY2tldCA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgICAgPyBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgICAgICAgOiBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lKX1gO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWVXZWJTb2NrZXRDYW1lbGl6ZWQgPSBpbmZsZWN0aW9uLmNhbWVsaXplKG1ldGhvZE5hbWVXZWJTb2NrZXQsIHRydWUpO1xuXG4gICAgICAgICAgLy8gb3V0RXZlbnRz64qUIOyImOyLoCDtg4DsnoUsIGluRXZlbnRz64qUIHNlbmQoKSDsnoXroKUg7YOA7J6F7Jy866GcIOyCrOyaqe2VqFxuICAgICAgICAgIGNvbnN0IG91dEV2ZW50c1R5cGVEZWYgPSByZXNvbHZlV2ViU29ja2V0RXZlbnRUeXBlRGVmKFxuICAgICAgICAgICAgYXBpLndlYnNvY2tldE9wdGlvbnMub3V0RXZlbnRzVHlwZVJlZixcbiAgICAgICAgICAgIGFwaS53ZWJzb2NrZXRPcHRpb25zLm91dEV2ZW50cyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGluRXZlbnRzVHlwZURlZiA9IHJlc29sdmVXZWJTb2NrZXRFdmVudFR5cGVEZWYoXG4gICAgICAgICAgICBhcGkud2Vic29ja2V0T3B0aW9ucy5pbkV2ZW50c1R5cGVSZWYsXG4gICAgICAgICAgICBhcGkud2Vic29ja2V0T3B0aW9ucy5pbkV2ZW50cyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gY29udGV4dC9yZWZLbmV4L2ludGVybmFsIG9wdGlvbmFsIO2MjOudvOuvuO2EsOuKlCDtgbTrnbzsnbTslrjtirgg7J6F66Cl7JeQ7IScIOygnOyZuO2VqFxuICAgICAgICAgIGNvbnN0IHBhcmFtc0RlZkFzT2JqZWN0ID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgeyAke3BhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gYCR7cC5uYW1lfTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwLnR5cGUsIGltcG9ydEtleXMpfWApLmpvaW4oXCIsIFwiKX0gfWBcbiAgICAgICAgICAgICAgOiBcInt9XCI7XG5cbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBmdW5jdGlvbiAke21ldGhvZE5hbWVXZWJTb2NrZXRDYW1lbGl6ZWR9KFxuICBwYXJhbXM6ICR7cGFyYW1zRGVmQXNPYmplY3R9LFxuICBoYW5kbGVyczogRXZlbnRIYW5kbGVyczwke291dEV2ZW50c1R5cGVEZWZ9PixcbiAgb3B0aW9uczogV2ViU29ja2V0Q2hhbm5lbE9wdGlvbnMgPSB7fVxuKSB7XG4gIHJldHVybiB1c2VXZWJTb2NrZXRDaGFubmVsPCR7b3V0RXZlbnRzVHlwZURlZn0sICR7aW5FdmVudHNUeXBlRGVmfT4oXFxgJHthcGlCYXNlVXJsfVxcYCwgcGFyYW1zLCBoYW5kbGVycywgb3B0aW9ucyk7XG59XG4gICAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udGV4dCDsoJzsmbjtlZwg7YyM652866+47YSwXG4gICAgICAgIGNvbnN0IHBhcmFtc1dpdGhvdXRDb250ZXh0ID0gYXBpLnBhcmFtZXRlcnMuZmlsdGVyKFxuICAgICAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzUmVmS25leChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIShwYXJhbS5vcHRpb25hbCAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyDtg4DsnoUg7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCB0eXBlUGFyYW1ldGVyc0FzVHNUeXBlID0gYXBpLnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICAgLm1hcCgodHlwZVBhcmFtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlUGFyYW0sIGltcG9ydEtleXMpKVxuICAgICAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbXNEZWYgPSB0eXBlUGFyYW1ldGVyc0FzVHNUeXBlID8gYDwke3R5cGVQYXJhbWV0ZXJzQXNUc1R5cGV9PmAgOiBcIlwiO1xuICAgICAgICB0eXBlUGFyYW1OYW1lcyA9IHR5cGVQYXJhbU5hbWVzLmNvbmNhdChhcGkudHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAuaWQpKTtcblxuICAgICAgICAvLyDtjIzrnbzrr7jthLAg7KCV7J2YXG4gICAgICAgIGNvbnN0IHBhcmFtc0RlZiA9IGFwaVBhcmFtVG9Uc0NvZGUocGFyYW1zV2l0aG91dENvbnRleHQsIGltcG9ydEtleXMpO1xuICAgICAgICBjb25zdCBwYXJhbU5hbWVzID0gcGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBwLm5hbWUpLmpvaW4oXCIsIFwiKTtcblxuICAgICAgICAvLyDrpqzthLQg7YOA7J6FIOygleydmFxuICAgICAgICBjb25zdCByZXR1cm5UeXBlRGVmID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICAgICAgYXNzZXJ0RGVmaW5lZCh1bndyYXBQcm9taXNlT25jZShhcGkucmV0dXJuVHlwZSkpLFxuICAgICAgICAgIGltcG9ydEtleXMsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g6riw67O4IFVSTFxuICAgICAgICBjb25zdCBhcGlCYXNlVXJsID0gYCR7U29uYW11LmNvbmZpZy5hcGkucm91dGUucHJlZml4fSR7YXBpLnBhdGh9YDtcblxuICAgICAgICBjb25zdCBjbGllbnRzID0gYXBpLm9wdGlvbnMuY2xpZW50cyB8fCBbXTtcblxuICAgICAgICAvLyAxLiBheGlvcyDtlajsiJgg7IOd7ISxXG4gICAgICAgIC8vIHJlc291cmNlTmFtZeydtCDsnojsnLzrqbQgZ2V0ICsgcmVzb3VyY2VOYW1lIO2Yle2DnOuhnCDtlajsiJjrqoUg7IOd7ISxXG4gICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWVcbiAgICAgICAgICA/IGBnZXQke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lKX1gXG4gICAgICAgICAgOiBhcGkubWV0aG9kTmFtZTtcblxuICAgICAgICAvLyBheGlvcy1tdWx0aXBhcnQg7LKY66asICjtjIzsnbwg7JeF66Gc65OcKVxuICAgICAgICBpZiAoY2xpZW50cy5pbmNsdWRlcyhcImF4aW9zLW11bHRpcGFydFwiKSkge1xuICAgICAgICAgIGNvbnN0IGZvcm1EYXRhQXBwZW5kID0gYGZpbGVzLmZvckVhY2goZiA9PiB7IGZvcm1EYXRhLmFwcGVuZChcImZpbGVzXCIsIGYpOyB9KTtgO1xuXG4gICAgICAgICAgY29uc3Qgb3RoZXJQYXJhbXNBcHBlbmQgPSBwYXJhbXNXaXRob3V0Q29udGV4dFxuICAgICAgICAgICAgLm1hcCgocGFyYW0pID0+IHtcbiAgICAgICAgICAgICAgLy8gcHJpbWl0aXZlIO2DgOyeheyduOyngCDssrTtgaxcbiAgICAgICAgICAgICAgY29uc3QgaXNQcmltaXRpdmUgPVxuICAgICAgICAgICAgICAgIGlzU3RyaW5nVmFsdWUocGFyYW0udHlwZSkgJiYgW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiXS5pbmNsdWRlcyhwYXJhbS50eXBlKTtcblxuICAgICAgICAgICAgICBpZiAoaXNQcmltaXRpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyBwcmltaXRpdmU6IOyngeygkSBmb3JtRGF0YS5hcHBlbmRcbiAgICAgICAgICAgICAgICByZXR1cm4gYGZvcm1EYXRhLmFwcGVuZCgnJHtwYXJhbS5uYW1lfScsIFN0cmluZygke3BhcmFtLm5hbWV9KSk7YDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBvYmplY3Q6IHRvRm9ybURhdGEg7IKs7JqpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB0b0Zvcm1EYXRhKCR7cGFyYW0ubmFtZX0sIGZvcm1EYXRhLCAnJHtwYXJhbS5uYW1lfScpO2A7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIlxcbiAgICBcIik7XG5cbiAgICAgICAgICBjb25zdCBwYXJhbXNEZWZDb21tYSA9IHBhcmFtc0RlZiAhPT0gXCJcIiA/IFwiLCBcIiA6IFwiXCI7XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gJHttZXRob2ROYW1lfSR7dHlwZVBhcmFtc0RlZn0oXG4gICR7cGFyYW1zRGVmfSR7cGFyYW1zRGVmQ29tbWF9XG4gIGZpbGVzOiBGaWxlW10sXG4gIG9uVXBsb2FkUHJvZ3Jlc3M/OiAocGU6IEF4aW9zUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZFxuKTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICR7Zm9ybURhdGFBcHBlbmR9XG4gICR7b3RoZXJQYXJhbXNBcHBlbmR9XG4gIHJldHVybiBmZXRjaCh7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsOiBcXGAke2FwaUJhc2VVcmx9XFxgLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgZGF0YTogZm9ybURhdGEsXG4gICAgJHthcGkub3B0aW9ucy50aW1lb3V0ID8gYHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSxgIDogXCJcIn1cbiAgfSk7XG59XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChhcGkub3B0aW9ucy5odHRwTWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgY29uc3QgaGFzUGFyYW1zID0gcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMDtcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiAke21ldGhvZE5hbWV9JHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pOiBQcm9taXNlPCR7cmV0dXJuVHlwZURlZn0+IHtcbiAgcmV0dXJuIGZldGNoKHtcbiAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgdXJsOiBcXGAke2FwaUJhc2VVcmx9JHtoYXNQYXJhbXMgPyBgP1xcJHtxcy5zdHJpbmdpZnkoeyAke3BhcmFtTmFtZXN9IH0pfWAgOiBcIlwifVxcYCxcbiAgICAke2FwaS5vcHRpb25zLnRpbWVvdXQgPyBgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KCR7YXBpLm9wdGlvbnMudGltZW91dH0pLGAgOiBcIlwifVxuICB9KTtcbn1cbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhhc1BhcmFtcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gJHttZXRob2ROYW1lfSR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9KTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gIHJldHVybiBmZXRjaCh7XG4gICAgbWV0aG9kOiBcIiR7YXBpLm9wdGlvbnMuaHR0cE1ldGhvZH1cIixcbiAgICB1cmw6IFxcYCR7YXBpQmFzZVVybH1cXGAsXG4gICAgJHtoYXNQYXJhbXMgPyBgZGF0YTogeyAke3BhcmFtTmFtZXN9IH0sYCA6IFwiXCJ9XG4gICAgJHthcGkub3B0aW9ucy50aW1lb3V0ID8gYHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSxgIDogXCJcIn1cbiAgfSk7XG59XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIHF1ZXJ5T3B0aW9ucyArIHVzZVF1ZXJ5ICh0YW5zdGFjay1xdWVyeSlcbiAgICAgICAgaWYgKGNsaWVudHMuaW5jbHVkZXMoXCJ0YW5zdGFjay1xdWVyeVwiKSkge1xuICAgICAgICAgIGNvbnN0IGhvb2tOYW1lID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgICA/IGluZmxlY3Rpb24uY2FtZWxpemUoYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lLCB0cnVlKVxuICAgICAgICAgICAgOiBpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lLCB0cnVlKTtcblxuICAgICAgICAgIC8vIHF1ZXJ5T3B0aW9uc1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0ICR7bWV0aG9kTmFtZX1RdWVyeU9wdGlvbnMgPSAke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSkgPT4gcXVlcnlPcHRpb25zKHtcbiAgcXVlcnlLZXk6IFsnJHttb2RlbE5hbWV9JywgJyR7bWV0aG9kTmFtZX0nJHtwYXJhbU5hbWVzID8gYCwgJHtwYXJhbU5hbWVzfWAgOiBcIlwifV0sXG4gIHF1ZXJ5Rm46ICgpID0+ICR7bWV0aG9kTmFtZX0oJHtwYXJhbU5hbWVzfSlcbn0pO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyB1c2VRdWVyeSBob29rICh1c2VSZWZyZXNoYWJsZeuhnCDrnpjtlZHtlbQgcmVmcmVzaC9pc1JlZnJlc2hpbmfsnYQg6riw67O4IOygnOqztSlcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoaG9va05hbWUpfSA9ICR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9JHtcbiAgICAgICAgICAgICAgcGFyYW1zRGVmID8gXCIsIFwiIDogXCJcIlxuICAgICAgICAgICAgfW9wdGlvbnM/OiB7IGVuYWJsZWQ/OiBib29sZWFuIH0pID0+XG4gIHVzZVJlZnJlc2hhYmxlKHVzZVF1ZXJ5KHtcbiAgICAuLi4ke21ldGhvZE5hbWV9UXVlcnlPcHRpb25zKCR7cGFyYW1OYW1lc30pLFxuICAgIC4uLm9wdGlvbnNcbiAgfSkpO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBpbmZpbml0ZVF1ZXJ5T3B0aW9ucyArIHVzZUluZmluaXRlUXVlcnkgKEFzeW5jSWRDb25maWcudXNlTGlzdEluZmluaXRlIOuMgOyDgSDsobDqsbQpXG4gICAgICAgICAgLy8g7KGw6rG0OiByZXNvdXJjZU5hbWXsnbQg67O17IiY7ZiV7J206rOgIG1ldGhvZE5hbWUgPT09IFwiZmluZE1hbnlcIlxuICAgICAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZTtcbiAgICAgICAgICBjb25zdCBpc0luZmluaXRlVGFyZ2V0ID1cbiAgICAgICAgICAgICEhcmVzb3VyY2VOYW1lICYmXG4gICAgICAgICAgICBpbmZsZWN0aW9uLnBsdXJhbGl6ZShyZXNvdXJjZU5hbWUpID09PSByZXNvdXJjZU5hbWUgJiZcbiAgICAgICAgICAgIGFwaS5tZXRob2ROYW1lID09PSBcImZpbmRNYW55XCI7XG5cbiAgICAgICAgICBpZiAoaXNJbmZpbml0ZVRhcmdldCkge1xuICAgICAgICAgICAgY29uc3QgaW5maW5pdGVNZXRob2ROYW1lID0gYCR7bWV0aG9kTmFtZX1JbmZpbml0ZWA7XG4gICAgICAgICAgICBjb25zdCBpbmZpbml0ZUhvb2tOYW1lID0gYHVzZSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShob29rTmFtZSl9SW5maW5pdGVgO1xuXG4gICAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0ICR7aW5maW5pdGVNZXRob2ROYW1lfVF1ZXJ5T3B0aW9ucyA9ICR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9KSA9PiBpbmZpbml0ZVF1ZXJ5T3B0aW9ucyh7XG4gIHF1ZXJ5S2V5OiBbJyR7bW9kZWxOYW1lfScsICcke21ldGhvZE5hbWV9JywgJ2luZmluaXRlJyR7cGFyYW1OYW1lcyA/IGAsICR7cGFyYW1OYW1lc31gIDogXCJcIn1dLFxuICBxdWVyeUZuOiAoeyBwYWdlUGFyYW0gfSkgPT4gJHttZXRob2ROYW1lfSgke1xuICAgIHBhcmFtTmFtZXMgPyBwYXJhbU5hbWVzLnJlcGxhY2UoL1xcYnJhd1BhcmFtc1xcYi8sIFwieyAuLi5yYXdQYXJhbXMsIHBhZ2U6IHBhZ2VQYXJhbSB9XCIpIDogXCJcIlxuICB9KSxcbiAgaW5pdGlhbFBhZ2VQYXJhbTogMSBhcyBudW1iZXIsXG4gIGdldE5leHRQYWdlUGFyYW06IChsYXN0UGFnZSwgYWxsUGFnZXMpID0+IHtcbiAgICBjb25zdCB0b3RhbCA9IChsYXN0UGFnZSBhcyB7IHRvdGFsPzogbnVtYmVyIH0pPy50b3RhbCA/PyAwO1xuICAgIGNvbnN0IGxvYWRlZCA9IGFsbFBhZ2VzLnJlZHVjZShcbiAgICAgIChzdW0sIHApID0+IHN1bSArICgocCBhcyB7IHJvd3M/OiB1bmtub3duW10gfSk/LnJvd3M/Lmxlbmd0aCA/PyAwKSxcbiAgICAgIDAsXG4gICAgKTtcbiAgICByZXR1cm4gbG9hZGVkIDwgdG90YWwgPyBhbGxQYWdlcy5sZW5ndGggKyAxIDogdW5kZWZpbmVkO1xuICB9LFxuICBzZWxlY3Q6IGRlZHVwZUFuZEZsYXR0ZW4sXG59KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICBgXG5leHBvcnQgY29uc3QgJHtpbmZpbml0ZUhvb2tOYW1lfSA9ICR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9JHtcbiAgICAgICAgICAgICAgICBwYXJhbXNEZWYgPyBcIiwgXCIgOiBcIlwiXG4gICAgICAgICAgICAgIH1vcHRpb25zPzogeyBlbmFibGVkPzogYm9vbGVhbiB9KSA9PlxuICB1c2VSZWZyZXNoYWJsZSh1c2VJbmZpbml0ZVF1ZXJ5KHtcbiAgICAuLi4ke2luZmluaXRlTWV0aG9kTmFtZX1RdWVyeU9wdGlvbnMoJHtwYXJhbU5hbWVzfSksXG4gICAgLi4ub3B0aW9uc1xuICB9KSk7XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIHVzZU11dGF0aW9uICh0YW5zdGFjay1tdXRhdGlvbilcbiAgICAgICAgaWYgKGNsaWVudHMuaW5jbHVkZXMoXCJ0YW5zdGFjay1tdXRhdGlvblwiKSkge1xuICAgICAgICAgIGNvbnN0IGhvb2tOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSk7XG4gICAgICAgICAgY29uc3QgbXV0YXRpb25QYXJhbVR5cGUgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGB7ICR7cGFyYW1zV2l0aG91dENvbnRleHRcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHApID0+IGAke3AubmFtZX06ICR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUocC50eXBlLCBbXSl9YClcbiAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9IH1gXG4gICAgICAgICAgICAgIDogXCJ2b2lkXCI7XG4gICAgICAgICAgY29uc3QgbXV0YXRpb25QYXJhbU5hbWVzID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBwYXJhbXNXaXRob3V0Q29udGV4dC5tYXAoKHApID0+IGBwYXJhbXMuJHtwLm5hbWV9YCkuam9pbihcIiwgXCIpXG4gICAgICAgICAgICAgIDogXCJcIjtcblxuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0IHVzZSR7aG9va05hbWV9TXV0YXRpb24gPSAke3R5cGVQYXJhbXNEZWZ9KCkgPT4gdXNlTXV0YXRpb24oe1xuICBtdXRhdGlvbkZuOiAocGFyYW1zOiAke211dGF0aW9uUGFyYW1UeXBlfSkgPT4gJHttb2RlbE5hbWV9U2VydmljZS4ke21ldGhvZE5hbWV9KCR7bXV0YXRpb25QYXJhbU5hbWVzfSlcbn0pO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiB1c2VNdXRhdGlvbiB3aXRoIG11bHRpcGFydCAodGFuc3RhY2stbXV0YXRpb24tbXVsdGlwYXJ0KVxuICAgICAgICBpZiAoY2xpZW50cy5pbmNsdWRlcyhcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiKSkge1xuICAgICAgICAgIGNvbnN0IGhvb2tOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgICAvLyDtjIzrnbzrr7jthLAg7YOA7J6FIOygleydmDogcGFyYW1zRGVm7JeQ7IScIO2DgOyeheunjCDstpTstpxcbiAgICAgICAgICAvLyBwYXJhbXNEZWYg7JiIOiBcInBhcmFtczogeyBjYXRlZ29yeTogc3RyaW5nIH1cIiDihpIgXCJ7IGNhdGVnb3J5OiBzdHJpbmcgfVwiXG4gICAgICAgICAgY29uc3QgcGFyYW1zVHlwZURlZiA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gcGFyYW1zRGVmLnNwbGl0KFwiOlwiKS5zbGljZSgxKS5qb2luKFwiOlwiKS50cmltKCkgLy8gXCJwYXJhbXM6IHsgY2F0ZWdvcnk6IHN0cmluZyB9XCIg4oaSIFwieyBjYXRlZ29yeTogc3RyaW5nIH1cIlxuICAgICAgICAgICAgICA6IFwiXCI7XG5cbiAgICAgICAgICBjb25zdCBtdXRhdGlvblBhcmFtVHlwZSA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gYHsgcGFyYW1zOiAke3BhcmFtc1R5cGVEZWZ9LCBmaWxlczogRmlsZVtdIH1gXG4gICAgICAgICAgICAgIDogYHsgZmlsZXM6IEZpbGVbXSB9YDtcblxuICAgICAgICAgIC8vIG11dGF0aW9uRm4g7Zi47LacIO2MjOudvOuvuO2EsFxuICAgICAgICAgIGNvbnN0IG11dGF0aW9uRm5DYWxsID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgJHttb2RlbE5hbWV9U2VydmljZS4ke21ldGhvZE5hbWV9KHBhcmFtcy5wYXJhbXMsIHBhcmFtcy5maWxlcylgXG4gICAgICAgICAgICAgIDogYCR7bW9kZWxOYW1lfVNlcnZpY2UuJHttZXRob2ROYW1lfShwYXJhbXMuZmlsZXMpYDtcblxuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0IHVzZSR7aG9va05hbWV9TXV0YXRpb24gPSAke3R5cGVQYXJhbXNEZWZ9KFxuICBvcHRpb25zPzogVXNlTXV0YXRpb25PcHRpb25zPCR7cmV0dXJuVHlwZURlZn0sIEVycm9yLCAke211dGF0aW9uUGFyYW1UeXBlfT4gJiB7XG4gICAgb25VcGxvYWRQcm9ncmVzcz86IChlOiBBeGlvc1Byb2dyZXNzRXZlbnQpID0+IHZvaWQ7XG4gIH1cbikgPT4gdXNlTXV0YXRpb24oe1xuICBtdXRhdGlvbkZuOiAocGFyYW1zOiAke211dGF0aW9uUGFyYW1UeXBlfSkgPT4gJHttdXRhdGlvbkZuQ2FsbH0sXG4gIHJldHJ5OiBmYWxzZSxcbiAgLi4ub3B0aW9ucyxcbn0pO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmFtZXNwYWNlcy5wdXNoKFxuICAgICAgICBgXG5leHBvcnQgbmFtZXNwYWNlICR7bW9kZWxOYW1lfVNlcnZpY2Uge1xuJHtmdW5jdGlvbnMuam9pbihcIlxcblxcblwiKX1cbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBc3luY0lkQ29uZmlnIOyDneyEsSAoRW50aXR567OE66GcKVxuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgY29uc3QgYXN5bmNJZENvbmZpZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIGVudGl0eUlkcykge1xuICAgICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgICAgLy8gQXN5bmNJZENvbmZpZ+yaqSDrpqzsiqTtirgg7KGw7ZqMIEFQSSDssL7quLBcbiAgICAgIGNvbnN0IGxpc3RBcGkgPSBhcGlzQnlNb2RlbC5nZXQobmFtZXMuY2FwaXRhbCk/LmZpbmQoKGFwaSkgPT4ge1xuICAgICAgICAvLyByZXNvdXJjZU5hbWXsnbQg7JeG6rGw64KYIHRhbnN0YWNrLXF1ZXJ566W8IOyCrOyaqe2VmOyngCDslYrripQgQVBJ64qUIOygnOyZuFxuICAgICAgICBpZiAoIWFwaS5vcHRpb25zLnJlc291cmNlTmFtZSB8fCAhYXBpLm9wdGlvbnMuY2xpZW50cz8uaW5jbHVkZXMoXCJ0YW5zdGFjay1xdWVyeVwiKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvdXJjZU5hbWXsnbQg67O17IiY7ZiV7J206rOgIOuplOyEnOuTnOuqheydtCBmaW5kTWFueeyduCBBUElcbiAgICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lO1xuICAgICAgICByZXR1cm4gaW5mbGVjdGlvbi5wbHVyYWxpemUocmVzb3VyY2VOYW1lKSA9PT0gcmVzb3VyY2VOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBcImZpbmRNYW55XCI7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGxpc3RBcGkpIHtcbiAgICAgICAgLy8gcmVzb3VyY2VOYW1l7JeQ7IScIGhvb2sg7J2066aEIOyDneyEsSAo6riw7KG0IOuhnOyngeqzvCDrj5nsnbwpXG4gICAgICAgIGNvbnN0IGhvb2tOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShhc3NlcnREZWZpbmVkKGxpc3RBcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUpLCB0cnVlKTtcbiAgICAgICAgY29uc3QgdXNlSG9va05hbWUgPSBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGhvb2tOYW1lKX1gO1xuICAgICAgICBjb25zdCB1c2VIb29rSW5maW5pdGVOYW1lID0gYCR7dXNlSG9va05hbWV9SW5maW5pdGVgO1xuXG4gICAgICAgIC8vIExpc3RQYXJhbXMg7YOA7J6F66qFIOq1rOyEsVxuICAgICAgICBjb25zdCBsaXN0UGFyYW1zVHlwZSA9IGAke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtc2A7XG5cbiAgICAgICAgYXN5bmNJZENvbmZpZ3MucHVzaChcbiAgICAgICAgICBgXG4vLyBBc3luY0lkQ29uZmlnOiAke25hbWVzLmNhcGl0YWx9XG5leHBvcnQgY29uc3QgJHtuYW1lcy5jYXBpdGFsfUFzeW5jSWRDb25maWc6IEFzeW5jSWRDb25maWc8JHtuYW1lcy5jYXBpdGFsfVN1YnNldEtleSwgJHtuYW1lcy5jYXBpdGFsfVN1YnNldE1hcHBpbmcsICR7bGlzdFBhcmFtc1R5cGV9PiA9IHtcbiAgcGxhY2Vob2xkZXJLZXk6IFwiZW50aXR5LiR7bmFtZXMuY2FwaXRhbH1cIixcbiAgdXNlTGlzdDogJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UuJHt1c2VIb29rTmFtZX0sXG4gIHVzZUxpc3RJbmZpbml0ZTogJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UuJHt1c2VIb29rSW5maW5pdGVOYW1lfSxcbn07XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQlVJTFRfSU5fVFlQRVPsl5DshJwg7IKs7Jqp65CY64qUIO2DgOyeheuTpOydhCDtmZXsnbjtlZjsl6wg64+Z7KCB7Jy866GcIGltcG9ydCDqtazshLFcbiAgICBjb25zdCBidWlsdEluVHlwZUltcG9ydHMgPSBPYmplY3Qua2V5cyhCVUlMVF9JTl9UWVBFUylcbiAgICAgIC5maWx0ZXIoKHR5cGVLZXkpID0+IGltcG9ydEtleXMuaW5jbHVkZXModHlwZUtleSkpXG4gICAgICAubWFwKCh0eXBlS2V5KSA9PiBgdHlwZSAke3R5cGVLZXl9YCk7XG5cbiAgICAvLyBzb25hbXUuc2hhcmVk7JeQ7IScIGltcG9ydO2VoCDtla3rqqnrk6TsnYQg64+Z7KCB7Jy866GcIOq1rOyEsVxuICAgIC8vIGJvZHkg66y47J6Q7Je07J2EIOq4sOykgOycvOuhnCBpbmZpbml0ZSDtm4Ug7IOd7ISxIOyXrOu2gCDtjJDri6ggKGZpbmRNYW55IOuzteyImO2YlSDrtoTquLDsl5DshJzrp4wg7LC47KGw65CoKVxuICAgIGNvbnN0IGJvZHlGb3JJbXBvcnRDaGVjayA9IG5hbWVzcGFjZXMuam9pbihcIlxcblxcblwiKTtcbiAgICBjb25zdCBuZWVkc0RlZHVwZUFuZEZsYXR0ZW4gPSBib2R5Rm9ySW1wb3J0Q2hlY2suaW5jbHVkZXMoXCJkZWR1cGVBbmRGbGF0dGVuXCIpO1xuICAgIGNvbnN0IG5lZWRzVXNlUmVmcmVzaGFibGUgPSBib2R5Rm9ySW1wb3J0Q2hlY2suaW5jbHVkZXMoXCJ1c2VSZWZyZXNoYWJsZVwiKTtcblxuICAgIGNvbnN0IHNvbmFtdVNoYXJlZEltcG9ydHMgPSBbXG4gICAgICBcInR5cGUgTGlzdFJlc3VsdFwiLFxuICAgICAgXCJ0eXBlIEZpbHRlclF1ZXJ5XCIsXG4gICAgICAuLi5idWlsdEluVHlwZUltcG9ydHMsXG4gICAgICBcImZldGNoXCIsXG4gICAgICBcInR5cGUgRXZlbnRIYW5kbGVyc1wiLFxuICAgICAgXCJ0eXBlIFNTRVN0cmVhbU9wdGlvbnNcIixcbiAgICAgIFwidHlwZSBXZWJTb2NrZXRDaGFubmVsT3B0aW9uc1wiLFxuICAgICAgXCJ1c2VTU0VTdHJlYW1cIixcbiAgICAgIFwidXNlV2ViU29ja2V0Q2hhbm5lbFwiLFxuICAgICAgXCJ0b0Zvcm1EYXRhXCIsXG4gICAgICAuLi4obmVlZHNEZWR1cGVBbmRGbGF0dGVuID8gW1wiZGVkdXBlQW5kRmxhdHRlblwiXSA6IFtdKSxcbiAgICAgIC4uLihuZWVkc1VzZVJlZnJlc2hhYmxlID8gW1widXNlUmVmcmVzaGFibGVcIl0gOiBbXSksXG4gICAgXS5qb2luKFwiLCBcIik7XG5cbiAgICAvLyBib2R5IOq1rOyEsTogbmFtZXNwYWNlcyArIGFzeW5jSWRDb25maWdzXG4gICAgY29uc3QgYm9keVBhcnRzID0gWy4uLm5hbWVzcGFjZXMsIC4uLmFzeW5jSWRDb25maWdzXTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHk6IGJvZHlQYXJ0cy5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgaW1wb3J0S2V5czogZGlmZih1bmlxdWUoaW1wb3J0S2V5cyksIFtcbiAgICAgICAgLi4udHlwZVBhcmFtTmFtZXMsXG4gICAgICAgIFwiTGlzdFJlc3VsdFwiLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyhCVUlMVF9JTl9UWVBFUyksXG4gICAgICBdKSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiLyogb3hsaW50LWRpc2FibGUgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgYGltcG9ydCB7IHF1ZXJ5T3B0aW9ucywgdXNlUXVlcnksIHVzZUluZmluaXRlUXVlcnksIGluZmluaXRlUXVlcnlPcHRpb25zLCB1c2VNdXRhdGlvbiwgdHlwZSBVc2VNdXRhdGlvbk9wdGlvbnMgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO2AsXG4gICAgICAgIGBpbXBvcnQgeyB0eXBlIEF4aW9zUHJvZ3Jlc3NFdmVudCB9IGZyb20gJ2F4aW9zJztgLFxuICAgICAgICBgaW1wb3J0IHFzIGZyb20gJ3FzJztgLFxuICAgICAgICBgaW1wb3J0IHsgJHtzb25hbXVTaGFyZWRJbXBvcnRzfSB9IGZyb20gJy4vc29uYW11LnNoYXJlZCc7YCxcbiAgICAgICAgYGltcG9ydCB7IHR5cGUgQXN5bmNJZENvbmZpZyB9IGZyb20gJ0Bzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50cyc7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztxQkFPa0M7WUFFTztvQkFDa0I7V0FFWDttQkFDUztXQUNSO2NBQ1g7bUJBQytCO0FBRXJFLElBQWEscUJBQWIsY0FBd0MsU0FBUztDQUMvQyxjQUFjO0VBQ1osTUFBTSxVQUFVO0NBQ2xCO0NBRUEsbUJBQW1CO0VBQ2pCLE9BQU87R0FDTCxRQUFRO0dBQ1IsTUFBTTtFQUNSO0NBQ0Y7Q0FFQSxPQUFPLElBQWlDO0VBQ3RDLE1BQU0sRUFBRSxTQUFTLE9BQU87RUFHeEIsTUFBTSw4QkFBYyxJQUFJLElBQTJCO0VBQ25ELEtBQUssTUFBTSxPQUFPLE1BQU07R0FDdEIsTUFBTSxZQUFZLElBQUksVUFBVSxRQUFRLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxVQUFVLEVBQUU7R0FDMUUsSUFBSSxDQUFDLFlBQVksSUFBSSxTQUFTLEdBQzVCLFlB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
|
|
304
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMudGVtcGxhdGUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9zZXJ2aWNlcy50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgZGlmZiwgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcblxuaW1wb3J0IHtcbiAgYXBpUGFyYW1Ub1RzQ29kZSxcbiAgYXBpUGFyYW1UeXBlVG9Uc1R5cGUsXG4gIHVud3JhcFByb21pc2VPbmNlLFxufSBmcm9tIFwiLi4vLi4vYXBpL2NvZGUtY29udmVydGVyc1wiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi8uLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc1N0cmluZ1ZhbHVlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcbmltcG9ydCB7IGFzc2VydERlZmluZWQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBCVUlMVF9JTl9UWVBFUywgem9kVHlwZVRvVHNUeXBlRGVmIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19zZXJ2aWNlcyBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJzZXJ2aWNlc1wiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCI6dGFyZ2V0L3NyYy9zZXJ2aWNlc1wiLFxuICAgICAgcGF0aDogYHNlcnZpY2VzLmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7fTogVGVtcGxhdGVPcHRpb25zW1wic2VydmljZXNcIl0pIHtcbiAgICBjb25zdCB7IGFwaXMgfSA9IFNvbmFtdS5zeW5jZXI7XG5cbiAgICAvLyDrqqjrjbjrs4TroZwg6re466O57ZmUXG4gICAgY29uc3QgYXBpc0J5TW9kZWwgPSBuZXcgTWFwPHN0cmluZywgRXh0ZW5kZWRBcGlbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGFwaSBvZiBhcGlzKSB7XG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSBhcGkubW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpO1xuICAgICAgaWYgKCFhcGlzQnlNb2RlbC5oYXMobW9kZWxOYW1lKSkge1xuICAgICAgICBhcGlzQnlNb2RlbC5zZXQobW9kZWxOYW1lLCBbXSk7XG4gICAgICB9XG4gICAgICBhcGlzQnlNb2RlbC5nZXQobW9kZWxOYW1lKT8ucHVzaChhcGkpO1xuICAgIH1cblxuICAgIGNvbnN0IGltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbmFtZXNwYWNlczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgdHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcmVzb2x2ZVdlYlNvY2tldEV2ZW50VHlwZURlZiA9IChcbiAgICAgIHR5cGVSZWY6IEFwaVBhcmFtVHlwZS5SZWYgfCB1bmRlZmluZWQsXG4gICAgICBzY2hlbWE6IFBhcmFtZXRlcnM8dHlwZW9mIHpvZFR5cGVUb1RzVHlwZURlZj5bMF0sXG4gICAgKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICh0eXBlUmVmKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZUltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVR5cGVEZWYgPSBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlUmVmLCBjYW5kaWRhdGVJbXBvcnRLZXlzKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHVuaXF1ZShjYW5kaWRhdGVJbXBvcnRLZXlzKSkge1xuICAgICAgICAgICAgRW50aXR5TWFuYWdlci5nZXRNb2R1bGVQYXRoKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydEtleXMucHVzaCguLi5jYW5kaWRhdGVJbXBvcnRLZXlzKTtcbiAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlVHlwZURlZjtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8g66Gc7LusIGNvbnN0IOuTsSBpbXBvcnQg6rCA64ql7ZWcIOyLrOuzvOydtCDslYTri4jrqbQg6riw7KG0IGlubGluZSDsg53shLHsnLzroZwg7ZuE7Ye0XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHpvZFR5cGVUb1RzVHlwZURlZihzY2hlbWEpO1xuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IFttb2RlbE5hbWUsIG1vZGVsQXBpc10gb2YgYXBpc0J5TW9kZWwpIHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcGkgb2YgbW9kZWxBcGlzKSB7XG4gICAgICAgIC8vIEBzdHJlYW0g642w7L2U66CI7J207YSw6rCAIOyeiOycvOuptCBTU0Ug7Iqk7Yq466a8IO2VqOyImCDsg53shLFcbiAgICAgICAgaWYgKGFwaS5zdHJlYW1PcHRpb25zKSB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zV2l0aG91dENvbnRleHQgPSBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGFwaUJhc2VVcmwgPSBgJHtTb25hbXUuY29uZmlnLmFwaS5yb3V0ZS5wcmVmaXh9JHthcGkucGF0aH1gO1xuXG4gICAgICAgICAgY29uc3QgbWV0aG9kTmFtZVN0cmVhbSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgICAgPyBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgICAgICAgOiBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lKX1gO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWVTdHJlYW1DYW1lbGl6ZWQgPSBpbmZsZWN0aW9uLmNhbWVsaXplKG1ldGhvZE5hbWVTdHJlYW0sIHRydWUpO1xuXG4gICAgICAgICAgY29uc3QgZXZlbnRzVHlwZURlZiA9IHpvZFR5cGVUb1RzVHlwZURlZihhcGkuc3RyZWFtT3B0aW9ucy5ldmVudHMpO1xuXG4gICAgICAgICAgLy8g7YyM652866+47YSw66W8IOqwneyytCDtmJXtg5zroZwg7KCV7J2YICjtg4DsnoXqs7wg7Iuk7KCcIOqwkiDrqqjrkZDsl5Ag7IKs7JqpKVxuICAgICAgICAgIGNvbnN0IHBhcmFtc0RlZkFzT2JqZWN0ID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgeyAke3BhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gYCR7cC5uYW1lfTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwLnR5cGUsIGltcG9ydEtleXMpfWApLmpvaW4oXCIsIFwiKX0gfWBcbiAgICAgICAgICAgICAgOiBcInt9XCI7XG5cbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBmdW5jdGlvbiAke21ldGhvZE5hbWVTdHJlYW1DYW1lbGl6ZWR9KFxuICBwYXJhbXM6ICR7cGFyYW1zRGVmQXNPYmplY3R9LFxuICBoYW5kbGVyczogRXZlbnRIYW5kbGVyczwke2V2ZW50c1R5cGVEZWZ9ICYgeyBlbmQ/OiAoKSA9PiB2b2lkIH0+LFxuICBvcHRpb25zOiBTU0VTdHJlYW1PcHRpb25zXG4pIHtcbiAgcmV0dXJuIHVzZVNTRVN0cmVhbTwke2V2ZW50c1R5cGVEZWZ9PihcXGAke2FwaUJhc2VVcmx9XFxgLCBwYXJhbXMsIGhhbmRsZXJzLCBvcHRpb25zKTtcbn1cbiAgICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXBpLndlYnNvY2tldE9wdGlvbnMpIHtcbiAgICAgICAgICAvLyB3ZWJzb2NrZXQgc3VyZmFjZeuKlCBmZXRjaCDtlajsiJgg64yA7IugIHR5cGVkIGhvb2vsnYQg7IOd7ISx7ZWoXG4gICAgICAgICAgY29uc3QgcGFyYW1zV2l0aG91dENvbnRleHQgPSBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGFwaUJhc2VVcmwgPSBgJHtTb25hbXUuY29uZmlnLmFwaS5yb3V0ZS5wcmVmaXh9JHthcGkucGF0aH1gO1xuXG4gICAgICAgICAgY29uc3QgbWV0aG9kTmFtZVdlYlNvY2tldCA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgICAgPyBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgICAgICAgOiBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lKX1gO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWVXZWJTb2NrZXRDYW1lbGl6ZWQgPSBpbmZsZWN0aW9uLmNhbWVsaXplKG1ldGhvZE5hbWVXZWJTb2NrZXQsIHRydWUpO1xuXG4gICAgICAgICAgLy8gb3V0RXZlbnRz64qUIOyImOyLoCDtg4DsnoUsIGluRXZlbnRz64qUIHNlbmQoKSDsnoXroKUg7YOA7J6F7Jy866GcIOyCrOyaqe2VqFxuICAgICAgICAgIGNvbnN0IG91dEV2ZW50c1R5cGVEZWYgPSByZXNvbHZlV2ViU29ja2V0RXZlbnRUeXBlRGVmKFxuICAgICAgICAgICAgYXBpLndlYnNvY2tldE9wdGlvbnMub3V0RXZlbnRzVHlwZVJlZixcbiAgICAgICAgICAgIGFwaS53ZWJzb2NrZXRPcHRpb25zLm91dEV2ZW50cyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGluRXZlbnRzVHlwZURlZiA9IHJlc29sdmVXZWJTb2NrZXRFdmVudFR5cGVEZWYoXG4gICAgICAgICAgICBhcGkud2Vic29ja2V0T3B0aW9ucy5pbkV2ZW50c1R5cGVSZWYsXG4gICAgICAgICAgICBhcGkud2Vic29ja2V0T3B0aW9ucy5pbkV2ZW50cyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gY29udGV4dC9yZWZLbmV4L2ludGVybmFsIG9wdGlvbmFsIO2MjOudvOuvuO2EsOuKlCDtgbTrnbzsnbTslrjtirgg7J6F66Cl7JeQ7IScIOygnOyZuO2VqFxuICAgICAgICAgIGNvbnN0IHBhcmFtc0RlZkFzT2JqZWN0ID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgeyAke3BhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gYCR7cC5uYW1lfTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwLnR5cGUsIGltcG9ydEtleXMpfWApLmpvaW4oXCIsIFwiKX0gfWBcbiAgICAgICAgICAgICAgOiBcInt9XCI7XG5cbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBmdW5jdGlvbiAke21ldGhvZE5hbWVXZWJTb2NrZXRDYW1lbGl6ZWR9KFxuICBwYXJhbXM6ICR7cGFyYW1zRGVmQXNPYmplY3R9LFxuICBoYW5kbGVyczogRXZlbnRIYW5kbGVyczwke291dEV2ZW50c1R5cGVEZWZ9PixcbiAgb3B0aW9uczogV2ViU29ja2V0Q2hhbm5lbE9wdGlvbnMgPSB7fVxuKSB7XG4gIHJldHVybiB1c2VXZWJTb2NrZXRDaGFubmVsPCR7b3V0RXZlbnRzVHlwZURlZn0sICR7aW5FdmVudHNUeXBlRGVmfT4oXFxgJHthcGlCYXNlVXJsfVxcYCwgcGFyYW1zLCBoYW5kbGVycywgb3B0aW9ucyk7XG59XG4gICAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udGV4dCDsoJzsmbjtlZwg7YyM652866+47YSwXG4gICAgICAgIGNvbnN0IHBhcmFtc1dpdGhvdXRDb250ZXh0ID0gYXBpLnBhcmFtZXRlcnMuZmlsdGVyKFxuICAgICAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzUmVmS25leChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIShwYXJhbS5vcHRpb25hbCAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyDtg4DsnoUg7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCB0eXBlUGFyYW1ldGVyc0FzVHNUeXBlID0gYXBpLnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICAgLm1hcCgodHlwZVBhcmFtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlUGFyYW0sIGltcG9ydEtleXMpKVxuICAgICAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbXNEZWYgPSB0eXBlUGFyYW1ldGVyc0FzVHNUeXBlID8gYDwke3R5cGVQYXJhbWV0ZXJzQXNUc1R5cGV9PmAgOiBcIlwiO1xuICAgICAgICB0eXBlUGFyYW1OYW1lcyA9IHR5cGVQYXJhbU5hbWVzLmNvbmNhdChhcGkudHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAuaWQpKTtcblxuICAgICAgICAvLyDtjIzrnbzrr7jthLAg7KCV7J2YXG4gICAgICAgIGNvbnN0IHBhcmFtc0RlZiA9IGFwaVBhcmFtVG9Uc0NvZGUocGFyYW1zV2l0aG91dENvbnRleHQsIGltcG9ydEtleXMpO1xuICAgICAgICBjb25zdCBwYXJhbU5hbWVzID0gcGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBwLm5hbWUpLmpvaW4oXCIsIFwiKTtcblxuICAgICAgICAvLyDrpqzthLQg7YOA7J6FIOygleydmFxuICAgICAgICBjb25zdCByZXR1cm5UeXBlRGVmID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICAgICAgYXNzZXJ0RGVmaW5lZCh1bndyYXBQcm9taXNlT25jZShhcGkucmV0dXJuVHlwZSkpLFxuICAgICAgICAgIGltcG9ydEtleXMsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g6riw67O4IFVSTFxuICAgICAgICBjb25zdCBhcGlCYXNlVXJsID0gYCR7U29uYW11LmNvbmZpZy5hcGkucm91dGUucHJlZml4fSR7YXBpLnBhdGh9YDtcblxuICAgICAgICBjb25zdCBjbGllbnRzID0gYXBpLm9wdGlvbnMuY2xpZW50cyB8fCBbXTtcblxuICAgICAgICAvLyAxLiBheGlvcyDtlajsiJgg7IOd7ISxXG4gICAgICAgIC8vIHJlc291cmNlTmFtZeydtCDsnojsnLzrqbQgZ2V0ICsgcmVzb3VyY2VOYW1lIO2Yle2DnOuhnCDtlajsiJjrqoUg7IOd7ISxXG4gICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWVcbiAgICAgICAgICA/IGBnZXQke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lKX1gXG4gICAgICAgICAgOiBhcGkubWV0aG9kTmFtZTtcblxuICAgICAgICAvLyBheGlvcy1tdWx0aXBhcnQg7LKY66asICjtjIzsnbwg7JeF66Gc65OcKVxuICAgICAgICBpZiAoY2xpZW50cy5pbmNsdWRlcyhcImF4aW9zLW11bHRpcGFydFwiKSkge1xuICAgICAgICAgIGNvbnN0IGZvcm1EYXRhQXBwZW5kID0gYGZpbGVzLmZvckVhY2goZiA9PiB7IGZvcm1EYXRhLmFwcGVuZChcImZpbGVzXCIsIGYpOyB9KTtgO1xuXG4gICAgICAgICAgY29uc3Qgb3RoZXJQYXJhbXNBcHBlbmQgPSBwYXJhbXNXaXRob3V0Q29udGV4dFxuICAgICAgICAgICAgLm1hcCgocGFyYW0pID0+IHtcbiAgICAgICAgICAgICAgLy8gcHJpbWl0aXZlIO2DgOyeheyduOyngCDssrTtgaxcbiAgICAgICAgICAgICAgY29uc3QgaXNQcmltaXRpdmUgPVxuICAgICAgICAgICAgICAgIGlzU3RyaW5nVmFsdWUocGFyYW0udHlwZSkgJiYgW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiXS5pbmNsdWRlcyhwYXJhbS50eXBlKTtcblxuICAgICAgICAgICAgICBpZiAoaXNQcmltaXRpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyBwcmltaXRpdmU6IOyngeygkSBmb3JtRGF0YS5hcHBlbmRcbiAgICAgICAgICAgICAgICByZXR1cm4gYGZvcm1EYXRhLmFwcGVuZCgnJHtwYXJhbS5uYW1lfScsIFN0cmluZygke3BhcmFtLm5hbWV9KSk7YDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBvYmplY3Q6IHRvRm9ybURhdGEg7IKs7JqpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB0b0Zvcm1EYXRhKCR7cGFyYW0ubmFtZX0sIGZvcm1EYXRhLCAnJHtwYXJhbS5uYW1lfScpO2A7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIlxcbiAgICBcIik7XG5cbiAgICAgICAgICBjb25zdCBwYXJhbXNEZWZDb21tYSA9IHBhcmFtc0RlZiAhPT0gXCJcIiA/IFwiLCBcIiA6IFwiXCI7XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gJHttZXRob2ROYW1lfSR7dHlwZVBhcmFtc0RlZn0oXG4gICR7cGFyYW1zRGVmfSR7cGFyYW1zRGVmQ29tbWF9XG4gIGZpbGVzOiBGaWxlW10sXG4gIG9uVXBsb2FkUHJvZ3Jlc3M/OiAocGU6IEF4aW9zUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZFxuKTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICR7Zm9ybURhdGFBcHBlbmR9XG4gICR7b3RoZXJQYXJhbXNBcHBlbmR9XG4gIHJldHVybiBmZXRjaCh7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsOiBcXGAke2FwaUJhc2VVcmx9XFxgLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgZGF0YTogZm9ybURhdGEsXG4gICAgJHthcGkub3B0aW9ucy50aW1lb3V0ID8gYHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSxgIDogXCJcIn1cbiAgfSk7XG59XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChhcGkub3B0aW9ucy5odHRwTWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgY29uc3QgaGFzUGFyYW1zID0gcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMDtcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiAke21ldGhvZE5hbWV9JHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pOiBQcm9taXNlPCR7cmV0dXJuVHlwZURlZn0+IHtcbiAgcmV0dXJuIGZldGNoKHtcbiAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgdXJsOiBcXGAke2FwaUJhc2VVcmx9JHtoYXNQYXJhbXMgPyBgP1xcJHtxcy5zdHJpbmdpZnkoeyAke3BhcmFtTmFtZXN9IH0pfWAgOiBcIlwifVxcYCxcbiAgICAke2FwaS5vcHRpb25zLnRpbWVvdXQgPyBgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KCR7YXBpLm9wdGlvbnMudGltZW91dH0pLGAgOiBcIlwifVxuICB9KTtcbn1cbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhhc1BhcmFtcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gJHttZXRob2ROYW1lfSR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9KTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gIHJldHVybiBmZXRjaCh7XG4gICAgbWV0aG9kOiBcIiR7YXBpLm9wdGlvbnMuaHR0cE1ldGhvZH1cIixcbiAgICB1cmw6IFxcYCR7YXBpQmFzZVVybH1cXGAsXG4gICAgJHtoYXNQYXJhbXMgPyBgZGF0YTogeyAke3BhcmFtTmFtZXN9IH0sYCA6IFwiXCJ9XG4gICAgJHthcGkub3B0aW9ucy50aW1lb3V0ID8gYHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSxgIDogXCJcIn1cbiAgfSk7XG59XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIHF1ZXJ5T3B0aW9ucyArIHVzZVF1ZXJ5ICh0YW5zdGFjay1xdWVyeSlcbiAgICAgICAgaWYgKGNsaWVudHMuaW5jbHVkZXMoXCJ0YW5zdGFjay1xdWVyeVwiKSkge1xuICAgICAgICAgIGNvbnN0IGhvb2tOYW1lID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgICA/IGluZmxlY3Rpb24uY2FtZWxpemUoYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lLCB0cnVlKVxuICAgICAgICAgICAgOiBpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lLCB0cnVlKTtcblxuICAgICAgICAgIC8vIHF1ZXJ5T3B0aW9uc1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0ICR7bWV0aG9kTmFtZX1RdWVyeU9wdGlvbnMgPSAke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSkgPT4gcXVlcnlPcHRpb25zKHtcbiAgcXVlcnlLZXk6IFsnJHttb2RlbE5hbWV9JywgJyR7bWV0aG9kTmFtZX0nJHtwYXJhbU5hbWVzID8gYCwgJHtwYXJhbU5hbWVzfWAgOiBcIlwifV0sXG4gIHF1ZXJ5Rm46ICgpID0+ICR7bWV0aG9kTmFtZX0oJHtwYXJhbU5hbWVzfSlcbn0pO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyB1c2VRdWVyeSBob29rICh1c2VSZWZyZXNoYWJsZeuhnCDrnpjtlZHtlbQgcmVmcmVzaC9pc1JlZnJlc2hpbmfsnYQg6riw67O4IOygnOqztSlcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoaG9va05hbWUpfSA9ICR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9JHtcbiAgICAgICAgICAgICAgcGFyYW1zRGVmID8gXCIsIFwiIDogXCJcIlxuICAgICAgICAgICAgfW9wdGlvbnM/OiB7IGVuYWJsZWQ/OiBib29sZWFuIH0pID0+XG4gIHVzZVJlZnJlc2hhYmxlKHVzZVF1ZXJ5KHtcbiAgICAuLi4ke21ldGhvZE5hbWV9UXVlcnlPcHRpb25zKCR7cGFyYW1OYW1lc30pLFxuICAgIC4uLm9wdGlvbnNcbiAgfSkpO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBpbmZpbml0ZVF1ZXJ5T3B0aW9ucyArIHVzZUluZmluaXRlUXVlcnkgKEFzeW5jSWRDb25maWcudXNlTGlzdEluZmluaXRlIOuMgOyDgSDsobDqsbQpXG4gICAgICAgICAgLy8g7KGw6rG0OiByZXNvdXJjZU5hbWXsnbQg67O17IiY7ZiV7J206rOgIG1ldGhvZE5hbWUgPT09IFwiZmluZE1hbnlcIlxuICAgICAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZTtcbiAgICAgICAgICBjb25zdCBpc0luZmluaXRlVGFyZ2V0ID1cbiAgICAgICAgICAgICEhcmVzb3VyY2VOYW1lICYmXG4gICAgICAgICAgICBpbmZsZWN0aW9uLnBsdXJhbGl6ZShyZXNvdXJjZU5hbWUpID09PSByZXNvdXJjZU5hbWUgJiZcbiAgICAgICAgICAgIGFwaS5tZXRob2ROYW1lID09PSBcImZpbmRNYW55XCI7XG5cbiAgICAgICAgICBpZiAoaXNJbmZpbml0ZVRhcmdldCkge1xuICAgICAgICAgICAgY29uc3QgaW5maW5pdGVNZXRob2ROYW1lID0gYCR7bWV0aG9kTmFtZX1JbmZpbml0ZWA7XG4gICAgICAgICAgICBjb25zdCBpbmZpbml0ZUhvb2tOYW1lID0gYHVzZSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShob29rTmFtZSl9SW5maW5pdGVgO1xuXG4gICAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0ICR7aW5maW5pdGVNZXRob2ROYW1lfVF1ZXJ5T3B0aW9ucyA9ICR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9KSA9PiBpbmZpbml0ZVF1ZXJ5T3B0aW9ucyh7XG4gIHF1ZXJ5S2V5OiBbJyR7bW9kZWxOYW1lfScsICcke21ldGhvZE5hbWV9JywgJ2luZmluaXRlJyR7cGFyYW1OYW1lcyA/IGAsICR7cGFyYW1OYW1lc31gIDogXCJcIn1dLFxuICBxdWVyeUZuOiAoeyBwYWdlUGFyYW0gfSkgPT4gJHttZXRob2ROYW1lfSgke1xuICAgIHBhcmFtTmFtZXMgPyBwYXJhbU5hbWVzLnJlcGxhY2UoL1xcYnJhd1BhcmFtc1xcYi8sIFwieyAuLi5yYXdQYXJhbXMsIHBhZ2U6IHBhZ2VQYXJhbSB9XCIpIDogXCJcIlxuICB9KSxcbiAgaW5pdGlhbFBhZ2VQYXJhbTogMSBhcyBudW1iZXIsXG4gIGdldE5leHRQYWdlUGFyYW06IChsYXN0UGFnZSwgYWxsUGFnZXMpID0+IHtcbiAgICBjb25zdCB0b3RhbCA9IChsYXN0UGFnZSBhcyB7IHRvdGFsPzogbnVtYmVyIH0pPy50b3RhbCA/PyAwO1xuICAgIGNvbnN0IGxvYWRlZCA9IGFsbFBhZ2VzLnJlZHVjZShcbiAgICAgIChzdW0sIHApID0+IHN1bSArICgocCBhcyB7IHJvd3M/OiB1bmtub3duW10gfSk/LnJvd3M/Lmxlbmd0aCA/PyAwKSxcbiAgICAgIDAsXG4gICAgKTtcbiAgICByZXR1cm4gbG9hZGVkIDwgdG90YWwgPyBhbGxQYWdlcy5sZW5ndGggKyAxIDogdW5kZWZpbmVkO1xuICB9LFxuICBzZWxlY3Q6IGRlZHVwZUFuZEZsYXR0ZW4sXG59KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICBgXG5leHBvcnQgY29uc3QgJHtpbmZpbml0ZUhvb2tOYW1lfSA9ICR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9JHtcbiAgICAgICAgICAgICAgICBwYXJhbXNEZWYgPyBcIiwgXCIgOiBcIlwiXG4gICAgICAgICAgICAgIH1vcHRpb25zPzogeyBlbmFibGVkPzogYm9vbGVhbiB9KSA9PlxuICB1c2VSZWZyZXNoYWJsZSh1c2VJbmZpbml0ZVF1ZXJ5KHtcbiAgICAuLi4ke2luZmluaXRlTWV0aG9kTmFtZX1RdWVyeU9wdGlvbnMoJHtwYXJhbU5hbWVzfSksXG4gICAgLi4ub3B0aW9uc1xuICB9KSk7XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIHVzZU11dGF0aW9uICh0YW5zdGFjay1tdXRhdGlvbilcbiAgICAgICAgaWYgKGNsaWVudHMuaW5jbHVkZXMoXCJ0YW5zdGFjay1tdXRhdGlvblwiKSkge1xuICAgICAgICAgIGNvbnN0IGhvb2tOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSk7XG4gICAgICAgICAgY29uc3QgbXV0YXRpb25QYXJhbVR5cGUgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGB7ICR7cGFyYW1zV2l0aG91dENvbnRleHRcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHApID0+IGAke3AubmFtZX06ICR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUocC50eXBlLCBbXSl9YClcbiAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9IH1gXG4gICAgICAgICAgICAgIDogXCJ2b2lkXCI7XG4gICAgICAgICAgY29uc3QgbXV0YXRpb25QYXJhbU5hbWVzID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBwYXJhbXNXaXRob3V0Q29udGV4dC5tYXAoKHApID0+IGBwYXJhbXMuJHtwLm5hbWV9YCkuam9pbihcIiwgXCIpXG4gICAgICAgICAgICAgIDogXCJcIjtcblxuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0IHVzZSR7aG9va05hbWV9TXV0YXRpb24gPSAke3R5cGVQYXJhbXNEZWZ9KCkgPT4gdXNlTXV0YXRpb24oe1xuICBtdXRhdGlvbkZuOiAocGFyYW1zOiAke211dGF0aW9uUGFyYW1UeXBlfSkgPT4gJHttb2RlbE5hbWV9U2VydmljZS4ke21ldGhvZE5hbWV9KCR7bXV0YXRpb25QYXJhbU5hbWVzfSlcbn0pO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiB1c2VNdXRhdGlvbiB3aXRoIG11bHRpcGFydCAodGFuc3RhY2stbXV0YXRpb24tbXVsdGlwYXJ0KVxuICAgICAgICBpZiAoY2xpZW50cy5pbmNsdWRlcyhcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiKSkge1xuICAgICAgICAgIGNvbnN0IGhvb2tOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgICAvLyDtjIzrnbzrr7jthLAg7YOA7J6FIOygleydmDogcGFyYW1zRGVm7JeQ7IScIO2DgOyeheunjCDstpTstpxcbiAgICAgICAgICAvLyBwYXJhbXNEZWYg7JiIOiBcInBhcmFtczogeyBjYXRlZ29yeTogc3RyaW5nIH1cIiDihpIgXCJ7IGNhdGVnb3J5OiBzdHJpbmcgfVwiXG4gICAgICAgICAgY29uc3QgcGFyYW1zVHlwZURlZiA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gcGFyYW1zRGVmLnNwbGl0KFwiOlwiKS5zbGljZSgxKS5qb2luKFwiOlwiKS50cmltKCkgLy8gXCJwYXJhbXM6IHsgY2F0ZWdvcnk6IHN0cmluZyB9XCIg4oaSIFwieyBjYXRlZ29yeTogc3RyaW5nIH1cIlxuICAgICAgICAgICAgICA6IFwiXCI7XG5cbiAgICAgICAgICBjb25zdCBtdXRhdGlvblBhcmFtVHlwZSA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gYHsgcGFyYW1zOiAke3BhcmFtc1R5cGVEZWZ9LCBmaWxlczogRmlsZVtdIH1gXG4gICAgICAgICAgICAgIDogYHsgZmlsZXM6IEZpbGVbXSB9YDtcblxuICAgICAgICAgIC8vIG11dGF0aW9uRm4g7Zi47LacIO2MjOudvOuvuO2EsFxuICAgICAgICAgIGNvbnN0IG11dGF0aW9uRm5DYWxsID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgJHttb2RlbE5hbWV9U2VydmljZS4ke21ldGhvZE5hbWV9KHBhcmFtcy5wYXJhbXMsIHBhcmFtcy5maWxlcylgXG4gICAgICAgICAgICAgIDogYCR7bW9kZWxOYW1lfVNlcnZpY2UuJHttZXRob2ROYW1lfShwYXJhbXMuZmlsZXMpYDtcblxuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0IHVzZSR7aG9va05hbWV9TXV0YXRpb24gPSAke3R5cGVQYXJhbXNEZWZ9KFxuICBvcHRpb25zPzogVXNlTXV0YXRpb25PcHRpb25zPCR7cmV0dXJuVHlwZURlZn0sIEVycm9yLCAke211dGF0aW9uUGFyYW1UeXBlfT4gJiB7XG4gICAgb25VcGxvYWRQcm9ncmVzcz86IChlOiBBeGlvc1Byb2dyZXNzRXZlbnQpID0+IHZvaWQ7XG4gIH1cbikgPT4gdXNlTXV0YXRpb24oe1xuICBtdXRhdGlvbkZuOiAocGFyYW1zOiAke211dGF0aW9uUGFyYW1UeXBlfSkgPT4gJHttdXRhdGlvbkZuQ2FsbH0sXG4gIHJldHJ5OiBmYWxzZSxcbiAgLi4ub3B0aW9ucyxcbn0pO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmFtZXNwYWNlcy5wdXNoKFxuICAgICAgICBgXG5leHBvcnQgbmFtZXNwYWNlICR7bW9kZWxOYW1lfVNlcnZpY2Uge1xuJHtmdW5jdGlvbnMuam9pbihcIlxcblxcblwiKX1cbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBc3luY0lkQ29uZmlnIOyDneyEsSAoRW50aXR567OE66GcKVxuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgY29uc3QgYXN5bmNJZENvbmZpZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIGVudGl0eUlkcykge1xuICAgICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgICAgLy8gQXN5bmNJZENvbmZpZ+yaqSDrpqzsiqTtirgg7KGw7ZqMIEFQSSDssL7quLBcbiAgICAgIGNvbnN0IGxpc3RBcGkgPSBhcGlzQnlNb2RlbC5nZXQobmFtZXMuY2FwaXRhbCk/LmZpbmQoKGFwaSkgPT4ge1xuICAgICAgICAvLyByZXNvdXJjZU5hbWXsnbQg7JeG6rGw64KYIHRhbnN0YWNrLXF1ZXJ566W8IOyCrOyaqe2VmOyngCDslYrripQgQVBJ64qUIOygnOyZuFxuICAgICAgICBpZiAoIWFwaS5vcHRpb25zLnJlc291cmNlTmFtZSB8fCAhYXBpLm9wdGlvbnMuY2xpZW50cz8uaW5jbHVkZXMoXCJ0YW5zdGFjay1xdWVyeVwiKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvdXJjZU5hbWXsnbQg67O17IiY7ZiV7J206rOgIOuplOyEnOuTnOuqheydtCBmaW5kTWFueeyduCBBUElcbiAgICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lO1xuICAgICAgICByZXR1cm4gaW5mbGVjdGlvbi5wbHVyYWxpemUocmVzb3VyY2VOYW1lKSA9PT0gcmVzb3VyY2VOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBcImZpbmRNYW55XCI7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGxpc3RBcGkpIHtcbiAgICAgICAgLy8gcmVzb3VyY2VOYW1l7JeQ7IScIGhvb2sg7J2066aEIOyDneyEsSAo6riw7KG0IOuhnOyngeqzvCDrj5nsnbwpXG4gICAgICAgIGNvbnN0IGhvb2tOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShhc3NlcnREZWZpbmVkKGxpc3RBcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUpLCB0cnVlKTtcbiAgICAgICAgY29uc3QgdXNlSG9va05hbWUgPSBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGhvb2tOYW1lKX1gO1xuICAgICAgICBjb25zdCB1c2VIb29rSW5maW5pdGVOYW1lID0gYCR7dXNlSG9va05hbWV9SW5maW5pdGVgO1xuXG4gICAgICAgIC8vIExpc3RQYXJhbXMg7YOA7J6F66qFIOq1rOyEsVxuICAgICAgICBjb25zdCBsaXN0UGFyYW1zVHlwZSA9IGAke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtc2A7XG5cbiAgICAgICAgYXN5bmNJZENvbmZpZ3MucHVzaChcbiAgICAgICAgICBgXG4vLyBBc3luY0lkQ29uZmlnOiAke25hbWVzLmNhcGl0YWx9XG5leHBvcnQgY29uc3QgJHtuYW1lcy5jYXBpdGFsfUFzeW5jSWRDb25maWc6IEFzeW5jSWRDb25maWc8JHtuYW1lcy5jYXBpdGFsfVN1YnNldEtleSwgJHtuYW1lcy5jYXBpdGFsfVN1YnNldE1hcHBpbmcsICR7bGlzdFBhcmFtc1R5cGV9PiA9IHtcbiAgcGxhY2Vob2xkZXJLZXk6IFwiZW50aXR5LiR7bmFtZXMuY2FwaXRhbH1cIixcbiAgdXNlTGlzdDogJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UuJHt1c2VIb29rTmFtZX0sXG4gIHVzZUxpc3RJbmZpbml0ZTogJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UuJHt1c2VIb29rSW5maW5pdGVOYW1lfSxcbn07XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQlVJTFRfSU5fVFlQRVPsl5DshJwg7IKs7Jqp65CY64qUIO2DgOyeheuTpOydhCDtmZXsnbjtlZjsl6wg64+Z7KCB7Jy866GcIGltcG9ydCDqtazshLFcbiAgICBjb25zdCBidWlsdEluVHlwZUltcG9ydHMgPSBPYmplY3Qua2V5cyhCVUlMVF9JTl9UWVBFUylcbiAgICAgIC5maWx0ZXIoKHR5cGVLZXkpID0+IGltcG9ydEtleXMuaW5jbHVkZXModHlwZUtleSkpXG4gICAgICAubWFwKCh0eXBlS2V5KSA9PiBgdHlwZSAke3R5cGVLZXl9YCk7XG5cbiAgICAvLyBzb25hbXUuc2hhcmVk7JeQ7IScIGltcG9ydO2VoCDtla3rqqnrk6TsnYQg64+Z7KCB7Jy866GcIOq1rOyEsVxuICAgIC8vIGJvZHkg66y47J6Q7Je07J2EIOq4sOykgOycvOuhnCBpbmZpbml0ZSDtm4Ug7IOd7ISxIOyXrOu2gCDtjJDri6ggKGZpbmRNYW55IOuzteyImO2YlSDrtoTquLDsl5DshJzrp4wg7LC47KGw65CoKVxuICAgIGNvbnN0IGJvZHlGb3JJbXBvcnRDaGVjayA9IG5hbWVzcGFjZXMuam9pbihcIlxcblxcblwiKTtcbiAgICBjb25zdCBuZWVkc0RlZHVwZUFuZEZsYXR0ZW4gPSBib2R5Rm9ySW1wb3J0Q2hlY2suaW5jbHVkZXMoXCJkZWR1cGVBbmRGbGF0dGVuXCIpO1xuICAgIGNvbnN0IG5lZWRzVXNlUmVmcmVzaGFibGUgPSBib2R5Rm9ySW1wb3J0Q2hlY2suaW5jbHVkZXMoXCJ1c2VSZWZyZXNoYWJsZVwiKTtcblxuICAgIGNvbnN0IHNvbmFtdVNoYXJlZEltcG9ydHMgPSBbXG4gICAgICBcInR5cGUgTGlzdFJlc3VsdFwiLFxuICAgICAgXCJ0eXBlIEZpbHRlclF1ZXJ5XCIsXG4gICAgICAuLi5idWlsdEluVHlwZUltcG9ydHMsXG4gICAgICBcImZldGNoXCIsXG4gICAgICBcInR5cGUgRXZlbnRIYW5kbGVyc1wiLFxuICAgICAgXCJ0eXBlIFNTRVN0cmVhbU9wdGlvbnNcIixcbiAgICAgIFwidHlwZSBXZWJTb2NrZXRDaGFubmVsT3B0aW9uc1wiLFxuICAgICAgXCJ1c2VTU0VTdHJlYW1cIixcbiAgICAgIFwidXNlV2ViU29ja2V0Q2hhbm5lbFwiLFxuICAgICAgXCJ0b0Zvcm1EYXRhXCIsXG4gICAgICAuLi4obmVlZHNEZWR1cGVBbmRGbGF0dGVuID8gW1wiZGVkdXBlQW5kRmxhdHRlblwiXSA6IFtdKSxcbiAgICAgIC4uLihuZWVkc1VzZVJlZnJlc2hhYmxlID8gW1widXNlUmVmcmVzaGFibGVcIl0gOiBbXSksXG4gICAgXS5qb2luKFwiLCBcIik7XG5cbiAgICAvLyBib2R5IOq1rOyEsTogbmFtZXNwYWNlcyArIGFzeW5jSWRDb25maWdzXG4gICAgY29uc3QgYm9keVBhcnRzID0gWy4uLm5hbWVzcGFjZXMsIC4uLmFzeW5jSWRDb25maWdzXTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHk6IGJvZHlQYXJ0cy5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgaW1wb3J0S2V5czogZGlmZih1bmlxdWUoaW1wb3J0S2V5cyksIFtcbiAgICAgICAgLi4udHlwZVBhcmFtTmFtZXMsXG4gICAgICAgIFwiTGlzdFJlc3VsdFwiLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyhCVUlMVF9JTl9UWVBFUyksXG4gICAgICBdKSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiLyogb3hsaW50LWRpc2FibGUgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgYGltcG9ydCB7IHF1ZXJ5T3B0aW9ucywgdXNlUXVlcnksIHVzZUluZmluaXRlUXVlcnksIGluZmluaXRlUXVlcnlPcHRpb25zLCB1c2VNdXRhdGlvbiwgdHlwZSBVc2VNdXRhdGlvbk9wdGlvbnMgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO2AsXG4gICAgICAgIGBpbXBvcnQgeyB0eXBlIEF4aW9zUHJvZ3Jlc3NFdmVudCB9IGZyb20gJ2F4aW9zJztgLFxuICAgICAgICBgaW1wb3J0IHFzIGZyb20gJ3FzJztgLFxuICAgICAgICBgaW1wb3J0IHsgJHtzb25hbXVTaGFyZWRJbXBvcnRzfSB9IGZyb20gJy4vc29uYW11LnNoYXJlZCc7YCxcbiAgICAgICAgYGltcG9ydCB7IHR5cGUgQXN5bmNJZENvbmZpZyB9IGZyb20gJ0Bzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50cyc7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQU9rQyxxQkFBQTtBQUVPLFlBQUE7QUFDa0Isb0JBQUE7QUFFWCxXQUFBO0FBQ1MsbUJBQUE7QUFDUixXQUFBO0FBQ1gsY0FBQTtBQUMrQixtQkFBQTtBQUVyRSxJQUFhLHFCQUFiLGNBQXdDLFNBQVM7Q0FDL0MsY0FBYztFQUNaLE1BQU0sVUFBVTtDQUNsQjtDQUVBLG1CQUFtQjtFQUNqQixPQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU07RUFDUjtDQUNGO0NBRUEsT0FBTyxJQUFpQztFQUN0QyxNQUFNLEVBQUUsU0FBUyxPQUFPO0VBR3hCLE1BQU0sOEJBQWMsSUFBSSxJQUEyQjtFQUNuRCxLQUFLLE1BQU0sT0FBTyxNQUFNO0dBQ3RCLE1BQU0sWUFBWSxJQUFJLFVBQVUsUUFBUSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsVUFBVSxFQUFF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
|
|
@@ -3,7 +3,7 @@ import { Template, init_template } from "../template.js";
|
|
|
3
3
|
import { getEnumInfoFromColName, getRelationNameFromColumnName, getRelationPropFromColName, init_helpers } from "../helpers.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { unique } from "radashi";
|
|
6
|
-
|
|
6
|
+
// src/template/implementations/view_form.template.ts
|
|
7
7
|
init_entity_manager();
|
|
8
8
|
init_helpers();
|
|
9
9
|
init_template();
|
|
@@ -52,9 +52,10 @@ var Template__view_form = class extends Template {
|
|
|
52
52
|
return null;
|
|
53
53
|
}
|
|
54
54
|
else if (col.renderType === "array" && col.name.endsWith("_ids")) try {
|
|
55
|
+
const baseName = col.name.replace(/_ids$/, "");
|
|
55
56
|
return {
|
|
56
57
|
type: "fk",
|
|
57
|
-
entityId: getRelationPropFromColName(entityId,
|
|
58
|
+
entityId: getRelationPropFromColName(entityId, baseName).with
|
|
58
59
|
};
|
|
59
60
|
} catch {
|
|
60
61
|
return null;
|
|
@@ -111,8 +112,9 @@ var Template__view_form = class extends Template {
|
|
|
111
112
|
}
|
|
112
113
|
case "array":
|
|
113
114
|
if (col.name.endsWith("_ids")) try {
|
|
115
|
+
const baseName = col.name.replace(/_ids$/, "");
|
|
114
116
|
return `<IdAsyncSelect
|
|
115
|
-
config={${getRelationPropFromColName(entityId,
|
|
117
|
+
config={${getRelationPropFromColName(entityId, baseName).with}AsyncIdConfig}
|
|
116
118
|
subset="A"
|
|
117
119
|
multiple
|
|
118
120
|
${regExpr}
|
|
@@ -133,9 +135,10 @@ var Template__view_form = class extends Template {
|
|
|
133
135
|
else if (col.zodType instanceof z.ZodNumber) value = 0;
|
|
134
136
|
else if (col.zodType instanceof z.ZodEnum) value = Object.keys(col.zodType.enum)[0];
|
|
135
137
|
else if (col.zodType instanceof z.ZodBoolean) value = false;
|
|
136
|
-
else if (col.zodType instanceof z.core.$ZodString)
|
|
137
|
-
|
|
138
|
-
|
|
138
|
+
else if (col.zodType instanceof z.core.$ZodString) {
|
|
139
|
+
if (col.renderType === "string-datetime") value = "now()";
|
|
140
|
+
else value = "";
|
|
141
|
+
} else if (col.zodType instanceof z.ZodArray) value = [];
|
|
139
142
|
else if (col.zodType instanceof z.ZodObject) value = {};
|
|
140
143
|
result[col.name] = value;
|
|
141
144
|
return result;
|
|
@@ -178,7 +181,8 @@ var Template__view_form = class extends Template {
|
|
|
178
181
|
return;
|
|
179
182
|
}
|
|
180
183
|
else if (col.renderType === "array" && col.name.endsWith("_ids")) try {
|
|
181
|
-
const
|
|
184
|
+
const baseName = col.name.replace(/_ids$/, "");
|
|
185
|
+
const relProp = getRelationPropFromColName(entityId, baseName);
|
|
182
186
|
fkConfigImports.add(relProp.with);
|
|
183
187
|
} catch {
|
|
184
188
|
return;
|
|
@@ -417,7 +421,6 @@ ${columns.filter((col) => col.name !== "created_at").map((col) => {
|
|
|
417
421
|
};
|
|
418
422
|
}
|
|
419
423
|
};
|
|
420
|
-
//#endregion
|
|
421
424
|
export { Template__view_form };
|
|
422
425
|
|
|
423
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19mb3JtLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgUmVuZGVyaW5nTm9kZSwgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIGdldEVudW1JbmZvRnJvbUNvbE5hbWUsXG4gIGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lLFxuICBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZSxcbn0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbnR5cGUgRm9ybURlZmF1bHRWYWx1ZSA9XG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuICB8IGJvb2xlYW5cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBuZXZlcltdXG4gIHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuaW50ZXJmYWNlIEZvcm1EZWZhdWx0cyB7XG4gIFtjb2x1bW5OYW1lOiBzdHJpbmddOiBGb3JtRGVmYXVsdFZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfZm9ybSBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJ2aWV3X2Zvcm1cIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9yb3V0ZXMvYWRtaW5cIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzUGx1cmFsfS9mb3JtLnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFJlcXVpcmVkRGljdEtleXMoKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICByZXR1cm4gW1wiZW50aXR5LmNyZWF0ZVwiLCBcImVudGl0eS5lZGl0XCIsIFwiY29tbW9uLmJhY2tUb0xpc3RcIiwgXCJmb3JtLmNyZWF0ZWRBdFwiLCBcImNvbW1vbi5zYXZlXCJdO1xuICB9XG5cbiAgd3JhcEZDKGJvZHk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICBgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj4ke2xhYmVsID8gYFxcbiAgPExhYmVsPiR7bGFiZWx9PC9MYWJlbD5gIDogXCJcIn1gLFxuICAgICAgYCAgJHtib2R5fWAsXG4gICAgICBgPC9kaXY+YCxcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgd3JhcEZHKGJvZHk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndyYXBGQyhib2R5LCBsYWJlbCk7XG4gIH1cblxuICByZW5kZXJDb2x1bW5JbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgY29sOiBSZW5kZXJpbmdOb2RlKSB7XG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiZW51bVwiIGFzIGNvbnN0LCBlbnVtSWQ6IGlkIH07XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJma1wiIGFzIGNvbnN0LCBlbnRpdHlJZDogcmVsUHJvcC53aXRoIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgLy8gTWFueVRvTWFueSByZWxhdGlvbuydmCBGSyDrsLDsl7RcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2VOYW1lID0gY29sLm5hbWUucmVwbGFjZSgvX2lkcyQvLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiZmtcIiBhcyBjb25zdCwgZW50aXR5SWQ6IHJlbFByb3Aud2l0aCB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlckNvbHVtbihlbnRpdHlJZDogc3RyaW5nLCBjb2w6IFJlbmRlcmluZ05vZGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlZ0V4cHIgPSBgey4uLnJlZ2lzdGVyKFwiJHtjb2wubmFtZX1cIil9YDtcbiAgICBjb25zdCBwbGFjZWhvbGRlck5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gYHtTRChcImVudGl0eS4ke2VudGl0eUlkfS4ke3BsYWNlaG9sZGVyTmFtZX1cIil9YDtcblxuICAgIHN3aXRjaCAoY29sLnJlbmRlclR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmctcGxhaW5cIjpcbiAgICAgICAgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgKGNvbC56b2RUeXBlLm1heExlbmd0aCA/PyAwKSA8PSAyNTYpIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9ICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgPFRleHRhcmVhIGNsYXNzTmFtZT1cInRleHQteHMgYmctd2hpdGVcIiByb3dzPXs0fSBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIHJldHVybiBgPERhdGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItaWRcIjpcbiAgICAgIGNhc2UgXCJzdHJpbmctaWRcIjpcbiAgICAgICAgcmV0dXJuIGA8aW5wdXQgdHlwZT1cImhpZGRlblwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcIm51bWJlci1wbGFpblwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBgPFN3aXRjaCAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJqc29uLXNvbmFtdWZpbGVcIjpcbiAgICAgICAgcmV0dXJuIGA8RmlsZUlucHV0XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1vZGU9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdTaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCI6XG4gICAgICAgIHJldHVybiBgPEZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTW9kZT1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZT1cImltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1NpemU9XCJtZFwiXG4gICAgICAgICAgICAgICAgICAgIG1heEZpbGVzPXsxMH1cbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcImVudW1zXCI6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIHJldHVybiBgPEVudW1TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgZW51bT17JHtpZH19XG4gICAgICAgICAgICAgICAgICAgIGxhYmVscz17JHtpZH1MYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwibnVtYmVyLWZrX2lkXCI6XG4gICAgICBjYXNlIFwic3RyaW5nLWZrX2lkXCI6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICByZXR1cm4gYDxJZEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZz17JHtyZWxQcm9wLndpdGh9QXN5bmNJZENvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgc3Vic2V0PVwiQVwiXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAvLyBNYW55VG9NYW55IHJlbGF0aW9u7J2YIEZLIOuwsOyXtOyduOyngCDtmZXsnbhcbiAgICAgICAgaWYgKGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGJhc2VOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBgPElkQXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnPXske3JlbFByb3Aud2l0aH1Bc3luY0lkQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgICBzdWJzZXQ9XCJBXCJcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj1cIiR7Y29sLm5hbWV9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPVwiJHtjb2wubmFtZX1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgJHtyZWdFeHByfSAvPmA7XG4gICAgfVxuICB9XG5cbiAgcmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zOiBSZW5kZXJpbmdOb2RlW10pOiBGb3JtRGVmYXVsdHMge1xuICAgIHJldHVybiBjb2x1bW5zLnJlZHVjZTxGb3JtRGVmYXVsdHM+KChyZXN1bHQsIGNvbCkgPT4ge1xuICAgICAgaWYgKGNvbC5vcHRpb25hbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWU6IEZvcm1EZWZhdWx0VmFsdWU7XG4gICAgICBpZiAoY29sLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgICAgIHZhbHVlID0gT2JqZWN0LmtleXMoY29sLnpvZFR5cGUuZW51bSlbMF07XG4gICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5jb3JlLiRab2RTdHJpbmcpIHtcbiAgICAgICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgICAgIC8vIEZJWE1FOiBlbWFpbOydtOuCmCB1cmwg7YOA7J6FIOuTseyXkCDrjIDtlZwg7LKY66as6rCAIO2VhOyalO2VqFxuICAgICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGV0aW1lXCIpIHtcbiAgICAgICAgICB2YWx1ZSA9IFwibm93KClcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgICAgIHZhbHVlID0gW107XG4gICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0W2NvbC5uYW1lXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2Zvcm1cIl0pIHtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIC8vIFBLIO2DgOyehSDqsJDsp4BcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRUc1R5cGUgPSBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwic3RyaW5nXCIgOiBcIm51bWJlclwiO1xuICAgIGNvbnN0IGlkWm9kVHlwZSA9XG4gICAgICBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwiei5zdHJpbmcoKS5vcHRpb25hbCgpXCIgOiBcInoubnVtYmVyKCkub3B0aW9uYWwoKVwiO1xuXG4gICAgLy8gU2F2ZVBhcmFtcyDtg4DsnoXsnYQg66Gc65Oc7ZWY7JesIHNhdmVQYXJhbXNOb2RlIOyDneyEsVxuICAgIGNvbnN0IHsgbG9hZFR5cGVzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi8uLi9zeW5jZXIvbW9kdWxlLWxvYWRlclwiKTtcbiAgICBjb25zdCBsb2FkZWRUeXBlcyA9IGF3YWl0IGxvYWRUeXBlcygpO1xuICAgIGNvbnN0IFNhdmVQYXJhbXNab2RUeXBlID0gbG9hZGVkVHlwZXNbYCR7ZW50aXR5SWR9U2F2ZVBhcmFtc2BdO1xuXG4gICAgaWYgKCFTYXZlUGFyYW1zWm9kVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTYXZlUGFyYW1zIGZvciAke2VudGl0eUlkfSBub3QgZm91bmQuIERpZCB5b3UgcnVuICdzb25hbXUgc3luYyc/YCk7XG4gICAgfVxuXG4gICAgLy8gWm9kIO2DgOyeheydhCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmFxuICAgIGNvbnN0IHsgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vem9kLWNvbnZlcnRlclwiKTtcbiAgICBjb25zdCBzYXZlUGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoU2F2ZVBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgY29sdW1ucyA9IChzYXZlUGFyYW1zTm9kZT8uY2hpbGRyZW4gPz8gW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImlkXCIpXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcENhbmRpZGF0ZSA9IGVudGl0eS5wcm9wcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IGNvbC5uYW1lKTtcbiAgICAgICAgY29sLmxhYmVsID0gcHJvcENhbmRpZGF0ZT8uZGVzYyA/PyBjb2wubGFiZWw7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zKTtcblxuICAgIC8vIGVudW3qs7wgRkvsl5Ag64yA7ZWcIGltcG9ydCDsoJXrs7Qg7IiY7KeRXG4gICAgY29uc3QgZW51bUltcG9ydHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBma0NvbmZpZ0ltcG9ydHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICBlbnVtSW1wb3J0cy5hZGQoaWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctcGxhaW5cIiAmJlxuICAgICAgICBjb2wubmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJlxuICAgICAgICBjb2wubmFtZSAhPT0gXCJpZFwiXG4gICAgICApIHtcbiAgICAgICAgLy8gc3RyaW5nIEZLIOyymOumrCAo7J6Q7Iug7J2YIFBL7J24IGlk64qUIOygnOyZuClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgICAgIC8vIE1hbnlUb01hbnkgcmVsYXRpb27snZggRksg67Cw7Je0XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBjb2wubmFtZS5yZXBsYWNlKC9faWRzJC8sIFwiXCIpO1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgQ2FyZENvbnRlbnQsXG4gIENhcmRIZWFkZXIsXG4gIENhcmRUaXRsZSxcbiAgSW5wdXQsJHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLXBsYWluXCIgJiYgY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFN0cmluZyAmJiAoY29sLnpvZFR5cGUubWF4TGVuZ3RoID8/IDApID4gMjU2KSA/IFwiXFxuICBUZXh0YXJlYSxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikgPyBcIlxcbiAgRW51bVNlbGVjdCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIgfHwgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSkgPyBcIlxcbiAgSWRBc3luY1NlbGVjdCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiYm9vbGVhblwiKSA/IFwiXFxuICBTd2l0Y2gsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIEZpbGVJbnB1dCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wic3RyaW5nLWRhdGV0aW1lXCIsIFwic3RyaW5nLWRhdGVcIiwgXCJkYXRldGltZVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIERhdGVJbnB1dCxcIiA6IFwiXCJ9XG59IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IHVzZVR5cGVGb3JtIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvbGliXCI7XG5pbXBvcnQgeyB1c2VRdWVyeUNsaWVudCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGNyZWF0ZUZpbGVSb3V0ZSwgdXNlUm91dGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgdHlwZSB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiOyR7XG4gICAgICAgIGNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFwiXFxuaW1wb3J0IHsgXCIgK1xuICAgICAgICAgICAgdW5pcXVlKFxuICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7aWR9LCAke2lkfUxhYmVsYDtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgICcgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7J1xuICAgICAgICAgIDogXCJcIlxuICAgICAgfVxuaW1wb3J0IHsgZGVmYXVsdENhdGNoIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LnNoYXJlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMgfSBmcm9tIFwiQC9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlc1wiOyR7XG4gICAgICAgIGZrQ29uZmlnSW1wb3J0cy5zaXplID4gMFxuICAgICAgICAgID8gYFxcbmltcG9ydCB7ICR7QXJyYXkuZnJvbShma0NvbmZpZ0ltcG9ydHMpXG4gICAgICAgICAgICAgIC5tYXAoKHJlbGF0ZWRFbnRpdHlJZCkgPT4gYCR7cmVsYXRlZEVudGl0eUlkfUFzeW5jSWRDb25maWdgKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSB9IGZyb20gXCJAL3NlcnZpY2VzL3NlcnZpY2VzLmdlbmVyYXRlZFwiO2BcbiAgICAgICAgICA6IFwiXCJcbiAgICAgIH1cbmltcG9ydCB7IFNEIH0gZnJvbSBcIkAvaTE4bi9zZC5nZW5lcmF0ZWRcIjtcblxuaW1wb3J0IEFycm93TGVmdEljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvYXJyb3ctbGVmdFwiO1xuaW1wb3J0IFNhdmVJY29uIGZyb20gXCJ+aWNvbnMvbHVjaWRlL3NhdmVcIjtcbmltcG9ydCBGb3JtSWNvbiBmcm9tIFwifmljb25zL21kaS9mb3JtLXNlbGVjdFwiO1xuXG5jb25zdCBmb3JtU2VhcmNoU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogJHtpZFpvZFR5cGV9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBSb3V0ZSA9IGNyZWF0ZUZpbGVSb3V0ZShcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfS9mb3JtXCIpKHtcbiAgdmFsaWRhdGVTZWFyY2g6IGZvcm1TZWFyY2hTY2hlbWEsXG4gIGNvbXBvbmVudDogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1QYWdlLFxufSk7XG5cbmZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUGFnZSgpIHtcbiAgY29uc3QgeyBpZCB9ID0gUm91dGUudXNlU2VhcmNoKCk7XG4gIHJldHVybiA8JHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0gaWQ9e2lkfSAvPjtcbn1cblxudHlwZSAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzID0ge1xuICBpZD86ICR7aWRUc1R5cGV9O1xuICBtb2RlPzogXCJwYWdlXCIgfCBcIm1vZGFsXCI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0oeyBpZCwgbW9kZSB9OiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzKSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBmb3JtLCBzZXRGb3JtLCByZWdpc3RlciR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCIsIHN1Ym1pdFwiIDogXCJcIn0gfSA9IHVzZVR5cGVGb3JtKCR7bmFtZXMuY2FwaXRhbH1TYXZlUGFyYW1zLCAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRWYWx1ZSkucmVwbGFjZSgvXCJub3dcXChcXClcIi9nLCAnXCJcIicpfSk7XG4keygoKSA9PiB7XG4gIGNvbnN0IGhhc0RhdGV0aW1lID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKTtcbiAgY29uc3QgaGFzRGF0ZSA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZVwiKTtcbiAgaWYgKCFoYXNEYXRldGltZSAmJiAhaGFzRGF0ZSkgcmV0dXJuIFwiXCI7XG5cbiAgbGV0IGhlbHBlcnMgPSBcIlxcblwiO1xuICBpZiAoaGFzRGF0ZXRpbWUpIHtcbiAgICBoZWxwZXJzICs9IGAgIC8vIGRhdGV0aW1lLWxvY2FsIO2YleyLneycvOuhnCDrs4DtmZggKFlZWVktTU0tRERUSEg6TU0pXG4gIGNvbnN0IHRvRGF0ZXRpbWVMb2NhbFN0cmluZyA9IChkYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBkID0gdHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxNik7XG4gIH07XG5cbiAgLy8gZGF0ZXRpbWUtbG9jYWwg66y47J6Q7Je07J2EIERhdGXroZwg67OA7ZmYXG4gIGNvbnN0IGZyb21EYXRldGltZUxvY2FsU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfTtcbmA7XG4gIH1cbiAgaWYgKGhhc0RhdGUpIHtcbiAgICBoZWxwZXJzICs9IGAgIC8vIGRhdGUg7ZiV7Iud7Jy866GcIOuzgO2ZmCAoWVlZWS1NTS1ERClcbiAgY29uc3QgdG9EYXRlU3RyaW5nID0gKGRhdGU6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIiA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICByZXR1cm4gZC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXTtcbiAgfTtcblxuICAvLyBkYXRlIOusuOyekOyXtOydhCBEYXRl66GcIOuzgO2ZmFxuICBjb25zdCBmcm9tRGF0ZVN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwgPT4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIH07XG5gO1xuICB9XG4gIHJldHVybiBoZWxwZXJzO1xufSkoKX1cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaWQpIHtcbiAgICAgICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLmdldCR7bmFtZXMuY2FwaXRhbH0oXCJBXCIsIGlkKS50aGVuKChyb3cpID0+IHtcbiAgICAgICAgc2V0Rm9ybSgocHJldkZvcm0pID0+ICh7XG4gICAgICAgICAgLi4ucHJldkZvcm0sXG4gICAgICAgICAgLi4ucm93LCR7KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHJlbGF0aW9uIO2VhOuTnOuTpOydhCDssL7slYTshJwg67OA7ZmYIOy9lOuTnCDsg53shLFcbiAgICAgICAgICAgIC8vIG51bWJlciBGSywgc3RyaW5nIEZLICjsnpDsi6DsnZggUEsg7KCc7Jm4KSwgTWFueVRvTWFueSBGSyDrsLDsl7Trp4wg7ZWE7YSw66eBXG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbkZpZWxkcyA9IGNvbHVtbnNcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoY29sKSA9PlxuICAgICAgICAgICAgICAgICAgY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHxcbiAgICAgICAgICAgICAgICAgIGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiIHx8XG4gICAgICAgICAgICAgICAgICAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1hbnlUb01hbnkoYXJyYXkpIOyymOumrFxuICAgICAgICAgICAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpb25OYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5tYXAoKHIpID0+IHIuaWQpID8/IFtdLGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZLKG51bWJlciwgc3RyaW5nKSDsspjrpqxcbiAgICAgICAgICAgICAgICBjb25zdCByZWxhdGlvbk5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjb2wubnVsbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCA/PyBudWxsLGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCxgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVsYXRpb25GaWVsZHM7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbaWQsIHNldEZvcm1dKTtcblxuICBjb25zdCBzYXZlTXV0YXRpb24gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2VTYXZlTXV0YXRpb24oKTtcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gJHtcbiAgICBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSlcbiAgICAgID8gYHN1Ym1pdChhc3luYyAoZm9ybSkgPT4ge1xuICAgIHNhdmVNdXRhdGlvbi5tdXRhdGUoXG4gICAgICB7IHNwYTogW2Zvcm1dIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBbXCIke25hbWVzLmNhcGl0YWx9XCJdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1vZGUgPT09IFwibW9kYWxcIikge1xuICAgICAgICAgICAgLy8gbW9kYWwgbW9kZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGRlZmF1bHRDYXRjaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSlgXG4gICAgICA6IGAoKSA9PiB7XG4gICAgc2F2ZU11dGF0aW9uLm11dGF0ZShcbiAgICAgIHsgc3BhOiBbZm9ybV0gfSxcbiAgICAgIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgICAgcXVlcnlLZXk6IFtcIiR7bmFtZXMuY2FwaXRhbH1cIl0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAobW9kZSA9PT0gXCJtb2RhbFwiKSB7XG4gICAgICAgICAgICAvLyBtb2RhbCBtb2RlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZSh7IHRvOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZGVmYXVsdENhdGNoLFxuICAgICAgfSxcbiAgICApO1xuICB9YFxuICB9O1xuXG4gIGNvbnN0IFBBR0UgPSB7XG4gICAgdGl0bGU6IGlkID8gU0QoXCJlbnRpdHkuZWRpdFwiKShTRChcImVudGl0eS4ke2VudGl0eUlkfVwiKSwgaWQpIDogU0QoXCJlbnRpdHkuY3JlYXRlXCIpKFNEKFwiZW50aXR5LiR7ZW50aXR5SWR9XCIpKSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctWzE4MDBweF0gbXgtYXV0byBwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTYgbWItOFwiPlxuICAgICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPEZvcm1JY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgaC01XCI+e1BBR0UudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7bW9kZSAhPT0gXCJtb2RhbFwiICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KX1cbiAgICAgICAgICAgICAgICBpY29uPXs8QXJyb3dMZWZ0SWNvbiAvPn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtTRChcImNvbW1vbi5iYWNrVG9MaXN0XCIpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogRm9ybSBDYXJkICovfVxuICAgICAgICAgIDxDYXJkIGNsYXNzTmFtZT1cImJvcmRlci1ib3JkZXIvNDAgYmctZ3JheS01MCBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInB4LTQgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgbS0wXCI+XG4gICAgICAgICAgICAgICAge1BBR0UudGl0bGV9XG4gICAgICAgICAgICAgIDwvQ2FyZFRpdGxlPlxuICAgICAgICAgICAgPC9DYXJkSGVhZGVyPlxuICAgICAgICAgICAgPENhcmRDb250ZW50IGNsYXNzTmFtZT1cInAtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNlwiPlxuJHtjb2x1bW5zXG4gIC5maWx0ZXIoKGNvbCkgPT4gY29sLm5hbWUgIT09IFwiY3JlYXRlZF9hdFwiKVxuICAubWFwKChjb2wpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9ICgoKSA9PiB7XG4gICAgICBpZiAoY29sLmxhYmVsLmVuZHNXaXRoKFwiSWRcIikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxhdGVkRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoY29sLmxhYmVsLnJlcGxhY2UoXCJJZFwiLCBcIlwiKSk7XG4gICAgICAgICAgcmV0dXJuIHJlbGF0ZWRFbnRpdHkudGl0bGUgPz8gY29sLmxhYmVsO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gY29sLmxhYmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sLmxhYmVsO1xuICAgIH0pKCk7XG4gICAgY29uc3QgbGFiZWxOYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICByZXR1cm4gYCAgICAgICAgICAgICAgICB7LyogJHtsYWJlbH0gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXhzIG1iLTEgdGV4dC1ncmF5LTYwMFwiPntTRChcImVudGl0eS4ke2VudGl0eUlkfS4ke2xhYmVsTmFtZX1cIil9PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5yZW5kZXJDb2x1bW4oZW50aXR5SWQsIGNvbCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgfSlcbiAgLmpvaW4oXCJcXG5cXG5cIil9XG5cbiAgICAgICAgICAgICAgICB7LyogU2F2ZSBCdXR0b24gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHQtNFwiPlxuICAgICAgICAgICAgICAgICAge2Zvcm0uaWQgJiYgZm9ybS5jcmVhdGVkX2F0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJtci0yIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPntTRChcImZvcm0uY3JlYXRlZEF0XCIpfTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyhmb3JtLmNyZWF0ZWRfYXQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgIGljb249ezxTYXZlSWNvbiAvPn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge1NEKFwiY29tbW9uLnNhdmVcIil9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7b0JBRzJEO2FBT3hDO2NBQ21CO0FBY3RDLElBQWEsc0JBQWIsY0FBeUMsU0FBUztDQUNoRCxjQUFjO0VBQ1osTUFBTSxXQUFXO0NBQ25CO0NBRUEsaUJBQWlCLE9BQTBCO0VBQ3pDLE9BQU87R0FDTCxRQUFRO0dBQ1IsTUFBTSxHQUFHLE1BQU0sU0FBUztFQUMxQjtDQUNGO0NBRUEsc0JBQWdEO0VBQzlDLE9BQU87R0FBQztHQUFpQjtHQUFlO0dBQXFCO0dBQWtCO0VBQWE7Q0FDOUY7Q0FFQSxPQUFPLE1BQWMsT0FBd0I7RUFDM0MsT0FBTztHQUNMLDhCQUE4QixRQUFRLGNBQWMsTUFBTSxZQUFZO0dBQ3RFLEtBQUs7R0FDTDtFQUNGLENBQUMsQ0FBQyxLQUFLLElBQUk7Q0FDYjtDQUNBLE9BQU8sTUFBYyxPQUF3QjtFQUMzQyxPQUFPLEtBQUssT0FBTyxNQUFNLEtBQUs7Q0FDaEM7Q0FFQSxtQkFBbUIsVUFBa0IsS0FBb0I7RUFDdkQsSUFBSSxJQUFJLGVBQWUsU0FBUztHQUM5QixNQUFNLEVBQUUsT0FBTyx1QkFBdUIsVUFBVSxJQUFJLElBQUk7R0FDeEQsT0FBTztJQUFFLE1BQU07SUFBaUIsUUFBUTtHQUFHO0VBQzdDLE9BQU8sSUFBSSxJQUFJLGVBQWUsa0JBQWtCLElBQUksZUFBZSxnQkFDakUsSUFBSTtHQUVGLE9BQU87SUFBRSxNQUFNO0lBQWUsVUFEZCwyQkFBMkIsVUFBVSxJQUFJLEtBQUssUUFBUSxPQUFPLEVBQUUsQ0FDdkMsQ0FBQSxDQUFRO0dBQUs7RUFDdkQsUUFBUTtHQUNO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
|
|
426
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19mb3JtLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgUmVuZGVyaW5nTm9kZSwgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIGdldEVudW1JbmZvRnJvbUNvbE5hbWUsXG4gIGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lLFxuICBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZSxcbn0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbnR5cGUgRm9ybURlZmF1bHRWYWx1ZSA9XG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuICB8IGJvb2xlYW5cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBuZXZlcltdXG4gIHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuaW50ZXJmYWNlIEZvcm1EZWZhdWx0cyB7XG4gIFtjb2x1bW5OYW1lOiBzdHJpbmddOiBGb3JtRGVmYXVsdFZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfZm9ybSBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJ2aWV3X2Zvcm1cIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9yb3V0ZXMvYWRtaW5cIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzUGx1cmFsfS9mb3JtLnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFJlcXVpcmVkRGljdEtleXMoKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICByZXR1cm4gW1wiZW50aXR5LmNyZWF0ZVwiLCBcImVudGl0eS5lZGl0XCIsIFwiY29tbW9uLmJhY2tUb0xpc3RcIiwgXCJmb3JtLmNyZWF0ZWRBdFwiLCBcImNvbW1vbi5zYXZlXCJdO1xuICB9XG5cbiAgd3JhcEZDKGJvZHk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICBgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj4ke2xhYmVsID8gYFxcbiAgPExhYmVsPiR7bGFiZWx9PC9MYWJlbD5gIDogXCJcIn1gLFxuICAgICAgYCAgJHtib2R5fWAsXG4gICAgICBgPC9kaXY+YCxcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgd3JhcEZHKGJvZHk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndyYXBGQyhib2R5LCBsYWJlbCk7XG4gIH1cblxuICByZW5kZXJDb2x1bW5JbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgY29sOiBSZW5kZXJpbmdOb2RlKSB7XG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiZW51bVwiIGFzIGNvbnN0LCBlbnVtSWQ6IGlkIH07XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJma1wiIGFzIGNvbnN0LCBlbnRpdHlJZDogcmVsUHJvcC53aXRoIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgLy8gTWFueVRvTWFueSByZWxhdGlvbuydmCBGSyDrsLDsl7RcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2VOYW1lID0gY29sLm5hbWUucmVwbGFjZSgvX2lkcyQvLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiZmtcIiBhcyBjb25zdCwgZW50aXR5SWQ6IHJlbFByb3Aud2l0aCB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlckNvbHVtbihlbnRpdHlJZDogc3RyaW5nLCBjb2w6IFJlbmRlcmluZ05vZGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlZ0V4cHIgPSBgey4uLnJlZ2lzdGVyKFwiJHtjb2wubmFtZX1cIil9YDtcbiAgICBjb25zdCBwbGFjZWhvbGRlck5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gYHtTRChcImVudGl0eS4ke2VudGl0eUlkfS4ke3BsYWNlaG9sZGVyTmFtZX1cIil9YDtcblxuICAgIHN3aXRjaCAoY29sLnJlbmRlclR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmctcGxhaW5cIjpcbiAgICAgICAgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgKGNvbC56b2RUeXBlLm1heExlbmd0aCA/PyAwKSA8PSAyNTYpIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9ICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgPFRleHRhcmVhIGNsYXNzTmFtZT1cInRleHQteHMgYmctd2hpdGVcIiByb3dzPXs0fSBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIHJldHVybiBgPERhdGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItaWRcIjpcbiAgICAgIGNhc2UgXCJzdHJpbmctaWRcIjpcbiAgICAgICAgcmV0dXJuIGA8aW5wdXQgdHlwZT1cImhpZGRlblwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcIm51bWJlci1wbGFpblwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBgPFN3aXRjaCAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJqc29uLXNvbmFtdWZpbGVcIjpcbiAgICAgICAgcmV0dXJuIGA8RmlsZUlucHV0XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1vZGU9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdTaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCI6XG4gICAgICAgIHJldHVybiBgPEZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTW9kZT1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZT1cImltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1NpemU9XCJtZFwiXG4gICAgICAgICAgICAgICAgICAgIG1heEZpbGVzPXsxMH1cbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcImVudW1zXCI6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIHJldHVybiBgPEVudW1TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgZW51bT17JHtpZH19XG4gICAgICAgICAgICAgICAgICAgIGxhYmVscz17JHtpZH1MYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwibnVtYmVyLWZrX2lkXCI6XG4gICAgICBjYXNlIFwic3RyaW5nLWZrX2lkXCI6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICByZXR1cm4gYDxJZEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZz17JHtyZWxQcm9wLndpdGh9QXN5bmNJZENvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgc3Vic2V0PVwiQVwiXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAvLyBNYW55VG9NYW55IHJlbGF0aW9u7J2YIEZLIOuwsOyXtOyduOyngCDtmZXsnbhcbiAgICAgICAgaWYgKGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGJhc2VOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBgPElkQXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnPXske3JlbFByb3Aud2l0aH1Bc3luY0lkQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgICBzdWJzZXQ9XCJBXCJcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj1cIiR7Y29sLm5hbWV9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPVwiJHtjb2wubmFtZX1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgJHtyZWdFeHByfSAvPmA7XG4gICAgfVxuICB9XG5cbiAgcmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zOiBSZW5kZXJpbmdOb2RlW10pOiBGb3JtRGVmYXVsdHMge1xuICAgIHJldHVybiBjb2x1bW5zLnJlZHVjZTxGb3JtRGVmYXVsdHM+KChyZXN1bHQsIGNvbCkgPT4ge1xuICAgICAgaWYgKGNvbC5vcHRpb25hbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWU6IEZvcm1EZWZhdWx0VmFsdWU7XG4gICAgICBpZiAoY29sLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgICAgIHZhbHVlID0gT2JqZWN0LmtleXMoY29sLnpvZFR5cGUuZW51bSlbMF07XG4gICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5jb3JlLiRab2RTdHJpbmcpIHtcbiAgICAgICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgICAgIC8vIEZJWE1FOiBlbWFpbOydtOuCmCB1cmwg7YOA7J6FIOuTseyXkCDrjIDtlZwg7LKY66as6rCAIO2VhOyalO2VqFxuICAgICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGV0aW1lXCIpIHtcbiAgICAgICAgICB2YWx1ZSA9IFwibm93KClcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgICAgIHZhbHVlID0gW107XG4gICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0W2NvbC5uYW1lXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2Zvcm1cIl0pIHtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIC8vIFBLIO2DgOyehSDqsJDsp4BcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRUc1R5cGUgPSBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwic3RyaW5nXCIgOiBcIm51bWJlclwiO1xuICAgIGNvbnN0IGlkWm9kVHlwZSA9XG4gICAgICBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwiei5zdHJpbmcoKS5vcHRpb25hbCgpXCIgOiBcInoubnVtYmVyKCkub3B0aW9uYWwoKVwiO1xuXG4gICAgLy8gU2F2ZVBhcmFtcyDtg4DsnoXsnYQg66Gc65Oc7ZWY7JesIHNhdmVQYXJhbXNOb2RlIOyDneyEsVxuICAgIGNvbnN0IHsgbG9hZFR5cGVzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi8uLi9zeW5jZXIvbW9kdWxlLWxvYWRlclwiKTtcbiAgICBjb25zdCBsb2FkZWRUeXBlcyA9IGF3YWl0IGxvYWRUeXBlcygpO1xuICAgIGNvbnN0IFNhdmVQYXJhbXNab2RUeXBlID0gbG9hZGVkVHlwZXNbYCR7ZW50aXR5SWR9U2F2ZVBhcmFtc2BdO1xuXG4gICAgaWYgKCFTYXZlUGFyYW1zWm9kVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTYXZlUGFyYW1zIGZvciAke2VudGl0eUlkfSBub3QgZm91bmQuIERpZCB5b3UgcnVuICdzb25hbXUgc3luYyc/YCk7XG4gICAgfVxuXG4gICAgLy8gWm9kIO2DgOyeheydhCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmFxuICAgIGNvbnN0IHsgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vem9kLWNvbnZlcnRlclwiKTtcbiAgICBjb25zdCBzYXZlUGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoU2F2ZVBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgY29sdW1ucyA9IChzYXZlUGFyYW1zTm9kZT8uY2hpbGRyZW4gPz8gW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImlkXCIpXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcENhbmRpZGF0ZSA9IGVudGl0eS5wcm9wcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IGNvbC5uYW1lKTtcbiAgICAgICAgY29sLmxhYmVsID0gcHJvcENhbmRpZGF0ZT8uZGVzYyA/PyBjb2wubGFiZWw7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zKTtcblxuICAgIC8vIGVudW3qs7wgRkvsl5Ag64yA7ZWcIGltcG9ydCDsoJXrs7Qg7IiY7KeRXG4gICAgY29uc3QgZW51bUltcG9ydHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBma0NvbmZpZ0ltcG9ydHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICBlbnVtSW1wb3J0cy5hZGQoaWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctcGxhaW5cIiAmJlxuICAgICAgICBjb2wubmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJlxuICAgICAgICBjb2wubmFtZSAhPT0gXCJpZFwiXG4gICAgICApIHtcbiAgICAgICAgLy8gc3RyaW5nIEZLIOyymOumrCAo7J6Q7Iug7J2YIFBL7J24IGlk64qUIOygnOyZuClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgICAgIC8vIE1hbnlUb01hbnkgcmVsYXRpb27snZggRksg67Cw7Je0XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBjb2wubmFtZS5yZXBsYWNlKC9faWRzJC8sIFwiXCIpO1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgQ2FyZENvbnRlbnQsXG4gIENhcmRIZWFkZXIsXG4gIENhcmRUaXRsZSxcbiAgSW5wdXQsJHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLXBsYWluXCIgJiYgY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFN0cmluZyAmJiAoY29sLnpvZFR5cGUubWF4TGVuZ3RoID8/IDApID4gMjU2KSA/IFwiXFxuICBUZXh0YXJlYSxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikgPyBcIlxcbiAgRW51bVNlbGVjdCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIgfHwgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSkgPyBcIlxcbiAgSWRBc3luY1NlbGVjdCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiYm9vbGVhblwiKSA/IFwiXFxuICBTd2l0Y2gsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIEZpbGVJbnB1dCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wic3RyaW5nLWRhdGV0aW1lXCIsIFwic3RyaW5nLWRhdGVcIiwgXCJkYXRldGltZVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIERhdGVJbnB1dCxcIiA6IFwiXCJ9XG59IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IHVzZVR5cGVGb3JtIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvbGliXCI7XG5pbXBvcnQgeyB1c2VRdWVyeUNsaWVudCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGNyZWF0ZUZpbGVSb3V0ZSwgdXNlUm91dGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgdHlwZSB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiOyR7XG4gICAgICAgIGNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFwiXFxuaW1wb3J0IHsgXCIgK1xuICAgICAgICAgICAgdW5pcXVlKFxuICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7aWR9LCAke2lkfUxhYmVsYDtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgICcgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7J1xuICAgICAgICAgIDogXCJcIlxuICAgICAgfVxuaW1wb3J0IHsgZGVmYXVsdENhdGNoIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LnNoYXJlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMgfSBmcm9tIFwiQC9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlc1wiOyR7XG4gICAgICAgIGZrQ29uZmlnSW1wb3J0cy5zaXplID4gMFxuICAgICAgICAgID8gYFxcbmltcG9ydCB7ICR7QXJyYXkuZnJvbShma0NvbmZpZ0ltcG9ydHMpXG4gICAgICAgICAgICAgIC5tYXAoKHJlbGF0ZWRFbnRpdHlJZCkgPT4gYCR7cmVsYXRlZEVudGl0eUlkfUFzeW5jSWRDb25maWdgKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSB9IGZyb20gXCJAL3NlcnZpY2VzL3NlcnZpY2VzLmdlbmVyYXRlZFwiO2BcbiAgICAgICAgICA6IFwiXCJcbiAgICAgIH1cbmltcG9ydCB7IFNEIH0gZnJvbSBcIkAvaTE4bi9zZC5nZW5lcmF0ZWRcIjtcblxuaW1wb3J0IEFycm93TGVmdEljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvYXJyb3ctbGVmdFwiO1xuaW1wb3J0IFNhdmVJY29uIGZyb20gXCJ+aWNvbnMvbHVjaWRlL3NhdmVcIjtcbmltcG9ydCBGb3JtSWNvbiBmcm9tIFwifmljb25zL21kaS9mb3JtLXNlbGVjdFwiO1xuXG5jb25zdCBmb3JtU2VhcmNoU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogJHtpZFpvZFR5cGV9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBSb3V0ZSA9IGNyZWF0ZUZpbGVSb3V0ZShcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfS9mb3JtXCIpKHtcbiAgdmFsaWRhdGVTZWFyY2g6IGZvcm1TZWFyY2hTY2hlbWEsXG4gIGNvbXBvbmVudDogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1QYWdlLFxufSk7XG5cbmZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUGFnZSgpIHtcbiAgY29uc3QgeyBpZCB9ID0gUm91dGUudXNlU2VhcmNoKCk7XG4gIHJldHVybiA8JHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0gaWQ9e2lkfSAvPjtcbn1cblxudHlwZSAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzID0ge1xuICBpZD86ICR7aWRUc1R5cGV9O1xuICBtb2RlPzogXCJwYWdlXCIgfCBcIm1vZGFsXCI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0oeyBpZCwgbW9kZSB9OiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzKSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBmb3JtLCBzZXRGb3JtLCByZWdpc3RlciR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCIsIHN1Ym1pdFwiIDogXCJcIn0gfSA9IHVzZVR5cGVGb3JtKCR7bmFtZXMuY2FwaXRhbH1TYXZlUGFyYW1zLCAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRWYWx1ZSkucmVwbGFjZSgvXCJub3dcXChcXClcIi9nLCAnXCJcIicpfSk7XG4keygoKSA9PiB7XG4gIGNvbnN0IGhhc0RhdGV0aW1lID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKTtcbiAgY29uc3QgaGFzRGF0ZSA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZVwiKTtcbiAgaWYgKCFoYXNEYXRldGltZSAmJiAhaGFzRGF0ZSkgcmV0dXJuIFwiXCI7XG5cbiAgbGV0IGhlbHBlcnMgPSBcIlxcblwiO1xuICBpZiAoaGFzRGF0ZXRpbWUpIHtcbiAgICBoZWxwZXJzICs9IGAgIC8vIGRhdGV0aW1lLWxvY2FsIO2YleyLneycvOuhnCDrs4DtmZggKFlZWVktTU0tRERUSEg6TU0pXG4gIGNvbnN0IHRvRGF0ZXRpbWVMb2NhbFN0cmluZyA9IChkYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBkID0gdHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxNik7XG4gIH07XG5cbiAgLy8gZGF0ZXRpbWUtbG9jYWwg66y47J6Q7Je07J2EIERhdGXroZwg67OA7ZmYXG4gIGNvbnN0IGZyb21EYXRldGltZUxvY2FsU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfTtcbmA7XG4gIH1cbiAgaWYgKGhhc0RhdGUpIHtcbiAgICBoZWxwZXJzICs9IGAgIC8vIGRhdGUg7ZiV7Iud7Jy866GcIOuzgO2ZmCAoWVlZWS1NTS1ERClcbiAgY29uc3QgdG9EYXRlU3RyaW5nID0gKGRhdGU6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIiA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICByZXR1cm4gZC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXTtcbiAgfTtcblxuICAvLyBkYXRlIOusuOyekOyXtOydhCBEYXRl66GcIOuzgO2ZmFxuICBjb25zdCBmcm9tRGF0ZVN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwgPT4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIH07XG5gO1xuICB9XG4gIHJldHVybiBoZWxwZXJzO1xufSkoKX1cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaWQpIHtcbiAgICAgICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLmdldCR7bmFtZXMuY2FwaXRhbH0oXCJBXCIsIGlkKS50aGVuKChyb3cpID0+IHtcbiAgICAgICAgc2V0Rm9ybSgocHJldkZvcm0pID0+ICh7XG4gICAgICAgICAgLi4ucHJldkZvcm0sXG4gICAgICAgICAgLi4ucm93LCR7KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHJlbGF0aW9uIO2VhOuTnOuTpOydhCDssL7slYTshJwg67OA7ZmYIOy9lOuTnCDsg53shLFcbiAgICAgICAgICAgIC8vIG51bWJlciBGSywgc3RyaW5nIEZLICjsnpDsi6DsnZggUEsg7KCc7Jm4KSwgTWFueVRvTWFueSBGSyDrsLDsl7Trp4wg7ZWE7YSw66eBXG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbkZpZWxkcyA9IGNvbHVtbnNcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoY29sKSA9PlxuICAgICAgICAgICAgICAgICAgY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHxcbiAgICAgICAgICAgICAgICAgIGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiIHx8XG4gICAgICAgICAgICAgICAgICAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1hbnlUb01hbnkoYXJyYXkpIOyymOumrFxuICAgICAgICAgICAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpb25OYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5tYXAoKHIpID0+IHIuaWQpID8/IFtdLGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZLKG51bWJlciwgc3RyaW5nKSDsspjrpqxcbiAgICAgICAgICAgICAgICBjb25zdCByZWxhdGlvbk5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjb2wubnVsbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCA/PyBudWxsLGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCxgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVsYXRpb25GaWVsZHM7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbaWQsIHNldEZvcm1dKTtcblxuICBjb25zdCBzYXZlTXV0YXRpb24gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2VTYXZlTXV0YXRpb24oKTtcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gJHtcbiAgICBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSlcbiAgICAgID8gYHN1Ym1pdChhc3luYyAoZm9ybSkgPT4ge1xuICAgIHNhdmVNdXRhdGlvbi5tdXRhdGUoXG4gICAgICB7IHNwYTogW2Zvcm1dIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBbXCIke25hbWVzLmNhcGl0YWx9XCJdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1vZGUgPT09IFwibW9kYWxcIikge1xuICAgICAgICAgICAgLy8gbW9kYWwgbW9kZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGRlZmF1bHRDYXRjaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSlgXG4gICAgICA6IGAoKSA9PiB7XG4gICAgc2F2ZU11dGF0aW9uLm11dGF0ZShcbiAgICAgIHsgc3BhOiBbZm9ybV0gfSxcbiAgICAgIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgICAgcXVlcnlLZXk6IFtcIiR7bmFtZXMuY2FwaXRhbH1cIl0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAobW9kZSA9PT0gXCJtb2RhbFwiKSB7XG4gICAgICAgICAgICAvLyBtb2RhbCBtb2RlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZSh7IHRvOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZGVmYXVsdENhdGNoLFxuICAgICAgfSxcbiAgICApO1xuICB9YFxuICB9O1xuXG4gIGNvbnN0IFBBR0UgPSB7XG4gICAgdGl0bGU6IGlkID8gU0QoXCJlbnRpdHkuZWRpdFwiKShTRChcImVudGl0eS4ke2VudGl0eUlkfVwiKSwgaWQpIDogU0QoXCJlbnRpdHkuY3JlYXRlXCIpKFNEKFwiZW50aXR5LiR7ZW50aXR5SWR9XCIpKSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctWzE4MDBweF0gbXgtYXV0byBwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTYgbWItOFwiPlxuICAgICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPEZvcm1JY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgaC01XCI+e1BBR0UudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7bW9kZSAhPT0gXCJtb2RhbFwiICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KX1cbiAgICAgICAgICAgICAgICBpY29uPXs8QXJyb3dMZWZ0SWNvbiAvPn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtTRChcImNvbW1vbi5iYWNrVG9MaXN0XCIpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogRm9ybSBDYXJkICovfVxuICAgICAgICAgIDxDYXJkIGNsYXNzTmFtZT1cImJvcmRlci1ib3JkZXIvNDAgYmctZ3JheS01MCBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInB4LTQgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgbS0wXCI+XG4gICAgICAgICAgICAgICAge1BBR0UudGl0bGV9XG4gICAgICAgICAgICAgIDwvQ2FyZFRpdGxlPlxuICAgICAgICAgICAgPC9DYXJkSGVhZGVyPlxuICAgICAgICAgICAgPENhcmRDb250ZW50IGNsYXNzTmFtZT1cInAtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNlwiPlxuJHtjb2x1bW5zXG4gIC5maWx0ZXIoKGNvbCkgPT4gY29sLm5hbWUgIT09IFwiY3JlYXRlZF9hdFwiKVxuICAubWFwKChjb2wpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9ICgoKSA9PiB7XG4gICAgICBpZiAoY29sLmxhYmVsLmVuZHNXaXRoKFwiSWRcIikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxhdGVkRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoY29sLmxhYmVsLnJlcGxhY2UoXCJJZFwiLCBcIlwiKSk7XG4gICAgICAgICAgcmV0dXJuIHJlbGF0ZWRFbnRpdHkudGl0bGUgPz8gY29sLmxhYmVsO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gY29sLmxhYmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sLmxhYmVsO1xuICAgIH0pKCk7XG4gICAgY29uc3QgbGFiZWxOYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICByZXR1cm4gYCAgICAgICAgICAgICAgICB7LyogJHtsYWJlbH0gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXhzIG1iLTEgdGV4dC1ncmF5LTYwMFwiPntTRChcImVudGl0eS4ke2VudGl0eUlkfS4ke2xhYmVsTmFtZX1cIil9PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5yZW5kZXJDb2x1bW4oZW50aXR5SWQsIGNvbCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgfSlcbiAgLmpvaW4oXCJcXG5cXG5cIil9XG5cbiAgICAgICAgICAgICAgICB7LyogU2F2ZSBCdXR0b24gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHQtNFwiPlxuICAgICAgICAgICAgICAgICAge2Zvcm0uaWQgJiYgZm9ybS5jcmVhdGVkX2F0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJtci0yIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPntTRChcImZvcm0uY3JlYXRlZEF0XCIpfTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyhmb3JtLmNyZWF0ZWRfYXQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgIGljb249ezxTYXZlSWNvbiAvPn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge1NEKFwiY29tbW9uLnNhdmVcIil9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFHMkQsb0JBQUE7QUFPeEMsYUFBQTtBQUNtQixjQUFBO0FBY3RDLElBQWEsc0JBQWIsY0FBeUMsU0FBUztDQUNoRCxjQUFjO0VBQ1osTUFBTSxXQUFXO0NBQ25CO0NBRUEsaUJBQWlCLE9BQTBCO0VBQ3pDLE9BQU87R0FDTCxRQUFRO0dBQ1IsTUFBTSxHQUFHLE1BQU0sU0FBUztFQUMxQjtDQUNGO0NBRUEsc0JBQWdEO0VBQzlDLE9BQU87R0FBQztHQUFpQjtHQUFlO0dBQXFCO0dBQWtCO0VBQWE7Q0FDOUY7Q0FFQSxPQUFPLE1BQWMsT0FBd0I7RUFDM0MsT0FBTztHQUNMLDhCQUE4QixRQUFRLGNBQWMsTUFBTSxZQUFZO0dBQ3RFLEtBQUs7R0FDTDtFQUNGLENBQUMsQ0FBQyxLQUFLLElBQUk7Q0FDYjtDQUNBLE9BQU8sTUFBYyxPQUF3QjtFQUMzQyxPQUFPLEtBQUssT0FBTyxNQUFNLEtBQUs7Q0FDaEM7Q0FFQSxtQkFBbUIsVUFBa0IsS0FBb0I7RUFDdkQsSUFBSSxJQUFJLGVBQWUsU0FBUztHQUM5QixNQUFNLEVBQUUsT0FBTyx1QkFBdUIsVUFBVSxJQUFJLElBQUk7R0FDeEQsT0FBTztJQUFFLE1BQU07SUFBaUIsUUFBUTtHQUFHO0VBQzdDLE9BQU8sSUFBSSxJQUFJLGVBQWUsa0JBQWtCLElBQUksZUFBZSxnQkFDakUsSUFBSTtHQUVGLE9BQU87SUFBRSxNQUFNO0lBQWUsVUFEZCwyQkFBMkIsVUFBVSxJQUFJLEtBQUssUUFBUSxPQUFPLEVBQUUsQ0FDdkMsQ0FBQSxDQUFRO0dBQUs7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
|