sonamu 0.12.0 → 0.13.0
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 +63 -63
- 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
|
@@ -15,7 +15,7 @@ import { init_file_tracking, trackWritten } from "./file-tracking.js";
|
|
|
15
15
|
import { unique } from "radashi";
|
|
16
16
|
import path from "path";
|
|
17
17
|
import chalk from "chalk";
|
|
18
|
-
|
|
18
|
+
// src/syncer/code-generator.ts
|
|
19
19
|
/**
|
|
20
20
|
* 템플릿을 렌더링하고 파일로 생성합니다.
|
|
21
21
|
* overwrite 옵션이 false인 경우, 이미 존재하는 파일은 건너뜁니다.
|
|
@@ -43,7 +43,8 @@ async function generateTemplate(key, templateOptions, _generateOptions) {
|
|
|
43
43
|
else return await filterAsync(pathAndCodes, async (pathAndCode) => {
|
|
44
44
|
const { targets } = Sonamu.config.sync;
|
|
45
45
|
const filePath = `${Sonamu.appRootPath}/${pathAndCode.path}`;
|
|
46
|
-
|
|
46
|
+
const dstFilePaths = targets.map((target) => filePath.replace("/:target/", `/${target}/`));
|
|
47
|
+
return await everyAsync(dstFilePaths, async (dstPath) => !await syncerFileExists(dstPath));
|
|
47
48
|
});
|
|
48
49
|
})();
|
|
49
50
|
if (filteredPathAndCodes.length === 0) throw new AlreadyProcessedException(SD("sonamu.error.allFilesExist"));
|
|
@@ -141,8 +142,7 @@ var init_code_generator = __esmMin((() => {
|
|
|
141
142
|
init_file_tracking();
|
|
142
143
|
init_filesystem_dependencies();
|
|
143
144
|
}));
|
|
144
|
-
//#endregion
|
|
145
145
|
init_code_generator();
|
|
146
146
|
export { generateTemplate, init_code_generator, renderTemplate };
|
|
147
147
|
|
|
148
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9jb2RlLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi9jb2RlLWZvcm1hdHRpbmdcIjtcbmltcG9ydCB7IFNEIH0gZnJvbSBcIi4uL2RpY3Qvc2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IHR5cGUgUmVuZGVyZWRUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZS90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmltcG9ydCB7IEJVSUxUX0lOX1RZUEVTIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3pvZC1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuZXJhdGVPcHRpb25zLFxuICB0eXBlIFBhdGhBbmRDb2RlLFxuICB0eXBlIFRlbXBsYXRlS2V5LFxuICB0eXBlIFRlbXBsYXRlT3B0aW9ucyxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBldmVyeUFzeW5jLCBmaWx0ZXJBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHdyYXBJZiB9IGZyb20gXCIuLi91dGlscy9sb2Rhc2gtYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuaW1wb3J0IHsgc3luY2VyRmlsZUV4aXN0cywgc3luY2VyRmlsZXN5c3RlbSB9IGZyb20gXCIuL2ZpbGVzeXN0ZW0tZGVwZW5kZW5jaWVzXCI7XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOqzoCDtjIzsnbzroZwg7IOd7ISx7ZWp64uI64ukLlxuICogb3ZlcndyaXRlIOyYteyFmOydtCBmYWxzZeyduCDqsr3smrAsIOydtOuvuCDsobTsnqztlZjripQg7YyM7J287J2AIOqxtOuEiOucgeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkICjsmIg6IFwiZW50aXR5XCIsIFwibW9kZWxcIiwgXCJzZXJ2aWNlXCIg65OxKVxuICogQHBhcmFtIHRlbXBsYXRlT3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Hsl5Ag7ZWE7JqU7ZWcIOyYteyFmFxuICogQHBhcmFtIF9nZW5lcmF0ZU9wdGlvbnMgLSDsg53shLEg7Ji17IWYIChvdmVyd3JpdGUg7Jes67aAKVxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZUtleT4oXG4gIGtleTogVCxcbiAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gIF9nZW5lcmF0ZU9wdGlvbnM/OiBHZW5lcmF0ZU9wdGlvbnMsXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIGNvbnN0IGdlbmVyYXRlT3B0aW9ucyA9IHtcbiAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgIC4uLl9nZW5lcmF0ZU9wdGlvbnMsXG4gIH07XG4gIE5haXRlLnQoXCJnZW5lcmF0ZVRlbXBsYXRlXCIsIHsga2V5LCB0ZW1wbGF0ZU9wdGlvbnMsIGdlbmVyYXRlT3B0aW9ucyB9KTtcblxuICAvLyDtgqQgY2hpbGRyZW5cbiAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFtrZXldO1xuXG4gIC8vIO2FnO2UjOumvyDroIzrjZRcbiAgY29uc3QgcGF0aEFuZENvZGVzID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAga2V5cy5tYXAoYXN5bmMgKHRlbXBsYXRlS2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZW5kZXJUZW1wbGF0ZSh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgICAgIH0pLFxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmlsdGVyZWRQYXRoQW5kQ29kZXM6IFBhdGhBbmRDb2RlW10gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChnZW5lcmF0ZU9wdGlvbnMub3ZlcndyaXRlKSB7XG4gICAgICByZXR1cm4gcGF0aEFuZENvZGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmlsdGVyQXN5bmMocGF0aEFuZENvZGVzLCBhc3luYyAocGF0aEFuZENvZGUpID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7U29uYW11LmFwcFJvb3RQYXRofS8ke3BhdGhBbmRDb2RlLnBhdGh9YDtcbiAgICAgICAgY29uc3QgZHN0RmlsZVBhdGhzID0gdGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBldmVyeUFzeW5jKFxuICAgICAgICAgIGRzdEZpbGVQYXRocyxcbiAgICAgICAgICBhc3luYyAoZHN0UGF0aCkgPT4gIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRzdFBhdGgpKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAoZmlsdGVyZWRQYXRoQW5kQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuYWxsRmlsZXNFeGlzdFwiKSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRQYXRoQW5kQ29kZXMubWFwKChwYXRoQW5kQ29kZSkgPT4gd3JpdGVDb2RlVG9QYXRoRWFjaFRhcmdldChwYXRoQW5kQ29kZSkpLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOyXrCBQYXRoQW5kQ29kZSDqsJ3ssrTrpbwg67CY7ZmY7ZWp64uI64ukLlxuICog7YyM7J2866GcIOyTsOyngCDslYrqs6Ag66mU66qo66as7IOB7JeQ7ISc66eMIOugjOuNlOunge2VqeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Eg7Ji17IWYXG4gKiBAcmV0dXJucyDqsr3roZzsmYAg7L2U65OcIOyMjeydmCDrsLDsl7RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICBrZXk6IFQsXG4gIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbik6IFByb21pc2U8UGF0aEFuZENvZGVbXT4ge1xuICBOYWl0ZS50KFwicmVuZGVyVGVtcGxhdGVcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KGtleSk7XG5cbiAgY29uc3QgcmVuZGVyZWQgPSBhd2FpdCB0ZW1wbGF0ZS5yZW5kZXIob3B0aW9ucyk7XG4gIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoa2V5LCByZW5kZXJlZCk7XG5cbiAgbGV0IHByZVRlbXBsYXRlUmVzb2x2ZWQ6IFBhdGhBbmRDb2RlW10gPSBbXTtcbiAgaWYgKHJlbmRlcmVkLnByZVRlbXBsYXRlcykge1xuICAgIHByZVRlbXBsYXRlUmVzb2x2ZWQgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVuZGVyZWQucHJlVGVtcGxhdGVzLm1hcCgoeyBrZXk6IHByZVRlbXBsYXRlS2V5LCBvcHRpb25zOiBwcmVUZW1wbGF0ZU9wdGlvbnMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZW5kZXJUZW1wbGF0ZShwcmVUZW1wbGF0ZUtleSwgcHJlVGVtcGxhdGVPcHRpb25zKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgKS5mbGF0KCk7XG4gIH1cblxuICByZXR1cm4gW3Jlc29sdmVkLCAuLi5wcmVUZW1wbGF0ZVJlc29sdmVkXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoXG4gIGtleTogVGVtcGxhdGVLZXksXG4gIHJlc3VsdDogUmVuZGVyZWRUZW1wbGF0ZSxcbik6IFByb21pc2U8UGF0aEFuZENvZGU+IHtcbiAgTmFpdGUudChgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUke2tleX1gLCB7IGtleSwgcmVzdWx0IH0pO1xuXG4gIGNvbnN0IHsgdGFyZ2V0LCBwYXRoOiBmaWxlUGF0aCwgYm9keSwgaW1wb3J0S2V5cywgY3VzdG9tSGVhZGVycyB9ID0gcmVzdWx0O1xuXG4gIC8vIGltcG9ydCDtlaAg64yA7IOB7J2YIOuMgOyDgSBwYXRoIOy2lOy2nFxuICBjb25zdCBidWlsdEluU2NoZW1hTmFtZXMgPSBPYmplY3QudmFsdWVzKEJVSUxUX0lOX1RZUEVTKS5tYXAoXG4gICAgKGluZm8pID0+XG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGluZm8uc2NoZW1hTmFtZSBhcyBzdHJpbmcsXG4gICk7XG4gIGNvbnN0IGltcG9ydERlZnMgPSBpbXBvcnRLZXlzXG4gICAgLy8g64K07J6lIO2DgOyehSDsiqTtgqTrp4jripQg7J2066+4IHNvbmFtdeyXkOyEnCBpbXBvcnTrkJjrr4DroZwg7KCc7Jm4XG4gICAgLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGltcG9ydEtleSkpXG4gICAgLnJlZHVjZShcbiAgICAgIChyLCBpbXBvcnRLZXkpID0+IHtcbiAgICAgICAgbGV0IG1vZHVsZVBhdGggPSBpbXBvcnRLZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aChpbXBvcnRLZXkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBbcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGU6JHtrZXl9XSAke2ltcG9ydEtleX0g66qo65OIIOqyveuhnCDssL7quLAg7Iuk7YyoOiAke2Vycm9yfWAsXG4gICAgICAgICAgICB7IGNhdXNlOiBlcnJvciB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGltcG9ydFBhdGggPSBtb2R1bGVQYXRoO1xuICAgICAgICBpZiAobW9kdWxlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHwgbW9kdWxlUGF0aC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gd3JhcElmKHBhdGgucmVsYXRpdmUocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgbW9kdWxlUGF0aCksIChwKSA9PiBbXG4gICAgICAgICAgICAhcC5zdGFydHNXaXRoKFwiLlwiKSxcbiAgICAgICAgICAgIGAuLyR7cH1gLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6rCZ7J2AIO2MjOydvOyXkOyEnCBpbXBvcnQg7ZWY64qUIOqyveyasCBrZXlzIOuhnCDrgpjsl7Qg7LKY66asXG4gICAgICAgIGNvbnN0IGV4aXN0c09uZSA9IHIuZmluZCgoaW1wb3J0RGVmKSA9PiBpbXBvcnREZWYuZnJvbSA9PT0gaW1wb3J0UGF0aCk7XG4gICAgICAgIGlmIChleGlzdHNPbmUpIHtcbiAgICAgICAgICBleGlzdHNPbmUua2V5cyA9IHVuaXF1ZShleGlzdHNPbmUua2V5cy5jb25jYXQoaW1wb3J0S2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgci5wdXNoKHtcbiAgICAgICAgICAgIGtleXM6IFtpbXBvcnRLZXldLFxuICAgICAgICAgICAgZnJvbTogaW1wb3J0UGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHtcbiAgICAgICAga2V5czogc3RyaW5nW107XG4gICAgICAgIGZyb206IHN0cmluZztcbiAgICAgIH1bXSxcbiAgICApXG4gICAgLy8g7IWA7ZSEIOywuOyhsCDrsKnsp4BcbiAgICAuZmlsdGVyKChpbXBvcnREZWYpID0+ICFmaWxlUGF0aC5lbmRzV2l0aChgJHtpbXBvcnREZWYuZnJvbS5yZXBsYWNlKFwiLi9cIiwgXCJcIil9LnRzYCkpO1xuXG4gIC8vIOy7pOyKpO2FgCDtl6TrjZQg7Y+s7ZWo7ZWY7JesIO2XpOuNlCDsg53shLFcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIC4uLihjdXN0b21IZWFkZXJzID8/IFtdKSxcbiAgICAuLi5pbXBvcnREZWZzLm1hcChcbiAgICAgIChpbXBvcnREZWYpID0+IGBpbXBvcnQgeyAke2ltcG9ydERlZi5rZXlzLmpvaW4oXCIsIFwiKX0gfSBmcm9tICcke2ltcG9ydERlZi5mcm9tfSdgLFxuICAgICksXG4gIF0uam9pbihcIlxcblwiKTtcblxuICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChrZXkgPT09IFwiZ2VuZXJhdGVkX2h0dHBcIikge1xuICAgICAgcmV0dXJuIFtoZWFkZXIsIGJvZHldLmpvaW4oXCJcXG5cXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIE5haXRlLnQoXCJyZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpiZWZvcmVGb3JtYXRcIiwgeyBrZXksIGhlYWRlciwgYm9keSB9KTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZENvZGUgPSBhd2FpdCBmb3JtYXRDb2RlKFxuICAgICAgICBbaGVhZGVyLCBib2R5XS5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgICBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7ZmlsZVBhdGh9YCxcbiAgICAgICk7XG4gICAgICBOYWl0ZS50KGByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpmb3JtYXR0ZWQ6JHtrZXl9YCwgZm9ybWF0dGVkQ29kZSk7XG4gICAgICByZXR1cm4gZm9ybWF0dGVkQ29kZTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBgJHt0YXJnZXR9LyR7ZmlsZVBhdGh9YCxcbiAgICBjb2RlOiBmb3JtYXR0ZWQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29kZVRvUGF0aEVhY2hUYXJnZXQocGF0aEFuZENvZGU6IFBhdGhBbmRDb2RlKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBhcHBSb290UGF0aCB9ID0gU29uYW11O1xuICBjb25zdCBmaWxlUGF0aCA9XG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7cGF0aEFuZENvZGUucGF0aH1gIGFzIEFic29sdXRlUGF0aDtcblxuICBjb25zdCBkc3RGaWxlUGF0aHMgPSB1bmlxdWUoXG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyB0YXJnZXRzLm1hcChcbiAgICAgICh0YXJnZXQpID0+IGZpbGVQYXRoLnJlcGxhY2UoXCIvOnRhcmdldC9cIiwgYC8ke3RhcmdldH0vYCksXG4gICAgKSBhcyBBYnNvbHV0ZVBhdGhbXSxcbiAgKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGRzdEZpbGVQYXRocy5tYXAoYXN5bmMgKGRzdEZpbGVQYXRoKSA9PiB7XG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0RmlsZVBhdGgpO1xuICAgICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhkaXIpKSkge1xuICAgICAgICBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLm1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShkc3RGaWxlUGF0aCwgcGF0aEFuZENvZGUuY29kZSk7XG4gICAgICAvLyDrsKnquIgg7Jqw66as6rCAIOyTtCBwYXRo66W8IOuTseuhnSDihpIgZGV2IHdhdGNoZXLsnZgg7ZuE7IaNIGNoYW5nZSDsnbTrsqTtirjqsIBcbiAgICAgIC8vIOyZuOu2gCDrs4Dqsr3snLzroZwg7Jik7J2465CY7KeAIOyViuuPhOuhnSDqsbDrpoQg6rCA65OcIOyekOujjCDsoJzqs7UuXG4gICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0RmlsZVBhdGgpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNoYWxrLmJvbGQoXCJHZW5lcmF0ZWQ6IFwiKSArIGNoYWxrLmJsdWUoYCR7ZHN0RmlsZVBhdGgucmVwbGFjZShgJHthcHBSb290UGF0aH0vYCwgXCJcIil9YCksXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZHN0RmlsZVBhdGg7XG4gICAgfSksXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLGVBQXNCLGlCQUNwQixLQUNBLGlCQUNBLGtCQUN5QjtDQUN6QixNQUFNLGtCQUFrQjtFQUN0QixXQUFXO0VBQ1gsR0FBRztDQUNMO0NBQ0EsTUFBTSxFQUFFLG9CQUFvQjtFQUFFO0VBQUs7RUFBaUI7Q0FBZ0IsQ0FBQztDQUdyRSxNQUFNLE9BQXNCLENBQUMsR0FBRztDQUdoQyxNQUFNLGdCQUNKLE1BQU0sUUFBUSxJQUNaLEtBQUssSUFBSSxPQUFPLGdCQUFnQjtFQUM5QixPQUFPLE1BQU0sZUFBZSxhQUFhLGVBQWU7Q0FDMUQsQ0FBQyxDQUNILEVBQUEsQ0FDQSxLQUFLO0NBRVAsTUFBTSx1QkFBc0MsT0FBTyxZQUFZO0VBQzdELElBQUksZ0JBQWdCLFdBQ2xCLE9BQU87T0FFUCxPQUFPLE1BQU0sWUFBWSxjQUFjLE9BQU8sZ0JBQWdCO0dBQzVELE1BQU0sRUFBRSxZQUFZLE9BQU8sT0FBTztHQUNsQyxNQUFNLFdBQVcsR0FBRyxPQUFPLFlBQVksR0FBRyxZQUFZO0dBRXRELE9BQU8sTUFBTSxXQURRLFFBQVEsS0FBSyxXQUFXLFNBQVMsUUFBUSxhQUFhLElBQUksT0FBTyxFQUFFLENBRXRGLEdBQ0EsT0FBTyxZQUFZLENBQUUsTUFBTSxpQkFBaUIsT0FB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
|
|
148
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9jb2RlLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi9jb2RlLWZvcm1hdHRpbmdcIjtcbmltcG9ydCB7IFNEIH0gZnJvbSBcIi4uL2RpY3Qvc2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IHR5cGUgUmVuZGVyZWRUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZS90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmltcG9ydCB7IEJVSUxUX0lOX1RZUEVTIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3pvZC1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuZXJhdGVPcHRpb25zLFxuICB0eXBlIFBhdGhBbmRDb2RlLFxuICB0eXBlIFRlbXBsYXRlS2V5LFxuICB0eXBlIFRlbXBsYXRlT3B0aW9ucyxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBldmVyeUFzeW5jLCBmaWx0ZXJBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHdyYXBJZiB9IGZyb20gXCIuLi91dGlscy9sb2Rhc2gtYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuaW1wb3J0IHsgc3luY2VyRmlsZUV4aXN0cywgc3luY2VyRmlsZXN5c3RlbSB9IGZyb20gXCIuL2ZpbGVzeXN0ZW0tZGVwZW5kZW5jaWVzXCI7XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOqzoCDtjIzsnbzroZwg7IOd7ISx7ZWp64uI64ukLlxuICogb3ZlcndyaXRlIOyYteyFmOydtCBmYWxzZeyduCDqsr3smrAsIOydtOuvuCDsobTsnqztlZjripQg7YyM7J287J2AIOqxtOuEiOucgeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkICjsmIg6IFwiZW50aXR5XCIsIFwibW9kZWxcIiwgXCJzZXJ2aWNlXCIg65OxKVxuICogQHBhcmFtIHRlbXBsYXRlT3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Hsl5Ag7ZWE7JqU7ZWcIOyYteyFmFxuICogQHBhcmFtIF9nZW5lcmF0ZU9wdGlvbnMgLSDsg53shLEg7Ji17IWYIChvdmVyd3JpdGUg7Jes67aAKVxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZUtleT4oXG4gIGtleTogVCxcbiAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gIF9nZW5lcmF0ZU9wdGlvbnM/OiBHZW5lcmF0ZU9wdGlvbnMsXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIGNvbnN0IGdlbmVyYXRlT3B0aW9ucyA9IHtcbiAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgIC4uLl9nZW5lcmF0ZU9wdGlvbnMsXG4gIH07XG4gIE5haXRlLnQoXCJnZW5lcmF0ZVRlbXBsYXRlXCIsIHsga2V5LCB0ZW1wbGF0ZU9wdGlvbnMsIGdlbmVyYXRlT3B0aW9ucyB9KTtcblxuICAvLyDtgqQgY2hpbGRyZW5cbiAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFtrZXldO1xuXG4gIC8vIO2FnO2UjOumvyDroIzrjZRcbiAgY29uc3QgcGF0aEFuZENvZGVzID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAga2V5cy5tYXAoYXN5bmMgKHRlbXBsYXRlS2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZW5kZXJUZW1wbGF0ZSh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgICAgIH0pLFxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmlsdGVyZWRQYXRoQW5kQ29kZXM6IFBhdGhBbmRDb2RlW10gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChnZW5lcmF0ZU9wdGlvbnMub3ZlcndyaXRlKSB7XG4gICAgICByZXR1cm4gcGF0aEFuZENvZGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmlsdGVyQXN5bmMocGF0aEFuZENvZGVzLCBhc3luYyAocGF0aEFuZENvZGUpID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7U29uYW11LmFwcFJvb3RQYXRofS8ke3BhdGhBbmRDb2RlLnBhdGh9YDtcbiAgICAgICAgY29uc3QgZHN0RmlsZVBhdGhzID0gdGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBldmVyeUFzeW5jKFxuICAgICAgICAgIGRzdEZpbGVQYXRocyxcbiAgICAgICAgICBhc3luYyAoZHN0UGF0aCkgPT4gIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRzdFBhdGgpKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAoZmlsdGVyZWRQYXRoQW5kQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuYWxsRmlsZXNFeGlzdFwiKSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRQYXRoQW5kQ29kZXMubWFwKChwYXRoQW5kQ29kZSkgPT4gd3JpdGVDb2RlVG9QYXRoRWFjaFRhcmdldChwYXRoQW5kQ29kZSkpLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOyXrCBQYXRoQW5kQ29kZSDqsJ3ssrTrpbwg67CY7ZmY7ZWp64uI64ukLlxuICog7YyM7J2866GcIOyTsOyngCDslYrqs6Ag66mU66qo66as7IOB7JeQ7ISc66eMIOugjOuNlOunge2VqeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Eg7Ji17IWYXG4gKiBAcmV0dXJucyDqsr3roZzsmYAg7L2U65OcIOyMjeydmCDrsLDsl7RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICBrZXk6IFQsXG4gIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbik6IFByb21pc2U8UGF0aEFuZENvZGVbXT4ge1xuICBOYWl0ZS50KFwicmVuZGVyVGVtcGxhdGVcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KGtleSk7XG5cbiAgY29uc3QgcmVuZGVyZWQgPSBhd2FpdCB0ZW1wbGF0ZS5yZW5kZXIob3B0aW9ucyk7XG4gIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoa2V5LCByZW5kZXJlZCk7XG5cbiAgbGV0IHByZVRlbXBsYXRlUmVzb2x2ZWQ6IFBhdGhBbmRDb2RlW10gPSBbXTtcbiAgaWYgKHJlbmRlcmVkLnByZVRlbXBsYXRlcykge1xuICAgIHByZVRlbXBsYXRlUmVzb2x2ZWQgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVuZGVyZWQucHJlVGVtcGxhdGVzLm1hcCgoeyBrZXk6IHByZVRlbXBsYXRlS2V5LCBvcHRpb25zOiBwcmVUZW1wbGF0ZU9wdGlvbnMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZW5kZXJUZW1wbGF0ZShwcmVUZW1wbGF0ZUtleSwgcHJlVGVtcGxhdGVPcHRpb25zKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgKS5mbGF0KCk7XG4gIH1cblxuICByZXR1cm4gW3Jlc29sdmVkLCAuLi5wcmVUZW1wbGF0ZVJlc29sdmVkXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoXG4gIGtleTogVGVtcGxhdGVLZXksXG4gIHJlc3VsdDogUmVuZGVyZWRUZW1wbGF0ZSxcbik6IFByb21pc2U8UGF0aEFuZENvZGU+IHtcbiAgTmFpdGUudChgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUke2tleX1gLCB7IGtleSwgcmVzdWx0IH0pO1xuXG4gIGNvbnN0IHsgdGFyZ2V0LCBwYXRoOiBmaWxlUGF0aCwgYm9keSwgaW1wb3J0S2V5cywgY3VzdG9tSGVhZGVycyB9ID0gcmVzdWx0O1xuXG4gIC8vIGltcG9ydCDtlaAg64yA7IOB7J2YIOuMgOyDgSBwYXRoIOy2lOy2nFxuICBjb25zdCBidWlsdEluU2NoZW1hTmFtZXMgPSBPYmplY3QudmFsdWVzKEJVSUxUX0lOX1RZUEVTKS5tYXAoXG4gICAgKGluZm8pID0+XG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGluZm8uc2NoZW1hTmFtZSBhcyBzdHJpbmcsXG4gICk7XG4gIGNvbnN0IGltcG9ydERlZnMgPSBpbXBvcnRLZXlzXG4gICAgLy8g64K07J6lIO2DgOyehSDsiqTtgqTrp4jripQg7J2066+4IHNvbmFtdeyXkOyEnCBpbXBvcnTrkJjrr4DroZwg7KCc7Jm4XG4gICAgLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGltcG9ydEtleSkpXG4gICAgLnJlZHVjZShcbiAgICAgIChyLCBpbXBvcnRLZXkpID0+IHtcbiAgICAgICAgbGV0IG1vZHVsZVBhdGggPSBpbXBvcnRLZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aChpbXBvcnRLZXkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBbcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGU6JHtrZXl9XSAke2ltcG9ydEtleX0g66qo65OIIOqyveuhnCDssL7quLAg7Iuk7YyoOiAke2Vycm9yfWAsXG4gICAgICAgICAgICB7IGNhdXNlOiBlcnJvciB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGltcG9ydFBhdGggPSBtb2R1bGVQYXRoO1xuICAgICAgICBpZiAobW9kdWxlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHwgbW9kdWxlUGF0aC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gd3JhcElmKHBhdGgucmVsYXRpdmUocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgbW9kdWxlUGF0aCksIChwKSA9PiBbXG4gICAgICAgICAgICAhcC5zdGFydHNXaXRoKFwiLlwiKSxcbiAgICAgICAgICAgIGAuLyR7cH1gLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6rCZ7J2AIO2MjOydvOyXkOyEnCBpbXBvcnQg7ZWY64qUIOqyveyasCBrZXlzIOuhnCDrgpjsl7Qg7LKY66asXG4gICAgICAgIGNvbnN0IGV4aXN0c09uZSA9IHIuZmluZCgoaW1wb3J0RGVmKSA9PiBpbXBvcnREZWYuZnJvbSA9PT0gaW1wb3J0UGF0aCk7XG4gICAgICAgIGlmIChleGlzdHNPbmUpIHtcbiAgICAgICAgICBleGlzdHNPbmUua2V5cyA9IHVuaXF1ZShleGlzdHNPbmUua2V5cy5jb25jYXQoaW1wb3J0S2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgci5wdXNoKHtcbiAgICAgICAgICAgIGtleXM6IFtpbXBvcnRLZXldLFxuICAgICAgICAgICAgZnJvbTogaW1wb3J0UGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHtcbiAgICAgICAga2V5czogc3RyaW5nW107XG4gICAgICAgIGZyb206IHN0cmluZztcbiAgICAgIH1bXSxcbiAgICApXG4gICAgLy8g7IWA7ZSEIOywuOyhsCDrsKnsp4BcbiAgICAuZmlsdGVyKChpbXBvcnREZWYpID0+ICFmaWxlUGF0aC5lbmRzV2l0aChgJHtpbXBvcnREZWYuZnJvbS5yZXBsYWNlKFwiLi9cIiwgXCJcIil9LnRzYCkpO1xuXG4gIC8vIOy7pOyKpO2FgCDtl6TrjZQg7Y+s7ZWo7ZWY7JesIO2XpOuNlCDsg53shLFcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIC4uLihjdXN0b21IZWFkZXJzID8/IFtdKSxcbiAgICAuLi5pbXBvcnREZWZzLm1hcChcbiAgICAgIChpbXBvcnREZWYpID0+IGBpbXBvcnQgeyAke2ltcG9ydERlZi5rZXlzLmpvaW4oXCIsIFwiKX0gfSBmcm9tICcke2ltcG9ydERlZi5mcm9tfSdgLFxuICAgICksXG4gIF0uam9pbihcIlxcblwiKTtcblxuICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChrZXkgPT09IFwiZ2VuZXJhdGVkX2h0dHBcIikge1xuICAgICAgcmV0dXJuIFtoZWFkZXIsIGJvZHldLmpvaW4oXCJcXG5cXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIE5haXRlLnQoXCJyZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpiZWZvcmVGb3JtYXRcIiwgeyBrZXksIGhlYWRlciwgYm9keSB9KTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZENvZGUgPSBhd2FpdCBmb3JtYXRDb2RlKFxuICAgICAgICBbaGVhZGVyLCBib2R5XS5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgICBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7ZmlsZVBhdGh9YCxcbiAgICAgICk7XG4gICAgICBOYWl0ZS50KGByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpmb3JtYXR0ZWQ6JHtrZXl9YCwgZm9ybWF0dGVkQ29kZSk7XG4gICAgICByZXR1cm4gZm9ybWF0dGVkQ29kZTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBgJHt0YXJnZXR9LyR7ZmlsZVBhdGh9YCxcbiAgICBjb2RlOiBmb3JtYXR0ZWQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29kZVRvUGF0aEVhY2hUYXJnZXQocGF0aEFuZENvZGU6IFBhdGhBbmRDb2RlKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBhcHBSb290UGF0aCB9ID0gU29uYW11O1xuICBjb25zdCBmaWxlUGF0aCA9XG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7cGF0aEFuZENvZGUucGF0aH1gIGFzIEFic29sdXRlUGF0aDtcblxuICBjb25zdCBkc3RGaWxlUGF0aHMgPSB1bmlxdWUoXG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyB0YXJnZXRzLm1hcChcbiAgICAgICh0YXJnZXQpID0+IGZpbGVQYXRoLnJlcGxhY2UoXCIvOnRhcmdldC9cIiwgYC8ke3RhcmdldH0vYCksXG4gICAgKSBhcyBBYnNvbHV0ZVBhdGhbXSxcbiAgKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGRzdEZpbGVQYXRocy5tYXAoYXN5bmMgKGRzdEZpbGVQYXRoKSA9PiB7XG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0RmlsZVBhdGgpO1xuICAgICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhkaXIpKSkge1xuICAgICAgICBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLm1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShkc3RGaWxlUGF0aCwgcGF0aEFuZENvZGUuY29kZSk7XG4gICAgICAvLyDrsKnquIgg7Jqw66as6rCAIOyTtCBwYXRo66W8IOuTseuhnSDihpIgZGV2IHdhdGNoZXLsnZgg7ZuE7IaNIGNoYW5nZSDsnbTrsqTtirjqsIBcbiAgICAgIC8vIOyZuOu2gCDrs4Dqsr3snLzroZwg7Jik7J2465CY7KeAIOyViuuPhOuhnSDqsbDrpoQg6rCA65OcIOyekOujjCDsoJzqs7UuXG4gICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0RmlsZVBhdGgpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNoYWxrLmJvbGQoXCJHZW5lcmF0ZWQ6IFwiKSArIGNoYWxrLmJsdWUoYCR7ZHN0RmlsZVBhdGgucmVwbGFjZShgJHthcHBSb290UGF0aH0vYCwgXCJcIil9YCksXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZHN0RmlsZVBhdGg7XG4gICAgfSksXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLGVBQXNCLGlCQUNwQixLQUNBLGlCQUNBLGtCQUN5QjtDQUN6QixNQUFNLGtCQUFrQjtFQUN0QixXQUFXO0VBQ1gsR0FBRztDQUNMO0NBQ0EsTUFBTSxFQUFFLG9CQUFvQjtFQUFFO0VBQUs7RUFBaUI7Q0FBZ0IsQ0FBQztDQUdyRSxNQUFNLE9BQXNCLENBQUMsR0FBRztDQUdoQyxNQUFNLGdCQUNKLE1BQU0sUUFBUSxJQUNaLEtBQUssSUFBSSxPQUFPLGdCQUFnQjtFQUM5QixPQUFPLE1BQU0sZUFBZSxhQUFhLGVBQWU7Q0FDMUQsQ0FBQyxDQUNILEVBQUEsQ0FDQSxLQUFLO0NBRVAsTUFBTSx1QkFBc0MsT0FBTyxZQUFZO0VBQzdELElBQUksZ0JBQWdCLFdBQ2xCLE9BQU87T0FFUCxPQUFPLE1BQU0sWUFBWSxjQUFjLE9BQU8sZ0JBQWdCO0dBQzVELE1BQU0sRUFBRSxZQUFZLE9BQU8sT0FBTztHQUNsQyxNQUFNLFdBQVcsR0FBRyxPQUFPLFlBQVksR0FBRyxZQUFZO0dBQ3RELE1BQU0sZUFBZSxRQUFRLEtBQUssV0FBVyxTQUFTLFFBQVEsYUFBYSxJQUFJLE9BQU8sRUFBRSxDQUFDO0dBQ3pGLE9BQU8sTUFBTSxXQUNYLGNBQ0EsT0FBTyxZQUFZLENBQUUs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
|
|
@@ -7,7 +7,7 @@ import { EntityManager, init_entity_manager } from "../entity/entity-manager.js"
|
|
|
7
7
|
import { init_filesystem_dependencies, syncerFileExists, syncerFilesystem } from "./filesystem-dependencies.js";
|
|
8
8
|
import { generateTemplate, init_code_generator } from "./code-generator.js";
|
|
9
9
|
import chalk from "chalk";
|
|
10
|
-
|
|
10
|
+
// src/syncer/entity-operations.ts
|
|
11
11
|
/**
|
|
12
12
|
* 새로운 엔티티를 생성합니다.
|
|
13
13
|
* entityId는 반드시 CamelCase 형식이어야 합니다.
|
|
@@ -51,8 +51,7 @@ var init_entity_operations = __esmMin((() => {
|
|
|
51
51
|
init_code_generator();
|
|
52
52
|
init_filesystem_dependencies();
|
|
53
53
|
}));
|
|
54
|
-
//#endregion
|
|
55
54
|
init_entity_operations();
|
|
56
55
|
export { createEntity, delEntity, init_entity_operations };
|
|
57
56
|
|
|
58
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW9wZXJhdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9lbnRpdHktb3BlcmF0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi9kaWN0L3NkXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUZW1wbGF0ZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLyoqXG4gKiDsg4jroZzsmrQg7JeU7Yuw7Yuw66W8IOyDneyEse2VqeuLiOuLpC5cbiAqIGVudGl0eUlk64qUIOuwmOuTnOyLnCBDYW1lbENhc2Ug7ZiV7Iud7J207Ja07JW8IO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUVudGl0eShcbiAgZm9ybTogT21pdDxUZW1wbGF0ZU9wdGlvbnNbXCJlbnRpdHlcIl0sIFwidGl0bGVcIj4gJiB7IHRpdGxlOiBzdHJpbmcgfSxcbikge1xuICBpZiAoIS9eW0EtWl1bYS16QS1aMC05XSokLy50ZXN0KGZvcm0uZW50aXR5SWQpKSB7XG4gICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuZW50aXR5SWRDYW1lbENhc2VcIikpO1xuICB9XG5cbiAgYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudGl0eVwiLCBmb3JtKTtcblxuICAvLyByZWxvYWQgZW50aXRpZXNcbiAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcbn1cblxuLyoqXG4gKiDsl5Tti7Dti7Drpbwg7IKt7KCc7ZWp64uI64ukLlxuICogcGFyZW50SWTqsIAg7J6I64qUIOyEnOu4jCDsl5Tti7Dti7DsnZgg6rK97JqwIGVudGl0eS5qc29u66eMIOyCreygnO2VmOqzoCxcbiAqIOujqO2KuCDsl5Tti7Dti7DsnZgg6rK97JqwIOuUlOugie2GoOumrCDsoITssrTsmYAg7YOA6rKfIOuUlOugie2GoOumrOulvCDsgq3soJztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxFbnRpdHkoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8eyBkZWxQYXRoczogc3RyaW5nW10gfT4ge1xuICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgY29uc3QgZGVsUGF0aHMgPSAoKCkgPT4ge1xuICAgIGlmIChlbnRpdHkucGFyZW50SWQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGAke1NvbmFtdS5hcGlSb290UGF0aH0vc3JjL2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLnBhcmVudEZzfS8ke2VudGl0eS5uYW1lcy5mc30uZW50aXR5Lmpzb25gLFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYCR7U29uYW11LmFwaVJvb3RQYXRofS9zcmMvYXBwbGljYXRpb24vJHtlbnRpdHkubmFtZXMuZnN9YCxcbiAgICAgICAgYCR7U29uYW11LmFwaVJvb3RQYXRofS9kaXN0L2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLmZzfWAsXG4gICAgICAgIC4uLlNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzLmZsYXRNYXAoKHRhcmdldCkgPT4gW1xuICAgICAgICAgIGAke1NvbmFtdS5hcHBSb290UGF0aH0vJHt0YXJnZXR9L3NyYy9zZXJ2aWNlcy8ke2VudGl0eS5uYW1lcy5mc31gLFxuICAgICAgICBdKSxcbiAgICAgIF07XG4gICAgfVxuICB9KSgpOyAvLyBpaWZlXG5cbiAgZm9yIChjb25zdCBkZWxQYXRoIG9mIGRlbFBhdGhzKSB7XG4gICAgaWYgKGF3YWl0IHN5bmNlckZpbGVFeGlzdHMoZGVsUGF0aCkpIHtcbiAgICAgICFpc1Rlc3QoKSAmJiBjb25zb2xlLmxvZyhjaGFsay5yZWQoYERFTEVURSAke2RlbFBhdGh9YCkpO1xuICAgICAgYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5ybShkZWxQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICFpc1Rlc3QoKSAmJiBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYE5PVF9FWElTVFMgJHtkZWxQYXRofWApKTtcbiAgICB9XG4gIH1cblxuICAvLyByZWxvYWQgZW50aXRpZXNcbiAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcblxuICByZXR1cm4geyBkZWxQYXRocyB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQWVBLGVBQXNCLGFBQ3BCLE1BQ0E7Q0FDQSxJQUFJLENBQUMsc0JBQXNCLEtBQUssS0FBSyxRQUFRLEdBQzNDLE1BQU0sSUFBSSxvQkFBb0IsR0FBRyxnQ0FBZ0MsQ0FBQztDQUdwRSxNQUFNLGlCQUFpQixVQUFVLElBQUk7Q0FHckMsTUFBTSxjQUFjLE9BQU87QUFDN0I7Ozs7OztBQU9BLGVBQXNCLFVBQVUsVUFBbUQ7Q0FDakYsTUFBTSxTQUFTLGNBQWMsSUFBSSxRQUFRO0NBRXpDLE1BQU0sa0JBQWtCO0VBQ3RCLElBQUksT0FBTyxVQUNULE9BQU8sQ0FDTCxHQUFHLE9BQU8sWUFBWSxtQkFBbUIsT0FBTyxNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sR0FBRyxhQUNwRjtPQUVBLE9BQU87R0FDTCxHQUFHLE9BQU8sWUFBWSxtQkFBbUIsT0FBTyxNQUFNO0dBQ3RELEdBQUcsT0FBTyxZQUFZLG9CQUFvQixPQUFPLE1BQU07R0FDdkQsR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLFNBQVMsV0FBVyxDQUNoRCxHQUFHLE9BQU8sWUFBWSxHQUFHLE9BQU8sZ0JBQWdCLE9BQU8sTUFBTSxJQUMvRCxDQUFDO0VBQ0g7Q0FFSixFQUFBLENBQUc7Q0FFSCxLQUFLLE1BQU0sV0FBVyxVQUNwQixJQUFJLE1BQU0saUJBQWlCLE9BQU8sR0FBRztFQUNuQyxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLFVBQVUsU0FBUyxDQUFDO0VBQ3ZELE1BQU0saUJBQWlCLEdBQUcsU0FBUztHQUFFLFdBQVc7R0FBTSxPQUFPO0VBQUssQ0FBQztDQUNyRSxPQUNFLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxNQUFNLE9BQU8sY0FBYyxTQUFTLENBQUM7Q0FLbEUsTUFBTSxjQUFjLE9BQU87Q0FFM0IsT0FBTyxFQUFFLFNBQVM7QUFDcEI7O0NBL0RzQyxZQUFBO0NBQ1AsUUFBQTtDQUN5QixvQkFBQTtDQUNTLG1CQUFBO0NBRXJCLGdCQUFBO0NBQ08sb0JBQUE7Q0FDMkIsNkJBQUEifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
-
|
|
2
|
+
// src/syncer/event-batcher.ts
|
|
3
3
|
/**
|
|
4
4
|
* 파일 변경 이벤트를 batch로 모아 한 번에 처리하는 throttler를 만듭니다.
|
|
5
5
|
*
|
|
@@ -55,7 +55,6 @@ function createFileEventBatcher(options) {
|
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
57
|
var init_event_batcher = __esmMin((() => {}));
|
|
58
|
-
//#endregion
|
|
59
58
|
init_event_batcher();
|
|
60
59
|
export { createFileEventBatcher, init_event_batcher };
|
|
61
60
|
|
package/dist/syncer/file-copy.js
CHANGED
|
@@ -2,7 +2,7 @@ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
|
2
2
|
import { formatCode, init_code_formatting } from "../code-formatting/index.js";
|
|
3
3
|
import { init_filesystem_dependencies, syncerFileExists, syncerFilesystem } from "./filesystem-dependencies.js";
|
|
4
4
|
import path, { dirname } from "node:path";
|
|
5
|
-
|
|
5
|
+
// src/syncer/file-copy.ts
|
|
6
6
|
/**
|
|
7
7
|
* Syncer 파일시스템 경계를 통해 파일을 복사하고 클라이언트용 import 경로를 변환합니다.
|
|
8
8
|
*/
|
|
@@ -29,8 +29,7 @@ var init_file_copy = __esmMin((() => {
|
|
|
29
29
|
init_code_formatting();
|
|
30
30
|
init_filesystem_dependencies();
|
|
31
31
|
}));
|
|
32
|
-
//#endregion
|
|
33
32
|
init_file_copy();
|
|
34
33
|
export { copyFileWithReplaceCoreToShared, init_file_copy };
|
|
35
34
|
|
|
36
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1jb3B5LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvZmlsZS1jb3B5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vY29kZS1mb3JtYXR0aW5nXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLyoqXG4gKiBTeW5jZXIg7YyM7J287Iuc7Iqk7YWcIOqyveqzhOulvCDthrXtlbQg7YyM7J287J2EIOuzteyCrO2VmOqzoCDtgbTrnbzsnbTslrjtirjsmqkgaW1wb3J0IOqyveuhnOulvCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKFxuICBmcm9tUGF0aDogc3RyaW5nLFxuICB0b1BhdGg6IHN0cmluZyxcbiAgc3luY0hlYWRlcj86IHN0cmluZyxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGZyb21QYXRoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvbGRGaWxlQ29udGVudCA9IGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ucmVhZEZpbGUoZnJvbVBhdGgsIFwidXRmLThcIik7XG4gIGxldCBuZXdGaWxlQ29udGVudCA9IHJlcGxhY2VDb3JlSW1wb3J0KG9sZEZpbGVDb250ZW50LCB0b1BhdGgpO1xuXG4gIGlmIChzeW5jSGVhZGVyKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkQmxvY2tSZWdleCA9IC9cXC9cXCpcXCpcXHI/XFxuIFxcKiBAZ2VuZXJhdGVkXFxyP1xcbltcXHNcXFNdKj9cXCpcXC9cXHI/XFxuKFxccj9cXG4pKi87XG4gICAgbmV3RmlsZUNvbnRlbnQgPSBnZW5lcmF0ZWRCbG9ja1JlZ2V4LnRlc3QobmV3RmlsZUNvbnRlbnQpXG4gICAgICA/
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1jb3B5LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvZmlsZS1jb3B5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vY29kZS1mb3JtYXR0aW5nXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLyoqXG4gKiBTeW5jZXIg7YyM7J287Iuc7Iqk7YWcIOqyveqzhOulvCDthrXtlbQg7YyM7J287J2EIOuzteyCrO2VmOqzoCDtgbTrnbzsnbTslrjtirjsmqkgaW1wb3J0IOqyveuhnOulvCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKFxuICBmcm9tUGF0aDogc3RyaW5nLFxuICB0b1BhdGg6IHN0cmluZyxcbiAgc3luY0hlYWRlcj86IHN0cmluZyxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGZyb21QYXRoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvbGRGaWxlQ29udGVudCA9IGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ucmVhZEZpbGUoZnJvbVBhdGgsIFwidXRmLThcIik7XG4gIGxldCBuZXdGaWxlQ29udGVudCA9IHJlcGxhY2VDb3JlSW1wb3J0KG9sZEZpbGVDb250ZW50LCB0b1BhdGgpO1xuXG4gIGlmIChzeW5jSGVhZGVyKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkQmxvY2tSZWdleCA9IC9cXC9cXCpcXCpcXHI/XFxuIFxcKiBAZ2VuZXJhdGVkXFxyP1xcbltcXHNcXFNdKj9cXCpcXC9cXHI/XFxuKFxccj9cXG4pKi87XG4gICAgbmV3RmlsZUNvbnRlbnQgPSBnZW5lcmF0ZWRCbG9ja1JlZ2V4LnRlc3QobmV3RmlsZUNvbnRlbnQpXG4gICAgICA/IG5ld0ZpbGVDb250ZW50LnJlcGxhY2UoZ2VuZXJhdGVkQmxvY2tSZWdleCwgYCR7c3luY0hlYWRlcn1cXG5cXG5gKVxuICAgICAgOiBgJHtzeW5jSGVhZGVyfVxcblxcbiR7bmV3RmlsZUNvbnRlbnR9YDtcbiAgfVxuXG4gIGlmICh0b1BhdGguZW5kc1dpdGgoXCIudHNcIikgfHwgdG9QYXRoLmVuZHNXaXRoKFwiLnRzeFwiKSkge1xuICAgIG5ld0ZpbGVDb250ZW50ID0gYXdhaXQgZm9ybWF0Q29kZShuZXdGaWxlQ29udGVudCwgdG9QYXRoKTtcbiAgfVxuXG4gIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ud3JpdGVGaWxlKHRvUGF0aCwgbmV3RmlsZUNvbnRlbnQpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUNvcmVJbXBvcnQoc291cmNlOiBzdHJpbmcsIHRvUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc3JjTWF0Y2ggPSB0b1BhdGgubWF0Y2goL14oLitcXC9zcmMpXFwvLyk7XG4gIGlmICghc3JjTWF0Y2gpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc2VydmljZXNEaXIgPSBwYXRoLmpvaW4oc3JjTWF0Y2hbMV0sIFwic2VydmljZXNcIik7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZGlybmFtZSh0b1BhdGgpLCBzZXJ2aWNlc0Rpcik7XG4gIGNvbnN0IHNoYXJlZFBhdGggPSByZWxhdGl2ZVBhdGggPT09IFwiXCIgPyBcIi4vc29uYW11LnNoYXJlZFwiIDogYCR7cmVsYXRpdmVQYXRofS9zb25hbXUuc2hhcmVkYDtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKC9mcm9tIFwic29uYW11KFxcL2RpY3QpP1wiL2csIGBmcm9tIFwiJHtzaGFyZWRQYXRofVwiYCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsZUFBc0IsZ0NBQ3BCLFVBQ0EsUUFDQSxZQUNrQjtDQUNsQixJQUFJLENBQUUsTUFBTSxpQkFBaUIsUUFBUSxHQUNuQyxPQUFPO0NBSVQsSUFBSSxpQkFBaUIsa0JBQWtCLE1BRFYsaUJBQWlCLFNBQVMsVUFBVSxPQUFPLEdBQ2pCLE1BQU07Q0FFN0QsSUFBSSxZQUFZO0VBQ2QsTUFBTSxzQkFBc0I7RUFDNUIsaUJBQWlCLG9CQUFvQixLQUFLLGNBQWMsSUFDcEQsZUFBZSxRQUFRLHFCQUFxQixHQUFHLFdBQVcsS0FBSyxJQUMvRCxHQUFHLFdBQVcsTUFBTTtDQUMxQjtDQUVBLElBQUksT0FBTyxTQUFTLEtBQUssS0FBSyxPQUFPLFNBQVMsTUFBTSxHQUNsRCxpQkFBaUIsTUFBTSxXQUFXLGdCQUFnQixNQUFNO0NBRzFELE1BQU0saUJBQWlCLFVBQVUsUUFBUSxjQUFjO0NBQ3ZELE9BQU87QUFDVDtBQUVBLFNBQVMsa0JBQWtCLFFBQWdCLFFBQXdCO0NBQ2pFLE1BQU0sV0FBVyxPQUFPLE1BQU0sY0FBYztDQUM1QyxJQUFJLENBQUMsVUFDSCxPQUFPO0NBR1QsTUFBTSxjQUFjLEtBQUssS0FBSyxTQUFTLElBQUksVUFBVTtDQUNyRCxNQUFNLGVBQWUsS0FBSyxTQUFTLFFBQVEsTUFBTSxHQUFHLFdBQVc7Q0FDL0QsTUFBTSxhQUFhLGlCQUFpQixLQUFLLG9CQUFvQixHQUFHLGFBQWE7Q0FDN0UsT0FBTyxPQUFPLFFBQVEsMkJBQTJCLFNBQVMsV0FBVyxFQUFFO0FBQ3pFOztDQTNDK0MscUJBQUE7Q0FDK0IsNkJBQUEifQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { Sonamu, init_sonamu } from "../api/sonamu.js";
|
|
3
3
|
import path from "path";
|
|
4
|
-
|
|
4
|
+
// src/syncer/file-patterns.ts
|
|
5
5
|
/**
|
|
6
6
|
* Syncer가 관심 가지고 지켜보는 파일들입니다.
|
|
7
7
|
* 이 파일들에 변경이 생기면 추가적인 작업(이하 "싱크" 또는 "싱크 액션")을 수행합니다.
|
|
@@ -85,8 +85,7 @@ var init_file_patterns = __esmMin((() => {
|
|
|
85
85
|
"**/.turbo/**"
|
|
86
86
|
];
|
|
87
87
|
}));
|
|
88
|
-
//#endregion
|
|
89
88
|
init_file_patterns();
|
|
90
89
|
export { GLOB_EXCLUDE, getChecksumPatternGroup, getChecksumPatternGroupInAbsolutePath, init_file_patterns };
|
|
91
90
|
|
|
92
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wYXR0ZXJucy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoLCB0eXBlIEFwcFJlbGF0aXZlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8qKlxuICogU3luY2Vy6rCAIOq0gOyLrCDqsIDsp4Dqs6Ag7KeA7Lyc67O064qUIO2MjOydvOuTpOyeheuLiOuLpC5cbiAqIOydtCDtjIzsnbzrk6Tsl5Ag67OA6rK97J20IOyDneq4sOuptCDstpTqsIDsoIHsnbgg7J6R7JeFKOydtO2VmCBcIuyLse2BrFwiIOuYkOuKlCBcIuyLse2BrCDslaHshZhcIinsnYQg7IiY7ZaJ7ZWp64uI64ukLlxuICog7J20IOyekeyXheydtOudvCDtlajsnYAg7YyM7J28IOuzteyCrCDrmJDripQg7YWc7ZSM66a/IOugjOuNlOungeydhCDthrXtlZwgY29kZSBnZW5lcmF0aW9u7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiDqsr3roZwg7ZiV7IudOiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICh0YXJnZXQg65SU66CJ7Yag66as66GcIOyLnOyekSwg7JiIOiBcImFwaS9zcmMvLi4uXCIsIFwid2ViL3NyYy8uLi5cIilcbiAqIOyCrOyaqTogZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgp66GcIOygiOuMgCDqsr3roZwg67OA7ZmYIO2bhCBnbG9iIOyCrOyaqVxuICpcbiAqIOuRkCDqsIDsp4Ag7J2Y66+47KCBIOyYgeyXrTpcbiAqIC0g7J6F66ClICjsgqzsmqnsnpAg7J6R7ISxKTogYXBpIOuUlOugie2GoOumrOyXkOunjCDsnITsuZguIOyCrOyaqeyekOqwgCDsp4HsoJEg7Y647KeRLlxuICogLSDstpzroKUgKHNvbmFtdSDsg53shLEv67O17IKsKTogYXBpIOuYkOuKlCB0YXJnZXQg65SU66CJ7Yag66as7JeQIHNvbmFtdeqwgCDrp4zrk6TslrTrgrTripQg7YyM7J28LlxuICpcbiAqIOy2lOyggSDrsJYg7J6Q7IKwICjrtoDtirjsiqTtirjrnqkgcGhhc2Xsl5DshJwg66ek67KIIOuztOyepSk6XG4gKiAtIHNvbmFtdS5zaGFyZWQudHM6IOyCrOyaqeyekOqwgCDsu6TsiqTthLDrp4jsnbTspojtlZjripQg7J6Q7IKwLiBJZk5vdEV4aXN0c+uhnCAx7ZqMIOyDneyEsSDtm4Qg7IaQ64yA7KeAIOyViuydjC5cbiAqIC0gZW50cnktc2VydmVyLmdlbmVyYXRlZC50c3g6IOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5wuIOunpOuyiCBvdmVyd3JpdGUgZ2VuZXJhdGUuXG4gKlxuICog7JyEIOuRmOydgCBzeW5jKCnsnZgg67aA7Yq47Iqk7Yq4656pIHBoYXNl7JeQ7IScIOuzgOqyvSDqsoDstpwg7IKs7J207YG06rO8IOustOq0gO2VmOqyjCDrs7TsnqXrkKnri4jri6QuXG4gKiDstpTsoIEg7IKs7J207YG0IOyViOyXkOyEnCDtlaAg7JWh7IWY7J20IOyXhuuKlCDsnpDsgrDsnbTrnbwg7Yyo7YS0IOq3uOujueyXkCDtj6ztlajrkJjsp4Ag7JWK7Iq164uI64ukLlxuICpcbiAqIOychOy5mCDsubTthYzqs6DrpqzripQgYXBpL3RhcmdldHMvYW55d2hlcmUg7Zes7Y2866GcIOuqheyLnOyggeycvOuhnCDtkZztmITtlanri4jri6QuXG4gKlxuICogRmlsZVR5cGXsnYAg7J20IO2VqOyImOydmCDrsJjtmZgg7YOA7J6F7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuIO2CpCDstpTqsIAg7IucIOuzhOuPhCBlbnVtL+uwsOyXtOydhFxuICog64+Z6riw7ZmU7ZWgIO2VhOyalCDsl4bsnbQg7Jes6riwIO2VnCDqtbDrjbDrp4wg7IiY7KCV7ZWY66m0IOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCkge1xuICAvLyDtl6ztjbwg7ZWo7IiY65OkIOunjOuTpOyWtOyEnCDqsIDsoLjsmLXri4jri6QuXG4gIGNvbnN0IHsgYXBpLCB0YXJnZXRzLCBhbnl3aGVyZSB9ID0gZ2xvYkJ1aWxkZXJzKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTb25hbXUg7J6F7J6l7JeQ7IScIHNvcnVjZeqwgCDrkJjripQg7YyM7J2865Ok7J6F64uI64ukLlxuICAgIC8vIOydtCDsuZzqtazrk6TsnbQg67OA6rK965CY66m0IOydtOuTpOuhnOu2gO2EsCDslaHshZjsnYQg7IiY7ZaJ7ZWY6rOgIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAgLy8g66qo64W466as7Y+s7JeQ7IScIOydtCBzb3VyY2Xrk6TsnYAgYXBpIO2UhOuhnOygne2KuOyXkCDtlZzsoJXrkJjrr4DroZwsIGFwaeyXkCDsnojripQg7Lmc6rWs65Ok66eMIOumrOyKpO2Mhe2VqeuLiOuLpC5cbiAgICBjb25maWc6IGFwaShcInNyYy9zb25hbXUuY29uZmlnLnRzXCIpLFxuICAgIGVudGl0eTogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIiksXG4gICAgZnJhbWU6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmZyYW1lLnRzXCIpLFxuICAgIGZ1bmN0aW9uczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZnVuY3Rpb25zLnRzXCIpLFxuICAgIG1vZGVsOiBhcGkoXCJzcmMvYXBwbGljYXRpb24vKiovKi5tb2RlbC50c1wiKSxcbiAgICB0eXBlczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIiksXG4gICAgd29ya2Zsb3c6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICAgIGkxOG46IGFwaShcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiKSxcblxuICAgIC8vIFNvbmFtdeqwgCDstpzroKXtlZjripQg7IOd7ISxIO2MjOydvOuTpOyeheuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok64+EIOygle2VqeyEsSDqsoDspp0g7LCo7JuQ7JeQ7IScIHNvbmFtdS5sb2Nr7JeQIOq4sOuhne2VtOyVvCDtlZjqs6AsXG4gICAgLy8g65iQ7ZWcIOuzgOqyveyLnCDqt7gg7IKs7Iuk7J2EIHN5bmNlcuqwgCDslYzquLDripQg7ZW07JW8IO2VqeuLiOuLpCjruYTroZ0g67OE64uk66W4IOyymOumrOqwgCDsl4bripQg6rK97Jqw64+EIOyeiOyngOunjCkuXG4gICAgLy9cbiAgICAvLyDsnpDsgrAg67O47ISx7JeQIOuUsOudvCDsnITsuZgg7Lm07YWM6rOg66as6rCAIOuLpOultOq4sCDrlYzrrLjsl5AsIOuzuOyEseuzhOuhnCDrtoTrpqztlbTshJwg7ZGc6riw7ZWp64uI64ukLlxuICAgIC8vIC0g7JaR7Kq9Le2VhOyalCDsnpDsgrA6IGFwaeyXkCDsoJXrs7jsnbQg66eM65Ok7Ja07KeEIOuSpCB0YXJnZXTsl5Ag67O17IKs65CoIChzb25hbXUuZ2VuZXJhdGVkLnt0cyx0c3h9KS5cbiAgICAvLyAtIGFwaSDsoITsmqkg7J6Q7IKwOiBhcGnsl5Drp4wg66eM65Ok7Ja07KeQIChzb25hbXUuZ2VuZXJhdGVkLmh0dHAsIHF1ZXJpZXMuZ2VuZXJhdGVkLnRzKS5cbiAgICAvLyAtIHRhcmdldCDsoITsmqkg7J6Q7IKwOiB0YXJnZXTsl5Drp4wg66eM65Ok7Ja07KeQIChzZXJ2aWNlcy5nZW5lcmF0ZWQudHPripQgc2VydmljZXMudGVtcGxhdGXsnZggOnRhcmdldCDrtoTrsLApLlxuICAgIC8vXG4gICAgLy8g7Jes6riw7JeQ64qUIFNvbmFtdeydmCDrqqjrk6Agc3luYyDsgrDstpzrrLzsnbQg7J6I64qUIOqyg+ydgCDslYTri5nri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+yZgCBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOyZgCDqsJnsnYBcbiAgICAvLyBzeW5jIOy0iOuwmCAx7ZqM7ISxIOu2gO2KuOyKpO2KuOueqSDtjIzsnbzrk6TsnYAg6rSA66asIOyViCDtlZjquLAg65WM66y47JeQIOyXrOq4sOyXkCDrpqzsiqTtjIXrj4Qg7JWIIO2VqeuLiOuLpC5cbiAgICBodHRwVmFsaWRhdG9yc0dlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC50c1wiKSxcbiAgICBnZW5lcmF0ZWQ6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC57dHMsdHN4LHNzby50c31cIiksXG4gICAgZ2VuZXJhdGVkQ29waWVkOiB0YXJnZXRzKFwic3JjL3NlcnZpY2VzLyoqL3NvbmFtdS5nZW5lcmF0ZWQue3RzLHRzeH1cIiksXG4gICAgaHR0cEdlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLmh0dHBcIiksXG4gICAgc2VydmljZXNHZW5lcmF0ZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkLnRzXCIpLFxuICAgIHNkR2VuZXJhdGVkOiBhbnl3aGVyZShcInNyYy9pMThuLyoqL3NkLmdlbmVyYXRlZC50c1wiKSxcbiAgICB0eXBlc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLnR5cGVzLnRzXCIpLFxuICAgIGZ1bmN0aW9uc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLmZ1bmN0aW9ucy50c1wiKSxcbiAgICBpMThuQ29waWVkOiB0YXJnZXRzKFwic3JjL2kxOG4vKiovIShzZC5nZW5lcmF0ZWQpLnRzXCIpLFxuICB9IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBBcHBSZWxhdGl2ZVBhdGg+O1xufVxuXG4vLyBOb2RlIOuCtOyepSBmcy5nbG9i7J2YIGJyYWNlIGV4cGFuc2lvbuydgCDri6jsnbwg66mk67KEIHt4feulvCDtkoDsp4Ag7JWK7Jy866+A66GcLCDrqaTrsoTqsIAgMeqwnOydvCDrlYzripQgYWx0ZXJuYXRpb24g7JeG7J20IOyngeygkSDqsrDtlantlanri4jri6QuXG5mdW5jdGlvbiBicmFjZUpvaW4oZGlyczogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgcmV0dXJuIGRpcnMubGVuZ3RoID09PSAxID8gZGlyc1swXSA6IGB7JHtkaXJzLmpvaW4oXCIsXCIpfX1gO1xufVxuXG4vKipcbiAqIOychOy5mCDsubTthYzqs6Drpqzrs4Qg6riA66GtIOu5jOuNlOulvCDrp4zrk6TslrQg67CY7ZmY7ZWp64uI64ukLlxuICogLSBhcGkocmVzdCk6IGFwaSDrlJTroInthqDrpqzsl5Ag7ZWc7KCVXG4gKiAtIHRhcmdldHMocmVzdCk6IHRhcmdldCDrlJTroInthqDrpqzrk6Tsl5Ag7ZWc7KCVICh3ZWIsIGFwcCDrk7EpXG4gKiAtIGFueXdoZXJlKHJlc3QpOiBhcGnsmYAgdGFyZ2V0IOuqqOuRkFxuICovXG5mdW5jdGlvbiBnbG9iQnVpbGRlcnMoKSB7XG4gIGNvbnN0IGFwaURpciA9IFNvbmFtdS5jb25maWcuYXBpLmRpcjtcbiAgY29uc3QgdGFyZ2V0RGlycyA9IFNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzO1xuXG4gIHJldHVybiB7XG4gICAgYXBpOiAocGF0aEZyb21BcGk6IHN0cmluZykgPT5cbiAgICAgIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gYCR7YXBpRGlyfS8ke3BhdGhGcm9tQXBpfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIHRhcmdldHM6IChwYXRoRnJvbVRhcmdldDogc3RyaW5nKSA9PlxuICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBgJHticmFjZUpvaW4odGFyZ2V0RGlycyl9LyR7cGF0aEZyb21UYXJnZXR9YCBhcyBBcHBSZWxhdGl2ZVBhdGgsXG4gICAgYW55d2hlcmU6IChwYXRoRnJvbUFueXdoZXJlOiBzdHJpbmcpID0+XG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGAke2JyYWNlSm9pbihbYXBpRGlyLCAuLi50YXJnZXREaXJzXSl9LyR7cGF0aEZyb21Bbnl3aGVyZX1gIGFzIEFwcFJlbGF0aXZlUGF0aCxcbiAgfTtcbn1cblxuLyoqXG4gKiBGaWxlVHlwZeydgCBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cOydmCDrsJjtmZgg6rCd7LK0IO2CpOyXkOyEnCDsnpDrj5kg7LaU66Gg65Cp64uI64ukLlxuICog67OE64+EIOuwsOyXtC9lbnVtIOuPmeq4sO2ZlCDrtojtlYTsmpQg4oCUIO2MqO2EtCDqt7jro7kg7ZWo7IiY6rCAIOynhOyLpOydmCDri6jsnbwg7JuQ7LKcLlxuICovXG5leHBvcnQgdHlwZSBGaWxlVHlwZSA9IGtleW9mIFJldHVyblR5cGU8dHlwZW9mIGdldENoZWNrc3VtUGF0dGVybkdyb3VwPjtcbmV4cG9ydCB0eXBlIEdsb2JQYXR0ZXJuPFQgZXh0ZW5kcyBBcHBSZWxhdGl2ZVBhdGggfCBBYnNvbHV0ZVBhdGg+ID0gUmVjb3JkPEZpbGVUeXBlLCBUPjtcblxuLyoqXG4gKiDruYzrk5wg7IKw7Lac66y8IOuUlOugie2GoOumrOuKlCBhbHRlcm5hdGlvbiDquIDroa3snbQg7J2Y64+E7LmYIOyViuqyjCDtnJjrp5DrprQg7IiYIOyeiOycvOuvgOuhnCDslYjsoITrp53snLzroZwg7KCc7Jm4LlxuICogTm9kZSDrgrTsnqUgZnMuZ2xvYuydmCBleGNsdWRlIOyYteyFmOqzvCDtlajqu5gg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgY29uc3QgR0xPQl9FWENMVURFID0gW1wiKiovbm9kZV9tb2R1bGVzLyoqXCIsIFwiKiovZGlzdC8qKlwiLCBcIioqL2J1aWxkLyoqXCIsIFwiKiovLnR1cmJvLyoqXCJdO1xuXG4vKipcbiAqIGFwcFJvb3Qg6riw7KSAIOyDgeuMgCDqsr3roZwg7Yyo7YS07J2EIOygiOuMgCDqsr3roZwg7Yyo7YS07Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBAcmV0dXJucyDsoIjrjIAg6rK966GcIOq4sOuwmCBHbG9iIO2MqO2EtCDrp7VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKTogR2xvYlBhdHRlcm48QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IGdyb3VwID0gZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXAoKTtcbiAgcmV0dXJuIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAga2V5LFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdmFsdWUpLCAvLyBhcHBSb290IOyDgeuMgCDqsr3roZwg4oaSIOygiOuMgCDqsr3roZxcbiAgICBdKSxcbiAgKSBhcyBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLFNBQWdCLDBCQUEwQjtDQUV4QyxNQUFNLEVBQUUsS0FBSyxTQUFTLGFBQWEsYUFBYTtDQUVoRCxPQUFPO0VBSUwsUUFBUSxJQUFJLHNCQUFzQjtFQUNsQyxRQUFRLElBQUksa0NBQWtDO0VBQzlDLE9BQU8sSUFBSSwrQkFBK0I7RUFDMUMsV0FBVyxJQUFJLG1DQUFtQztFQUNsRCxPQUFPLElBQUksK0JBQStCO0VBQzFDLE9BQU8sSUFBSSwrQkFBK0I7RUFDMUMsVUFBVSxJQUFJLGtDQUFrQztFQUNoRCxNQUFNLElBQUksZ0NBQWdDO0VBYzFDLHlCQUF5QixJQUFJLG1EQUFtRDtFQUNoRixXQUFXLElBQUksZ0RBQWdEO0VBQy9ELGlCQUFpQixRQUFRLDJDQUEyQztFQUNwRSxlQUFlLElBQUkscUNBQXFDO0VBQ3hELG1CQUFtQixRQUFRLG9DQUFvQztFQUMvRCxhQUFhLFNBQVMsNkJBQTZCO0VBQ25ELGFBQWEsUUFBUSw0QkFBNEI7RUFDakQsaUJBQWlCLFFBQVEsZ0NBQWdDO0VBQ3pELFlBQVksUUFBUSxnQ0FBZ0M7Q0FDdEQ7QUFDRjtBQUdBLFNBQVMsVUFBVSxNQUF5QjtDQUMxQyxPQUFPLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDMUQ7Ozs7Ozs7QUFRQSxTQUFTLGVBQWU7Q0FDdEIsTUFBTSxTQUFTLE9BQU8sT0FBTyxJQUFJO0NBQ2pDLE1BQU0sYUFBYSxPQUFPLE9BQU8sS0FBSztDQUV0QyxPQUFPO0VBQ0wsTUFBTSxnQkFDdUQsR0FBRyxPQUFPLEdBQUc7RUFDMUUsVUFBVSxtQkFDbUQsR0FBRyxVQUFVLFVBQVUsRUFBRSxHQUFHO0VBQ3pGLFdBQVcscUJBQ2tELEdBQUcsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHO0NBQ3hHO0FBQ0Y7Ozs7OztBQW9CQSxTQUFnQix3Q0FBbUU7Q0FDakYsTUFBTSxRQUFRLHdCQUF3QjtDQUN0QyxPQUFrRSxPQUFPLFlBQ3ZFLE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQzFDLEtBQ0EsS0FBSyxLQUFLLE9BQU8sYUFBYSxLQUFLLENBQ3JDLENBQUMsQ0FDSDtBQUNGOzs7YUF2SHNDO0NBd0d6QixlQUFlO0VBQUM7RUFBc0I7RUFBYztFQUFlO0NBQWMifQ==
|
|
91
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wYXR0ZXJucy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoLCB0eXBlIEFwcFJlbGF0aXZlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8qKlxuICogU3luY2Vy6rCAIOq0gOyLrCDqsIDsp4Dqs6Ag7KeA7Lyc67O064qUIO2MjOydvOuTpOyeheuLiOuLpC5cbiAqIOydtCDtjIzsnbzrk6Tsl5Ag67OA6rK97J20IOyDneq4sOuptCDstpTqsIDsoIHsnbgg7J6R7JeFKOydtO2VmCBcIuyLse2BrFwiIOuYkOuKlCBcIuyLse2BrCDslaHshZhcIinsnYQg7IiY7ZaJ7ZWp64uI64ukLlxuICog7J20IOyekeyXheydtOudvCDtlajsnYAg7YyM7J28IOuzteyCrCDrmJDripQg7YWc7ZSM66a/IOugjOuNlOungeydhCDthrXtlZwgY29kZSBnZW5lcmF0aW9u7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiDqsr3roZwg7ZiV7IudOiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICh0YXJnZXQg65SU66CJ7Yag66as66GcIOyLnOyekSwg7JiIOiBcImFwaS9zcmMvLi4uXCIsIFwid2ViL3NyYy8uLi5cIilcbiAqIOyCrOyaqTogZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgp66GcIOygiOuMgCDqsr3roZwg67OA7ZmYIO2bhCBnbG9iIOyCrOyaqVxuICpcbiAqIOuRkCDqsIDsp4Ag7J2Y66+47KCBIOyYgeyXrTpcbiAqIC0g7J6F66ClICjsgqzsmqnsnpAg7J6R7ISxKTogYXBpIOuUlOugie2GoOumrOyXkOunjCDsnITsuZguIOyCrOyaqeyekOqwgCDsp4HsoJEg7Y647KeRLlxuICogLSDstpzroKUgKHNvbmFtdSDsg53shLEv67O17IKsKTogYXBpIOuYkOuKlCB0YXJnZXQg65SU66CJ7Yag66as7JeQIHNvbmFtdeqwgCDrp4zrk6TslrTrgrTripQg7YyM7J28LlxuICpcbiAqIOy2lOyggSDrsJYg7J6Q7IKwICjrtoDtirjsiqTtirjrnqkgcGhhc2Xsl5DshJwg66ek67KIIOuztOyepSk6XG4gKiAtIHNvbmFtdS5zaGFyZWQudHM6IOyCrOyaqeyekOqwgCDsu6TsiqTthLDrp4jsnbTspojtlZjripQg7J6Q7IKwLiBJZk5vdEV4aXN0c+uhnCAx7ZqMIOyDneyEsSDtm4Qg7IaQ64yA7KeAIOyViuydjC5cbiAqIC0gZW50cnktc2VydmVyLmdlbmVyYXRlZC50c3g6IOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5wuIOunpOuyiCBvdmVyd3JpdGUgZ2VuZXJhdGUuXG4gKlxuICog7JyEIOuRmOydgCBzeW5jKCnsnZgg67aA7Yq47Iqk7Yq4656pIHBoYXNl7JeQ7IScIOuzgOqyvSDqsoDstpwg7IKs7J207YG06rO8IOustOq0gO2VmOqyjCDrs7TsnqXrkKnri4jri6QuXG4gKiDstpTsoIEg7IKs7J207YG0IOyViOyXkOyEnCDtlaAg7JWh7IWY7J20IOyXhuuKlCDsnpDsgrDsnbTrnbwg7Yyo7YS0IOq3uOujueyXkCDtj6ztlajrkJjsp4Ag7JWK7Iq164uI64ukLlxuICpcbiAqIOychOy5mCDsubTthYzqs6DrpqzripQgYXBpL3RhcmdldHMvYW55d2hlcmUg7Zes7Y2866GcIOuqheyLnOyggeycvOuhnCDtkZztmITtlanri4jri6QuXG4gKlxuICogRmlsZVR5cGXsnYAg7J20IO2VqOyImOydmCDrsJjtmZgg7YOA7J6F7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuIO2CpCDstpTqsIAg7IucIOuzhOuPhCBlbnVtL+uwsOyXtOydhFxuICog64+Z6riw7ZmU7ZWgIO2VhOyalCDsl4bsnbQg7Jes6riwIO2VnCDqtbDrjbDrp4wg7IiY7KCV7ZWY66m0IOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCkge1xuICAvLyDtl6ztjbwg7ZWo7IiY65OkIOunjOuTpOyWtOyEnCDqsIDsoLjsmLXri4jri6QuXG4gIGNvbnN0IHsgYXBpLCB0YXJnZXRzLCBhbnl3aGVyZSB9ID0gZ2xvYkJ1aWxkZXJzKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTb25hbXUg7J6F7J6l7JeQ7IScIHNvcnVjZeqwgCDrkJjripQg7YyM7J2865Ok7J6F64uI64ukLlxuICAgIC8vIOydtCDsuZzqtazrk6TsnbQg67OA6rK965CY66m0IOydtOuTpOuhnOu2gO2EsCDslaHshZjsnYQg7IiY7ZaJ7ZWY6rOgIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAgLy8g66qo64W466as7Y+s7JeQ7IScIOydtCBzb3VyY2Xrk6TsnYAgYXBpIO2UhOuhnOygne2KuOyXkCDtlZzsoJXrkJjrr4DroZwsIGFwaeyXkCDsnojripQg7Lmc6rWs65Ok66eMIOumrOyKpO2Mhe2VqeuLiOuLpC5cbiAgICBjb25maWc6IGFwaShcInNyYy9zb25hbXUuY29uZmlnLnRzXCIpLFxuICAgIGVudGl0eTogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIiksXG4gICAgZnJhbWU6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmZyYW1lLnRzXCIpLFxuICAgIGZ1bmN0aW9uczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZnVuY3Rpb25zLnRzXCIpLFxuICAgIG1vZGVsOiBhcGkoXCJzcmMvYXBwbGljYXRpb24vKiovKi5tb2RlbC50c1wiKSxcbiAgICB0eXBlczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIiksXG4gICAgd29ya2Zsb3c6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICAgIGkxOG46IGFwaShcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiKSxcblxuICAgIC8vIFNvbmFtdeqwgCDstpzroKXtlZjripQg7IOd7ISxIO2MjOydvOuTpOyeheuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok64+EIOygle2VqeyEsSDqsoDspp0g7LCo7JuQ7JeQ7IScIHNvbmFtdS5sb2Nr7JeQIOq4sOuhne2VtOyVvCDtlZjqs6AsXG4gICAgLy8g65iQ7ZWcIOuzgOqyveyLnCDqt7gg7IKs7Iuk7J2EIHN5bmNlcuqwgCDslYzquLDripQg7ZW07JW8IO2VqeuLiOuLpCjruYTroZ0g67OE64uk66W4IOyymOumrOqwgCDsl4bripQg6rK97Jqw64+EIOyeiOyngOunjCkuXG4gICAgLy9cbiAgICAvLyDsnpDsgrAg67O47ISx7JeQIOuUsOudvCDsnITsuZgg7Lm07YWM6rOg66as6rCAIOuLpOultOq4sCDrlYzrrLjsl5AsIOuzuOyEseuzhOuhnCDrtoTrpqztlbTshJwg7ZGc6riw7ZWp64uI64ukLlxuICAgIC8vIC0g7JaR7Kq9Le2VhOyalCDsnpDsgrA6IGFwaeyXkCDsoJXrs7jsnbQg66eM65Ok7Ja07KeEIOuSpCB0YXJnZXTsl5Ag67O17IKs65CoIChzb25hbXUuZ2VuZXJhdGVkLnt0cyx0c3h9KS5cbiAgICAvLyAtIGFwaSDsoITsmqkg7J6Q7IKwOiBhcGnsl5Drp4wg66eM65Ok7Ja07KeQIChzb25hbXUuZ2VuZXJhdGVkLmh0dHAsIHF1ZXJpZXMuZ2VuZXJhdGVkLnRzKS5cbiAgICAvLyAtIHRhcmdldCDsoITsmqkg7J6Q7IKwOiB0YXJnZXTsl5Drp4wg66eM65Ok7Ja07KeQIChzZXJ2aWNlcy5nZW5lcmF0ZWQudHPripQgc2VydmljZXMudGVtcGxhdGXsnZggOnRhcmdldCDrtoTrsLApLlxuICAgIC8vXG4gICAgLy8g7Jes6riw7JeQ64qUIFNvbmFtdeydmCDrqqjrk6Agc3luYyDsgrDstpzrrLzsnbQg7J6I64qUIOqyg+ydgCDslYTri5nri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+yZgCBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOyZgCDqsJnsnYBcbiAgICAvLyBzeW5jIOy0iOuwmCAx7ZqM7ISxIOu2gO2KuOyKpO2KuOueqSDtjIzsnbzrk6TsnYAg6rSA66asIOyViCDtlZjquLAg65WM66y47JeQIOyXrOq4sOyXkCDrpqzsiqTtjIXrj4Qg7JWIIO2VqeuLiOuLpC5cbiAgICBodHRwVmFsaWRhdG9yc0dlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC50c1wiKSxcbiAgICBnZW5lcmF0ZWQ6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC57dHMsdHN4LHNzby50c31cIiksXG4gICAgZ2VuZXJhdGVkQ29waWVkOiB0YXJnZXRzKFwic3JjL3NlcnZpY2VzLyoqL3NvbmFtdS5nZW5lcmF0ZWQue3RzLHRzeH1cIiksXG4gICAgaHR0cEdlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLmh0dHBcIiksXG4gICAgc2VydmljZXNHZW5lcmF0ZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkLnRzXCIpLFxuICAgIHNkR2VuZXJhdGVkOiBhbnl3aGVyZShcInNyYy9pMThuLyoqL3NkLmdlbmVyYXRlZC50c1wiKSxcbiAgICB0eXBlc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLnR5cGVzLnRzXCIpLFxuICAgIGZ1bmN0aW9uc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLmZ1bmN0aW9ucy50c1wiKSxcbiAgICBpMThuQ29waWVkOiB0YXJnZXRzKFwic3JjL2kxOG4vKiovIShzZC5nZW5lcmF0ZWQpLnRzXCIpLFxuICB9IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBBcHBSZWxhdGl2ZVBhdGg+O1xufVxuXG4vLyBOb2RlIOuCtOyepSBmcy5nbG9i7J2YIGJyYWNlIGV4cGFuc2lvbuydgCDri6jsnbwg66mk67KEIHt4feulvCDtkoDsp4Ag7JWK7Jy866+A66GcLCDrqaTrsoTqsIAgMeqwnOydvCDrlYzripQgYWx0ZXJuYXRpb24g7JeG7J20IOyngeygkSDqsrDtlantlanri4jri6QuXG5mdW5jdGlvbiBicmFjZUpvaW4oZGlyczogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgcmV0dXJuIGRpcnMubGVuZ3RoID09PSAxID8gZGlyc1swXSA6IGB7JHtkaXJzLmpvaW4oXCIsXCIpfX1gO1xufVxuXG4vKipcbiAqIOychOy5mCDsubTthYzqs6Drpqzrs4Qg6riA66GtIOu5jOuNlOulvCDrp4zrk6TslrQg67CY7ZmY7ZWp64uI64ukLlxuICogLSBhcGkocmVzdCk6IGFwaSDrlJTroInthqDrpqzsl5Ag7ZWc7KCVXG4gKiAtIHRhcmdldHMocmVzdCk6IHRhcmdldCDrlJTroInthqDrpqzrk6Tsl5Ag7ZWc7KCVICh3ZWIsIGFwcCDrk7EpXG4gKiAtIGFueXdoZXJlKHJlc3QpOiBhcGnsmYAgdGFyZ2V0IOuqqOuRkFxuICovXG5mdW5jdGlvbiBnbG9iQnVpbGRlcnMoKSB7XG4gIGNvbnN0IGFwaURpciA9IFNvbmFtdS5jb25maWcuYXBpLmRpcjtcbiAgY29uc3QgdGFyZ2V0RGlycyA9IFNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzO1xuXG4gIHJldHVybiB7XG4gICAgYXBpOiAocGF0aEZyb21BcGk6IHN0cmluZykgPT5cbiAgICAgIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gYCR7YXBpRGlyfS8ke3BhdGhGcm9tQXBpfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIHRhcmdldHM6IChwYXRoRnJvbVRhcmdldDogc3RyaW5nKSA9PlxuICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBgJHticmFjZUpvaW4odGFyZ2V0RGlycyl9LyR7cGF0aEZyb21UYXJnZXR9YCBhcyBBcHBSZWxhdGl2ZVBhdGgsXG4gICAgYW55d2hlcmU6IChwYXRoRnJvbUFueXdoZXJlOiBzdHJpbmcpID0+XG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGAke2JyYWNlSm9pbihbYXBpRGlyLCAuLi50YXJnZXREaXJzXSl9LyR7cGF0aEZyb21Bbnl3aGVyZX1gIGFzIEFwcFJlbGF0aXZlUGF0aCxcbiAgfTtcbn1cblxuLyoqXG4gKiBGaWxlVHlwZeydgCBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cOydmCDrsJjtmZgg6rCd7LK0IO2CpOyXkOyEnCDsnpDrj5kg7LaU66Gg65Cp64uI64ukLlxuICog67OE64+EIOuwsOyXtC9lbnVtIOuPmeq4sO2ZlCDrtojtlYTsmpQg4oCUIO2MqO2EtCDqt7jro7kg7ZWo7IiY6rCAIOynhOyLpOydmCDri6jsnbwg7JuQ7LKcLlxuICovXG5leHBvcnQgdHlwZSBGaWxlVHlwZSA9IGtleW9mIFJldHVyblR5cGU8dHlwZW9mIGdldENoZWNrc3VtUGF0dGVybkdyb3VwPjtcbmV4cG9ydCB0eXBlIEdsb2JQYXR0ZXJuPFQgZXh0ZW5kcyBBcHBSZWxhdGl2ZVBhdGggfCBBYnNvbHV0ZVBhdGg+ID0gUmVjb3JkPEZpbGVUeXBlLCBUPjtcblxuLyoqXG4gKiDruYzrk5wg7IKw7Lac66y8IOuUlOugie2GoOumrOuKlCBhbHRlcm5hdGlvbiDquIDroa3snbQg7J2Y64+E7LmYIOyViuqyjCDtnJjrp5DrprQg7IiYIOyeiOycvOuvgOuhnCDslYjsoITrp53snLzroZwg7KCc7Jm4LlxuICogTm9kZSDrgrTsnqUgZnMuZ2xvYuydmCBleGNsdWRlIOyYteyFmOqzvCDtlajqu5gg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgY29uc3QgR0xPQl9FWENMVURFID0gW1wiKiovbm9kZV9tb2R1bGVzLyoqXCIsIFwiKiovZGlzdC8qKlwiLCBcIioqL2J1aWxkLyoqXCIsIFwiKiovLnR1cmJvLyoqXCJdO1xuXG4vKipcbiAqIGFwcFJvb3Qg6riw7KSAIOyDgeuMgCDqsr3roZwg7Yyo7YS07J2EIOygiOuMgCDqsr3roZwg7Yyo7YS07Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBAcmV0dXJucyDsoIjrjIAg6rK966GcIOq4sOuwmCBHbG9iIO2MqO2EtCDrp7VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKTogR2xvYlBhdHRlcm48QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IGdyb3VwID0gZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXAoKTtcbiAgcmV0dXJuIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAga2V5LFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdmFsdWUpLCAvLyBhcHBSb290IOyDgeuMgCDqsr3roZwg4oaSIOygiOuMgCDqsr3roZxcbiAgICBdKSxcbiAgKSBhcyBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLFNBQWdCLDBCQUEwQjtDQUV4QyxNQUFNLEVBQUUsS0FBSyxTQUFTLGFBQWEsYUFBYTtDQUVoRCxPQUFPO0VBSUwsUUFBUSxJQUFJLHNCQUFzQjtFQUNsQyxRQUFRLElBQUksa0NBQWtDO0VBQzlDLE9BQU8sSUFBSSwrQkFBK0I7RUFDMUMsV0FBVyxJQUFJLG1DQUFtQztFQUNsRCxPQUFPLElBQUksK0JBQStCO0VBQzFDLE9BQU8sSUFBSSwrQkFBK0I7RUFDMUMsVUFBVSxJQUFJLGtDQUFrQztFQUNoRCxNQUFNLElBQUksZ0NBQWdDO0VBYzFDLHlCQUF5QixJQUFJLG1EQUFtRDtFQUNoRixXQUFXLElBQUksZ0RBQWdEO0VBQy9ELGlCQUFpQixRQUFRLDJDQUEyQztFQUNwRSxlQUFlLElBQUkscUNBQXFDO0VBQ3hELG1CQUFtQixRQUFRLG9DQUFvQztFQUMvRCxhQUFhLFNBQVMsNkJBQTZCO0VBQ25ELGFBQWEsUUFBUSw0QkFBNEI7RUFDakQsaUJBQWlCLFFBQVEsZ0NBQWdDO0VBQ3pELFlBQVksUUFBUSxnQ0FBZ0M7Q0FDdEQ7QUFDRjtBQUdBLFNBQVMsVUFBVSxNQUF5QjtDQUMxQyxPQUFPLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDMUQ7Ozs7Ozs7QUFRQSxTQUFTLGVBQWU7Q0FDdEIsTUFBTSxTQUFTLE9BQU8sT0FBTyxJQUFJO0NBQ2pDLE1BQU0sYUFBYSxPQUFPLE9BQU8sS0FBSztDQUV0QyxPQUFPO0VBQ0wsTUFBTSxnQkFDdUQsR0FBRyxPQUFPLEdBQUc7RUFDMUUsVUFBVSxtQkFDbUQsR0FBRyxVQUFVLFVBQVUsRUFBRSxHQUFHO0VBQ3pGLFdBQVcscUJBQ2tELEdBQUcsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHO0NBQ3hHO0FBQ0Y7Ozs7OztBQW9CQSxTQUFnQix3Q0FBbUU7Q0FDakYsTUFBTSxRQUFRLHdCQUF3QjtDQUN0QyxPQUFrRSxPQUFPLFlBQ3ZFLE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQzFDLEtBQ0EsS0FBSyxLQUFLLE9BQU8sYUFBYSxLQUFLLENBQ3JDLENBQUMsQ0FDSDtBQUNGOzs7Q0F2SHNDLFlBQUE7Q0F3R3pCLGVBQWU7RUFBQztFQUFzQjtFQUFjO0VBQWU7Q0FBYyJ9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { init_filesystem_dependencies, syncerFilesystem } from "./filesystem-dependencies.js";
|
|
3
|
-
|
|
3
|
+
// src/syncer/file-tracking.ts
|
|
4
4
|
/**
|
|
5
5
|
* 우리가 디스크에 write한 path를 등록합니다. write 직후 호출하세요.
|
|
6
6
|
* 디스크에서 mtime을 직접 읽어 정확한 값으로 등록합니다.
|
|
@@ -23,8 +23,7 @@ var init_file_tracking = __esmMin((() => {
|
|
|
23
23
|
init_filesystem_dependencies();
|
|
24
24
|
fileWrittenAt = /* @__PURE__ */ new Map();
|
|
25
25
|
}));
|
|
26
|
-
//#endregion
|
|
27
26
|
init_file_tracking();
|
|
28
27
|
export { fileWrittenAt, init_file_tracking, isLastChangedByMe, trackWritten };
|
|
29
28
|
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10cmFja2luZy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtdHJhY2tpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgc3luY2VyRmlsZXN5c3RlbSB9IGZyb20gXCIuL2ZpbGVzeXN0ZW0tZGVwZW5kZW5jaWVzXCI7XG5cbmV4cG9ydCBjb25zdCBmaWxlV3JpdHRlbkF0ID0gbmV3IE1hcDxBYnNvbHV0ZVBhdGgsIG51bWJlcj4oKTtcblxuLyoqXG4gKiDsmrDrpqzqsIAg65SU7Iqk7YGs7JeQIHdyaXRl7ZWcIHBhdGjrpbwg65Ox66Gd7ZWp64uI64ukLiB3cml0ZSDsp4Htm4Qg7Zi47Lac7ZWY7IS47JqULlxuICog65SU7Iqk7YGs7JeQ7IScIG10aW1l7J2EIOyngeygkSDsnb3slrQg7KCV7ZmV7ZWcIOqwkuycvOuhnCDrk7HroZ3tlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFja1dyaXR0ZW4oZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0uc3RhdChmaWxlUGF0aCk7XG4gIGZpbGVXcml0dGVuQXQuc2V0KGZpbGVQYXRoLCBmaWxlU3RhdC5tdGltZU1zKTtcbn1cblxuLyoqXG4gKiDso7zslrTsp4QgcGF0aOqwgCDqsIDsnqUg7LWc6re8IOyasOumrCB3cml0ZSDsnbTtm4TroZwg7Jm467aA7JeQ7IScIOyImOygleuQnCDsoIEg7JeG64qU7KeAIO2ZleyduO2VqeuLiOuLpC5cbiAqIHRydWXrqbQgXCLrgrTqsIAg7JO0IOq3uOuMgOuhnCDrgqjslYTsnojsnYxcIiwgZmFsc2XrqbQgXCLsmbjrtoDsl5DshJwg7IiY7KCV65CQ6rGw64KYIOyasOumrOqwgCDsk7Qg7KCBIOyXhuydjFwiLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNMYXN0Q2hhbmdlZEJ5TWUoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByZWdpc3RlcmVkID0gZmlsZVdyaXR0ZW5BdC5nZXQoZmlsZVBhdGgpO1xuICBpZiAocmVnaXN0ZXJlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGZpbGVTdGF0ID0gYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5zdGF0KGZpbGVQYXRoKTtcbiAgcmV0dXJuIGZpbGVTdGF0Lm10aW1lTXMgPD0gcmVnaXN0ZXJlZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVNBLGVBQXNCLGFBQWEsVUFBdUM7Q0FDeEUsTUFBTSxXQUFXLE1BQU0saUJBQWlCLEtBQUssUUFBUTtDQUNyRCxjQUFjLElBQUksVUFBVSxTQUFTLE9BQU87QUFDOUM7Ozs7O0FBTUEsZUFBc0Isa0JBQWtCLFVBQTBDO0NBQ2hGLE1BQU0sYUFBYSxjQUFjLElBQUksUUFBUTtDQUM3QyxJQUFJLGVBQWUsUUFDakIsT0FBTztDQUdULFFBQU8sTUFEZ0IsaUJBQWlCLEtBQUssUUFBUSxFQUM5QyxDQUFTLFdBQVc7QUFDN0I7OztDQXhCNEQsNkJBQUE7Q0FFL0MsZ0NBQWdCLElBQUksSUFBMEIifQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { access, mkdir, readFile, rm, stat, unlink, writeFile } from "node:fs/promises";
|
|
3
3
|
import { constants } from "node:fs";
|
|
4
|
-
|
|
4
|
+
// src/syncer/filesystem-dependencies.ts
|
|
5
5
|
async function syncerFileExists(path) {
|
|
6
6
|
try {
|
|
7
7
|
await syncerFilesystem.access(path, constants.F_OK);
|
|
@@ -46,7 +46,6 @@ var init_filesystem_dependencies = __esmMin((() => {
|
|
|
46
46
|
};
|
|
47
47
|
syncerFilesystem = { ...defaults };
|
|
48
48
|
}));
|
|
49
|
-
//#endregion
|
|
50
49
|
init_filesystem_dependencies();
|
|
51
50
|
export { configureSyncerFilesystem, init_filesystem_dependencies, syncerFileExists, syncerFilesystem };
|
|
52
51
|
|
package/dist/syncer/index.js
CHANGED
|
@@ -5,7 +5,14 @@ import { generateTemplate, init_code_generator, renderTemplate } from "./code-ge
|
|
|
5
5
|
import { createEntity, delEntity, init_entity_operations } from "./entity-operations.js";
|
|
6
6
|
import { init_module_loader, loadApis, loadModels, loadTypes, loadWorkflows } from "./module-loader.js";
|
|
7
7
|
import { Syncer, init_syncer } from "./syncer.js";
|
|
8
|
-
|
|
8
|
+
// src/syncer/index.ts
|
|
9
|
+
init_api_parser();
|
|
10
|
+
init_file_patterns();
|
|
11
|
+
init_checksum();
|
|
12
|
+
init_code_generator();
|
|
13
|
+
init_entity_operations();
|
|
14
|
+
init_module_loader();
|
|
15
|
+
init_syncer();
|
|
9
16
|
init_api_parser();
|
|
10
17
|
init_checksum();
|
|
11
18
|
init_code_generator();
|
|
@@ -13,7 +20,6 @@ init_entity_operations();
|
|
|
13
20
|
init_file_patterns();
|
|
14
21
|
init_module_loader();
|
|
15
22
|
init_syncer();
|
|
16
|
-
//#endregion
|
|
17
23
|
export { GLOB_EXCLUDE, Syncer, createEntity, delEntity, findChangedFilesUsingChecksums, generateTemplate, getChecksumPatternGroup, getChecksumPatternGroupInAbsolutePath, loadApis, loadModels, loadTypes, loadWorkflows, readApisFromFile, renderTemplate, renewChecksums };
|
|
18
24
|
|
|
19
25
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hcGktcGFyc2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jaGVja3N1bVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29kZS1nZW5lcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VudGl0eS1vcGVyYXRpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9maWxlLXBhdHRlcm5zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2R1bGUtbG9hZGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zeW5jZXJcIjtcbiJdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -7,14 +7,15 @@ import { init_path_utils, runtimePath } from "../utils/path-utils.js";
|
|
|
7
7
|
import { init_api_parser, readApisFromFile } from "./api-parser.js";
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
import path from "path";
|
|
10
|
-
|
|
10
|
+
// src/syncer/module-loader.ts
|
|
11
11
|
/**
|
|
12
12
|
* *.model.ts와 *.frame.ts 파일들에서 API 메소드를 파싱하여 로드합니다.
|
|
13
13
|
* registeredApis에 API가 등록되어 있어야 하기 때문에, *.model.ts 파일들을 먼저 import해야 합니다.
|
|
14
14
|
* 따라서 loadModels()를 먼저 호출해야 합니다.
|
|
15
15
|
*/
|
|
16
16
|
async function loadApis() {
|
|
17
|
-
const
|
|
17
|
+
const modelPathsPattern = path.join(Sonamu.apiRootPath, "src/application/**/*.{model,frame}.ts");
|
|
18
|
+
const modelPaths = await globAsync(modelPathsPattern);
|
|
18
19
|
const apis = [];
|
|
19
20
|
for (const filePath of modelPaths) {
|
|
20
21
|
const parsedApis = await readApisFromFile(filePath);
|
|
@@ -27,7 +28,8 @@ async function loadApis() {
|
|
|
27
28
|
* *.model.ts와 *.frame.ts 파일들에서 Model/Frame 클래스 인스턴스를 로드합니다.
|
|
28
29
|
*/
|
|
29
30
|
async function loadModels() {
|
|
30
|
-
const
|
|
31
|
+
const modelPathsPattern = path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.{model,frame}.ts"));
|
|
32
|
+
const modelPaths = await globAsync(modelPathsPattern);
|
|
31
33
|
const models = {};
|
|
32
34
|
for (const filePath of modelPaths) {
|
|
33
35
|
const importedMembers = await importMembers(filePath);
|
|
@@ -52,7 +54,8 @@ async function loadTypes() {
|
|
|
52
54
|
* *.workflow.ts 파일들에서 Workflow 메타데이터를 로드합니다.
|
|
53
55
|
*/
|
|
54
56
|
async function loadWorkflows() {
|
|
55
|
-
const
|
|
57
|
+
const workflowPathsPattern = path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.workflow.ts"));
|
|
58
|
+
const workflowPaths = await globAsync(workflowPathsPattern);
|
|
56
59
|
const workflows = /* @__PURE__ */ new Map();
|
|
57
60
|
for (const filePath of workflowPaths) {
|
|
58
61
|
const importedMembers = await importMembers(filePath);
|
|
@@ -72,8 +75,7 @@ var init_module_loader = __esmMin((() => {
|
|
|
72
75
|
init_runtime_value();
|
|
73
76
|
init_api_parser();
|
|
74
77
|
}));
|
|
75
|
-
//#endregion
|
|
76
78
|
init_module_loader();
|
|
77
79
|
export { init_module_loader, loadApis, loadModels, loadTypes, loadWorkflows };
|
|
78
80
|
|
|
79
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWxvYWRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL21vZHVsZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuLi9hcGkvYmFzZS1mcmFtZVwiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQmFzZU1vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSBcIi4uL3Rhc2tzL2RlY29yYXRvclwiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvblZhbHVlLCBpc09iamVjdFZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcbmltcG9ydCB7IHJlYWRBcGlzRnJvbUZpbGUgfSBmcm9tIFwiLi9hcGktcGFyc2VyXCI7XG5cbmV4cG9ydCB0eXBlIExvYWRlZEFwaXMgPSBFeHRlbmRlZEFwaVtdO1xuXG5leHBvcnQgdHlwZSBMb2FkZWRUeXBlcyA9IHsgW3R5cGVOYW1lOiBzdHJpbmddOiB6LlpvZFR5cGUgfTtcblxuZXhwb3J0IHR5cGUgTG9hZGVkTW9kZWxzID0ge1xuICBbbW9kZWxOYW1lOiBzdHJpbmddOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzO1xufTtcblxuLyoqXG4gKiAqLm1vZGVsLnRz7JmAICouZnJhbWUudHMg7YyM7J2865Ok7JeQ7IScIEFQSSDrqZTshozrk5zrpbwg7YyM7Iux7ZWY7JesIOuhnOuTnO2VqeuLiOuLpC5cbiAqIHJlZ2lzdGVyZWRBcGlz7JeQIEFQSeqwgCDrk7HroZ3rkJjslrQg7J6I7Ja07JW8IO2VmOq4sCDrlYzrrLjsl5AsICoubW9kZWwudHMg7YyM7J2865Ok7J2EIOuovOyggCBpbXBvcnTtlbTslbwg7ZWp64uI64ukLlxuICog65Sw65287IScIGxvYWRNb2RlbHMoKeulvCDrqLzsoIAg7Zi47Lac7ZW07JW8IO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRBcGlzKCk6IFByb21pc2U8TG9hZGVkQXBpcz4ge1xuICAvLyDslpjripQg7Yq57J207ZWY6rKM64+EIO2ZmOqyveyXkCDrlLDrnbwgLnRz64KYIC5qc+ulvCBpbXBvcnTtlZjripQg6rK97Jqw6rCAIOyVhOuLiOqzoCxcbiAgLy8g7YOA7J6F7J20IOyCtOyVhOyeiOuKlCAudHMg7IaM7IqkIOy9lOuTnOunjOydhCDsnb3slrTslbwg7ZWp64uI64ukLlxuICAvLyDsnbTqsoPsnYAgZGV27ISc67KEKGhvdCByZWxvYWQp6rCAIOyVhOuLjCBwcm9kdWN0aW9uIO2ZmOqyveyXkOyEnOuPhCDrj5nsnbztlanri4jri6QuXG4gIC8vIOuqqOuNuOuTpOydmCAudHMg7YyM7J287J20IOyeiOyWtOyVvCDsnbTrpbwg7J297Ja07IScIOudvOyasO2KuOulvCDrk7HroZ3tlaAg7IiYIOyeiOyWtOyalCFcbiAgY29uc3QgbW9kZWxQYXRoc1BhdHRlcm4gPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIFwic3JjL2FwcGxpY2F0aW9uLyoqLyoue21vZGVsLGZyYW1lfS50c1wiLCAvLyAhISBydW50aW1lUGF0aCDslYgg7JSAIOyjvOydmCAhIVxuICApO1xuICBjb25zdCBtb2RlbFBhdGhzID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChhd2FpdCBnbG9iQXN5bmMoXG4gICAgICBtb2RlbFBhdGhzUGF0dGVybixcbiAgICApKSBhcyBBYnNvbHV0ZVBhdGhbXTtcblxuICBjb25zdCBhcGlzOiBMb2FkZWRBcGlzID0gW107XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgbW9kZWxQYXRocykge1xuICAgIGNvbnN0IHBhcnNlZEFwaXMgPSBhd2FpdCByZWFkQXBpc0Zyb21GaWxlKGZpbGVQYXRoKTtcbiAgICBhcGlzLnB1c2goLi4ucGFyc2VkQXBpcyk7XG4gIH1cbiAgLy8gY29uc29sZS5sb2coXG4gIC8vICAgY2hhbGsuZ3JheShgW0xvYWRpbmddIExvYWRlZCBBUElzIGZyb20gXCIqLm1vZGVsLnRzXCIgZmlsZXM6ICR7Y291bnR9IGZpbGVzLmApXG4gIC8vICk7XG5cbiAgZm9yIChjb25zdCBhcGkgb2YgYXBpcykge1xuICAgIGlmIChhcGkucGF0aCA9PT0gXCJcIikge1xuICAgICAgLy8gYXBp7J2YIOqyveuhnChwYXRoKeqwgCBcIu2FhSDruYTslrTsnojsnYxcIuyduCDsg4Htg5zsnoXri4jri6QuXG4gICAgICAvLyDsnbTripQgQGFwaeyZgCDtlajqu5gg7IKs7Jqp7ZW07JW8IO2VmOuKlCDrjbDsvZTroIjsnbTthLDqsIAgQGFwaSDsl4bsnbQg67aZ7J2AIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFQSSAke2FwaS5tb2RlbE5hbWV9LiR7YXBpLm1ldGhvZE5hbWV9IGhhcyBubyBwYXRoLiBQbGVhc2UgYXR0YWNoIEBhcGkgZGVjb3JhdG9yIHRvIHRoZSBtZXRob2QuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFwaXM7XG59XG5cbi8qKlxuICogKi5tb2RlbC50c+yZgCAqLmZyYW1lLnRzIO2MjOydvOuTpOyXkOyEnCBNb2RlbC9GcmFtZSDtgbTrnpjsiqQg7J247Iqk7YS07Iqk66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNb2RlbHMoKTogUHJvbWlzZTxMb2FkZWRNb2RlbHM+IHtcbiAgY29uc3QgbW9kZWxQYXRoc1BhdHRlcm4gPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoue21vZGVsLGZyYW1lfS50c1wiKSxcbiAgKTtcbiAgY29uc3QgbW9kZWxQYXRocyA9IGF3YWl0IGdsb2JBc3luYyhtb2RlbFBhdGhzUGF0dGVybik7XG5cbiAgY29uc3QgbW9kZWxzOiBMb2FkZWRNb2RlbHMgPSB7fTtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiBtb2RlbFBhdGhzKSB7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVyczxCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzPihmaWxlUGF0aCk7XG5cbiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBpbXBvcnRlZE1lbWJlcnMpIHtcbiAgICAgIGlmIChuYW1lLmVuZHNXaXRoKFwiTW9kZWxcIikgfHwgbmFtZS5lbmRzV2l0aChcIkZyYW1lXCIpKSB7XG4gICAgICAgIG1vZGVsc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb2RlbHM7XG59XG5cbi8qKlxuICogKi50eXBlcy50c+yZgCAqLmdlbmVyYXRlZC50cyDtjIzsnbzrk6Tsl5DshJwgWm9kIOyKpO2CpOuniOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkVHlwZXMoKTogUHJvbWlzZTxMb2FkZWRUeXBlcz4ge1xuICBjb25zdCB0eXBlUGF0aHNQYXR0ZXJucyA9IFtcbiAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnR5cGVzLnRzXCIpKSxcbiAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC50c1wiKSksXG4gIF07XG4gIGNvbnN0IHR5cGVQYXRocyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0eXBlUGF0aHNQYXR0ZXJucy5tYXAoKHBhdHRlcm4pID0+IGdsb2JBc3luYyhwYXR0ZXJuKSkpXG4gICkuZmxhdCgpO1xuXG4gIGNvbnN0IHR5cGVzOiBMb2FkZWRUeXBlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHR5cGVQYXRocykge1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8ei5ab2RUeXBlPihmaWxlUGF0aCk7XG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgdHlwZXNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHlwZXM7XG59XG5cbi8qKlxuICogKi53b3JrZmxvdy50cyDtjIzsnbzrk6Tsl5DshJwgV29ya2Zsb3cg66mU7YOA642w7J207YSw66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXb3JrZmxvd3MoKSB7XG4gIGNvbnN0IHdvcmtmbG93UGF0aHNQYXR0ZXJuID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICApO1xuICBjb25zdCB3b3JrZmxvd1BhdGhzID0gYXdhaXQgZ2xvYkFzeW5jKHdvcmtmbG93UGF0aHNQYXR0ZXJuKTtcbiAgY29uc3Qgd29ya2Zsb3dzOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+
|
|
81
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWxvYWRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL21vZHVsZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuLi9hcGkvYmFzZS1mcmFtZVwiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQmFzZU1vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSBcIi4uL3Rhc2tzL2RlY29yYXRvclwiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvblZhbHVlLCBpc09iamVjdFZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcbmltcG9ydCB7IHJlYWRBcGlzRnJvbUZpbGUgfSBmcm9tIFwiLi9hcGktcGFyc2VyXCI7XG5cbmV4cG9ydCB0eXBlIExvYWRlZEFwaXMgPSBFeHRlbmRlZEFwaVtdO1xuXG5leHBvcnQgdHlwZSBMb2FkZWRUeXBlcyA9IHsgW3R5cGVOYW1lOiBzdHJpbmddOiB6LlpvZFR5cGUgfTtcblxuZXhwb3J0IHR5cGUgTG9hZGVkTW9kZWxzID0ge1xuICBbbW9kZWxOYW1lOiBzdHJpbmddOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzO1xufTtcblxuLyoqXG4gKiAqLm1vZGVsLnRz7JmAICouZnJhbWUudHMg7YyM7J2865Ok7JeQ7IScIEFQSSDrqZTshozrk5zrpbwg7YyM7Iux7ZWY7JesIOuhnOuTnO2VqeuLiOuLpC5cbiAqIHJlZ2lzdGVyZWRBcGlz7JeQIEFQSeqwgCDrk7HroZ3rkJjslrQg7J6I7Ja07JW8IO2VmOq4sCDrlYzrrLjsl5AsICoubW9kZWwudHMg7YyM7J2865Ok7J2EIOuovOyggCBpbXBvcnTtlbTslbwg7ZWp64uI64ukLlxuICog65Sw65287IScIGxvYWRNb2RlbHMoKeulvCDrqLzsoIAg7Zi47Lac7ZW07JW8IO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRBcGlzKCk6IFByb21pc2U8TG9hZGVkQXBpcz4ge1xuICAvLyDslpjripQg7Yq57J207ZWY6rKM64+EIO2ZmOqyveyXkCDrlLDrnbwgLnRz64KYIC5qc+ulvCBpbXBvcnTtlZjripQg6rK97Jqw6rCAIOyVhOuLiOqzoCxcbiAgLy8g7YOA7J6F7J20IOyCtOyVhOyeiOuKlCAudHMg7IaM7IqkIOy9lOuTnOunjOydhCDsnb3slrTslbwg7ZWp64uI64ukLlxuICAvLyDsnbTqsoPsnYAgZGV27ISc67KEKGhvdCByZWxvYWQp6rCAIOyVhOuLjCBwcm9kdWN0aW9uIO2ZmOqyveyXkOyEnOuPhCDrj5nsnbztlanri4jri6QuXG4gIC8vIOuqqOuNuOuTpOydmCAudHMg7YyM7J287J20IOyeiOyWtOyVvCDsnbTrpbwg7J297Ja07IScIOudvOyasO2KuOulvCDrk7HroZ3tlaAg7IiYIOyeiOyWtOyalCFcbiAgY29uc3QgbW9kZWxQYXRoc1BhdHRlcm4gPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIFwic3JjL2FwcGxpY2F0aW9uLyoqLyoue21vZGVsLGZyYW1lfS50c1wiLCAvLyAhISBydW50aW1lUGF0aCDslYgg7JSAIOyjvOydmCAhIVxuICApO1xuICBjb25zdCBtb2RlbFBhdGhzID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChhd2FpdCBnbG9iQXN5bmMoXG4gICAgICBtb2RlbFBhdGhzUGF0dGVybixcbiAgICApKSBhcyBBYnNvbHV0ZVBhdGhbXTtcblxuICBjb25zdCBhcGlzOiBMb2FkZWRBcGlzID0gW107XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgbW9kZWxQYXRocykge1xuICAgIGNvbnN0IHBhcnNlZEFwaXMgPSBhd2FpdCByZWFkQXBpc0Zyb21GaWxlKGZpbGVQYXRoKTtcbiAgICBhcGlzLnB1c2goLi4ucGFyc2VkQXBpcyk7XG4gIH1cbiAgLy8gY29uc29sZS5sb2coXG4gIC8vICAgY2hhbGsuZ3JheShgW0xvYWRpbmddIExvYWRlZCBBUElzIGZyb20gXCIqLm1vZGVsLnRzXCIgZmlsZXM6ICR7Y291bnR9IGZpbGVzLmApXG4gIC8vICk7XG5cbiAgZm9yIChjb25zdCBhcGkgb2YgYXBpcykge1xuICAgIGlmIChhcGkucGF0aCA9PT0gXCJcIikge1xuICAgICAgLy8gYXBp7J2YIOqyveuhnChwYXRoKeqwgCBcIu2FhSDruYTslrTsnojsnYxcIuyduCDsg4Htg5zsnoXri4jri6QuXG4gICAgICAvLyDsnbTripQgQGFwaeyZgCDtlajqu5gg7IKs7Jqp7ZW07JW8IO2VmOuKlCDrjbDsvZTroIjsnbTthLDqsIAgQGFwaSDsl4bsnbQg67aZ7J2AIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFQSSAke2FwaS5tb2RlbE5hbWV9LiR7YXBpLm1ldGhvZE5hbWV9IGhhcyBubyBwYXRoLiBQbGVhc2UgYXR0YWNoIEBhcGkgZGVjb3JhdG9yIHRvIHRoZSBtZXRob2QuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFwaXM7XG59XG5cbi8qKlxuICogKi5tb2RlbC50c+yZgCAqLmZyYW1lLnRzIO2MjOydvOuTpOyXkOyEnCBNb2RlbC9GcmFtZSDtgbTrnpjsiqQg7J247Iqk7YS07Iqk66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNb2RlbHMoKTogUHJvbWlzZTxMb2FkZWRNb2RlbHM+IHtcbiAgY29uc3QgbW9kZWxQYXRoc1BhdHRlcm4gPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoue21vZGVsLGZyYW1lfS50c1wiKSxcbiAgKTtcbiAgY29uc3QgbW9kZWxQYXRocyA9IGF3YWl0IGdsb2JBc3luYyhtb2RlbFBhdGhzUGF0dGVybik7XG5cbiAgY29uc3QgbW9kZWxzOiBMb2FkZWRNb2RlbHMgPSB7fTtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiBtb2RlbFBhdGhzKSB7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVyczxCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzPihmaWxlUGF0aCk7XG5cbiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBpbXBvcnRlZE1lbWJlcnMpIHtcbiAgICAgIGlmIChuYW1lLmVuZHNXaXRoKFwiTW9kZWxcIikgfHwgbmFtZS5lbmRzV2l0aChcIkZyYW1lXCIpKSB7XG4gICAgICAgIG1vZGVsc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb2RlbHM7XG59XG5cbi8qKlxuICogKi50eXBlcy50c+yZgCAqLmdlbmVyYXRlZC50cyDtjIzsnbzrk6Tsl5DshJwgWm9kIOyKpO2CpOuniOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkVHlwZXMoKTogUHJvbWlzZTxMb2FkZWRUeXBlcz4ge1xuICBjb25zdCB0eXBlUGF0aHNQYXR0ZXJucyA9IFtcbiAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnR5cGVzLnRzXCIpKSxcbiAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC50c1wiKSksXG4gIF07XG4gIGNvbnN0IHR5cGVQYXRocyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0eXBlUGF0aHNQYXR0ZXJucy5tYXAoKHBhdHRlcm4pID0+IGdsb2JBc3luYyhwYXR0ZXJuKSkpXG4gICkuZmxhdCgpO1xuXG4gIGNvbnN0IHR5cGVzOiBMb2FkZWRUeXBlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHR5cGVQYXRocykge1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8ei5ab2RUeXBlPihmaWxlUGF0aCk7XG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgdHlwZXNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHlwZXM7XG59XG5cbi8qKlxuICogKi53b3JrZmxvdy50cyDtjIzsnbzrk6Tsl5DshJwgV29ya2Zsb3cg66mU7YOA642w7J207YSw66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXb3JrZmxvd3MoKSB7XG4gIGNvbnN0IHdvcmtmbG93UGF0aHNQYXR0ZXJuID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICApO1xuICBjb25zdCB3b3JrZmxvd1BhdGhzID0gYXdhaXQgZ2xvYkFzeW5jKHdvcmtmbG93UGF0aHNQYXR0ZXJuKTtcbiAgY29uc3Qgd29ya2Zsb3dzOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+ID0gbmV3IE1hcCgpO1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHdvcmtmbG93UGF0aHMpIHtcbiAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzKGZpbGVQYXRoKTtcbiAgICB3b3JrZmxvd3Muc2V0KFxuICAgICAgZmlsZVBhdGgsXG4gICAgICBpbXBvcnRlZE1lbWJlcnNcbiAgICAgICAgLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzT2JqZWN0VmFsdWUodmFsdWUpICYmXG4gICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgXCJ0eXBlXCIgaW4gdmFsdWUgJiZcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgPT09IFwid29ya2Zsb3dcIiAmJlxuICAgICAgICAgICAgXCJmblwiIGluIHZhbHVlICYmXG4gICAgICAgICAgICBpc0Z1bmN0aW9uVmFsdWUodmFsdWUuZm4pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gdmFsdWUgYXMgV29ya2Zsb3dNZXRhZGF0YTtcbiAgICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrZmxvd3M7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7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
|
|
@@ -12,7 +12,7 @@ import { copyFileWithReplaceCoreToShared, init_file_copy } from "./file-copy.js"
|
|
|
12
12
|
import assert from "assert";
|
|
13
13
|
import path, { dirname } from "path";
|
|
14
14
|
import chalk from "chalk";
|
|
15
|
-
|
|
15
|
+
// src/syncer/syncer-actions.ts
|
|
16
16
|
async function actionSyncConfig() {
|
|
17
17
|
const { host, port } = Sonamu.config.server.listen ?? {};
|
|
18
18
|
const content = `API_HOST=${host ?? "localhost"}\nAPI_PORT=${port ?? 3e3}`;
|
|
@@ -104,12 +104,13 @@ async function actionSyncFilesToTargets(tsPaths) {
|
|
|
104
104
|
const dst = realSrc.replace(`/${apiDir}/`, `/${target}/`).replace("/application/", "/services/");
|
|
105
105
|
const dir = dirname(dst);
|
|
106
106
|
if (!await syncerFileExists(dir)) await syncerFilesystem.mkdir(dir, { recursive: true });
|
|
107
|
-
|
|
107
|
+
const syncHeader = [
|
|
108
108
|
"/**",
|
|
109
109
|
" * @generated",
|
|
110
110
|
" * API에서 동기화된 파일입니다. 직접 수정하지 마세요.",
|
|
111
111
|
" */"
|
|
112
|
-
].join("\n")
|
|
112
|
+
].join("\n");
|
|
113
|
+
await copyFileWithReplaceCoreToShared(realSrc, dst, syncHeader);
|
|
113
114
|
await trackWritten(dst);
|
|
114
115
|
!isTest() && console.log(chalk.bold("Copied: ") + chalk.blue(dst.replace(`${Sonamu.appRootPath}/`, "")));
|
|
115
116
|
return dst;
|
|
@@ -175,12 +176,13 @@ async function syncLocaleFiles(target, apiI18nDir, locales) {
|
|
|
175
176
|
for (const locale of locales) {
|
|
176
177
|
const sourceFile = path.join(apiI18nDir, `${locale}.ts`);
|
|
177
178
|
const targetFile = path.join(targetI18nDir, `${locale}.ts`);
|
|
178
|
-
|
|
179
|
+
const syncHeader = [
|
|
179
180
|
"/**",
|
|
180
181
|
" * @generated",
|
|
181
182
|
" * API에서 동기화된 파일입니다. 직접 수정하지 마세요.",
|
|
182
183
|
" */"
|
|
183
|
-
].join("\n")
|
|
184
|
+
].join("\n");
|
|
185
|
+
await copyFileWithReplaceCoreToShared(sourceFile, targetFile, syncHeader);
|
|
184
186
|
await trackWritten(targetFile);
|
|
185
187
|
!isTest() && console.log(chalk.bold("Copied: ") + chalk.cyan(`${target}/src/i18n/${locale}.ts`));
|
|
186
188
|
}
|
|
@@ -197,8 +199,7 @@ var init_syncer_actions = __esmMin((() => {
|
|
|
197
199
|
init_file_tracking();
|
|
198
200
|
init_filesystem_dependencies();
|
|
199
201
|
}));
|
|
200
|
-
//#endregion
|
|
201
202
|
init_syncer_actions();
|
|
202
203
|
export { actionCopySharedToTargetsIfNotExists, actionGenerateHttpValidators, actionGenerateHttps, actionGenerateInitialTypes, actionGenerateSchemas, actionGenerateServices, actionGenerateSsrEntryServerIfNotExists, actionGenerateSsrQueries, actionSyncConfig, actionSyncFilesToTargets, actionSyncSonamuDictionary, init_syncer_actions };
|
|
203
204
|
|
|
204
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBmb3JtYXRDb2RlIH0gZnJvbSBcIi4uL2NvZGUtZm9ybWF0dGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGlzT2JqZWN0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUZW1wbGF0ZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkIH0gZnJvbSBcIi4vZmlsZS1jb3B5XCI7XG5pbXBvcnQgeyB0cmFja1dyaXR0ZW4gfSBmcm9tIFwiLi9maWxlLXRyYWNraW5nXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLy8gd2ViLy5zb25hbXUuZW52IOyXkCDtmITsnqwg7ISk7KCV6rCSIOyggOyepVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNDb25maWcoKSB7XG4gIGNvbnN0IHsgaG9zdCwgcG9ydCB9ID0gU29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuID8/IHt9O1xuICBjb25zdCBjb250ZW50ID0gYEFQSV9IT1NUPSR7aG9zdCA/PyBcImxvY2FsaG9zdFwifVxcbkFQSV9QT1JUPSR7cG9ydCA/PyAzMDAwfWA7XG5cbiAgTmFpdGUudChcImFjdGlvblN5bmNDb25maWdcIiwgeyBjb250ZW50IH0pO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLi4uU29uYW11LmNvbmZpZy5zeW5jLnRhcmdldHMubWFwKCh0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShcbiAgICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcIi5zb25hbXUuZW52XCIpLFxuICAgICAgICBjb250ZW50LFxuICAgICAgKTtcbiAgICB9KSxcbiAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gIF0pO1xufVxuXG4vKipcbiAqIHNlcnZpY2VzLmdlbmVyYXRlZC50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcGFyYW0gcGFyYW1zQXJyYXlcbiAqIEByZXR1cm5zIOyDneyEseuQnCDtjIzsnbwg6rK966GcIOuwsOyXtC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlU2VydmljZXMoXG4gIHBhcmFtc0FycmF5OiB7XG4gICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB9W10sXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIE5haXRlLnQoXCJhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzXCIsIHBhcmFtc0FycmF5KTtcblxuICAvLyBzZXJ2aWNlcy5nZW5lcmF0ZWQudHMg7Ya17ZWpIO2MjOydvCDsg53shLFcbiAgY29uc3Qgc2VydmljZXNGaWxlID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcInNlcnZpY2VzXCIsXG4gICAge30sXG4gICAge1xuICAgICAgb3ZlcndyaXRlOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIFsuLi5zZXJ2aWNlc0ZpbGVdO1xufVxuXG4vKipcbiAqIEVudGl0eeyXkCDrlLjrprAg7LSI6riwIHR5cGVzLnRz66W8IOunjOuTpOyWtOykjeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlJZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVJbml0aWFsVHlwZXMoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJpbml0X3R5cGVzXCIsIHsgZW50aXR5SWQgfSk7XG59XG5cbi8qKlxuICogc29uYW11LmdlbmVyYXRlZC50c+yZgCBzb25hbXUuZ2VuZXJhdGVkLnNzby50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNjaGVtYXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRfc3NvXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICAgIF0pXG4gICkuZmxhdCgpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQuaHR0cOulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgW3Jlc10gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFxuICAgIFwiZ2VuZXJhdGVkX2h0dHBcIixcbiAgICB7IGVudGl0eUlkOiBcImR1bW15XCIgfSxcbiAgICB7IG92ZXJ3cml0ZTogdHJ1ZSB9LFxuICApO1xuICBhc3NlcnQocmVzKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiDstZzsooUgUkVTVCBjYXN0ZXLrpbwg64u064qUIEFQSSDsoITsmqkgdmFsaWRhdG9yIHJlZ2lzdHJ566W8IOyerOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cFZhbGlkYXRvcnMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgcmVnaXN0cnlQYXRoID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhdGguam9pbihcbiAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIFwic3JjL2FwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC50c1wiLFxuICAgICkgYXMgQWJzb2x1dGVQYXRoO1xuICBjb25zdCBwb2xpY3kgPSBTb25hbXUuY29uZmlnLnZhbGlkYXRpb24/LnpvZENvbXBpbGVyO1xuICBjb25zdCBpc0FvdCA9IGlzT2JqZWN0VmFsdWUocG9saWN5KSAmJiBwb2xpY3kgIT09IG51bGwgJiYgcG9saWN5LmFwaSA9PT0gXCJhb3RcIjtcbiAgaWYgKCFpc0FvdCkge1xuICAgIC8vIG9wdC1vdXQvSklUIOyghO2ZmCDrkqQgQU9UIGNvbXBpbGUgaW1wb3J06rCAIOyVoO2UjOumrOy8gOydtOyFmOyXkCDrgqjsp4Ag7JWK64+E66GdIOyCsOy2nOusvOuPhCDtlajqu5gg7KCV66as7ZWp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKHJlZ2lzdHJ5UGF0aCkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0udW5saW5rKHJlZ2lzdHJ5UGF0aCk7XG4gICAgfVxuICAgIHJldHVybiByZWdpc3RyeVBhdGg7XG4gIH1cblxuICBjb25zdCBbZ2VuZXJhdGVkUGF0aF0gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiaHR0cF92YWxpZGF0b3JzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgYXNzZXJ0KGdlbmVyYXRlZFBhdGgpO1xuICByZXR1cm4gZ2VuZXJhdGVkUGF0aDtcbn1cblxuLyoqXG4gKiBxdWVyaWVzLmdlbmVyYXRlZC50cyDsnqzsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzclF1ZXJpZXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gZ2VuZXJhdGVUZW1wbGF0ZShcInF1ZXJpZXNcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN466W8IOyDneyEse2VqeuLiOuLpC5cbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICog7J6F66ClIOydmOyhtCDsl4bripQg7KCV7KCBIOy9lOuTnOudvCDrp6Trsoggb3ZlcndyaXRl64qUIG10aW1l66eMIOqwseyLoO2VmOuKlCDsnZjrr7gg7JeG64qUIOuPmeyekS5cbiAqIO2FnO2UjOumvyDsnpDssrTqsIAg67OA6rK965CcIOqyveyasChTb25hbXUg7JeF6re466CI7J2065OcKeyXkOuKlCDsgqzsmqnsnpDqsIAg7YyM7J287J2EIOyCreygnO2VnCDrkqQgc3luY+uhnCDsnqzsg53shLEuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QgKOydtOuvuCDsnojsnLzrqbQg67mIIOuwsOyXtCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzckVudHJ5U2VydmVySWZOb3RFeGlzdHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiZW50cnlfc2VydmVyXCIsIHt9LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBnZW5lcmF0ZVRlbXBsYXRl7J2AIG92ZXJ3cml0ZTogZmFsc2Xsl5DshJwg7YyM7J287J20IOydtOuvuCDsnojsnLzrqbQg7JiI7Jm466W8IOuNmOynkeuLiOuLpC5cbiAgICAvLyBJZk5vdEV4aXN0cyDsnZjrr7jsg4EgXCLqt7jrg6Ug64aU65GU64ukXCLqsIAg7KCV7IOB7J2066+A66GcIOu5iCDrsLDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgIGlmIChlIGluc3RhbmNlb2YgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICog7KO87Ja07KeEIC50cyDtjIzsnbzrk6QoYXBp7JeQIOyeiOuLpOqzoCDqsIDsoJUp7J2EIOuqqOuToCDtg4Dqsp8g65SU66CJ7Yag66as7J2YIHNlcnZpY2Vz7JeQIOqwluuLpCDrkaHri4jri6QuXG4gKiDsnbTrlYwg64K067aA7J2YIHNvbmFtdSBpbXBvcnTripQgc29uYW11LnNoYXJlZC50cyBpbXBvcnTroZwg7LmY7ZmY65CY6rOgLFxuICog6rK966Gc7J2YIC9hcHBsaWNhdGlvbi/snYAgL3NlcnZpY2VzL+uhnCDsuZjtmZjrkKnri4jri6QuXG4gKlxuICogQHBhcmFtIHRzUGF0aHMg67O17IKs7ZWgIO2MjOydvOuTpOydmCDsoIjrjIAg6rK966GcXG4gKiBAcmV0dXJucyDqsIEg7YOA6rKf7JeQIOuzteyCrOuQnCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnCDrsLDsl7QgKGZsYXQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzKHRzUGF0aHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBkaXI6IGFwaURpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKGFzeW5jICh0YXJnZXQpID0+XG4gICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgIHRzUGF0aHMubWFwKGFzeW5jIChyZWFsU3JjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkc3QgPSByZWFsU3JjXG4gICAgICAgICAgICAgIC5yZXBsYWNlKGAvJHthcGlEaXJ9L2AsIGAvJHt0YXJnZXR9L2ApXG4gICAgICAgICAgICAgIC5yZXBsYWNlKFwiL2FwcGxpY2F0aW9uL1wiLCBcIi9zZXJ2aWNlcy9cIik7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSBkaXJuYW1lKGRzdCk7XG4gICAgICAgICAgICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICAgICAgICAgIFwiLyoqXCIsXG4gICAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgICAgXCIgKi9cIixcbiAgICAgICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICAgICAgICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQocmVhbFNyYywgZHN0LCBzeW5jSGVhZGVyKTtcbiAgICAgICAgICAgIGF3YWl0IHRyYWNrV3JpdHRlbihcbiAgICAgICAgICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBkc3QgYXMgQWJzb2x1dGVQYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICFpc1Rlc3QoKSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5ibHVlKGRzdC5yZXBsYWNlKGAke1NvbmFtdS5hcHBSb290UGF0aH0vYCwgXCJcIikpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGRzdDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzaGFyZWQg7YWc7ZSM66a/7Jy866Gc67aA7YSwIHNvbmFtdS5zaGFyZWQudHMg7YyM7J287J2EIOunjOuTpOyWtOyEnCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOyXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7YyM7J287J2EIOunjOuTnOuKlCDqs7zsoJXsl5DshJwg7Jes65+sIOy5mO2ZmCDqsIDqs7XsnbQg7J287Ja064Kp64uI64ukLlxuICpcbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uQ29weVNoYXJlZFRvVGFyZ2V0c0lmTm90RXhpc3RzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcblxuICAvLyBwbHVyYWwudHMg64K07Jqp7J2EIOydveyWtOyEnCBzaGFyZWQg7YyM7J287JeQIOyCveyehe2VqeuLiOuLpC5cbiAgY29uc3QgZGljdFV0aWxzUGF0aCA9IHBhdGguam9pbihcbiAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICBcIi4uL2RpY3QvdXRpbHMudHNcIixcbiAgKTtcbiAgY29uc3QgZGljdFV0aWxzQ29kZSA9IChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpY3RVdGlsc1BhdGgpKVxuICAgID8gYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5yZWFkRmlsZShkaWN0VXRpbHNQYXRoLCBcInV0Zi04XCIpXG4gICAgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IHN5bmNlckZpbGVFeGlzdHMoc3JjUGF0aCkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQpKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNvcHkgc29uYW11LnNoYXJlZC50cyB0byB0YXJnZXQgJyR7dGFyZ2V0fScgYnV0IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgY2hlY2sgeW91ciBwcm9qZWN0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFRleHQgPSBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLnJlYWRGaWxlKHNyY1BhdGgsIFwidXRmLThcIik7XG4gICAgY29uc3QgY29udmVydGVkVGV4dCA9IE9iamVjdC5lbnRyaWVzKGNvbnZlcnRNYXApLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gYWNjLnJlcGxhY2UoYCRbWyR7a2V5fV1dYCwgdmFsdWUpLFxuICAgICAgZnVsbFRleHQsXG4gICAgKTtcblxuICAgIC8vIOydtOqxtCDtlITroZzsoJ3tirjsl5AgLnRzIOyGjOyKpCDsvZTrk5wg7YyM7J287J2EIOyDneyEse2VmOuKlCDqsoPsnbTrr4DroZwgc3Jj7J2YIC50cyDqsr3roZzroZwg6rCR64uI64ukLlxuICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkLnRzXCIpO1xuXG4gICAgLy8g7KCV66eQIO2YueyLnOuCmOyngOunjCB0YXJnZXQg65SU66CJ7Yag66as64qUIOyeiOyWtOuPhCBzcmMvc2VydmljZXMg65SU66CJ7Yag66as64qUIOyXhuydhCDsiJgg7J6I7Jy866+A66GcIOuvuOumrCDsg53shLHtlbTspI3ri4jri6QuXG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmRpcm5hbWUoZGVzdFBhdGgpKSkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBjb25zb2xlLndhcm4oYENyZWF0ZWQgZGlyZWN0b3J5ICcke3BhdGguZGlybmFtZShkZXN0UGF0aCl9JyBiZWNhdXNlIGl0IGRpZCBub3QgZXhpc3QuYCk7XG4gICAgfVxuXG4gICAgLy8g7YyM7J287J20IOydtOuvuCDsobTsnqztlZjrqbQg6rG064SI65yB64uI64ukLlxuICAgIC8vIHNvbmFtdS5zaGFyZWQudHPripQg7ZSE66Gc7KCd7Yq47JeQ7IScIOyekOycoOuhreqyjCDsu6TsiqTthLDrp4jsnbTsp5XtlaAg7IiYIOyeiOyWtOyVvCDtlZjrr4DroZwsXG4gICAgLy8g7LWc7LSIIDHtmozrp4wg7IOd7ISx7ZWY6rOgIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgIC8vIO2FnO2UjOumvyDrgrTsmqkoJFtbZGljdFV0aWxzXV0g65OxKeydtCDrs4Dqsr3rkJjsl4jsnYQg65WMIOuwmOyYgeydtCDtlYTsmpTtlZjrqbQsXG4gICAgLy8g7ZW064u5IO2MjOydvOydhCDsgq3soJztlZwg65KkIGBwbnBtIHNvbmFtdSBzeW5jYOuhnCDsnqzsg53shLHtlZjrqbQg65Cp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRlc3RQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgc3luY2VyRmlsZXN5c3RlbS53cml0ZUZpbGUoZGVzdFBhdGgsIGF3YWl0IGZvcm1hdENvZGUoY29udmVydGVkVGV4dCwgZGVzdFBhdGgpKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmJsdWUocGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGRlc3RQYXRoKSkpO1xuICB9XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkoU0Qp66W8IOuqqOuToCDtg4Dqsp8oYXBpICsgd2ViL2FwcCDrk7Ep7JeQIOuPmeq4sO2ZlO2VqeuLiOuLpC5cbiAqXG4gKiDqsIEg7YOA6rKf7JeQIOuMgO2VtDpcbiAqIC0gdGFyZ2V07J20IGFwaeqwgCDslYTri4jrqbQg7IKs7Jqp7J6QIOyekeyEsSBsb2NhbGUg7YyM7J28KGtvLnRzL2VuLnRzLy4uLinsnYQgYXBpIOKGkiB0YXJnZXTsnLzroZwg67O17IKsXG4gKiAtIHNkIO2FnO2UjOumv+ydhCDroIzrjZTrp4HtlbTshJwgc2QuZ2VuZXJhdGVkLnRzIOyDneyEsSAob3ZlcndyaXRlKVxuICpcbiAqIO2VnCDtg4Dqsp/sl5DshJwg7Iuk7Yyo7ZW064+EIOuLpOuluCDtg4Dqsp/snYAg6rOE7IaNIOynhO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNTb25hbXVEaWN0aW9uYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgaTE4bkNvbmZpZyA9IFNvbmFtdS5jb25maWcuaTE4bjtcblxuICBjb25zdCB0YXJnZXRMaXN0ID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtcbiAgICAgIFwiYXBpXCIsXG4gICAgICAuLi50YXJnZXRzLFxuICAgIF0gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIodGFyZ2V0STE4bkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBwYXRoLmpvaW4oYXBpSTE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4odGFyZ2V0STE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuXG4gICAgY29uc3Qgc3luY0hlYWRlciA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICogQVBJ7JeQ7IScIOuPmeq4sO2ZlOuQnCDtjIzsnbzsnoXri4jri6QuIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgXCIgKi9cIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgYXdhaXQgY29weUZpbGVXaXRoUmVwbGFjZUNvcmVUb1NoYXJlZChzb3VyY2VGaWxlLCB0YXJnZXRGaWxlLCBzeW5jSGVhZGVyKTtcbiAgICBhd2FpdCB0cmFja1dyaXR0ZW4oXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoLFxuICAgICk7XG4gICAgIWlzVGVzdCgpICYmXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5jeWFuKGAke3RhcmdldH0vc3JjL2kxOG4vJHtsb2NhbGV9LnRzYCkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxlQUFzQixtQkFBbUI7Q0FDdkMsTUFBTSxFQUFFLE1BQU0sU0FBUyxPQUFPLE9BQU8sT0FBTyxVQUFVLENBQUM7Q0FDdkQsTUFBTSxVQUFVLFlBQVksUUFBUSxZQUFZLGFBQWEsUUFBUTtDQUVyRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDO0NBQ3ZDLE1BQU0sUUFBUSxJQUFJLENBQ2hCLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxLQUFLLFdBQVc7RUFDNUMsT0FBTyxpQkFBaUIsVUFDdEIsS0FBSyxLQUFLLE9BQU8sYUFBYSxRQUFRLGFBQWEsR0FDbkQsT0FDRjtDQUNGLENBQUMsR0FDRCxpQkFBaUIsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDLENBQzNELENBQUM7QUFDSDs7Ozs7O0FBT0EsZUFBc0IsdUJBQ3BCLGFBR3lCO0NBQ3pCLE1BQU0sRUFBRSwwQkFBMEIsV0FBVztDQVc3QyxPQUFPLENBQUMsR0FBRyxNQVJnQixpQkFDekIsWUFDQSxDQUFDLEdBQ0QsRUFDRSxXQUFXLEtBQ2IsQ0FDRixDQUV1QjtBQUN6Qjs7Ozs7QUFNQSxlQUFzQiwyQkFBMkIsVUFBMkM7Q0FDMUYsT0FBTyxpQkFBaUIsY0FBYyxFQUFFLFNBQVMsQ0FBQztBQUNwRDs7Ozs7QUFN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
|
|
205
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBmb3JtYXRDb2RlIH0gZnJvbSBcIi4uL2NvZGUtZm9ybWF0dGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGlzT2JqZWN0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUZW1wbGF0ZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkIH0gZnJvbSBcIi4vZmlsZS1jb3B5XCI7XG5pbXBvcnQgeyB0cmFja1dyaXR0ZW4gfSBmcm9tIFwiLi9maWxlLXRyYWNraW5nXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLy8gd2ViLy5zb25hbXUuZW52IOyXkCDtmITsnqwg7ISk7KCV6rCSIOyggOyepVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNDb25maWcoKSB7XG4gIGNvbnN0IHsgaG9zdCwgcG9ydCB9ID0gU29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuID8/IHt9O1xuICBjb25zdCBjb250ZW50ID0gYEFQSV9IT1NUPSR7aG9zdCA/PyBcImxvY2FsaG9zdFwifVxcbkFQSV9QT1JUPSR7cG9ydCA/PyAzMDAwfWA7XG5cbiAgTmFpdGUudChcImFjdGlvblN5bmNDb25maWdcIiwgeyBjb250ZW50IH0pO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLi4uU29uYW11LmNvbmZpZy5zeW5jLnRhcmdldHMubWFwKCh0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShcbiAgICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcIi5zb25hbXUuZW52XCIpLFxuICAgICAgICBjb250ZW50LFxuICAgICAgKTtcbiAgICB9KSxcbiAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gIF0pO1xufVxuXG4vKipcbiAqIHNlcnZpY2VzLmdlbmVyYXRlZC50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcGFyYW0gcGFyYW1zQXJyYXlcbiAqIEByZXR1cm5zIOyDneyEseuQnCDtjIzsnbwg6rK966GcIOuwsOyXtC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlU2VydmljZXMoXG4gIHBhcmFtc0FycmF5OiB7XG4gICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB9W10sXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIE5haXRlLnQoXCJhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzXCIsIHBhcmFtc0FycmF5KTtcblxuICAvLyBzZXJ2aWNlcy5nZW5lcmF0ZWQudHMg7Ya17ZWpIO2MjOydvCDsg53shLFcbiAgY29uc3Qgc2VydmljZXNGaWxlID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcInNlcnZpY2VzXCIsXG4gICAge30sXG4gICAge1xuICAgICAgb3ZlcndyaXRlOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIFsuLi5zZXJ2aWNlc0ZpbGVdO1xufVxuXG4vKipcbiAqIEVudGl0eeyXkCDrlLjrprAg7LSI6riwIHR5cGVzLnRz66W8IOunjOuTpOyWtOykjeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlJZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVJbml0aWFsVHlwZXMoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJpbml0X3R5cGVzXCIsIHsgZW50aXR5SWQgfSk7XG59XG5cbi8qKlxuICogc29uYW11LmdlbmVyYXRlZC50c+yZgCBzb25hbXUuZ2VuZXJhdGVkLnNzby50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNjaGVtYXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRfc3NvXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICAgIF0pXG4gICkuZmxhdCgpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQuaHR0cOulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgW3Jlc10gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFxuICAgIFwiZ2VuZXJhdGVkX2h0dHBcIixcbiAgICB7IGVudGl0eUlkOiBcImR1bW15XCIgfSxcbiAgICB7IG92ZXJ3cml0ZTogdHJ1ZSB9LFxuICApO1xuICBhc3NlcnQocmVzKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiDstZzsooUgUkVTVCBjYXN0ZXLrpbwg64u064qUIEFQSSDsoITsmqkgdmFsaWRhdG9yIHJlZ2lzdHJ566W8IOyerOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cFZhbGlkYXRvcnMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgcmVnaXN0cnlQYXRoID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhdGguam9pbihcbiAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIFwic3JjL2FwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC50c1wiLFxuICAgICkgYXMgQWJzb2x1dGVQYXRoO1xuICBjb25zdCBwb2xpY3kgPSBTb25hbXUuY29uZmlnLnZhbGlkYXRpb24/LnpvZENvbXBpbGVyO1xuICBjb25zdCBpc0FvdCA9IGlzT2JqZWN0VmFsdWUocG9saWN5KSAmJiBwb2xpY3kgIT09IG51bGwgJiYgcG9saWN5LmFwaSA9PT0gXCJhb3RcIjtcbiAgaWYgKCFpc0FvdCkge1xuICAgIC8vIG9wdC1vdXQvSklUIOyghO2ZmCDrkqQgQU9UIGNvbXBpbGUgaW1wb3J06rCAIOyVoO2UjOumrOy8gOydtOyFmOyXkCDrgqjsp4Ag7JWK64+E66GdIOyCsOy2nOusvOuPhCDtlajqu5gg7KCV66as7ZWp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKHJlZ2lzdHJ5UGF0aCkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0udW5saW5rKHJlZ2lzdHJ5UGF0aCk7XG4gICAgfVxuICAgIHJldHVybiByZWdpc3RyeVBhdGg7XG4gIH1cblxuICBjb25zdCBbZ2VuZXJhdGVkUGF0aF0gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiaHR0cF92YWxpZGF0b3JzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgYXNzZXJ0KGdlbmVyYXRlZFBhdGgpO1xuICByZXR1cm4gZ2VuZXJhdGVkUGF0aDtcbn1cblxuLyoqXG4gKiBxdWVyaWVzLmdlbmVyYXRlZC50cyDsnqzsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzclF1ZXJpZXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gZ2VuZXJhdGVUZW1wbGF0ZShcInF1ZXJpZXNcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN466W8IOyDneyEse2VqeuLiOuLpC5cbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICog7J6F66ClIOydmOyhtCDsl4bripQg7KCV7KCBIOy9lOuTnOudvCDrp6Trsoggb3ZlcndyaXRl64qUIG10aW1l66eMIOqwseyLoO2VmOuKlCDsnZjrr7gg7JeG64qUIOuPmeyekS5cbiAqIO2FnO2UjOumvyDsnpDssrTqsIAg67OA6rK965CcIOqyveyasChTb25hbXUg7JeF6re466CI7J2065OcKeyXkOuKlCDsgqzsmqnsnpDqsIAg7YyM7J287J2EIOyCreygnO2VnCDrkqQgc3luY+uhnCDsnqzsg53shLEuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QgKOydtOuvuCDsnojsnLzrqbQg67mIIOuwsOyXtCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzckVudHJ5U2VydmVySWZOb3RFeGlzdHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiZW50cnlfc2VydmVyXCIsIHt9LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBnZW5lcmF0ZVRlbXBsYXRl7J2AIG92ZXJ3cml0ZTogZmFsc2Xsl5DshJwg7YyM7J287J20IOydtOuvuCDsnojsnLzrqbQg7JiI7Jm466W8IOuNmOynkeuLiOuLpC5cbiAgICAvLyBJZk5vdEV4aXN0cyDsnZjrr7jsg4EgXCLqt7jrg6Ug64aU65GU64ukXCLqsIAg7KCV7IOB7J2066+A66GcIOu5iCDrsLDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgIGlmIChlIGluc3RhbmNlb2YgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICog7KO87Ja07KeEIC50cyDtjIzsnbzrk6QoYXBp7JeQIOyeiOuLpOqzoCDqsIDsoJUp7J2EIOuqqOuToCDtg4Dqsp8g65SU66CJ7Yag66as7J2YIHNlcnZpY2Vz7JeQIOqwluuLpCDrkaHri4jri6QuXG4gKiDsnbTrlYwg64K067aA7J2YIHNvbmFtdSBpbXBvcnTripQgc29uYW11LnNoYXJlZC50cyBpbXBvcnTroZwg7LmY7ZmY65CY6rOgLFxuICog6rK966Gc7J2YIC9hcHBsaWNhdGlvbi/snYAgL3NlcnZpY2VzL+uhnCDsuZjtmZjrkKnri4jri6QuXG4gKlxuICogQHBhcmFtIHRzUGF0aHMg67O17IKs7ZWgIO2MjOydvOuTpOydmCDsoIjrjIAg6rK966GcXG4gKiBAcmV0dXJucyDqsIEg7YOA6rKf7JeQIOuzteyCrOuQnCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnCDrsLDsl7QgKGZsYXQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzKHRzUGF0aHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBkaXI6IGFwaURpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKGFzeW5jICh0YXJnZXQpID0+XG4gICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgIHRzUGF0aHMubWFwKGFzeW5jIChyZWFsU3JjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkc3QgPSByZWFsU3JjXG4gICAgICAgICAgICAgIC5yZXBsYWNlKGAvJHthcGlEaXJ9L2AsIGAvJHt0YXJnZXR9L2ApXG4gICAgICAgICAgICAgIC5yZXBsYWNlKFwiL2FwcGxpY2F0aW9uL1wiLCBcIi9zZXJ2aWNlcy9cIik7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSBkaXJuYW1lKGRzdCk7XG4gICAgICAgICAgICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICAgICAgICAgIFwiLyoqXCIsXG4gICAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgICAgXCIgKi9cIixcbiAgICAgICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICAgICAgICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQocmVhbFNyYywgZHN0LCBzeW5jSGVhZGVyKTtcbiAgICAgICAgICAgIGF3YWl0IHRyYWNrV3JpdHRlbihcbiAgICAgICAgICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBkc3QgYXMgQWJzb2x1dGVQYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICFpc1Rlc3QoKSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5ibHVlKGRzdC5yZXBsYWNlKGAke1NvbmFtdS5hcHBSb290UGF0aH0vYCwgXCJcIikpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGRzdDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzaGFyZWQg7YWc7ZSM66a/7Jy866Gc67aA7YSwIHNvbmFtdS5zaGFyZWQudHMg7YyM7J287J2EIOunjOuTpOyWtOyEnCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOyXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7YyM7J287J2EIOunjOuTnOuKlCDqs7zsoJXsl5DshJwg7Jes65+sIOy5mO2ZmCDqsIDqs7XsnbQg7J287Ja064Kp64uI64ukLlxuICpcbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uQ29weVNoYXJlZFRvVGFyZ2V0c0lmTm90RXhpc3RzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcblxuICAvLyBwbHVyYWwudHMg64K07Jqp7J2EIOydveyWtOyEnCBzaGFyZWQg7YyM7J287JeQIOyCveyehe2VqeuLiOuLpC5cbiAgY29uc3QgZGljdFV0aWxzUGF0aCA9IHBhdGguam9pbihcbiAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICBcIi4uL2RpY3QvdXRpbHMudHNcIixcbiAgKTtcbiAgY29uc3QgZGljdFV0aWxzQ29kZSA9IChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpY3RVdGlsc1BhdGgpKVxuICAgID8gYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5yZWFkRmlsZShkaWN0VXRpbHNQYXRoLCBcInV0Zi04XCIpXG4gICAgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IHN5bmNlckZpbGVFeGlzdHMoc3JjUGF0aCkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQpKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNvcHkgc29uYW11LnNoYXJlZC50cyB0byB0YXJnZXQgJyR7dGFyZ2V0fScgYnV0IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgY2hlY2sgeW91ciBwcm9qZWN0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFRleHQgPSBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLnJlYWRGaWxlKHNyY1BhdGgsIFwidXRmLThcIik7XG4gICAgY29uc3QgY29udmVydGVkVGV4dCA9IE9iamVjdC5lbnRyaWVzKGNvbnZlcnRNYXApLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gYWNjLnJlcGxhY2UoYCRbWyR7a2V5fV1dYCwgdmFsdWUpLFxuICAgICAgZnVsbFRleHQsXG4gICAgKTtcblxuICAgIC8vIOydtOqxtCDtlITroZzsoJ3tirjsl5AgLnRzIOyGjOyKpCDsvZTrk5wg7YyM7J287J2EIOyDneyEse2VmOuKlCDqsoPsnbTrr4DroZwgc3Jj7J2YIC50cyDqsr3roZzroZwg6rCR64uI64ukLlxuICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkLnRzXCIpO1xuXG4gICAgLy8g7KCV66eQIO2YueyLnOuCmOyngOunjCB0YXJnZXQg65SU66CJ7Yag66as64qUIOyeiOyWtOuPhCBzcmMvc2VydmljZXMg65SU66CJ7Yag66as64qUIOyXhuydhCDsiJgg7J6I7Jy866+A66GcIOuvuOumrCDsg53shLHtlbTspI3ri4jri6QuXG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmRpcm5hbWUoZGVzdFBhdGgpKSkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBjb25zb2xlLndhcm4oYENyZWF0ZWQgZGlyZWN0b3J5ICcke3BhdGguZGlybmFtZShkZXN0UGF0aCl9JyBiZWNhdXNlIGl0IGRpZCBub3QgZXhpc3QuYCk7XG4gICAgfVxuXG4gICAgLy8g7YyM7J287J20IOydtOuvuCDsobTsnqztlZjrqbQg6rG064SI65yB64uI64ukLlxuICAgIC8vIHNvbmFtdS5zaGFyZWQudHPripQg7ZSE66Gc7KCd7Yq47JeQ7IScIOyekOycoOuhreqyjCDsu6TsiqTthLDrp4jsnbTsp5XtlaAg7IiYIOyeiOyWtOyVvCDtlZjrr4DroZwsXG4gICAgLy8g7LWc7LSIIDHtmozrp4wg7IOd7ISx7ZWY6rOgIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgIC8vIO2FnO2UjOumvyDrgrTsmqkoJFtbZGljdFV0aWxzXV0g65OxKeydtCDrs4Dqsr3rkJjsl4jsnYQg65WMIOuwmOyYgeydtCDtlYTsmpTtlZjrqbQsXG4gICAgLy8g7ZW064u5IO2MjOydvOydhCDsgq3soJztlZwg65KkIGBwbnBtIHNvbmFtdSBzeW5jYOuhnCDsnqzsg53shLHtlZjrqbQg65Cp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRlc3RQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgc3luY2VyRmlsZXN5c3RlbS53cml0ZUZpbGUoZGVzdFBhdGgsIGF3YWl0IGZvcm1hdENvZGUoY29udmVydGVkVGV4dCwgZGVzdFBhdGgpKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmJsdWUocGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGRlc3RQYXRoKSkpO1xuICB9XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkoU0Qp66W8IOuqqOuToCDtg4Dqsp8oYXBpICsgd2ViL2FwcCDrk7Ep7JeQIOuPmeq4sO2ZlO2VqeuLiOuLpC5cbiAqXG4gKiDqsIEg7YOA6rKf7JeQIOuMgO2VtDpcbiAqIC0gdGFyZ2V07J20IGFwaeqwgCDslYTri4jrqbQg7IKs7Jqp7J6QIOyekeyEsSBsb2NhbGUg7YyM7J28KGtvLnRzL2VuLnRzLy4uLinsnYQgYXBpIOKGkiB0YXJnZXTsnLzroZwg67O17IKsXG4gKiAtIHNkIO2FnO2UjOumv+ydhCDroIzrjZTrp4HtlbTshJwgc2QuZ2VuZXJhdGVkLnRzIOyDneyEsSAob3ZlcndyaXRlKVxuICpcbiAqIO2VnCDtg4Dqsp/sl5DshJwg7Iuk7Yyo7ZW064+EIOuLpOuluCDtg4Dqsp/snYAg6rOE7IaNIOynhO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNTb25hbXVEaWN0aW9uYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgaTE4bkNvbmZpZyA9IFNvbmFtdS5jb25maWcuaTE4bjtcblxuICBjb25zdCB0YXJnZXRMaXN0ID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtcbiAgICAgIFwiYXBpXCIsXG4gICAgICAuLi50YXJnZXRzLFxuICAgIF0gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIodGFyZ2V0STE4bkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBwYXRoLmpvaW4oYXBpSTE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4odGFyZ2V0STE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuXG4gICAgY29uc3Qgc3luY0hlYWRlciA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICogQVBJ7JeQ7IScIOuPmeq4sO2ZlOuQnCDtjIzsnbzsnoXri4jri6QuIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgXCIgKi9cIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgYXdhaXQgY29weUZpbGVXaXRoUmVwbGFjZUNvcmVUb1NoYXJlZChzb3VyY2VGaWxlLCB0YXJnZXRGaWxlLCBzeW5jSGVhZGVyKTtcbiAgICBhd2FpdCB0cmFja1dyaXR0ZW4oXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoLFxuICAgICk7XG4gICAgIWlzVGVzdCgpICYmXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5jeWFuKGAke3RhcmdldH0vc3JjL2kxOG4vJHtsb2NhbGV9LnRzYCkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxlQUFzQixtQkFBbUI7Q0FDdkMsTUFBTSxFQUFFLE1BQU0sU0FBUyxPQUFPLE9BQU8sT0FBTyxVQUFVLENBQUM7Q0FDdkQsTUFBTSxVQUFVLFlBQVksUUFBUSxZQUFZLGFBQWEsUUFBUTtDQUVyRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDO0NBQ3ZDLE1BQU0sUUFBUSxJQUFJLENBQ2hCLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxLQUFLLFdBQVc7RUFDNUMsT0FBTyxpQkFBaUIsVUFDdEIsS0FBSyxLQUFLLE9BQU8sYUFBYSxRQUFRLGFBQWEsR0FDbkQsT0FDRjtDQUNGLENBQUMsR0FDRCxpQkFBaUIsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDLENBQzNELENBQUM7QUFDSDs7Ozs7O0FBT0EsZUFBc0IsdUJBQ3BCLGFBR3lCO0NBQ3pCLE1BQU0sRUFBRSwwQkFBMEIsV0FBVztDQVc3QyxPQUFPLENBQUMsR0FBRyxNQVJnQixpQkFDekIsWUFDQSxDQUFDLEdBQ0QsRUFDRSxXQUFXLEtBQ2IsQ0FDRixDQUV1QjtBQUN6Qjs7Ozs7QUFNQSxlQUFzQiwyQkFBMkIsVUFBMkM7Q0FDMUYsT0FBTyxpQkFBaUIsY0FBYyxFQUFFLFNBQVMsQ0FBQztBQUNwRDs7Ozs7QUFNQSxlQUFzQix3QkFBaUQ7Q0FDckUsUUFDRSxNQUFNLFFBQVEsSUFBSSxDQUNoQixpQkFBaUIsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDLEdBQ3pELGlCQUFpQixhQUFhLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDLENBQ3ZELENBQUMsRUFBQSxDQUNELEtBQUs7QUFDVDs7Ozs7QUFNQSxlQUFzQixzQkFBNkM7Q0FDakUsTUFBTSxDQUFDLE9BQU8sTUFBTSxpQkFDbEIsa0JBQ0EsRUFBRSxVQUFVLFFBQVEsR0FDcEIsRUFBRSxXQUFXLEtBQUssQ0FDcEI7Q0FDQSxPQUFPLEdBQUc7Q0FDVixPQUFPO0FBQ1Q7Ozs7QUFLQSxlQUFzQiwrQkFBc0Q7Q0FDMUUsTUFBTSxlQUN1RCxLQUFLLEtBQzlELE9BQU8sYUFDUCxnREFDRjtDQUNGLE1BQU0sU0FBUyxPQUFPLE9BQU8sWUFBWTtDQUV6QyxJQUFJLEVBRFUsY0FBYyxNQUFNLEtBQUssV0FBVyxRQUFRLE9BQU8sUUFBUSxRQUM3RDtFQUVWLElBQUksTUFBTSxpQkFBaUIsWUFBWSxHQUNyQyxNQUFNLGlCQUFpQixPQUFPLFlBQVk7RUFFNUMsT0FBTztDQUNUO0NBRUEsTUFBTSxDQUFDLGlCQUFpQixNQUFNLGlCQUFpQixtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsV0FBVyxLQUFLLENBQUM7Q0FDekYsT0FBTyxhQUFhO0NBQ3BCLE9BQU87QUFDVDs7Ozs7QUFNQSxlQUFzQiwyQkFBb0Q7Q0FDeEUsT0FBTyxpQkFBaUIsV0FBVyxDQUFDLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUM1RDs7Ozs7Ozs7QUFTQSxlQUFzQiwwQ0FBbUU7Q0FDdkYsSUFBSTtFQUNGLE9BQU8sTUFBTSxpQkFBaUIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFdBQVcsTUFBTSxDQUFDO0NBQ3hFLFNBQVMsR0FBRztFQUdWLElBQUksYUFBYSwyQkFDZixPQUFPLENBQUM7RUFFVixNQUFNO0NBQ1I7QUFDRjs7Ozs7Ozs7O0FBVUEsZUFBc0IseUJBQXlCLFNBQTRDO0NBQ3pGLE1BQU0sRUFBRSxZQUFZLE9BQU8sT0FBTztDQUNsQyxNQUFNLEVBQUUsS0FBSyxXQUFXLE9BQU8sT0FBTztDQUV0QyxRQUNFLE1BQU0sUUFBUSxJQUNaLFFBQVEsSUFBSSxPQUFPLFdBQ2pCLFFBQVEsSUFDTixRQUFRLElBQUksT0FBTyxZQUFZO0VBQzdCLE1BQU0sTUFBTSxRQUNULFFBQVEsSUFBSSxPQUFPLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUNyQyxRQUFRLGlCQUFpQixZQUFZO0VBQ3hDLE1BQU0sTUFBTSxRQUFRLEdBQUc7RUFDdkIsSUFBSSxDQUFFLE1BQU0saUJBQWlCLEdBQUcsR0FDOUIsTUFBTSxpQkFBaUIsTUFBTSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUM7RUFFdkQsTUFBTSxhQUFhO0dBQ2pCO0dBQ0E7R0FDQTtHQUNBO0VBQ0YsQ0FBQyxDQUFDLEtBQUssSUFBSTtFQUNYLE1BQU0sZ0NBQWdDLFNBQVMsS0FBSyxVQUFVO0VBQzlELE1BQU0sYUFDdUQsR0FDN0Q7RUFDQSxDQUFDLE9BQU8sS0FDTixRQUFRLElBQ04sTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLEtBQUssSUFBSSxRQUFRLEdBQUcsT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDLENBQy9FO0VBQ0YsT0FBTztDQUNULENBQUMsQ0FDSCxDQUNGLENBQ0YsRUFBQSxDQUNBLEtBQUs7QUFDVDs7Ozs7OztBQVFBLGVBQXNCLHVDQUFzRDtDQUMxRSxNQUFNLEVBQUUsWUFBWSxPQUFPLE9BQU87Q0FHbEMsTUFBTSxnQkFBZ0IsS0FBSyxLQUN6QixZQUFZLFFBQVEsUUFBUSxVQUFVLE9BQU8sR0FDN0Msa0JBQ0Y7Q0FDQSxNQUFNLGdCQUFpQixNQUFNLGlCQUFpQixhQUFhLElBQ3ZELE1BQU0saUJBQWlCLFNBQVMsZUFBZSxPQUFPLElBQ3REO0NBR0osTUFBTSxhQUFhO0VBQ2pCLFNBQ0UsT0FBTyxPQUFPLE9BQU8sV0FDckIsVUFBVSxPQUFPLE9BQU8sT0FBTyxRQUFRLFFBQVEsWUFBWSxHQUFHLE9BQU8sT0FBTyxPQUFPLFFBQVEsUUFBUTtFQUNyRyxXQUFXO0NBQ2I7Q0FFQSxLQUFLLE1BQU0sVUFBVSxTQUFTO0VBSTVCLE1BQU0sVUFBVSxLQUFLLEtBQ25CLFlBQVksUUFBUSxRQUFRLFVBQVUsT0FBTyxHQUM3QyxhQUFhLE9BQU8sZUFDdEI7RUFDQSxJQUFJLENBQUUsTUFBTSxpQkFBaUIsT0FBTyxHQUNsQztFQUVGLElBQUksQ0FBRSxNQUFNLGlCQUFpQixLQUFLLEtBQUssT0FBTyxhQUFhLE1BQU0sQ0FBQyxHQUNoRSxNQUFNLElBQUksTUFDUiw2Q0FBNkMsT0FBTywwRkFDdEQ7RUFHRixNQUFNLFdBQVcsTUFBTSxpQkFBaUIsU0FBUyxTQUFTLE9BQU87RUFDakUsTUFBTSxnQkFBZ0IsT0FBTyxRQUFRLFVBQVUsQ0FBQyxDQUFDLFFBQzlDLEtBQUssQ0FBQyxLQUFLLFdBQVcsSUFBSSxRQUFRLE1BQU0sSUFBSSxLQUFLLEtBQUssR0FDdkQsUUFDRjtFQUdBLE1BQU0sV0FBVyxLQUFLLEtBQUssT0FBTyxhQUFhLFFBQVEsK0JBQStCO0VBR3RGLElBQUksQ0FBRSxNQUFNLGlCQUFpQixLQUFLLFFBQVEsUUFBUSxDQUFDLEdBQUk7R0FDckQsTUFBTSxpQkFBaUIsTUFBTSxLQUFLLFFBQVEsUUFBUSxHQUFHLEVBQUUsV0FBVyxLQUFLLENBQUM7R0FDeEUsUUFBUSxLQUFLLHNCQUFzQixLQUFLLFFBQVEsUUFBUSxFQUFFLDRCQUE0QjtFQUN4RjtFQU9BLElBQUksTUFBTSxpQkFBaUIsUUFBUSxHQUNqQztFQUdGLE1BQU0saUJBQWlCLFVBQVUsVUFBVSxNQUFNLFdBQVcsZUFBZSxRQUFRLENBQUM7RUFDcEYsQ0FBQyxPQUFPLEtBQ04sUUFBUSxJQUFJLE1BQU0sS0FBSyxVQUFVLElBQUksTUFBTSxLQUFLLEtBQUssU0FBUyxPQUFPLGFBQWEsUUFBUSxDQUFDLENBQUM7Q0FDaEc7QUFDRjs7Ozs7Ozs7OztBQVdBLGVBQXNCLDZCQUE0QztDQUNoRSxNQUFNLEVBQUUsWUFBWSxPQUFPLE9BQU87Q0FDbEMsTUFBTSxhQUFhLE9BQU8sT0FBTztDQUVqQyxNQUFNLGFBQ3VELENBQ3pELE9BQ0EsR0FBRyxPQUNMO0NBRUYsTUFBTSxhQUFhLEtBQUssS0FBSyxPQUFPLGFBQWEsT0FBTyxPQUFPLElBQUksS0FBSyxVQUFVO0NBRWxGLEtBQUssTUFBTSxVQUFVLFlBQ25CLElBQUk7RUFFRixJQUFJLFdBQVcsT0FDYixNQUFNLGdCQUFnQixRQUFRLFlBQVksV0FBVyxnQkFBZ0I7RUFHdkUsTUFBTSxpQkFBaUIsTUFBTSxFQUFFLE9BQU8sR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDO0NBQzlELFNBQVMsR0FBRztFQUNWLFFBQVEsTUFBTSxzQ0FBc0MsT0FBTyxJQUFJLENBQUM7Q0FDbEU7QUFFSjs7OztBQUtBLGVBQWUsZ0JBQ2IsUUFDQSxZQUNBLFNBQ2U7Q0FDZixNQUFNLGdCQUFnQixLQUFLLEtBQUssT0FBTyxhQUFhLFFBQVEsVUFBVTtDQUd0RSxNQUFNLGlCQUFpQixNQUFNLGVBQWUsRUFBRSxXQUFXLEtBQUssQ0FBQztDQUUvRCxLQUFLLE1BQU0sVUFBVSxTQUFTO0VBQzVCLE1BQU0sYUFBYSxLQUFLLEtBQUssWUFBWSxHQUFHLE9BQU8sSUFBSTtFQUN2RCxNQUFNLGFBQWEsS0FBSyxLQUFLLGVBQWUsR0FBRyxPQUFPLElBQUk7RUFFMUQsTUFBTSxhQUFhO0dBQ2pCO0dBQ0E7R0FDQTtHQUNBO0VBQ0YsQ0FBQyxDQUFDLEtBQUssSUFBSTtFQUNYLE1BQU0sZ0NBQWdDLFlBQVksWUFBWSxVQUFVO0VBQ3hFLE1BQU0sYUFDdUQsVUFDN0Q7RUFDQSxDQUFDLE9BQU8sS0FDTixRQUFRLElBQUksTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLEtBQUssR0FBRyxPQUFPLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDdEY7QUFDRjs7Q0FyVXNDLFlBQUE7Q0FDUyxxQkFBQTtDQUV3QixtQkFBQTtDQUNqQyxXQUFBO0NBQ00sZ0JBQUE7Q0FFVSxtQkFBQTtDQUNILG9CQUFBO0NBQ1UsZUFBQTtDQUNmLG1CQUFBO0NBQ2dDLDZCQUFBIn0=
|