sonamu 0.10.12 → 0.10.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/agents/agent.d.ts +1 -1
- package/dist/ai/agents/agent.d.ts.map +1 -1
- package/dist/ai/agents/agent.js +5 -6
- package/dist/ai/agents/types.d.ts +1 -1
- package/dist/ai/agents/types.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/api.js +18 -18
- package/dist/ai/providers/rtzr/error.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/error.js +17 -15
- package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/model.js +3 -2
- package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/options.js +16 -16
- package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/provider.js +9 -9
- package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/utils.js +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +17 -17
- package/dist/api/code-converters.d.ts +4 -2
- package/dist/api/code-converters.d.ts.map +1 -1
- package/dist/api/code-converters.js +100 -19
- package/dist/api/config.d.ts +16 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +28 -21
- package/dist/api/context.d.ts +2 -2
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +1 -1
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +18 -11
- package/dist/api/http-validator.d.ts +36 -0
- package/dist/api/http-validator.d.ts.map +1 -0
- package/dist/api/http-validator.js +72 -0
- package/dist/api/index.js +6 -4
- package/dist/api/sonamu.d.ts +59 -20
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +250 -106
- package/dist/api/websocket-helpers.d.ts +7 -5
- package/dist/api/websocket-helpers.d.ts.map +1 -1
- package/dist/api/websocket-helpers.js +6 -6
- package/dist/auth/audit-log/builders.d.ts.map +1 -1
- package/dist/auth/audit-log/builders.js +1 -1
- package/dist/auth/audit-log/client-ip.d.ts +1 -1
- package/dist/auth/audit-log/client-ip.d.ts.map +1 -1
- package/dist/auth/audit-log/client-ip.js +4 -2
- package/dist/auth/audit-log/events.d.ts +5 -1
- package/dist/auth/audit-log/events.d.ts.map +1 -1
- package/dist/auth/audit-log/events.js +1 -1
- package/dist/auth/audit-log/plugin.d.ts +0 -8
- package/dist/auth/audit-log/plugin.d.ts.map +1 -1
- package/dist/auth/audit-log/plugin.js +48 -52
- package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
- package/dist/auth/audit-log-ingestor.js +16 -12
- package/dist/auth/auth-generator.d.ts.map +1 -1
- package/dist/auth/auth-generator.js +1 -1
- package/dist/auth/better-auth-request.d.ts.map +1 -1
- package/dist/auth/better-auth-request.js +6 -5
- package/dist/auth/knex-adapter.js +1 -1
- package/dist/auth/plugins/entity-definitions/index.d.ts +13 -1
- package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/index.js +1 -1
- package/dist/auth/plugins/wrappers/admin.d.ts +1 -1
- package/dist/bin/build-config.d.ts +25 -0
- package/dist/bin/build-config.d.ts.map +1 -1
- package/dist/bin/build-config.js +105 -2
- package/dist/bin/cli.js +131 -27
- package/dist/bin/compiler-policy.d.ts +3 -0
- package/dist/bin/compiler-policy.d.ts.map +1 -0
- package/dist/bin/compiler-policy.js +24 -0
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +5 -3
- package/dist/bin/test-command.d.ts +22 -1
- package/dist/bin/test-command.d.ts.map +1 -1
- package/dist/bin/test-command.js +18 -10
- package/dist/bin/ts-loader-registration.d.ts +7 -1
- package/dist/bin/ts-loader-registration.d.ts.map +1 -1
- package/dist/bin/ts-loader-registration.js +13 -4
- package/dist/cache/decorator.d.ts.map +1 -1
- package/dist/cache/decorator.js +11 -4
- package/dist/compress/compress.d.ts.map +1 -1
- package/dist/compress/compress.js +1 -1
- package/dist/cone/cone-generator.d.ts +14 -1
- package/dist/cone/cone-generator.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +13 -9
- package/dist/database/_batch_update.js +1 -1
- package/dist/database/base-model.d.ts +22 -10
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +26 -16
- package/dist/database/base-model.types.d.ts +15 -3
- package/dist/database/base-model.types.d.ts.map +1 -1
- package/dist/database/db.d.ts +12 -2
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +10 -7
- package/dist/database/knex.d.ts.map +1 -1
- package/dist/database/knex.js +17 -14
- package/dist/database/puri.d.ts +11 -9
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +93 -79
- package/dist/database/puri.types.d.ts +21 -21
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +1 -1
- package/dist/database/upsert-builder.d.ts +12 -10
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +20 -12
- package/dist/dict/sd.d.ts.map +1 -1
- package/dist/dict/sd.js +1 -1
- package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
- package/dist/dict/sonamu-dictionary.js +1 -1
- package/dist/dict/utils.d.ts.map +1 -1
- package/dist/dict/utils.js +7 -2
- package/dist/entity/entity-manager.d.ts +13 -4
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +19 -11
- package/dist/entity/entity-template-cone.d.ts +73 -5
- package/dist/entity/entity-template-cone.d.ts.map +1 -1
- package/dist/entity/entity-template-cone.js +4 -2
- package/dist/entity/entity.d.ts +6 -2
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +30 -28
- package/dist/env.d.ts +3 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +1 -1
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +7 -2
- package/dist/exceptions/so-exceptions.d.ts +24 -20
- package/dist/exceptions/so-exceptions.d.ts.map +1 -1
- package/dist/exceptions/so-exceptions.js +4 -2
- package/dist/filter/utils.d.ts +7 -2
- package/dist/filter/utils.d.ts.map +1 -1
- package/dist/filter/utils.js +8 -6
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -6
- package/dist/logger/configure.d.ts.map +1 -1
- package/dist/logger/configure.js +10 -10
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +50 -46
- package/dist/migration/index-where-predicate.d.ts.map +1 -1
- package/dist/migration/index-where-predicate.js +22 -8
- package/dist/migration/migration-set.d.ts.map +1 -1
- package/dist/migration/migration-set.js +1 -1
- package/dist/migration/migrator.d.ts +3 -2
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +27 -21
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +51 -36
- package/dist/migration/slack-confirm.d.ts.map +1 -1
- package/dist/migration/slack-confirm.js +1 -1
- package/dist/naite/naite-reporter.js +2 -2
- package/dist/naite/naite.d.ts +74 -15
- package/dist/naite/naite.d.ts.map +1 -1
- package/dist/naite/naite.js +5 -19
- package/dist/runtime-type.d.ts +6 -0
- package/dist/runtime-type.d.ts.map +1 -0
- package/dist/runtime-type.js +26 -0
- package/dist/ssr/hmr-opt-out.d.ts +26 -0
- package/dist/ssr/hmr-opt-out.d.ts.map +1 -0
- package/dist/ssr/hmr-opt-out.js +59 -0
- package/dist/ssr/renderer.d.ts.map +1 -1
- package/dist/ssr/renderer.js +4 -1
- package/dist/storage/base-file.js +14 -14
- package/dist/storage/buffered-file.d.ts +2 -2
- package/dist/storage/buffered-file.d.ts.map +1 -1
- package/dist/storage/buffered-file.js +12 -12
- package/dist/storage/s3-driver.d.ts.map +1 -1
- package/dist/storage/s3-driver.js +1 -1
- package/dist/storage/uploaded-file.d.ts +2 -2
- package/dist/storage/uploaded-file.d.ts.map +1 -1
- package/dist/storage/uploaded-file.js +8 -8
- package/dist/stream/sse.js +11 -11
- package/dist/stream/ws-core.d.ts +1 -1
- package/dist/stream/ws-core.d.ts.map +1 -1
- package/dist/stream/ws-delivery.d.ts +1 -1
- package/dist/stream/ws-delivery.d.ts.map +1 -1
- package/dist/stream/ws-delivery.js +6 -4
- package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
- package/dist/stream/ws-local-connection-store.js +4 -2
- package/dist/stream/ws-presence-store.js +1 -1
- package/dist/stream/ws-registry.d.ts +4 -4
- package/dist/stream/ws-registry.d.ts.map +1 -1
- package/dist/stream/ws-registry.js +4 -2
- package/dist/stream/ws-telemetry.d.ts +16 -12
- package/dist/stream/ws-telemetry.d.ts.map +1 -1
- package/dist/stream/ws-telemetry.js +22 -18
- package/dist/stream/ws.d.ts +18 -12
- package/dist/stream/ws.d.ts.map +1 -1
- package/dist/stream/ws.js +26 -22
- package/dist/syncer/api-parser.js +1 -1
- package/dist/syncer/checksum.d.ts.map +1 -1
- package/dist/syncer/checksum.js +7 -8
- package/dist/syncer/code-generator.d.ts.map +1 -1
- package/dist/syncer/code-generator.js +13 -14
- package/dist/syncer/entity-operations.d.ts.map +1 -1
- package/dist/syncer/entity-operations.js +5 -6
- package/dist/syncer/file-copy.d.ts +5 -0
- package/dist/syncer/file-copy.d.ts.map +1 -0
- package/dist/syncer/file-copy.js +36 -0
- package/dist/syncer/file-patterns.d.ts +1 -0
- package/dist/syncer/file-patterns.d.ts.map +1 -1
- package/dist/syncer/file-patterns.js +5 -2
- package/dist/syncer/file-tracking.d.ts.map +1 -1
- package/dist/syncer/file-tracking.js +5 -4
- package/dist/syncer/filesystem-dependencies.d.ts +15 -0
- package/dist/syncer/filesystem-dependencies.d.ts.map +1 -0
- package/dist/syncer/filesystem-dependencies.js +53 -0
- package/dist/syncer/module-loader.d.ts +1 -1
- package/dist/syncer/module-loader.d.ts.map +1 -1
- package/dist/syncer/module-loader.js +6 -4
- package/dist/syncer/syncer-actions.d.ts +4 -0
- package/dist/syncer/syncer-actions.d.ts.map +1 -1
- package/dist/syncer/syncer-actions.js +34 -17
- package/dist/syncer/syncer.d.ts +17 -6
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +71 -29
- package/dist/syncer/watcher.d.ts.map +1 -1
- package/dist/syncer/watcher.js +3 -3
- package/dist/tasks/decorator.d.ts +6 -6
- package/dist/tasks/decorator.d.ts.map +1 -1
- package/dist/tasks/decorator.js +4 -4
- package/dist/tasks/step-wrapper.d.ts +6 -4
- package/dist/tasks/step-wrapper.d.ts.map +1 -1
- package/dist/tasks/step-wrapper.js +5 -5
- package/dist/tasks/workflow-manager.d.ts.map +1 -1
- package/dist/tasks/workflow-manager.js +13 -7
- package/dist/template/entity-converter.d.ts +1 -1
- package/dist/template/entity-converter.d.ts.map +1 -1
- package/dist/template/entity-converter.js +2 -2
- package/dist/template/helpers.d.ts +8 -6
- package/dist/template/helpers.d.ts.map +1 -1
- package/dist/template/helpers.js +1 -1
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +4 -4
- package/dist/template/implementations/generated_http.template.d.ts +7 -4
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_http.template.js +21 -21
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +6 -3
- package/dist/template/implementations/http_validators.template.d.ts +18 -0
- package/dist/template/implementations/http_validators.template.d.ts.map +1 -0
- package/dist/template/implementations/http_validators.template.js +127 -0
- package/dist/template/implementations/model.template.d.ts.map +1 -1
- package/dist/template/implementations/model.template.js +1 -1
- package/dist/template/implementations/queries.template.js +1 -1
- package/dist/template/implementations/sd.template.d.ts.map +1 -1
- package/dist/template/implementations/sd.template.js +79 -39
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +6 -4
- package/dist/template/implementations/view_form.template.d.ts +6 -1
- package/dist/template/implementations/view_form.template.d.ts.map +1 -1
- package/dist/template/implementations/view_form.template.js +23 -15
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +11 -6
- package/dist/template/template-manager.d.ts.map +1 -1
- package/dist/template/template-manager.js +9 -7
- package/dist/template/template-types.d.ts +12 -5
- package/dist/template/template-types.d.ts.map +1 -1
- package/dist/template/template-types.js +1 -1
- package/dist/template/template.d.ts +2 -2
- package/dist/template/template.d.ts.map +1 -1
- package/dist/template/template.js +6 -4
- package/dist/template/zod-converter.d.ts +0 -19
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +100 -84
- package/dist/testing/_relation-graph.d.ts.map +1 -1
- package/dist/testing/_relation-graph.js +2 -1
- package/dist/testing/bootstrap.d.ts.map +1 -1
- package/dist/testing/bootstrap.js +9 -6
- package/dist/testing/data-explorer.d.ts +32 -7
- package/dist/testing/data-explorer.d.ts.map +1 -1
- package/dist/testing/data-explorer.js +77 -31
- package/dist/testing/dev-test-routes.d.ts +8 -1
- package/dist/testing/dev-test-routes.d.ts.map +1 -1
- package/dist/testing/dev-test-routes.js +125 -108
- package/dist/testing/dev-vitest-manager.d.ts +54 -8
- package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
- package/dist/testing/dev-vitest-manager.js +24 -9
- package/dist/testing/faker-mappings.d.ts +412 -1
- package/dist/testing/faker-mappings.d.ts.map +1 -1
- package/dist/testing/faker-mappings.js +1 -1
- package/dist/testing/filesystem.d.ts +2 -0
- package/dist/testing/filesystem.d.ts.map +1 -0
- package/dist/testing/filesystem.js +7 -0
- package/dist/testing/fixture-generator.d.ts +25 -8
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +132 -73
- package/dist/testing/fixture-loader.d.ts +3 -1
- package/dist/testing/fixture-loader.d.ts.map +1 -1
- package/dist/testing/fixture-loader.js +1 -20
- package/dist/testing/fixture-manager.d.ts +8 -7
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +91 -59
- package/dist/testing/global-setup.d.ts.map +1 -1
- package/dist/testing/global-setup.js +5 -2
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +6 -3
- package/dist/types/types.d.ts +101 -99
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +234 -225
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +1 -1
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +28 -18
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +135 -128
- package/dist/ui/async-route.d.ts +3 -0
- package/dist/ui/async-route.d.ts.map +1 -0
- package/dist/ui/async-route.js +12 -0
- package/dist/ui/cdd-service.d.ts +9 -7
- package/dist/ui/cdd-service.d.ts.map +1 -1
- package/dist/ui/cdd-service.js +7 -5
- package/dist/ui/migrations-api.d.ts.map +1 -1
- package/dist/ui/migrations-api.js +17 -15
- package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
- package/dist/ui-web/index.html +1 -1
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +7 -5
- package/dist/utils/fs-utils.d.ts +3 -3
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +6 -6
- package/dist/utils/model.d.ts +3 -5
- package/dist/utils/model.d.ts.map +1 -1
- package/dist/utils/model.js +1 -1
- package/dist/utils/object-utils.d.ts +1 -1
- package/dist/utils/object-utils.d.ts.map +1 -1
- package/dist/utils/object-utils.js +17 -16
- package/dist/utils/process-utils.d.ts.map +1 -1
- package/dist/utils/process-utils.js +4 -2
- package/dist/utils/runtime-value.d.ts +13 -0
- package/dist/utils/runtime-value.d.ts.map +1 -0
- package/dist/utils/runtime-value.js +40 -0
- package/dist/utils/sql-parser.d.ts +8 -1
- package/dist/utils/sql-parser.d.ts.map +1 -1
- package/dist/utils/sql-parser.js +6 -3
- package/dist/utils/type-utils.d.ts.map +1 -1
- package/dist/utils/type-utils.js +10 -8
- package/dist/utils/utils.d.ts +2 -2
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +11 -8
- package/dist/utils/zod-error.d.ts.map +1 -1
- package/dist/utils/zod-error.js +7 -4
- package/dist/vector/chunking.d.ts.map +1 -1
- package/dist/vector/chunking.js +1 -1
- package/dist/vector/embedding.d.ts.map +1 -1
- package/dist/vector/embedding.js +1 -1
- package/dist/vector/types.d.ts +3 -2
- package/dist/vector/types.d.ts.map +1 -1
- package/package.json +5 -3
- package/src/ai/agents/agent.ts +5 -5
- package/src/ai/agents/types.ts +1 -1
- package/src/ai/providers/rtzr/__tests__/model.test.ts +2 -2
- package/src/ai/providers/rtzr/error.ts +5 -3
- package/src/ai/providers/rtzr/model.ts +3 -2
- package/src/ai/providers/rtzr/options.ts +10 -5
- package/src/ai/providers/rtzr/provider.ts +10 -10
- package/src/ai/providers/rtzr/utils.ts +3 -1
- package/src/api/__tests__/config.test.ts +11 -21
- package/src/api/__tests__/sonamu.http-validator.test.ts +512 -0
- package/src/api/__tests__/sonamu.websocket.test.ts +51 -41
- package/src/api/__tests__/zod-compiler-policy.test.ts +95 -0
- package/src/api/caster.ts +6 -8
- package/src/api/code-converters.ts +136 -36
- package/src/api/config.ts +62 -4
- package/src/api/context.ts +3 -3
- package/src/api/decorators.ts +28 -17
- package/src/api/http-validator.ts +149 -0
- package/src/api/sonamu.ts +459 -152
- package/src/api/websocket-helpers.ts +24 -17
- package/src/auth/audit-log/builders.ts +3 -2
- package/src/auth/audit-log/client-ip.ts +4 -2
- package/src/auth/audit-log/events.ts +15 -1
- package/src/auth/audit-log/plugin.ts +129 -200
- package/src/auth/audit-log-ingestor.ts +19 -15
- package/src/auth/auth-generator.ts +10 -5
- package/src/auth/better-auth-request.ts +4 -3
- package/src/auth/knex-adapter.ts +8 -2
- package/src/auth/plugins/entity-definitions/index.ts +6 -5
- package/src/bin/__tests__/http-validator-benchmark.test.ts +94 -0
- package/src/bin/__tests__/test-command.test.ts +9 -15
- package/src/bin/__tests__/ts-loader-register.test.ts +15 -17
- package/src/bin/__tests__/zod-compiler-build.test.ts +307 -0
- package/src/bin/build-config.ts +167 -0
- package/src/bin/cli.ts +153 -36
- package/src/bin/compiler-policy.ts +35 -0
- package/src/bin/fixture.ts +14 -3
- package/src/bin/test-command.ts +74 -29
- package/src/bin/ts-loader-registration.ts +22 -4
- package/src/cache/decorator.ts +10 -3
- package/src/compress/compress.ts +17 -4
- package/src/cone/cone-generator.ts +34 -6
- package/src/database/__tests__/db.test.ts +1 -0
- package/src/database/__tests__/puri.test.ts +16 -15
- package/src/database/__tests__/transaction-scope.test.ts +5 -0
- package/src/database/_batch_update.ts +1 -0
- package/src/database/base-model.ts +81 -50
- package/src/database/base-model.types.ts +6 -6
- package/src/database/db.ts +29 -19
- package/src/database/knex.ts +30 -17
- package/src/database/puri-subset.test-d.ts +17 -0
- package/src/database/puri.ts +181 -143
- package/src/database/puri.types.test-d.ts +31 -1
- package/src/database/puri.types.ts +23 -21
- package/src/database/upsert-builder.ts +75 -53
- package/src/dict/sd.ts +15 -5
- package/src/dict/sonamu-dictionary.ts +6 -6
- package/src/dict/utils.ts +9 -1
- package/src/entity/entity-manager.ts +26 -9
- package/src/entity/entity-template-cone.ts +5 -10
- package/src/entity/entity.ts +50 -34
- package/src/env.ts +7 -3
- package/src/exceptions/error-handler.ts +17 -2
- package/src/exceptions/so-exceptions.ts +26 -20
- package/src/filter/utils.ts +21 -11
- package/src/index.ts +3 -0
- package/src/logger/configure.ts +26 -18
- package/src/migration/__tests__/migrator.test.ts +50 -57
- package/src/migration/code-generation.ts +132 -104
- package/src/migration/index-where-predicate.ts +51 -24
- package/src/migration/migration-set.ts +11 -5
- package/src/migration/migrator.ts +68 -41
- package/src/migration/postgresql-schema-reader.ts +52 -47
- package/src/migration/slack-confirm.ts +17 -15
- package/src/naite/naite-reporter.ts +1 -1
- package/src/naite/naite.ts +97 -24
- package/src/runtime-type.ts +34 -0
- package/src/ssr/hmr-opt-out.ts +78 -0
- package/src/ssr/renderer.ts +6 -0
- package/src/storage/base-file.ts +13 -13
- package/src/storage/buffered-file.ts +11 -11
- package/src/storage/s3-driver.ts +4 -1
- package/src/storage/uploaded-file.ts +8 -8
- package/src/stream/__tests__/ws-contracts.test.ts +4 -2
- package/src/stream/__tests__/ws-telemetry.test.ts +1 -1
- package/src/stream/__tests__/ws.test.ts +30 -6
- package/src/stream/sse.ts +12 -11
- package/src/stream/ws-core.ts +1 -1
- package/src/stream/ws-delivery.ts +16 -7
- package/src/stream/ws-local-connection-store.ts +2 -3
- package/src/stream/ws-presence-store.ts +6 -1
- package/src/stream/ws-registry.ts +16 -7
- package/src/stream/ws-telemetry.ts +66 -43
- package/src/stream/ws.ts +73 -39
- package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +3 -2
- package/src/syncer/__tests__/http-validator-registry.test.ts +137 -0
- package/src/syncer/api-parser.ts +67 -27
- package/src/syncer/checksum.ts +17 -11
- package/src/syncer/code-generator.ts +25 -17
- package/src/syncer/entity-operations.ts +3 -5
- package/src/syncer/file-copy.ts +46 -0
- package/src/syncer/file-patterns.ts +11 -8
- package/src/syncer/file-tracking.ts +3 -4
- package/src/syncer/filesystem-dependencies.ts +73 -0
- package/src/syncer/module-loader.ts +8 -4
- package/src/syncer/syncer-actions.ts +56 -18
- package/src/syncer/syncer.ts +116 -43
- package/src/syncer/watcher.ts +8 -4
- package/src/tasks/decorator.ts +20 -12
- package/src/tasks/step-wrapper.ts +19 -9
- package/src/tasks/workflow-manager.ts +15 -9
- package/src/template/__tests__/http_validators.template.test.ts +160 -0
- package/src/template/__tests__/services.template.mutation.test.ts +24 -23
- package/src/template/__tests__/services.template.websocket.test.ts +21 -25
- package/src/template/entity-converter.ts +5 -2
- package/src/template/helpers.ts +8 -9
- package/src/template/implementations/generated.template.ts +5 -4
- package/src/template/implementations/generated_http.template.ts +61 -15
- package/src/template/implementations/generated_sso.template.ts +15 -4
- package/src/template/implementations/http_validators.template.ts +175 -0
- package/src/template/implementations/model.template.ts +3 -1
- package/src/template/implementations/sd.template.ts +81 -41
- package/src/template/implementations/services.template.ts +2 -2
- package/src/template/implementations/view_form.template.ts +56 -39
- package/src/template/implementations/view_list.template.ts +31 -23
- package/src/template/template-manager.ts +15 -13
- package/src/template/template-types.ts +13 -5
- package/src/template/template.ts +4 -3
- package/src/template/zod-converter.ts +206 -91
- package/src/testing/__tests__/dev-test-routes.test.ts +85 -25
- package/src/testing/__tests__/dev-vitest-manager.test.ts +15 -15
- package/src/testing/_relation-graph.ts +4 -1
- package/src/testing/bootstrap.ts +12 -5
- package/src/testing/data-explorer.ts +102 -53
- package/src/testing/dev-test-routes.ts +87 -50
- package/src/testing/dev-vitest-manager.ts +88 -32
- package/src/testing/faker-mappings.ts +2 -2
- package/src/testing/filesystem.ts +1 -0
- package/src/testing/fixture-generator.ts +191 -131
- package/src/testing/fixture-loader.ts +5 -1
- package/src/testing/fixture-manager.ts +129 -90
- package/src/testing/global-setup.ts +7 -3
- package/src/testing/index.ts +5 -0
- package/src/types/__tests__/entity-json-schema-search-text.test.ts +9 -3
- package/src/types/types.ts +184 -158
- package/src/ui/ai-api.ts +9 -7
- package/src/ui/ai-client.ts +61 -56
- package/src/ui/api.ts +727 -616
- package/src/ui/async-route.ts +4 -0
- package/src/ui/cdd-service.ts +35 -12
- package/src/ui/migrations-api.ts +63 -51
- package/src/utils/formatter.ts +7 -3
- package/src/utils/fs-utils.ts +5 -5
- package/src/utils/model.ts +4 -5
- package/src/utils/object-utils.ts +32 -22
- package/src/utils/process-utils.ts +4 -1
- package/src/utils/runtime-value.ts +43 -0
- package/src/utils/sql-parser.ts +13 -6
- package/src/utils/type-utils.ts +9 -7
- package/src/utils/utils.ts +19 -21
- package/src/utils/zod-error.ts +4 -2
- package/src/vector/chunking.ts +6 -1
- package/src/vector/embedding.ts +2 -1
- package/src/vector/types.ts +4 -2
- package/tsdown.api.config.ts +5 -2
- package/dist/ui-web/assets/index-C0m1pk6K.js +0 -177
package/dist/ui/ai-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-api.d.ts","sourceRoot":"","sources":["../../src/ui/ai-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,wBAAsB,QAAQ,CAAC,MAAM,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"ai-api.d.ts","sourceRoot":"","sources":["../../src/ui/ai-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,wBAAsB,QAAQ,CAAC,MAAM,EAAE,eAAe,iBAwDrD"}
|
package/dist/ui/ai-api.js
CHANGED
|
@@ -47,4 +47,4 @@ var init_ai_api = __esmMin((() => {
|
|
|
47
47
|
init_ai_api();
|
|
48
48
|
export { init_ai_api, setAiApi };
|
|
49
49
|
|
|
50
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXBpLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9haS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29udmVydFRvTW9kZWxNZXNzYWdlcyB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgdHlwZSBVSU1lc3NhZ2UgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHR5cGUgRmFzdGlmeUluc3RhbmNlIH0gZnJvbSBcImZhc3RpZnlcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IHR5cGUgRml4dHVyZVJlY29yZCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgYWlDbGllbnQgfSBmcm9tIFwiLi9haS1jbGllbnRcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEFpQXBpKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlKSB7XG4gIGF3YWl0IGFpQ2xpZW50LmluaXQoKTtcblxuICBzZXJ2ZXIucG9zdChcIi9hcGkvYWkvZml4dHVyZS9jaGF0XCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgIGNvbnN0IHsgbWVzc2FnZXMsIGZpeHR1cmVSZWNvcmRzIH0gPVxuICAgICAgLyogU0FGRVRZOiBVSSDrj4TqtazsnZggWm9kIOyeheugpSDsiqTtgqTrp4jqsIAg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByZXF1ZXN0LmJvZHkgYXMge1xuICAgICAgICBtZXNzYWdlczogVUlNZXNzYWdlW107XG4gICAgICAgIGZpeHR1cmVSZWNvcmRzPzogRml4dHVyZVJlY29yZFtdO1xuICAgICAgfTtcblxuICAgIGlmICghZml4dHVyZVJlY29yZHMgfHwgZml4dHVyZVJlY29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5maXh0dXJlUmVjb3JkUmVxdWlyZWRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGFpQ2xpZW50LmhhbmRsZUZpeHR1cmUoYXdhaXQgY29udmVydFRvTW9kZWxNZXNzYWdlcyhtZXNzYWdlcyksIGZpeHR1cmVSZWNvcmRzKTtcbiAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC50b1VJTWVzc2FnZVN0cmVhbVJlc3BvbnNlKCk7XG5cbiAgICByZXBseS5yYXcud3JpdGVIZWFkKHJlc3BvbnNlLnN0YXR1cywgT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmhlYWRlcnMpKSk7XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSkge1xuICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICAgIGlmIChkb25lKSBicmVhaztcbiAgICAgICAgcmVwbHkucmF3LndyaXRlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXBseS5yYXcuZW5kKCk7XG4gICAgcmV0dXJuIHJlcGx5O1xuICB9KTtcblxuICAvLyBFbnRpdHkvRW51bSDsg53shLHsmqkgQUkgQ2hhdCBTdHJlYW1cbiAgc2VydmVyLnBvc3QoXCIvYXBpL2FpL2VudGl0eS9jaGF0XCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9XG4gICAgICAvKiBTQUZFVFk6IFVJIOuPhOq1rOydmCBab2Qg7J6F66ClIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJlcXVlc3QuYm9keSBhcyB7XG4gICAgICAgIG1lc3NhZ2VzOiBVSU1lc3NhZ2VbXTtcbiAgICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhaUNsaWVudC5oYW5kbGVFbnRpdHkoYXdhaXQgY29udmVydFRvTW9kZWxNZXNzYWdlcyhtZXNzYWdlcykpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnRvVUlNZXNzYWdlU3RyZWFtUmVzcG9uc2UoKTtcblxuICAgIHJlcGx5LnJhdy53cml0ZUhlYWQocmVzcG9uc2Uuc3RhdHVzLCBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuaGVhZGVycykpKTtcblxuICAgIGlmIChyZXNwb25zZS5ib2R5KSB7XG4gICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgICAgICByZXBseS5yYXcud3JpdGUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlcGx5LnJhdy5lbmQoKTtcbiAgICByZXR1cm4gcmVwbHk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQSxlQUFzQixTQUFTLFFBQXlCO0NBQ3RELE1BQU0sU0FBUyxLQUFLO0NBRXBCLE9BQU8sS0FBSyx3QkFBd0IsT0FBTyxTQUFTLFVBQVU7RUFDNUQsTUFBTSxFQUFFLFVBQVUsbUJBQ2dDLFFBQVE7RUFLMUQsSUFBSSxDQUFDLGtCQUFrQixlQUFlLFdBQVcsR0FDL0MsTUFBTSxJQUFJLG9CQUFvQixHQUFHLG9DQUFvQyxDQUFDO0VBSXhFLE1BQU0sV0FEUyxTQUFTLGNBQWMsTUFBTSx1QkFBdUIsUUFBUSxHQUFHLGNBQzdELENBQUEsQ0FBTywwQkFBMEI7RUFFbEQsTUFBTSxJQUFJLFVBQVUsU0FBUyxRQUFRLE9BQU8sWUFBWSxPQUFPLFFBQVEsU0FBUyxPQUFPLENBQUMsQ0FBQztFQUV6RixJQUFJLFNBQVMsTUFBTTtHQUNqQixNQUFNLFNBQVMsU0FBUyxLQUFLLFVBQVU7R0FDdkMsT0FBTyxNQUFNO0lBQ1gsTUFBTSxFQUFFLE1BQU0sVUFBVSxNQUFNLE9BQU8sS0FBSztJQUMxQyxJQUFJLE1BQU07SUFDVixNQUFNLElBQUksTUFBTSxLQUFLO0dBQ3ZCO0VBQ0Y7RUFFQSxNQUFNLElBQUksSUFBSTtFQUNkLE9BQU87Q0FDVCxDQUFDO0NBR0QsT0FBTyxLQUFLLHVCQUF1QixPQUFPLFNBQVMsVUFBVTtFQUMzRCxNQUFNLEVBQUUsYUFDMEMsUUFBUTtFQUsxRCxNQUFNLFdBRFMsU0FBUyxhQUFhLE1BQU0sdUJBQXVCLFFBQVEsQ0FDekQsQ0FBQSxDQUFPLDBCQUEwQjtFQUVsRCxNQUFNLElBQUksVUFBVSxTQUFTLFFBQVEsT0FBTyxZQUFZLE9BQU8sUUFBUSxTQUFTLE9BQU8sQ0FBQyxDQUFDO0VBRXpGLElBQUksU0FBUyxNQUFNO0dBQ2pCLE1BQU0sU0FBUyxTQUFTLEtBQUssVUFBVTtHQUN2QyxPQUFPLE1BQU07SUFDWCxNQUFNLEVBQUUsTUFBTSxVQUFVLE1BQU0sT0FBTyxLQUFLO0lBQzFDLElBQUksTUFBTTtJQUNWLE1BQU0sSUFBSSxNQUFNLEtBQUs7R0FDdkI7RUFDRjtFQUVBLE1BQU0sSUFBSSxJQUFJO0VBQ2QsT0FBTztDQUNULENBQUM7QUFDSDs7U0E3RCtCO29CQUNrQztnQkFFM0IifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/ui/ai-client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAWlF,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/ui/ai-client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAWlF,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAarE,cAAM,QAAQ;IACZ,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,KAAK,CAIG;IAEV,IAAI;IAcV,aAAa,CACX,QAAQ,EAAE,YAAY,EAAE,EACxB,cAAc,EAAE,aAAa,EAAE,GAC9B,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC;IAyM7B,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC;CAoRnE;AAiDD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
|
package/dist/ui/ai-client.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { init_utils, nonNullable } from "../utils/utils.js";
|
|
3
|
-
import { Sonamu, init_sonamu } from "../api/sonamu.js";
|
|
4
3
|
import { TemplateOptions, getEnumDefValues, init_types, isInternalSubsetField, normalizeSubsetField } from "../types/types.js";
|
|
4
|
+
import { Sonamu, init_sonamu } from "../api/sonamu.js";
|
|
5
5
|
import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
|
|
6
|
-
import { z
|
|
6
|
+
import { z } from "zod";
|
|
7
7
|
import assert from "assert";
|
|
8
8
|
import fs from "fs";
|
|
9
9
|
import path from "path";
|
|
@@ -38,12 +38,20 @@ function validateEntityJson(input) {
|
|
|
38
38
|
});
|
|
39
39
|
return errors;
|
|
40
40
|
}
|
|
41
|
-
var AIClient, aiClient;
|
|
41
|
+
var fixtureScalarSchema, fixtureColumnValueSchema, fixtureColumnsSchema, AIClient, aiClient;
|
|
42
42
|
var init_ai_client = __esmMin((() => {
|
|
43
43
|
init_sonamu();
|
|
44
44
|
init_entity_manager();
|
|
45
45
|
init_types();
|
|
46
46
|
init_utils();
|
|
47
|
+
fixtureScalarSchema = z.union([
|
|
48
|
+
z.string(),
|
|
49
|
+
z.number(),
|
|
50
|
+
z.boolean(),
|
|
51
|
+
z.null()
|
|
52
|
+
]);
|
|
53
|
+
fixtureColumnValueSchema = z.union([fixtureScalarSchema, z.array(fixtureScalarSchema)]);
|
|
54
|
+
fixtureColumnsSchema = z.record(z.string(), fixtureColumnValueSchema);
|
|
47
55
|
AIClient = class {
|
|
48
56
|
model = null;
|
|
49
57
|
aiSdk = null;
|
|
@@ -63,6 +71,7 @@ var init_ai_client = __esmMin((() => {
|
|
|
63
71
|
}
|
|
64
72
|
handleFixture(messages, fixtureRecords) {
|
|
65
73
|
if (!this.aiSdk || !this.model) throw new Error("AI SDK not initialized. Call init() first.");
|
|
74
|
+
const model = this.model;
|
|
66
75
|
const entityStructures = [...new Set(fixtureRecords.map((r) => r.entityId))].map((entityId) => {
|
|
67
76
|
const entity = EntityManager.get(entityId);
|
|
68
77
|
return {
|
|
@@ -103,15 +112,15 @@ var init_ai_client = __esmMin((() => {
|
|
|
103
112
|
`;
|
|
104
113
|
const { streamText, tool } = this.aiSdk;
|
|
105
114
|
return streamText({
|
|
106
|
-
model
|
|
115
|
+
model,
|
|
107
116
|
system: systemMessage,
|
|
108
117
|
messages,
|
|
109
118
|
tools: {
|
|
110
119
|
updateFixtures: tool({
|
|
111
120
|
description: "픽스쳐 레코드의 값을 수정합니다. 사용자가 특정 컬럼이나 값을 변경해달라고 요청할 때 사용하세요.",
|
|
112
|
-
inputSchema: z
|
|
113
|
-
fixtureId: z
|
|
114
|
-
updates:
|
|
121
|
+
inputSchema: z.object({ updates: z.array(z.object({
|
|
122
|
+
fixtureId: z.string().describe("수정할 픽스쳐 ID (형식: EntityId#id)"),
|
|
123
|
+
updates: fixtureColumnsSchema.describe("컬럼명을 키로, 새 값을 값으로 하는 객체")
|
|
115
124
|
})) }),
|
|
116
125
|
execute: async ({ updates }) => {
|
|
117
126
|
return {
|
|
@@ -129,10 +138,10 @@ var init_ai_client = __esmMin((() => {
|
|
|
129
138
|
}),
|
|
130
139
|
createFixtures: tool({
|
|
131
140
|
description: "새로운 픽스쳐 레코드를 생성합니다. 사용자가 새로운 데이터를 추가해달라고 요청할 때 사용하세요.",
|
|
132
|
-
inputSchema: z
|
|
133
|
-
entityId: z
|
|
134
|
-
id: z
|
|
135
|
-
columns:
|
|
141
|
+
inputSchema: z.object({ fixtures: z.array(z.object({
|
|
142
|
+
entityId: z.string().describe("생성할 엔티티 ID"),
|
|
143
|
+
id: z.number().describe("새 레코드의 ID (음수 권장, 예: -1, -2)"),
|
|
144
|
+
columns: fixtureColumnsSchema.describe("컬럼명을 키로, 값을 값으로 하는 객체")
|
|
136
145
|
})) }),
|
|
137
146
|
execute: async ({ fixtures }) => {
|
|
138
147
|
const newRecords = fixtures.map((fixture) => {
|
|
@@ -195,6 +204,7 @@ var init_ai_client = __esmMin((() => {
|
|
|
195
204
|
}
|
|
196
205
|
handleEntity(messages) {
|
|
197
206
|
if (!this.aiSdk || !this.model) throw new Error("AI SDK not initialized. Call init() first.");
|
|
207
|
+
const model = this.model;
|
|
198
208
|
const instructionsPath = path.join(import.meta.dirname, "..", "..", "src", "ui", "entity.instructions.md");
|
|
199
209
|
const instructions = fs.readFileSync(instructionsPath, "utf-8");
|
|
200
210
|
const existingEntities = EntityManager.getAllIds().map((entityId) => {
|
|
@@ -278,14 +288,14 @@ updateEntity({ entityId: "Project", updates: { props: [{ name: "priority", type:
|
|
|
278
288
|
`;
|
|
279
289
|
const { streamText, tool, stepCountIs } = this.aiSdk;
|
|
280
290
|
return streamText({
|
|
281
|
-
model
|
|
291
|
+
model,
|
|
282
292
|
system: systemMessage,
|
|
283
293
|
messages,
|
|
284
294
|
stopWhen: stepCountIs(2),
|
|
285
295
|
tools: {
|
|
286
296
|
createEntity: tool({
|
|
287
297
|
description: "새로운 Entity를 생성합니다. 사용자가 새로운 엔티티나 테이블 생성을 요청할 때 사용하세요.",
|
|
288
|
-
inputSchema: TemplateOptions
|
|
298
|
+
inputSchema: TemplateOptions["shape"].entity,
|
|
289
299
|
execute: async (entity) => {
|
|
290
300
|
try {
|
|
291
301
|
const validationErrors = validateEntityJson(entity);
|
|
@@ -317,10 +327,10 @@ updateEntity({ entityId: "Project", updates: { props: [{ name: "priority", type:
|
|
|
317
327
|
}),
|
|
318
328
|
updateEntity: tool({
|
|
319
329
|
description: "기존 Entity를 수정합니다. Enum 추가, props 추가/수정, indexes 수정, subsets 수정 등 모든 엔티티 수정 작업에 사용하세요.",
|
|
320
|
-
inputSchema: z
|
|
321
|
-
entityId: z
|
|
322
|
-
updates: TemplateOptions
|
|
323
|
-
mode: z
|
|
330
|
+
inputSchema: z.object({
|
|
331
|
+
entityId: z.string().describe("수정할 Entity ID"),
|
|
332
|
+
updates: TemplateOptions["shape"].entity.partial().describe("수정할 필드들"),
|
|
333
|
+
mode: z.enum(["merge", "replace"]).optional().describe("수정 모드: merge(기본값, 기존 값에 병합) 또는 replace(전체 교체)")
|
|
324
334
|
}),
|
|
325
335
|
execute: async ({ entityId, updates, mode = "merge" }) => {
|
|
326
336
|
try {
|
|
@@ -396,4 +406,4 @@ updateEntity({ entityId: "Project", updates: { props: [{ name: "priority", type:
|
|
|
396
406
|
init_ai_client();
|
|
397
407
|
export { aiClient, init_ai_client };
|
|
398
408
|
|
|
399
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY2xpZW50LmpzIiwibmFtZXMiOlsieiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9haS1jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG4vKiBveGxpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovIC8vIEFJIFNES+ydmCDtg4DsnoXsnbQg66qF7ZmV7ZWY7KeAIOyViuyVhCBhbnnrpbwg7ZeI7Jqp7ZWoXG5pbXBvcnQgeyB0eXBlIExhbmd1YWdlTW9kZWwsIHR5cGUgTW9kZWxNZXNzYWdlLCB0eXBlIFN0cmVhbVRleHRSZXN1bHQgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgZ2V0RW51bURlZlZhbHVlcyxcbiAgaXNJbnRlcm5hbFN1YnNldEZpZWxkLFxuICBub3JtYWxpemVTdWJzZXRGaWVsZCxcbiAgVGVtcGxhdGVPcHRpb25zLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5UHJvcCwgdHlwZSBGaXh0dXJlUmVjb3JkIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBub25OdWxsYWJsZSB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG50eXBlIFZhbGlkYXRpb25FcnJvciA9IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufTtcblxuY2xhc3MgQUlDbGllbnQge1xuICBwcml2YXRlIG1vZGVsOiBMYW5ndWFnZU1vZGVsIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYWlTZGs6XG4gICAgfCAodHlwZW9mIGltcG9ydChcImFpXCIpICYge1xuICAgICAgICBhbnRocm9waWM/OiB0eXBlb2YgaW1wb3J0KFwiQGFpLXNkay9hbnRocm9waWNcIikuYW50aHJvcGljO1xuICAgICAgfSlcbiAgICB8IG51bGwgPSBudWxsO1xuXG4gIGFzeW5jIGluaXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYW50aHJvcGljIH0gPSBhd2FpdCBpbXBvcnQoXCJAYWktc2RrL2FudGhyb3BpY1wiKTtcbiAgICAgIGNvbnN0IGFpTW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiYWlcIik7XG4gICAgICB0aGlzLmFpU2RrID0geyAuLi5haU1vZHVsZSwgYW50aHJvcGljIH07XG4gICAgICB0aGlzLm1vZGVsID0gYW50aHJvcGljKFwiY2xhdWRlLXNvbm5ldC00LTZcIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJBSSBTREsgcGFja2FnZXMgbm90IGluc3RhbGxlZC4gSW5zdGFsbCBAYWktc2RrL2FudGhyb3BpYyBhbmQgYWkgdG8gdXNlIEFJIGZlYXR1cmVzLlwiLFxuICAgICAgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpeHR1cmUoXG4gICAgbWVzc2FnZXM6IE1vZGVsTWVzc2FnZVtdLFxuICAgIGZpeHR1cmVSZWNvcmRzOiBGaXh0dXJlUmVjb3JkW10sXG4gICk6IFN0cmVhbVRleHRSZXN1bHQ8YW55LCBhbnk+IHtcbiAgICBpZiAoIXRoaXMuYWlTZGsgfHwgIXRoaXMubW9kZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFJIFNESyBub3QgaW5pdGlhbGl6ZWQuIENhbGwgaW5pdCgpIGZpcnN0LlwiKTtcbiAgICB9XG5cbiAgICAvLyDtmITsnqwgZml4dHVyZVJlY29yZHPsl5DshJwg7IKs7Jqp65CcIOyXlO2LsO2LsOuTpOydmCDqtazsobAg7KCV67O0IOyImOynkVxuICAgIGNvbnN0IHVzZWRFbnRpdHlJZHMgPSBbLi4ubmV3IFNldChmaXh0dXJlUmVjb3Jkcy5tYXAoKHIpID0+IHIuZW50aXR5SWQpKV07XG4gICAgY29uc3QgZW50aXR5U3RydWN0dXJlcyA9IHVzZWRFbnRpdHlJZHMubWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnRpdHlJZDogZW50aXR5LmlkLFxuICAgICAgICB0YWJsZTogZW50aXR5LnRhYmxlLFxuICAgICAgICBwcm9wczogZW50aXR5LnByb3BzLFxuICAgICAgICByZWxhdGlvbnM6IGVudGl0eS5yZWxhdGlvbnMsXG4gICAgICAgIGVudW1MYWJlbHM6IGVudGl0eS5lbnVtTGFiZWxzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHN5c3RlbU1lc3NhZ2UgPSBgXG4gICAgICAgIOuLueyLoOydgCDtlL3siqTss5Ag66CI7L2U65Oc66W8IOyImOygle2VmOqzoCDsg53shLHtlaAg7IiYIOyeiOuKlCDrj4TsmrDrr7jsnoXri4jri6QuXG5cbiAgICAgICAg7ZiE7J6sIO2UveyKpOyzkCDroIjsvZTrk5w6XG4gICAgICAgICR7SlNPTi5zdHJpbmdpZnkoZml4dHVyZVJlY29yZHMsIG51bGwsIDIpfVxuXG4gICAgICAgIOyXlO2LsO2LsCDqtazsobAg7KCV67O0OlxuICAgICAgICAke0pTT04uc3RyaW5naWZ5KGVudGl0eVN0cnVjdHVyZXMsIG51bGwsIDIpfVxuXG4gICAgICAgICMjIO2UveyKpOyzkCDsiJjsoJVcbiAgICAgICAg7IKs7Jqp7J6Q6rCAIO2UveyKpOyzkCDqsJIg7IiY7KCV7J2EIOyalOyyre2VmOuptCB1cGRhdGVGaXh0dXJlcyDrj4Tqtazrpbwg7IKs7Jqp7ZWY7JesIOuzgOqyveyCrO2VreydhCDsoIHsmqntlZjshLjsmpQuXG4gICAgICAgIC0gZml4dHVyZUlkOiDsiJjsoJXtlaAg7ZS97Iqk7LOQIElEICjtmJXsi506IFwiRW50aXR5SWQjaWRcIilcbiAgICAgICAgLSB1cGRhdGVzOiDsu6zrn7zrqoXsnYQg7YKk66GcLCDsg4gg6rCS7J2EIOqwkuycvOuhnCDtlZjripQg6rCd7LK0XG5cbiAgICAgICAg7JiI7IucOiBcIlVzZXIjMVwiIO2UveyKpOyzkOydmCBcIm5hbWVcIiDsu6zrn7zsnYQgXCLtmY3quLjrj5lcIuycvOuhnCDrs4Dqsr3tlZjroKTrqbQ6XG4gICAgICAgIHVwZGF0ZUZpeHR1cmVzKHsgdXBkYXRlczogW3sgZml4dHVyZUlkOiBcIlVzZXIjMVwiLCB1cGRhdGVzOiB7IG5hbWU6IFwi7ZmN6ri464+ZXCIgfSB9XSB9KVxuXG4gICAgICAgIOuzgOqyveuQoCDsu6zrn7zsnZggdHlwZeydtCByZWxhdGlvbuyduCDqsr3smrAsIOq0gOugqCDsl5Tti7Dti7Dsl5Drj4Qg67CY7JiB65CY7Ja07JW8IO2VoCDsu6zrn7zsnbQg7J6I64qU7KeAIO2ZleyduO2VmOyEuOyalC5cblxuICAgICAgICAjIyDtlL3siqTss5Ag7IOd7ISxXG4gICAgICAgIOyCrOyaqeyekOqwgCDsg4jroZzsmrQg7ZS97Iqk7LOQIOyDneyEseydhCDsmpTssq3tlZjrqbQgY3JlYXRlRml4dHVyZXMg64+E6rWs66W8IOyCrOyaqe2VmOyEuOyalC5cbiAgICAgICAgLSBlbnRpdHlJZDog7IOd7ISx7ZWgIOyXlO2LsO2LsCBJRFxuICAgICAgICAtIGlkOiDsg4gg66CI7L2U65Oc7J2YIElEICjquLDsobQg7ZS97Iqk7LOQ7JmAIOykkeuzteuQmOyngCDslYrripQg7J2M7IiYIOyCrOyaqSDqtozsnqUsIOyYiDogLTEsIC0yKVxuICAgICAgICAtIGNvbHVtbnM6IOy7rOufvOuqheydhCDtgqTroZwsIOqwkuydhCDqsJLsnLzroZwg7ZWY64qUIOqwneyytCAo7JeU7Yuw7YuwIOq1rOyhsCDssLjqs6ApXG5cbiAgICAgICAg7JiI7IucOiDsg4jroZzsmrQgVXNlciDtlL3siqTss5Drpbwg7IOd7ISx7ZWY66Ck66m0OlxuICAgICAgICBjcmVhdGVGaXh0dXJlcyh7IGZpeHR1cmVzOiBbeyBlbnRpdHlJZDogXCJVc2VyXCIsIGlkOiAtMSwgY29sdW1uczogeyBuYW1lOiBcIu2Zjeq4uOuPmVwiLCBlbWFpbDogXCJob25nQGV4YW1wbGUuY29tXCIgfSB9XSB9KVxuICAgICAgYDtcblxuICAgIGNvbnN0IHsgc3RyZWFtVGV4dCwgdG9vbCB9ID0gdGhpcy5haVNkaztcblxuICAgIHJldHVybiBzdHJlYW1UZXh0KHtcbiAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgc3lzdGVtOiBzeXN0ZW1NZXNzYWdlLFxuICAgICAgbWVzc2FnZXMsXG4gICAgICB0b29sczoge1xuICAgICAgICB1cGRhdGVGaXh0dXJlczogdG9vbCh7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBcIu2UveyKpOyzkCDroIjsvZTrk5zsnZgg6rCS7J2EIOyImOygle2VqeuLiOuLpC4g7IKs7Jqp7J6Q6rCAIO2KueyglSDsu6zrn7zsnbTrgpgg6rCS7J2EIOuzgOqyve2VtOuLrOudvOqzoCDsmpTssq3tlaAg65WMIOyCrOyaqe2VmOyEuOyalC5cIixcbiAgICAgICAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgICAgICAgdXBkYXRlczogei5hcnJheShcbiAgICAgICAgICAgICAgei5vYmplY3Qoe1xuICAgICAgICAgICAgICAgIGZpeHR1cmVJZDogei5zdHJpbmcoKS5kZXNjcmliZShcIuyImOygle2VoCDtlL3siqTss5AgSUQgKO2YleyLnTogRW50aXR5SWQjaWQpXCIpLFxuICAgICAgICAgICAgICAgIHVwZGF0ZXM6IHpcbiAgICAgICAgICAgICAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAuZGVzY3JpYmUoXCLsu6zrn7zrqoXsnYQg7YKk66GcLCDsg4gg6rCS7J2EIOqwkuycvOuhnCDtlZjripQg6rCd7LK0XCIpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKHtcbiAgICAgICAgICAgIHVwZGF0ZXMsXG4gICAgICAgICAgfToge1xuICAgICAgICAgICAgdXBkYXRlczogQXJyYXk8eyBmaXh0dXJlSWQ6IHN0cmluZzsgdXBkYXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT47XG4gICAgICAgICAgfSk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuOyB1cGRhdGVkUmVjb3JkczogRml4dHVyZVJlY29yZFtdIH0+ID0+IHtcbiAgICAgICAgICAgIC8vIGZpeHR1cmVSZWNvcmRz66W8IOuzteyCrO2VmOqzoCDsl4XrjbDsnbTtirgg7KCB7JqpXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkUmVjb3JkczogRml4dHVyZVJlY29yZFtdID0gZml4dHVyZVJlY29yZHMubWFwKChyZWNvcmQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gdXBkYXRlcy5maW5kKFxuICAgICAgICAgICAgICAgICh1OiB7IGZpeHR1cmVJZDogc3RyaW5nIH0pID0+IHUuZml4dHVyZUlkID09PSByZWNvcmQuZml4dHVyZUlkLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gY29sdW1uc+ydmCB2YWx1ZeulvCDsl4XrjbDsnbTtirhcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtjb2x1bW5OYW1lLCBuZXdWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModXBkYXRlLnVwZGF0ZXMpKSB7XG4gICAgICAgICAgICAgICAgICByZWNvcmQuY29sdW1uc1tjb2x1bW5OYW1lXS52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlIGFzIEZpeHR1cmVSZWNvcmRbXCJjb2x1bW5zXCJdW3N0cmluZ11bXCJ2YWx1ZVwiXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgdXBkYXRlZFJlY29yZHMgfTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgY3JlYXRlRml4dHVyZXM6IHRvb2woe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgXCLsg4jroZzsmrQg7ZS97Iqk7LOQIOugiOy9lOuTnOulvCDsg53shLHtlanri4jri6QuIOyCrOyaqeyekOqwgCDsg4jroZzsmrQg642w7J207YSw66W8IOy2lOqwgO2VtOuLrOudvOqzoCDsmpTssq3tlaAg65WMIOyCrOyaqe2VmOyEuOyalC5cIixcbiAgICAgICAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgICAgICAgZml4dHVyZXM6IHouYXJyYXkoXG4gICAgICAgICAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgICAgICAgICBlbnRpdHlJZDogei5zdHJpbmcoKS5kZXNjcmliZShcIuyDneyEse2VoCDsl5Tti7Dti7AgSURcIiksXG4gICAgICAgICAgICAgICAgaWQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCLsg4gg66CI7L2U65Oc7J2YIElEICjsnYzsiJgg6raM7J6lLCDsmIg6IC0xLCAtMilcIiksXG4gICAgICAgICAgICAgICAgY29sdW1uczogelxuICAgICAgICAgICAgICAgICAgLnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSlcbiAgICAgICAgICAgICAgICAgIC5kZXNjcmliZShcIuy7rOufvOuqheydhCDtgqTroZwsIOqwkuydhCDqsJLsnLzroZwg7ZWY64qUIOqwneyytFwiKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jICh7XG4gICAgICAgICAgICBmaXh0dXJlcyxcbiAgICAgICAgICB9OiB7XG4gICAgICAgICAgICBmaXh0dXJlczogQXJyYXk8eyBlbnRpdHlJZDogc3RyaW5nOyBpZDogbnVtYmVyOyBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PjtcbiAgICAgICAgICB9KTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IHVwZGF0ZWRSZWNvcmRzOiBGaXh0dXJlUmVjb3JkW10gfT4gPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3UmVjb3JkczogRml4dHVyZVJlY29yZFtdID0gZml4dHVyZXMubWFwKFxuICAgICAgICAgICAgICAoZml4dHVyZTogeyBlbnRpdHlJZDogc3RyaW5nOyBpZDogbnVtYmVyOyBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZml4dHVyZS5lbnRpdHlJZCk7XG5cbiAgICAgICAgICAgICAgICAvLyDsl5Tti7Dti7AgcHJvcHPrpbwg6riw67CY7Jy866GcIGNvbHVtbnMg6rWs7ISxXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uczogRml4dHVyZVJlY29yZFtcImNvbHVtbnNcIl0gPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgZW50aXR5LnByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocHJvcC50eXBlID09PSBcInZpcnR1YWxcIikgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGZpeHR1cmUuY29sdW1uc1twcm9wLm5hbWVdID8/IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChwcm9wLm5hbWUgPT09IFwiY3JlYXRlZF9hdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIO2YhOyerCDsi5zqsITsnLzroZwg7ISk7KCVXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgcHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgKHByb3AucmVsYXRpb25UeXBlID09PSBcIkhhc01hbnlcIiB8fCBwcm9wLnJlbGF0aW9uVHlwZSA9PT0gXCJNYW55VG9NYW55XCIpXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g67Cw7Je066GcIOuzgO2ZmFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdLmZpbHRlcihub25OdWxsYWJsZSk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbHVtbnNbcHJvcC5uYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlIGFzIEZpeHR1cmVSZWNvcmRbXCJjb2x1bW5zXCJdW3N0cmluZ11bXCJ2YWx1ZVwiXSxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGZpeHR1cmVJZDogYCR7Zml4dHVyZS5lbnRpdHlJZH0jJHtmaXh0dXJlLmlkfWAsXG4gICAgICAgICAgICAgICAgICBlbnRpdHlJZDogZml4dHVyZS5lbnRpdHlJZCxcbiAgICAgICAgICAgICAgICAgIGlkOiBmaXh0dXJlLmlkLFxuICAgICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICAgIGZldGNoZWRSZWNvcmRzOiBbXSxcbiAgICAgICAgICAgICAgICAgIGJlbG9uZ3NSZWNvcmRzOiBbXSxcbiAgICAgICAgICAgICAgICAgIG92ZXJyaWRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8g7IOIIOugiOy9lOuTnOuTpOydmCByZWxhdGlvbiDsu6zrn7zsnYQg7ZmV7J247ZWY7JesIOq4sOyhtCDroIjsvZTrk5zrk6TsnZgg7Jet67Cp7ZalIHJlbGF0aW9uIOyXheuNsOydtO2KuFxuICAgICAgICAgICAgZm9yIChjb25zdCBuZXdSZWNvcmQgb2YgbmV3UmVjb3Jkcykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfY29sTmFtZSwgY29sXSBvZiBPYmplY3QuZW50cmllcyhuZXdSZWNvcmQuY29sdW1ucykpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sLnByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiIHx8IGNvbC52YWx1ZSA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWxhdGVkRW50aXR5SWQgPSBjb2wucHJvcC53aXRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRJZHMgPSBBcnJheS5pc0FycmF5KGNvbC52YWx1ZSkgPyBjb2wudmFsdWUgOiBbY29sLnZhbHVlXTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVsYXRlZElkIG9mIHJlbGF0ZWRJZHMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRGaXh0dXJlSWQgPSBgJHtyZWxhdGVkRW50aXR5SWR9IyR7cmVsYXRlZElkfWA7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZWxhdGVkUmVjb3JkID0gbmV3UmVjb3Jkcy5maW5kKChyKSA9PiByLmZpeHR1cmVJZCA9PT0gcmVsYXRlZEZpeHR1cmVJZCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChyZWxhdGVkUmVjb3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOyXreuwqe2WpSByZWxhdGlvbiDssL7quLBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZUNvbCA9IE9iamVjdC5lbnRyaWVzKHJlbGF0ZWRSZWNvcmQuY29sdW1ucykuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAoWywgY10pID0+IGMucHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgJiYgYy5wcm9wLndpdGggPT09IG5ld1JlY29yZC5lbnRpdHlJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmV2ZXJzZUNvbCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtyZXZlcnNlQ29sTmFtZSwgcmV2ZXJzZUNvbFZhbHVlXSA9IHJldmVyc2VDb2w7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gcmV2ZXJzZUNvbFZhbHVlLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgLy8g7Jet67Cp7Zal7J20IOuwsOyXtOyduCDqsr3smrAgKEhhc01hbnksIE1hbnlUb01hbnkpXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZUNvbFZhbHVlLnByb3AudHlwZSA9PT0gXCJyZWxhdGlvblwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAocmV2ZXJzZUNvbFZhbHVlLnByb3AucmVsYXRpb25UeXBlID09PSBcIkhhc01hbnlcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlQ29sVmFsdWUucHJvcC5yZWxhdGlvblR5cGUgPT09IFwiTWFueVRvTWFueVwiKVxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSwgXCJjdXJyZW50VmFsdWUgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudFZhbHVlLmluY2x1ZGVzKG5ld1JlY29yZC5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZFJlY29yZC5jb2x1bW5zW3JldmVyc2VDb2xOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXZlcnNlQ29sVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFsuLi5jdXJyZW50VmFsdWUsIG5ld1JlY29yZC5pZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOyXreuwqe2WpeydtCDri6jsnbwg6rCS7J24IOqyveyasCAoQmVsb25nc1RvT25lLCBPbmVUb09uZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRSZWNvcmQuY29sdW1uc1tyZXZlcnNlQ29sTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJldmVyc2VDb2xWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5ld1JlY29yZC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHVwZGF0ZWRSZWNvcmRzOiBuZXdSZWNvcmRzIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRW50aXR5KG1lc3NhZ2VzOiBNb2RlbE1lc3NhZ2VbXSk6IFN0cmVhbVRleHRSZXN1bHQ8YW55LCBhbnk+IHtcbiAgICBpZiAoIXRoaXMuYWlTZGsgfHwgIXRoaXMubW9kZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFJIFNESyBub3QgaW5pdGlhbGl6ZWQuIENhbGwgaW5pdCgpIGZpcnN0LlwiKTtcbiAgICB9XG5cbiAgICAvLyBlbnRpdHkuaW5zdHJ1Y3Rpb25zLm1kIO2MjOydvCDsnb3quLAgKGRpc3QvdWkg65iQ64qUIHNyYy91aeyXkOyEnCDsi6TtlonrkJjrr4DroZwg7Yyo7YKk7KeAIOujqO2KuCDquLDspIDsnLzroZwg7KCR6re8KVxuICAgIGNvbnN0IGluc3RydWN0aW9uc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgICBpbXBvcnQubWV0YS5kaXJuYW1lLFxuICAgICAgXCIuLlwiLFxuICAgICAgXCIuLlwiLFxuICAgICAgXCJzcmNcIixcbiAgICAgIFwidWlcIixcbiAgICAgIFwiZW50aXR5Lmluc3RydWN0aW9ucy5tZFwiLFxuICAgICk7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gZnMucmVhZEZpbGVTeW5jKGluc3RydWN0aW9uc1BhdGgsIFwidXRmLThcIik7XG5cbiAgICAvLyDtmITsnqwg65Ox66Gd65CcIOyXlO2LsO2LsCDsoJXrs7Qg7IiY7KeRXG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBleGlzdGluZ0VudGl0aWVzID0gZW50aXR5SWRzLm1hcCgoZW50aXR5SWQpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBlbnRpdHkuaWQsXG4gICAgICAgIHRpdGxlOiBlbnRpdHkudGl0bGUsXG4gICAgICAgIHRhYmxlOiBlbnRpdHkudGFibGUsXG4gICAgICAgIHByb3BzOiBlbnRpdHkucHJvcHMubWFwKChwKSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICB0eXBlOiBwLnR5cGUsXG4gICAgICAgICAgZGVzYzogcC5kZXNjLFxuICAgICAgICB9KSksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3lzdGVtTWVzc2FnZSA9IGBcbuuLueyLoOydgCBTb25hbXUg7ZSE66CI7J6E7JuM7YGs7JeQ7IScIEVudGl0eeyZgCBFbnVt7J2EIOyDneyEse2VmOuKlCDrj4TsmrDrr7jsnoXri4jri6QuXG5cbiR7aW5zdHJ1Y3Rpb25zfVxuXG4jIyDtmITsnqwg65Ox66Gd65CcIEVudGl0eSDrqqnroZ1cbuuLpOuluCDsl5Tti7Dti7DsmYAg6rSA6rOEKHJlbGF0aW9uKeulvCDrp7rqsbDrgpggc3Vic2V07JeQ7IScIOywuOyhsO2VoCDrlYwg67CY65Oc7IucIOyVhOuemCDsoJXrs7Trpbwg7ZmV7J247ZWY7IS47JqULlxuXG4ke0pTT04uc3RyaW5naWZ5KGV4aXN0aW5nRW50aXRpZXMsIG51bGwsIDIpfVxuXG4jIyBUb29sIOyCrOyaqSDqsIDsnbTrk5xcblxuIyMjIEVudGl0eSDsg53shLEgKGNyZWF0ZUVudGl0eSlcbuyCrOyaqeyekOqwgCDsg4jroZzsmrQgRW50aXR5IOyDneyEseydhCDsmpTssq3tlZjrqbQgY3JlYXRlRW50aXR5IOuPhOq1rOulvCDsgqzsmqntlZjshLjsmpQuXG4tIGVudGl0eUlkOiBQYXNjYWxDYXNl66GcIOuQnCBFbnRpdHkgSUQgKOyYiDogXCJVc2VyXCIsIFwiUHJvZHVjdENhdGVnb3J5XCIpXG4tIHRpdGxlOiDtlZzquIAg7KCc66qpICjsmIg6IFwi7IKs7Jqp7J6QXCIsIFwi7IOB7ZKIIOy5tO2FjOqzoOumrFwiKVxuLSB0YWJsZTogc25ha2VfY2FzZeuhnCDrkJwg7YWM7J2067iU66qFICjsmIg6IFwidXNlcnNcIiwgXCJwcm9kdWN0X2NhdGVnb3JpZXNcIilcbi0gcGFyZW50SWQ6IOu2gOuqqCBFbnRpdHkgSUQgKOyEoO2DneyCrO2VrSlcbi0gcHJvcHM6IEVudGl0eeydmCDtlITroZztjbzti7Ag67Cw7Je0ICjsnIQg66y47ISc7J2YIFByb3BlcnR5IFR5cGVzIOywuOqzoClcbi0gaW5kZXhlczog7J24642x7IqkIOuwsOyXtFxuLSBzdWJzZXRzOiDshJzruIzshYsg7KCV7J2YICjquLDrs7jqsJI6IHsgQTogW1wiaWRcIl0gfSlcbi0gZW51bXM6IEVudW0g7KCV7J2YXG5cbiMjIyBFbnRpdHkg7IiY7KCVICh1cGRhdGVFbnRpdHkpXG7quLDsobQgRW50aXR566W8IOyImOygle2VoCDrlYwgdXBkYXRlRW50aXR5IOuPhOq1rOulvCDsgqzsmqntlZjshLjsmpQuIEVudW0g7LaU6rCALCBwcm9wcyDstpTqsIAv7IiY7KCVLCBpbmRleGVzIOyImOyglSDrk7Eg66qo65OgIOyImOyglSDsnpHsl4Xsl5Ag7IKs7Jqp7ZWp64uI64ukLlxuLSBlbnRpdHlJZDog7IiY7KCV7ZWgIEVudGl0eSBJRFxuLSB1cGRhdGVzOiDsiJjsoJXtlaAg7ZWE65Oc65OkICjrtoDrtoQg7JeF642w7J207Yq4KVxuICAtIHRpdGxlOiDsl5Tti7Dti7Ag7ZWc6riAIOygnOuqqVxuICAtIHRhYmxlOiDthYzsnbTruJTrqoVcbiAgLSBwcm9wczog7LaU6rCA7ZWgIO2UhOuhnO2NvO2LsCDrsLDsl7QgKOq4sOyhtCBwcm9wc+yXkCDstpTqsIAsIOqwmeydgCDsnbTrpoTsnbTrqbQg6rWQ7LK0KVxuICAtIGluZGV4ZXM6IOy2lOqwgO2VoCDsnbjrjbHsiqQg67Cw7Je0ICjquLDsobQgaW5kZXhlc+yXkCDstpTqsIApXG4gIC0gc3Vic2V0czog7ISc67iM7IWLIOygleydmCAo6riw7KG0IHN1YnNldHPsl5Ag67OR7ZWpKVxuICAtIGVudW1MYWJlbHM6IEVudW0g7KCV7J2YICjquLDsobQgZW51bUxhYmVsc+yXkCDrs5HtlakpXG4tIG1vZGU6IFwibWVyZ2VcIijquLDrs7jqsJIpIOuYkOuKlCBcInJlcGxhY2VcIlxuICAtIG1lcmdlOiDquLDsobQg6rCS7JeQIOuzke2VqVxuICAtIHJlcGxhY2U6IO2VtOuLuSDtlYTrk5wg7KCE7LK0IOq1kOyytFxuXG7smIjsi5w6IEVtcGxveWVl7JeQIOyDiCBFbnVtIOy2lOqwgFxudXBkYXRlRW50aXR5KHsgZW50aXR5SWQ6IFwiRW1wbG95ZWVcIiwgdXBkYXRlczogeyBlbnVtTGFiZWxzOiB7IFwiRW1wbG95ZWVSb2xlXCI6IHsgXCJhZG1pblwiOiBcIuq0gOumrOyekFwiLCBcInVzZXJcIjogXCLsnbzrsJhcIiB9IH0gfSB9KVxuXG7smIjsi5w6IFByb2plY3Tsl5Ag7IOIIO2UhOuhnO2NvO2LsCDstpTqsIBcbnVwZGF0ZUVudGl0eSh7IGVudGl0eUlkOiBcIlByb2plY3RcIiwgdXBkYXRlczogeyBwcm9wczogW3sgbmFtZTogXCJwcmlvcml0eVwiLCB0eXBlOiBcImludGVnZXJcIiwgZGVzYzogXCLsmrDshKDsiJzsnIRcIiB9XSB9IH0pXG5cbiMjIO2VhOyImCDsgqztla1cbi0gRW50aXR57J2YIHByb3Bz7JeQ64qUIOy1nOyGjO2VnCBpZChpbnRlZ2VyLCB1bnNpZ25lZCksIGNyZWF0ZWRfYXQodGltZXN0YW1wKeqwgCDtj6ztlajrkJjslrTslbwg7ZWp64uI64ukLlxuLSByZWxhdGlvbiDtlYTrk5zripQgb25VcGRhdGUsIG9uRGVsZXRl6rCAIO2VhOyImOyeheuLiOuLpC4gKOyYiOyZuDogT25lVG9PbmXsl5DshJwgaGFzSm9pbkNvbHVtbuydtCBmYWxzZeyduCDqsr3smrApXG4tIEVudW0gSUTripQg67O07Ya1IEVudGl0eUlkICsg7IaN7ISx66qFIO2Yle2DnOyeheuLiOuLpCAo7JiIOiBVc2VyU3RhdHVzLCBQcm9kdWN0VHlwZSlcbi0gc3Vic2V07JeQ7IScIOuLpOuluCDsl5Tti7Dti7DsnZgg7ZSE66Gc7Y287Yuw66W8IOywuOyhsO2VoCDrlYzripQg67CY65Oc7IucIO2VtOuLuSDsl5Tti7Dti7DsnZgg7Iuk7KCcIO2UhOuhnO2NvO2LsOuqheydhCDsgqzsmqntlZjshLjsmpQuXG5cbiMjIOqygOymnSDsmKTrpZgg7LKY66asXG7rj4Tqtawg7Zi47LacIOqysOqzvOuhnCDqsoDspp0g7Jik66WYKHZhbGlkYXRpb25FcnJvcnMp6rCAIOuwmO2ZmOuQmOuptDpcbjEuIOyYpOulmCDrqZTsi5zsp4Drpbwg67aE7ISd7ZWY7JesIOusuOygnOygkOydhCDtjIzslYXtlZjshLjsmpQuXG4yLiDsmKTrpZjrpbwg7IiY7KCV7ZWcIOuNsOydtO2EsOuhnCBjcmVhdGVFbnRpdHnrpbwg64uk7IucIO2YuOy2nO2VmOyEuOyalC5cbjMuIOyCrOyaqeyekOyXkOqyjCDsmKTrpZjrpbwg6re464yA66GcIOyghOuLrO2VmOyngCDrp5Dqs6AsIOyImOyglSDtm4Qg7J6s7Iuc64+E7ZWY7IS47JqULlxuXG4jIyMg7J2867CY7KCB7J24IOqygOymnSDsmKTrpZjsmYAg7IiY7KCVIOuwqeuylVxufCDsmKTrpZgg66mU7Iuc7KeAIHwg7IiY7KCVIOuwqeuylSB8XG58LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18XG58IFwiaWQg7ZSE66Gc7Y287Yuw6rCAIO2VhOyImFwiIHwgcHJvcHPsl5AgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiLCB1bnNpZ25lZDogdHJ1ZSB9IOy2lOqwgCB8XG58IFwiY3JlYXRlZF9hdCDtlITroZztjbzti7DqsIAg7ZWE7IiYXCIgfCBwcm9wc+yXkCB7IG5hbWU6IFwiY3JlYXRlZF9hdFwiLCB0eXBlOiBcInRpbWVzdGFtcFwiLCBkYkRlZmF1bHQ6IFwiQ1VSUkVOVF9USU1FU1RBTVBcIiB9IOy2lOqwgCB8XG58IFwiWHh4T3JkZXJCeSBlbnVt7J20IO2VhOyImFwiIHwgZW51bXPsl5AgeyBcIlh4eE9yZGVyQnlcIjogeyBcImlkLWRlc2NcIjogXCJJROy1nOyLoOyInFwiIH0gfSDstpTqsIAgfFxufCBcIlh4eFNlYXJjaEZpZWxkIGVudW3snbQg7ZWE7IiYXCIgfCBlbnVtc+yXkCB7IFwiWHh4U2VhcmNoRmllbGRcIjogeyBcImlkXCI6IFwiSURcIiB9IH0g7LaU6rCAIHxcbnwgXCJzdHJpbmcg7YOA7J6F7J2AIGxlbmd0aOqwgCDtlYTsiJhcIiB8IO2VtOuLuSBwcm9w7JeQIGxlbmd0aCDstpTqsIAgKOyYiDogMjU1KSB8XG58IFwidGV4dCDtg4DsnoXsnYAgdGV4dFR5cGXsnbQg7ZWE7IiYXCIgfCDtlbTri7kgcHJvcOyXkCB0ZXh0VHlwZSDstpTqsIAgKFwidGV4dFwiLCBcIm1lZGl1bXRleHRcIiwgXCJsb25ndGV4dFwiKSB8XG58IFwib25VcGRhdGXqsIAg7ZWE7IiYXCIgfCDtlbTri7kgcmVsYXRpb24gcHJvcOyXkCBvblVwZGF0ZSwgb25EZWxldGUg7LaU6rCAIChcIkNBU0NBREVcIikgfFxuICAgICAgYDtcblxuICAgIGNvbnN0IHsgc3RyZWFtVGV4dCwgdG9vbCwgc3RlcENvdW50SXMgfSA9IHRoaXMuYWlTZGs7XG5cbiAgICByZXR1cm4gc3RyZWFtVGV4dCh7XG4gICAgICBtb2RlbDogdGhpcy5tb2RlbCBhcyB1bmtub3duIGFzIExhbmd1YWdlTW9kZWwsXG4gICAgICBzeXN0ZW06IHN5c3RlbU1lc3NhZ2UsXG4gICAgICBtZXNzYWdlcyxcbiAgICAgIHN0b3BXaGVuOiBzdGVwQ291bnRJcygyKSxcbiAgICAgIHRvb2xzOiB7XG4gICAgICAgIGNyZWF0ZUVudGl0eTogdG9vbCh7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBcIuyDiOuhnOyatCBFbnRpdHnrpbwg7IOd7ISx7ZWp64uI64ukLiDsgqzsmqnsnpDqsIAg7IOI66Gc7Jq0IOyXlO2LsO2LsOuCmCDthYzsnbTruJQg7IOd7ISx7J2EIOyalOyyre2VoCDrlYwg7IKs7Jqp7ZWY7IS47JqULlwiLFxuICAgICAgICAgIGlucHV0U2NoZW1hOiBUZW1wbGF0ZU9wdGlvbnMuc2hhcGUuZW50aXR5LFxuICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChcbiAgICAgICAgICAgIGVudGl0eTogei5pbmZlcjx0eXBlb2YgVGVtcGxhdGVPcHRpb25zLnNoYXBlLmVudGl0eT4sXG4gICAgICAgICAgKTogUHJvbWlzZTx7XG4gICAgICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgIGVycm9yPzogc3RyaW5nO1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9ycz86IFZhbGlkYXRpb25FcnJvcltdO1xuICAgICAgICAgIH0+ID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIOyeheugpSDqsoDspp1cbiAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IHZhbGlkYXRlRW50aXR5SnNvbihlbnRpdHkpO1xuXG4gICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBlbnRpdHlJZDogZW50aXR5LmVudGl0eUlkLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGDqsoDspp0g7Jik66WYOiAke3ZhbGlkYXRpb25FcnJvcnMubWFwKChlKSA9PiBgWyR7ZS5maWVsZH1dICR7ZS5tZXNzYWdlfWApLmpvaW4oXCIsIFwiKX1gLFxuICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9ycyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoe1xuICAgICAgICAgICAgICAgIHN1YnNldHM6IHsgQTogW1wiaWRcIl0gfSxcbiAgICAgICAgICAgICAgICBlbnVtczoge30sXG4gICAgICAgICAgICAgICAgLi4uZW50aXR5LFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAvLyBFbnRpdHlNYW5hZ2VyIOumrOuhnOuTnFxuICAgICAgICAgICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLnJlbG9hZCgpO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGVudGl0eUlkOiBlbnRpdHkuZW50aXR5SWQgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVudGl0eUlkOiBlbnRpdHkuZW50aXR5SWQsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHVwZGF0ZUVudGl0eTogdG9vbCh7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBcIuq4sOyhtCBFbnRpdHnrpbwg7IiY7KCV7ZWp64uI64ukLiBFbnVtIOy2lOqwgCwgcHJvcHMg7LaU6rCAL+yImOyglSwgaW5kZXhlcyDsiJjsoJUsIHN1YnNldHMg7IiY7KCVIOuTsSDrqqjrk6Ag7JeU7Yuw7YuwIOyImOyglSDsnpHsl4Xsl5Ag7IKs7Jqp7ZWY7IS47JqULlwiLFxuICAgICAgICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICAgICAgICBlbnRpdHlJZDogei5zdHJpbmcoKS5kZXNjcmliZShcIuyImOygle2VoCBFbnRpdHkgSURcIiksXG4gICAgICAgICAgICB1cGRhdGVzOiBUZW1wbGF0ZU9wdGlvbnMuc2hhcGUuZW50aXR5LnBhcnRpYWwoKS5kZXNjcmliZShcIuyImOygle2VoCDtlYTrk5zrk6RcIiksXG4gICAgICAgICAgICBtb2RlOiB6XG4gICAgICAgICAgICAgIC5lbnVtKFtcIm1lcmdlXCIsIFwicmVwbGFjZVwiXSlcbiAgICAgICAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgICAgICAgLmRlc2NyaWJlKFwi7IiY7KCVIOuqqOuTnDogbWVyZ2Uo6riw67O46rCSLCDquLDsobQg6rCS7JeQIOuzke2VqSkg65iQ64qUIHJlcGxhY2Uo7KCE7LK0IOq1kOyytClcIiksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKHtcbiAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgdXBkYXRlcyxcbiAgICAgICAgICAgIG1vZGUgPSBcIm1lcmdlXCIsXG4gICAgICAgICAgfToge1xuICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgIHVwZGF0ZXM6IFBhcnRpYWw8ei5pbmZlcjx0eXBlb2YgVGVtcGxhdGVPcHRpb25zLnNoYXBlLmVudGl0eT4+O1xuICAgICAgICAgICAgbW9kZT86IFwibWVyZ2VcIiB8IFwicmVwbGFjZVwiO1xuICAgICAgICAgIH0pOiBQcm9taXNlPHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgICAgZXJyb3I/OiBzdHJpbmc7XG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3JzPzogVmFsaWRhdGlvbkVycm9yW107XG4gICAgICAgICAgfT4gPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSBiYXNpYyBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVzLmVudGl0eUlkICE9PSB1bmRlZmluZWQpIGVudGl0eS5pZCA9IHVwZGF0ZXMuZW50aXR5SWQ7XG4gICAgICAgICAgICAgIGlmICh1cGRhdGVzLnBhcmVudElkICE9PSB1bmRlZmluZWQpIGVudGl0eS5wYXJlbnRJZCA9IHVwZGF0ZXMucGFyZW50SWQ7XG4gICAgICAgICAgICAgIGlmICh1cGRhdGVzLnRpdGxlICE9PSB1bmRlZmluZWQpIGVudGl0eS50aXRsZSA9IHVwZGF0ZXMudGl0bGU7XG4gICAgICAgICAgICAgIGlmICh1cGRhdGVzLnRhYmxlICE9PSB1bmRlZmluZWQpIGVudGl0eS50YWJsZSA9IHVwZGF0ZXMudGFibGU7XG4gICAgICAgICAgICAgIGlmICh1cGRhdGVzLmNvbmUgIT09IHVuZGVmaW5lZCkgZW50aXR5LmNvbmUgPSB1cGRhdGVzLmNvbmU7XG5cbiAgICAgICAgICAgICAgLy8gcHJvcHM6IG1lcmdlIOyLnCDsnbTrpoQg6riw7KSAIOuzke2VqSwgcmVwbGFjZSDsi5wg6rWQ7LK0XG4gICAgICAgICAgICAgIGlmICh1cGRhdGVzLnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gXCJyZXBsYWNlXCIpIHtcbiAgICAgICAgICAgICAgICAgIGVudGl0eS5wcm9wcyA9IHVwZGF0ZXMucHJvcHMgYXMgRW50aXR5UHJvcFtdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5ld1Byb3Agb2YgdXBkYXRlcy5wcm9wcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gZW50aXR5LnByb3BzLmZpbmRJbmRleCgocCkgPT4gcC5uYW1lID09PSBuZXdQcm9wLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZW50aXR5LnByb3BzW2V4aXN0aW5nSW5kZXhdID0gbmV3UHJvcCBhcyBFbnRpdHlQcm9wO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS5wcm9wcy5wdXNoKG5ld1Byb3AgYXMgRW50aXR5UHJvcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBpbmRleGVzOiBtZXJnZSDsi5wg7LaU6rCALCByZXBsYWNlIOyLnCDqtZDssrRcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZXMuaW5kZXhlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZW50aXR5LmluZGV4ZXMgPVxuICAgICAgICAgICAgICAgICAgbW9kZSA9PT0gXCJyZXBsYWNlXCIgPyB1cGRhdGVzLmluZGV4ZXMgOiBbLi4uZW50aXR5LmluZGV4ZXMsIC4uLnVwZGF0ZXMuaW5kZXhlc107XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBzdWJzZXRzLCBzdWJzZXRzSW50ZXJuYWw6IGFzc2lnbuycvOuhnCDrs5Htlakg65iQ64qUIOq1kOyytFxuICAgICAgICAgICAgICBpZiAodXBkYXRlcy5zdWJzZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUgc3Vic2V0IGZpZWxkczogc2VwYXJhdGUgaW50byBzdWJzZXRzIChub3JtYWwpIGFuZCBzdWJzZXRzSW50ZXJuYWwgKGludGVybmFsKVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdWJzZXRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkU3Vic2V0c0ludGVybmFsOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRzXSBvZiBPYmplY3QuZW50cmllcyh1cGRhdGVzLnN1YnNldHMpKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEFycmF5ID0gZmllbGRzIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFN1YnNldHNba2V5XSA9IGZpZWxkQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZjogc3RyaW5nKSA9PiAhaXNJbnRlcm5hbFN1YnNldEZpZWxkKGYpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKG5vcm1hbGl6ZVN1YnNldEZpZWxkKTtcbiAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRTdWJzZXRzSW50ZXJuYWxba2V5XSA9IGZpZWxkQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihpc0ludGVybmFsU3Vic2V0RmllbGQpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAobm9ybWFsaXplU3Vic2V0RmllbGQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGVudGl0eS5zdWJzZXRzID1cbiAgICAgICAgICAgICAgICAgIG1vZGUgPT09IFwicmVwbGFjZVwiXG4gICAgICAgICAgICAgICAgICAgID8gbm9ybWFsaXplZFN1YnNldHNcbiAgICAgICAgICAgICAgICAgICAgOiB7IC4uLmVudGl0eS5zdWJzZXRzLCAuLi5ub3JtYWxpemVkU3Vic2V0cyB9O1xuICAgICAgICAgICAgICAgIGVudGl0eS5zdWJzZXRzSW50ZXJuYWwgPVxuICAgICAgICAgICAgICAgICAgbW9kZSA9PT0gXCJyZXBsYWNlXCJcbiAgICAgICAgICAgICAgICAgICAgPyBub3JtYWxpemVkU3Vic2V0c0ludGVybmFsXG4gICAgICAgICAgICAgICAgICAgIDogeyAuLi5lbnRpdHkuc3Vic2V0c0ludGVybmFsLCAuLi5ub3JtYWxpemVkU3Vic2V0c0ludGVybmFsIH07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodXBkYXRlcy5lbnVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVkRW51bXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyh1cGRhdGVzLmVudW1zKS5tYXAoKFtrZXksIGVudW1EZWZdKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RW51bURlZlZhbHVlcyhlbnVtRGVmKSxcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZW50aXR5LmVudW1MYWJlbHMgPVxuICAgICAgICAgICAgICAgICAgbW9kZSA9PT0gXCJyZXBsYWNlXCIgPyBjb252ZXJ0ZWRFbnVtcyA6IHsgLi4uZW50aXR5LmVudW1MYWJlbHMsIC4uLmNvbnZlcnRlZEVudW1zIH07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyDsoIDsnqUg7KCEIOqygOymnVxuICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGVFbnRpdHlKc29uKHtcbiAgICAgICAgICAgICAgICAuLi5lbnRpdHksXG4gICAgICAgICAgICAgICAgZW50aXR5SWQ6IGVudGl0eS5pZCxcbiAgICAgICAgICAgICAgICBlbnVtczogZW50aXR5LmVudW1MYWJlbHMsXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBg6rKA7KadIOyYpOulmDogJHt2YWxpZGF0aW9uRXJyb3JzLm1hcCgoZSkgPT4gYFske2UuZmllbGR9XSAke2UubWVzc2FnZX1gKS5qb2luKFwiLCBcIil9YCxcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvcnMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZW50aXR5SWQgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVudGl0eUlkLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEVudGl0eSBKU09O7J20IGVudGl0eS5pbnN0cnVjdGlvbnMubWTsnZgg6rec7LmZ7J2EIOuUsOultOuKlOyngCDqsoDspp3tlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRW50aXR5SnNvbihpbnB1dDogVGVtcGxhdGVPcHRpb25zW1wiZW50aXR5XCJdKTogVmFsaWRhdGlvbkVycm9yW10ge1xuICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gIGNvbnN0IHsgZW50aXR5SWQsIHByb3BzLCBlbnVtcyB9ID0gaW5wdXQ7XG5cbiAgLy8gMS4gaWQsIGNyZWF0ZWRfYXQgcHJvcCDtlYTsiJhcbiAgY29uc3QgaGFzSWRQcm9wID0gcHJvcHM/LnNvbWUoKHApID0+IHAubmFtZSA9PT0gXCJpZFwiKTtcbiAgaWYgKCFoYXNJZFByb3ApIHtcbiAgICBlcnJvcnMucHVzaCh7IGZpZWxkOiBcInByb3BzXCIsIG1lc3NhZ2U6IFwiaWQg7ZSE66Gc7Y287Yuw6rCAIO2VhOyImOyeheuLiOuLpC5cIiB9KTtcbiAgfVxuICBjb25zdCBoYXNDcmVhdGVkQXRQcm9wID0gcHJvcHM/LnNvbWUoKHApID0+IHAubmFtZSA9PT0gXCJjcmVhdGVkX2F0XCIpO1xuICBpZiAoIWhhc0NyZWF0ZWRBdFByb3ApIHtcbiAgICBlcnJvcnMucHVzaCh7IGZpZWxkOiBcInByb3BzXCIsIG1lc3NhZ2U6IFwiY3JlYXRlZF9hdCDtlITroZztjbzti7DqsIAg7ZWE7IiY7J6F64uI64ukLlwiIH0pO1xuICB9XG5cbiAgLy8gMi4g7ZWE7IiYIGVudW0g6rKA7KadOiBFbnRpdHlOYW1lT3JkZXJCeSwgRW50aXR5TmFtZVNlYXJjaEZpZWxkXG4gIGNvbnN0IG9yZGVyQnlFbnVtSWQgPSBgJHtlbnRpdHlJZH1PcmRlckJ5YDtcbiAgY29uc3Qgc2VhcmNoRmllbGRFbnVtSWQgPSBgJHtlbnRpdHlJZH1TZWFyY2hGaWVsZGA7XG5cbiAgaWYgKCFlbnVtcz8uW29yZGVyQnlFbnVtSWRdKSB7XG4gICAgZXJyb3JzLnB1c2goe1xuICAgICAgZmllbGQ6IFwiZW51bXNcIixcbiAgICAgIG1lc3NhZ2U6IGAke29yZGVyQnlFbnVtSWR9IGVudW3snbQg7ZWE7IiY7J6F64uI64ukLiAo7JiIOiB7IFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIgfSlgLFxuICAgIH0pO1xuICB9XG4gIGlmICghZW51bXM/LltzZWFyY2hGaWVsZEVudW1JZF0pIHtcbiAgICBlcnJvcnMucHVzaCh7XG4gICAgICBmaWVsZDogXCJlbnVtc1wiLFxuICAgICAgbWVzc2FnZTogYCR7c2VhcmNoRmllbGRFbnVtSWR9IGVudW3snbQg7ZWE7IiY7J6F64uI64ukLiAo7JiIOiB7IFwiaWRcIjogXCJJRFwiIH0pYCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIDMuIGVudW0gcHJvcOydmCBpZOqwgCBlbnVtc+yXkCDsoJXsnZjrkJjslrQg7J6I64qU7KeAIO2ZleyduCAoY3Jvc3MtZmllbGQg6rKA7KadKVxuICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMgPz8gW10pIHtcbiAgICBpZiAocHJvcC50eXBlID09PSBcImVudW1cIiAmJiAhZW51bXM/Lltwcm9wLmlkXSkge1xuICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICBmaWVsZDogYHByb3BzLiR7cHJvcC5uYW1lfWAsXG4gICAgICAgIG1lc3NhZ2U6IGBlbnVtIGlkIFwiJHtwcm9wLmlkfVwi6rCAIGVudW1z7JeQIOygleydmOuQmOyWtCDsnojsp4Ag7JWK7Iq164uI64ukLmAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG5leHBvcnQgY29uc3QgYWlDbGllbnQgPSBuZXcgQUlDbGllbnQoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQW1oQkEsU0FBUyxtQkFBbUIs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
|
|
409
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY2xpZW50LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9haS1jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG4vKiBveGxpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovIC8vIEFJIFNES+ydmCDtg4DsnoXsnbQg66qF7ZmV7ZWY7KeAIOyViuyVhCBhbnnrpbwg7ZeI7Jqp7ZWoXG5pbXBvcnQgeyB0eXBlIExhbmd1YWdlTW9kZWwsIHR5cGUgTW9kZWxNZXNzYWdlLCB0eXBlIFN0cmVhbVRleHRSZXN1bHQgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgZ2V0RW51bURlZlZhbHVlcyxcbiAgaXNJbnRlcm5hbFN1YnNldEZpZWxkLFxuICBub3JtYWxpemVTdWJzZXRGaWVsZCxcbiAgVGVtcGxhdGVPcHRpb25zLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5UHJvcCwgdHlwZSBGaXh0dXJlUmVjb3JkIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBub25OdWxsYWJsZSB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG50eXBlIFZhbGlkYXRpb25FcnJvciA9IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufTtcblxuY29uc3QgZml4dHVyZVNjYWxhclNjaGVtYSA9IHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCksIHouYm9vbGVhbigpLCB6Lm51bGwoKV0pO1xuY29uc3QgZml4dHVyZUNvbHVtblZhbHVlU2NoZW1hID0gei51bmlvbihbZml4dHVyZVNjYWxhclNjaGVtYSwgei5hcnJheShmaXh0dXJlU2NhbGFyU2NoZW1hKV0pO1xuY29uc3QgZml4dHVyZUNvbHVtbnNTY2hlbWEgPSB6LnJlY29yZCh6LnN0cmluZygpLCBmaXh0dXJlQ29sdW1uVmFsdWVTY2hlbWEpO1xudHlwZSBGaXh0dXJlVG9vbENvbHVtbnMgPSB6LmluZmVyPHR5cGVvZiBmaXh0dXJlQ29sdW1uc1NjaGVtYT47XG5cbmNsYXNzIEFJQ2xpZW50IHtcbiAgcHJpdmF0ZSBtb2RlbDogTGFuZ3VhZ2VNb2RlbCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGFpU2RrOlxuICAgIHwgKHR5cGVvZiBpbXBvcnQoXCJhaVwiKSAmIHtcbiAgICAgICAgYW50aHJvcGljPzogdHlwZW9mIGltcG9ydChcIkBhaS1zZGsvYW50aHJvcGljXCIpLmFudGhyb3BpYztcbiAgICAgIH0pXG4gICAgfCBudWxsID0gbnVsbDtcblxuICBhc3luYyBpbml0KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGFudGhyb3BpYyB9ID0gYXdhaXQgaW1wb3J0KFwiQGFpLXNkay9hbnRocm9waWNcIik7XG4gICAgICBjb25zdCBhaU1vZHVsZSA9IGF3YWl0IGltcG9ydChcImFpXCIpO1xuICAgICAgdGhpcy5haVNkayA9IHsgLi4uYWlNb2R1bGUsIGFudGhyb3BpYyB9O1xuICAgICAgdGhpcy5tb2RlbCA9IGFudGhyb3BpYyhcImNsYXVkZS1zb25uZXQtNC02XCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiQUkgU0RLIHBhY2thZ2VzIG5vdCBpbnN0YWxsZWQuIEluc3RhbGwgQGFpLXNkay9hbnRocm9waWMgYW5kIGFpIHRvIHVzZSBBSSBmZWF0dXJlcy5cIixcbiAgICAgICk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVGaXh0dXJlKFxuICAgIG1lc3NhZ2VzOiBNb2RlbE1lc3NhZ2VbXSxcbiAgICBmaXh0dXJlUmVjb3JkczogRml4dHVyZVJlY29yZFtdLFxuICApOiBTdHJlYW1UZXh0UmVzdWx0PGFueSwgYW55PiB7XG4gICAgaWYgKCF0aGlzLmFpU2RrIHx8ICF0aGlzLm1vZGVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBSSBTREsgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC5cIik7XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbDtcblxuICAgIC8vIO2YhOyerCBmaXh0dXJlUmVjb3Jkc+yXkOyEnCDsgqzsmqnrkJwg7JeU7Yuw7Yuw65Ok7J2YIOq1rOyhsCDsoJXrs7Qg7IiY7KeRXG4gICAgY29uc3QgdXNlZEVudGl0eUlkcyA9IFsuLi5uZXcgU2V0KGZpeHR1cmVSZWNvcmRzLm1hcCgocikgPT4gci5lbnRpdHlJZCkpXTtcbiAgICBjb25zdCBlbnRpdHlTdHJ1Y3R1cmVzID0gdXNlZEVudGl0eUlkcy5tYXAoKGVudGl0eUlkKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eUlkOiBlbnRpdHkuaWQsXG4gICAgICAgIHRhYmxlOiBlbnRpdHkudGFibGUsXG4gICAgICAgIHByb3BzOiBlbnRpdHkucHJvcHMsXG4gICAgICAgIHJlbGF0aW9uczogZW50aXR5LnJlbGF0aW9ucyxcbiAgICAgICAgZW51bUxhYmVsczogZW50aXR5LmVudW1MYWJlbHMsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3lzdGVtTWVzc2FnZSA9IGBcbiAgICAgICAg64u57Iug7J2AIO2UveyKpOyzkCDroIjsvZTrk5zrpbwg7IiY7KCV7ZWY6rOgIOyDneyEse2VoCDsiJgg7J6I64qUIOuPhOyasOuvuOyeheuLiOuLpC5cblxuICAgICAgICDtmITsnqwg7ZS97Iqk7LOQIOugiOy9lOuTnDpcbiAgICAgICAgJHtKU09OLnN0cmluZ2lmeShmaXh0dXJlUmVjb3JkcywgbnVsbCwgMil9XG5cbiAgICAgICAg7JeU7Yuw7YuwIOq1rOyhsCDsoJXrs7Q6XG4gICAgICAgICR7SlNPTi5zdHJpbmdpZnkoZW50aXR5U3RydWN0dXJlcywgbnVsbCwgMil9XG5cbiAgICAgICAgIyMg7ZS97Iqk7LOQIOyImOyglVxuICAgICAgICDsgqzsmqnsnpDqsIAg7ZS97Iqk7LOQIOqwkiDsiJjsoJXsnYQg7JqU7LKt7ZWY66m0IHVwZGF0ZUZpeHR1cmVzIOuPhOq1rOulvCDsgqzsmqntlZjsl6wg67OA6rK97IKs7ZWt7J2EIOyggeyaqe2VmOyEuOyalC5cbiAgICAgICAgLSBmaXh0dXJlSWQ6IOyImOygle2VoCDtlL3siqTss5AgSUQgKO2YleyLnTogXCJFbnRpdHlJZCNpZFwiKVxuICAgICAgICAtIHVwZGF0ZXM6IOy7rOufvOuqheydhCDtgqTroZwsIOyDiCDqsJLsnYQg6rCS7Jy866GcIO2VmOuKlCDqsJ3ssrRcblxuICAgICAgICDsmIjsi5w6IFwiVXNlciMxXCIg7ZS97Iqk7LOQ7J2YIFwibmFtZVwiIOy7rOufvOydhCBcIu2Zjeq4uOuPmVwi7Jy866GcIOuzgOqyve2VmOugpOuptDpcbiAgICAgICAgdXBkYXRlRml4dHVyZXMoeyB1cGRhdGVzOiBbeyBmaXh0dXJlSWQ6IFwiVXNlciMxXCIsIHVwZGF0ZXM6IHsgbmFtZTogXCLtmY3quLjrj5lcIiB9IH1dIH0pXG5cbiAgICAgICAg67OA6rK965CgIOy7rOufvOydmCB0eXBl7J20IHJlbGF0aW9u7J24IOqyveyasCwg6rSA66CoIOyXlO2LsO2LsOyXkOuPhCDrsJjsmIHrkJjslrTslbwg7ZWgIOy7rOufvOydtCDsnojripTsp4Ag7ZmV7J247ZWY7IS47JqULlxuXG4gICAgICAgICMjIO2UveyKpOyzkCDsg53shLFcbiAgICAgICAg7IKs7Jqp7J6Q6rCAIOyDiOuhnOyatCDtlL3siqTss5Ag7IOd7ISx7J2EIOyalOyyre2VmOuptCBjcmVhdGVGaXh0dXJlcyDrj4Tqtazrpbwg7IKs7Jqp7ZWY7IS47JqULlxuICAgICAgICAtIGVudGl0eUlkOiDsg53shLHtlaAg7JeU7Yuw7YuwIElEXG4gICAgICAgIC0gaWQ6IOyDiCDroIjsvZTrk5zsnZggSUQgKOq4sOyhtCDtlL3siqTss5DsmYAg7KSR67O165CY7KeAIOyViuuKlCDsnYzsiJgg7IKs7JqpIOq2jOyepSwg7JiIOiAtMSwgLTIpXG4gICAgICAgIC0gY29sdW1uczog7Lus65+866qF7J2EIO2CpOuhnCwg6rCS7J2EIOqwkuycvOuhnCDtlZjripQg6rCd7LK0ICjsl5Tti7Dti7Ag6rWs7KGwIOywuOqzoClcblxuICAgICAgICDsmIjsi5w6IOyDiOuhnOyatCBVc2VyIO2UveyKpOyzkOulvCDsg53shLHtlZjroKTrqbQ6XG4gICAgICAgIGNyZWF0ZUZpeHR1cmVzKHsgZml4dHVyZXM6IFt7IGVudGl0eUlkOiBcIlVzZXJcIiwgaWQ6IC0xLCBjb2x1bW5zOiB7IG5hbWU6IFwi7ZmN6ri464+ZXCIsIGVtYWlsOiBcImhvbmdAZXhhbXBsZS5jb21cIiB9IH1dIH0pXG4gICAgICBgO1xuXG4gICAgY29uc3QgeyBzdHJlYW1UZXh0LCB0b29sIH0gPSB0aGlzLmFpU2RrO1xuXG4gICAgcmV0dXJuIHN0cmVhbVRleHQoe1xuICAgICAgbW9kZWwsXG4gICAgICBzeXN0ZW06IHN5c3RlbU1lc3NhZ2UsXG4gICAgICBtZXNzYWdlcyxcbiAgICAgIHRvb2xzOiB7XG4gICAgICAgIHVwZGF0ZUZpeHR1cmVzOiB0b29sKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIFwi7ZS97Iqk7LOQIOugiOy9lOuTnOydmCDqsJLsnYQg7IiY7KCV7ZWp64uI64ukLiDsgqzsmqnsnpDqsIAg7Yq57KCVIOy7rOufvOydtOuCmCDqsJLsnYQg67OA6rK97ZW064us65286rOgIOyalOyyre2VoCDrlYwg7IKs7Jqp7ZWY7IS47JqULlwiLFxuICAgICAgICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICAgICAgICB1cGRhdGVzOiB6LmFycmF5KFxuICAgICAgICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgICAgICAgZml4dHVyZUlkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwi7IiY7KCV7ZWgIO2UveyKpOyzkCBJRCAo7ZiV7IudOiBFbnRpdHlJZCNpZClcIiksXG4gICAgICAgICAgICAgICAgdXBkYXRlczogZml4dHVyZUNvbHVtbnNTY2hlbWEuZGVzY3JpYmUoXCLsu6zrn7zrqoXsnYQg7YKk66GcLCDsg4gg6rCS7J2EIOqwkuycvOuhnCDtlZjripQg6rCd7LK0XCIpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKHtcbiAgICAgICAgICAgIHVwZGF0ZXMsXG4gICAgICAgICAgfToge1xuICAgICAgICAgICAgdXBkYXRlczogQXJyYXk8eyBmaXh0dXJlSWQ6IHN0cmluZzsgdXBkYXRlczogRml4dHVyZVRvb2xDb2x1bW5zIH0+O1xuICAgICAgICAgIH0pOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgdXBkYXRlZFJlY29yZHM6IEZpeHR1cmVSZWNvcmRbXSB9PiA9PiB7XG4gICAgICAgICAgICAvLyBmaXh0dXJlUmVjb3Jkc+ulvCDrs7XsgqztlZjqs6Ag7JeF642w7J207Yq4IOyggeyaqVxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFJlY29yZHM6IEZpeHR1cmVSZWNvcmRbXSA9IGZpeHR1cmVSZWNvcmRzLm1hcCgocmVjb3JkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IHVwZGF0ZXMuZmluZChcbiAgICAgICAgICAgICAgICAodTogeyBmaXh0dXJlSWQ6IHN0cmluZyB9KSA9PiB1LmZpeHR1cmVJZCA9PT0gcmVjb3JkLmZpeHR1cmVJZCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIGNvbHVtbnPsnZggdmFsdWXrpbwg7JeF642w7J207Yq4XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbY29sdW1uTmFtZSwgbmV3VmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHVwZGF0ZS51cGRhdGVzKSkge1xuICAgICAgICAgICAgICAgICAgcmVjb3JkLmNvbHVtbnNbY29sdW1uTmFtZV0udmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgdXBkYXRlZFJlY29yZHMgfTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgY3JlYXRlRml4dHVyZXM6IHRvb2woe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgXCLsg4jroZzsmrQg7ZS97Iqk7LOQIOugiOy9lOuTnOulvCDsg53shLHtlanri4jri6QuIOyCrOyaqeyekOqwgCDsg4jroZzsmrQg642w7J207YSw66W8IOy2lOqwgO2VtOuLrOudvOqzoCDsmpTssq3tlaAg65WMIOyCrOyaqe2VmOyEuOyalC5cIixcbiAgICAgICAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgICAgICAgZml4dHVyZXM6IHouYXJyYXkoXG4gICAgICAgICAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgICAgICAgICBlbnRpdHlJZDogei5zdHJpbmcoKS5kZXNjcmliZShcIuyDneyEse2VoCDsl5Tti7Dti7AgSURcIiksXG4gICAgICAgICAgICAgICAgaWQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCLsg4gg66CI7L2U65Oc7J2YIElEICjsnYzsiJgg6raM7J6lLCDsmIg6IC0xLCAtMilcIiksXG4gICAgICAgICAgICAgICAgY29sdW1uczogZml4dHVyZUNvbHVtbnNTY2hlbWEuZGVzY3JpYmUoXCLsu6zrn7zrqoXsnYQg7YKk66GcLCDqsJLsnYQg6rCS7Jy866GcIO2VmOuKlCDqsJ3ssrRcIiksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBleGVjdXRlOiBhc3luYyAoe1xuICAgICAgICAgICAgZml4dHVyZXMsXG4gICAgICAgICAgfToge1xuICAgICAgICAgICAgZml4dHVyZXM6IEFycmF5PHsgZW50aXR5SWQ6IHN0cmluZzsgaWQ6IG51bWJlcjsgY29sdW1uczogRml4dHVyZVRvb2xDb2x1bW5zIH0+O1xuICAgICAgICAgIH0pOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgdXBkYXRlZFJlY29yZHM6IEZpeHR1cmVSZWNvcmRbXSB9PiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSZWNvcmRzOiBGaXh0dXJlUmVjb3JkW10gPSBmaXh0dXJlcy5tYXAoKGZpeHR1cmUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZml4dHVyZS5lbnRpdHlJZCk7XG5cbiAgICAgICAgICAgICAgLy8g7JeU7Yuw7YuwIHByb3Bz66W8IOq4sOuwmOycvOuhnCBjb2x1bW5zIOq1rOyEsVxuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zOiBGaXh0dXJlUmVjb3JkW1wiY29sdW1uc1wiXSA9IHt9O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgZW50aXR5LnByb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZml4dHVyZS5jb2x1bW5zW3Byb3AubmFtZV0gPz8gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmIChwcm9wLm5hbWUgPT09IFwiY3JlYXRlZF9hdFwiKSB7XG4gICAgICAgICAgICAgICAgICAvLyDtmITsnqwg7Iuc6rCE7Jy866GcIOyEpOyglVxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgIHByb3AudHlwZSA9PT0gXCJyZWxhdGlvblwiICYmXG4gICAgICAgICAgICAgICAgICAocHJvcC5yZWxhdGlvblR5cGUgPT09IFwiSGFzTWFueVwiIHx8IHByb3AucmVsYXRpb25UeXBlID09PSBcIk1hbnlUb01hbnlcIilcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIOuwsOyXtOuhnCDrs4DtmZhcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0uZmlsdGVyKG5vbk51bGxhYmxlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb2x1bW5zW3Byb3AubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZml4dHVyZUlkOiBgJHtmaXh0dXJlLmVudGl0eUlkfSMke2ZpeHR1cmUuaWR9YCxcbiAgICAgICAgICAgICAgICBlbnRpdHlJZDogZml4dHVyZS5lbnRpdHlJZCxcbiAgICAgICAgICAgICAgICBpZDogZml4dHVyZS5pZCxcbiAgICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICAgIGZldGNoZWRSZWNvcmRzOiBbXSxcbiAgICAgICAgICAgICAgICBiZWxvbmdzUmVjb3JkczogW10sXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGU6IGZhbHNlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIOyDiCDroIjsvZTrk5zrk6TsnZggcmVsYXRpb24g7Lus65+87J2EIO2ZleyduO2VmOyXrCDquLDsobQg66CI7L2U65Oc65Ok7J2YIOyXreuwqe2WpSByZWxhdGlvbiDsl4XrjbDsnbTtirhcbiAgICAgICAgICAgIGZvciAoY29uc3QgbmV3UmVjb3JkIG9mIG5ld1JlY29yZHMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBbX2NvbE5hbWUsIGNvbF0gb2YgT2JqZWN0LmVudHJpZXMobmV3UmVjb3JkLmNvbHVtbnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbC5wcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiB8fCBjb2wudmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVsYXRlZEVudGl0eUlkID0gY29sLnByb3Aud2l0aDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWxhdGVkSWRzID0gQXJyYXkuaXNBcnJheShjb2wudmFsdWUpID8gY29sLnZhbHVlIDogW2NvbC52YWx1ZV07XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlbGF0ZWRJZCBvZiByZWxhdGVkSWRzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZWxhdGVkRml4dHVyZUlkID0gYCR7cmVsYXRlZEVudGl0eUlkfSMke3JlbGF0ZWRJZH1gO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVsYXRlZFJlY29yZCA9IG5ld1JlY29yZHMuZmluZCgocikgPT4gci5maXh0dXJlSWQgPT09IHJlbGF0ZWRGaXh0dXJlSWQpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAocmVsYXRlZFJlY29yZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyDsl63rsKntlqUgcmVsYXRpb24g7LC+6riwXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VDb2wgPSBPYmplY3QuZW50cmllcyhyZWxhdGVkUmVjb3JkLmNvbHVtbnMpLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgKFssIGNdKSA9PiBjLnByb3AudHlwZSA9PT0gXCJyZWxhdGlvblwiICYmIGMucHJvcC53aXRoID09PSBuZXdSZWNvcmQuZW50aXR5SWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldmVyc2VDb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmV2ZXJzZUNvbE5hbWUsIHJldmVyc2VDb2xWYWx1ZV0gPSByZXZlcnNlQ29sO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHJldmVyc2VDb2xWYWx1ZS52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgIC8vIOyXreuwqe2WpeydtCDrsLDsl7Tsnbgg6rK97JqwIChIYXNNYW55LCBNYW55VG9NYW55KVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VDb2xWYWx1ZS5wcm9wLnR5cGUgPT09IFwicmVsYXRpb25cIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHJldmVyc2VDb2xWYWx1ZS5wcm9wLnJlbGF0aW9uVHlwZSA9PT0gXCJIYXNNYW55XCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZUNvbFZhbHVlLnByb3AucmVsYXRpb25UeXBlID09PSBcIk1hbnlUb01hbnlcIilcbiAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSksIFwiY3VycmVudFZhbHVlIG11c3QgYmUgYW4gYXJyYXlcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRWYWx1ZS5pbmNsdWRlcyhuZXdSZWNvcmQuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRSZWNvcmQuY29sdW1uc1tyZXZlcnNlQ29sTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmV2ZXJzZUNvbFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbLi4uY3VycmVudFZhbHVlLCBuZXdSZWNvcmQuaWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDsl63rsKntlqXsnbQg64uo7J28IOqwkuyduCDqsr3smrAgKEJlbG9uZ3NUb09uZSwgT25lVG9PbmUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkUmVjb3JkLmNvbHVtbnNbcmV2ZXJzZUNvbE5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXZlcnNlQ29sVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdSZWNvcmQuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCB1cGRhdGVkUmVjb3JkczogbmV3UmVjb3JkcyB9O1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUVudGl0eShtZXNzYWdlczogTW9kZWxNZXNzYWdlW10pOiBTdHJlYW1UZXh0UmVzdWx0PGFueSwgYW55PiB7XG4gICAgaWYgKCF0aGlzLmFpU2RrIHx8ICF0aGlzLm1vZGVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBSSBTREsgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC5cIik7XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbDtcblxuICAgIC8vIGVudGl0eS5pbnN0cnVjdGlvbnMubWQg7YyM7J28IOydveq4sCAoZGlzdC91aSDrmJDripQgc3JjL3Vp7JeQ7IScIOyLpO2WieuQmOuvgOuhnCDtjKjtgqTsp4Ag66Oo7Yq4IOq4sOykgOycvOuhnCDsoJHqt7wpXG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zUGF0aCA9IHBhdGguam9pbihcbiAgICAgIGltcG9ydC5tZXRhLmRpcm5hbWUsXG4gICAgICBcIi4uXCIsXG4gICAgICBcIi4uXCIsXG4gICAgICBcInNyY1wiLFxuICAgICAgXCJ1aVwiLFxuICAgICAgXCJlbnRpdHkuaW5zdHJ1Y3Rpb25zLm1kXCIsXG4gICAgKTtcbiAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBmcy5yZWFkRmlsZVN5bmMoaW5zdHJ1Y3Rpb25zUGF0aCwgXCJ1dGYtOFwiKTtcblxuICAgIC8vIO2YhOyerCDrk7HroZ3rkJwg7JeU7Yuw7YuwIOygleuztCDsiJjsp5FcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGNvbnN0IGV4aXN0aW5nRW50aXRpZXMgPSBlbnRpdHlJZHMubWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGVudGl0eS5pZCxcbiAgICAgICAgdGl0bGU6IGVudGl0eS50aXRsZSxcbiAgICAgICAgdGFibGU6IGVudGl0eS50YWJsZSxcbiAgICAgICAgcHJvcHM6IGVudGl0eS5wcm9wcy5tYXAoKHApID0+ICh7XG4gICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgIHR5cGU6IHAudHlwZSxcbiAgICAgICAgICBkZXNjOiBwLmRlc2MsXG4gICAgICAgIH0pKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBzeXN0ZW1NZXNzYWdlID0gYFxu64u57Iug7J2AIFNvbmFtdSDtlITroIjsnoTsm4ztgazsl5DshJwgRW50aXR57JmAIEVudW3snYQg7IOd7ISx7ZWY64qUIOuPhOyasOuvuOyeheuLiOuLpC5cblxuJHtpbnN0cnVjdGlvbnN9XG5cbiMjIO2YhOyerCDrk7HroZ3rkJwgRW50aXR5IOuqqeuhnVxu64uk66W4IOyXlO2LsO2LsOyZgCDqtIDqs4QocmVsYXRpb24p66W8IOunuuqxsOuCmCBzdWJzZXTsl5DshJwg7LC47KGw7ZWgIOuVjCDrsJjrk5zsi5wg7JWE656YIOygleuztOulvCDtmZXsnbjtlZjshLjsmpQuXG5cbiR7SlNPTi5zdHJpbmdpZnkoZXhpc3RpbmdFbnRpdGllcywgbnVsbCwgMil9XG5cbiMjIFRvb2wg7IKs7JqpIOqwgOydtOuTnFxuXG4jIyMgRW50aXR5IOyDneyEsSAoY3JlYXRlRW50aXR5KVxu7IKs7Jqp7J6Q6rCAIOyDiOuhnOyatCBFbnRpdHkg7IOd7ISx7J2EIOyalOyyre2VmOuptCBjcmVhdGVFbnRpdHkg64+E6rWs66W8IOyCrOyaqe2VmOyEuOyalC5cbi0gZW50aXR5SWQ6IFBhc2NhbENhc2XroZwg65CcIEVudGl0eSBJRCAo7JiIOiBcIlVzZXJcIiwgXCJQcm9kdWN0Q2F0ZWdvcnlcIilcbi0gdGl0bGU6IO2VnOq4gCDsoJzrqqkgKOyYiDogXCLsgqzsmqnsnpBcIiwgXCLsg4Htkogg7Lm07YWM6rOg66asXCIpXG4tIHRhYmxlOiBzbmFrZV9jYXNl66GcIOuQnCDthYzsnbTruJTrqoUgKOyYiDogXCJ1c2Vyc1wiLCBcInByb2R1Y3RfY2F0ZWdvcmllc1wiKVxuLSBwYXJlbnRJZDog67aA66qoIEVudGl0eSBJRCAo7ISg7YOd7IKs7ZWtKVxuLSBwcm9wczogRW50aXR57J2YIO2UhOuhnO2NvO2LsCDrsLDsl7QgKOychCDrrLjshJzsnZggUHJvcGVydHkgVHlwZXMg7LC46rOgKVxuLSBpbmRleGVzOiDsnbjrjbHsiqQg67Cw7Je0XG4tIHN1YnNldHM6IOyEnOu4jOyFiyDsoJXsnZggKOq4sOuzuOqwkjogeyBBOiBbXCJpZFwiXSB9KVxuLSBlbnVtczogRW51bSDsoJXsnZhcblxuIyMjIEVudGl0eSDsiJjsoJUgKHVwZGF0ZUVudGl0eSlcbuq4sOyhtCBFbnRpdHnrpbwg7IiY7KCV7ZWgIOuVjCB1cGRhdGVFbnRpdHkg64+E6rWs66W8IOyCrOyaqe2VmOyEuOyalC4gRW51bSDstpTqsIAsIHByb3BzIOy2lOqwgC/siJjsoJUsIGluZGV4ZXMg7IiY7KCVIOuTsSDrqqjrk6Ag7IiY7KCVIOyekeyXheyXkCDsgqzsmqntlanri4jri6QuXG4tIGVudGl0eUlkOiDsiJjsoJXtlaAgRW50aXR5IElEXG4tIHVwZGF0ZXM6IOyImOygle2VoCDtlYTrk5zrk6QgKOu2gOu2hCDsl4XrjbDsnbTtirgpXG4gIC0gdGl0bGU6IOyXlO2LsO2LsCDtlZzquIAg7KCc66qpXG4gIC0gdGFibGU6IO2FjOydtOu4lOuqhVxuICAtIHByb3BzOiDstpTqsIDtlaAg7ZSE66Gc7Y287YuwIOuwsOyXtCAo6riw7KG0IHByb3Bz7JeQIOy2lOqwgCwg6rCZ7J2AIOydtOumhOydtOuptCDqtZDssrQpXG4gIC0gaW5kZXhlczog7LaU6rCA7ZWgIOyduOuNseyKpCDrsLDsl7QgKOq4sOyhtCBpbmRleGVz7JeQIOy2lOqwgClcbiAgLSBzdWJzZXRzOiDshJzruIzshYsg7KCV7J2YICjquLDsobQgc3Vic2V0c+yXkCDrs5HtlakpXG4gIC0gZW51bUxhYmVsczogRW51bSDsoJXsnZggKOq4sOyhtCBlbnVtTGFiZWxz7JeQIOuzke2VqSlcbi0gbW9kZTogXCJtZXJnZVwiKOq4sOuzuOqwkikg65iQ64qUIFwicmVwbGFjZVwiXG4gIC0gbWVyZ2U6IOq4sOyhtCDqsJLsl5Ag67OR7ZWpXG4gIC0gcmVwbGFjZTog7ZW064u5IO2VhOuTnCDsoITssrQg6rWQ7LK0XG5cbuyYiOyLnDogRW1wbG95ZWXsl5Ag7IOIIEVudW0g7LaU6rCAXG51cGRhdGVFbnRpdHkoeyBlbnRpdHlJZDogXCJFbXBsb3llZVwiLCB1cGRhdGVzOiB7IGVudW1MYWJlbHM6IHsgXCJFbXBsb3llZVJvbGVcIjogeyBcImFkbWluXCI6IFwi6rSA66as7J6QXCIsIFwidXNlclwiOiBcIuydvOuwmFwiIH0gfSB9IH0pXG5cbuyYiOyLnDogUHJvamVjdOyXkCDsg4gg7ZSE66Gc7Y287YuwIOy2lOqwgFxudXBkYXRlRW50aXR5KHsgZW50aXR5SWQ6IFwiUHJvamVjdFwiLCB1cGRhdGVzOiB7IHByb3BzOiBbeyBuYW1lOiBcInByaW9yaXR5XCIsIHR5cGU6IFwiaW50ZWdlclwiLCBkZXNjOiBcIuyasOyEoOyInOychFwiIH1dIH0gfSlcblxuIyMg7ZWE7IiYIOyCrO2VrVxuLSBFbnRpdHnsnZggcHJvcHPsl5DripQg7LWc7IaM7ZWcIGlkKGludGVnZXIsIHVuc2lnbmVkKSwgY3JlYXRlZF9hdCh0aW1lc3RhbXAp6rCAIO2PrO2VqOuQmOyWtOyVvCDtlanri4jri6QuXG4tIHJlbGF0aW9uIO2VhOuTnOuKlCBvblVwZGF0ZSwgb25EZWxldGXqsIAg7ZWE7IiY7J6F64uI64ukLiAo7JiI7Jm4OiBPbmVUb09uZeyXkOyEnCBoYXNKb2luQ29sdW1u7J20IGZhbHNl7J24IOqyveyasClcbi0gRW51bSBJROuKlCDrs7TthrUgRW50aXR5SWQgKyDsho3shLHrqoUg7ZiV7YOc7J6F64uI64ukICjsmIg6IFVzZXJTdGF0dXMsIFByb2R1Y3RUeXBlKVxuLSBzdWJzZXTsl5DshJwg64uk66W4IOyXlO2LsO2LsOydmCDtlITroZztjbzti7Drpbwg7LC47KGw7ZWgIOuVjOuKlCDrsJjrk5zsi5wg7ZW064u5IOyXlO2LsO2LsOydmCDsi6TsoJwg7ZSE66Gc7Y287Yuw66qF7J2EIOyCrOyaqe2VmOyEuOyalC5cblxuIyMg6rKA7KadIOyYpOulmCDsspjrpqxcbuuPhOq1rCDtmLjstpwg6rKw6rO866GcIOqygOymnSDsmKTrpZgodmFsaWRhdGlvbkVycm9ycynqsIAg67CY7ZmY65CY66m0OlxuMS4g7Jik66WYIOuplOyLnOyngOulvCDrtoTshJ3tlZjsl6wg66y47KCc7KCQ7J2EIO2MjOyVhe2VmOyEuOyalC5cbjIuIOyYpOulmOulvCDsiJjsoJXtlZwg642w7J207YSw66GcIGNyZWF0ZUVudGl0eeulvCDri6Tsi5wg7Zi47Lac7ZWY7IS47JqULlxuMy4g7IKs7Jqp7J6Q7JeQ6rKMIOyYpOulmOulvCDqt7jrjIDroZwg7KCE64us7ZWY7KeAIOunkOqzoCwg7IiY7KCVIO2bhCDsnqzsi5zrj4TtlZjshLjsmpQuXG5cbiMjIyDsnbzrsJjsoIHsnbgg6rKA7KadIOyYpOulmOyZgCDsiJjsoJUg67Cp67KVXG58IOyYpOulmCDrqZTsi5zsp4AgfCDsiJjsoJUg67Cp67KVIHxcbnwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLXxcbnwgXCJpZCDtlITroZztjbzti7DqsIAg7ZWE7IiYXCIgfCBwcm9wc+yXkCB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIsIHVuc2lnbmVkOiB0cnVlIH0g7LaU6rCAIHxcbnwgXCJjcmVhdGVkX2F0IO2UhOuhnO2NvO2LsOqwgCDtlYTsiJhcIiB8IHByb3Bz7JeQIHsgbmFtZTogXCJjcmVhdGVkX2F0XCIsIHR5cGU6IFwidGltZXN0YW1wXCIsIGRiRGVmYXVsdDogXCJDVVJSRU5UX1RJTUVTVEFNUFwiIH0g7LaU6rCAIHxcbnwgXCJYeHhPcmRlckJ5IGVudW3snbQg7ZWE7IiYXCIgfCBlbnVtc+yXkCB7IFwiWHh4T3JkZXJCeVwiOiB7IFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIgfSB9IOy2lOqwgCB8XG58IFwiWHh4U2VhcmNoRmllbGQgZW51beydtCDtlYTsiJhcIiB8IGVudW1z7JeQIHsgXCJYeHhTZWFyY2hGaWVsZFwiOiB7IFwiaWRcIjogXCJJRFwiIH0gfSDstpTqsIAgfFxufCBcInN0cmluZyDtg4DsnoXsnYAgbGVuZ3Ro6rCAIO2VhOyImFwiIHwg7ZW064u5IHByb3Dsl5AgbGVuZ3RoIOy2lOqwgCAo7JiIOiAyNTUpIHxcbnwgXCJ0ZXh0IO2DgOyeheydgCB0ZXh0VHlwZeydtCDtlYTsiJhcIiB8IO2VtOuLuSBwcm9w7JeQIHRleHRUeXBlIOy2lOqwgCAoXCJ0ZXh0XCIsIFwibWVkaXVtdGV4dFwiLCBcImxvbmd0ZXh0XCIpIHxcbnwgXCJvblVwZGF0ZeqwgCDtlYTsiJhcIiB8IO2VtOuLuSByZWxhdGlvbiBwcm9w7JeQIG9uVXBkYXRlLCBvbkRlbGV0ZSDstpTqsIAgKFwiQ0FTQ0FERVwiKSB8XG4gICAgICBgO1xuXG4gICAgY29uc3QgeyBzdHJlYW1UZXh0LCB0b29sLCBzdGVwQ291bnRJcyB9ID0gdGhpcy5haVNkaztcblxuICAgIHJldHVybiBzdHJlYW1UZXh0KHtcbiAgICAgIG1vZGVsLFxuICAgICAgc3lzdGVtOiBzeXN0ZW1NZXNzYWdlLFxuICAgICAgbWVzc2FnZXMsXG4gICAgICBzdG9wV2hlbjogc3RlcENvdW50SXMoMiksXG4gICAgICB0b29sczoge1xuICAgICAgICBjcmVhdGVFbnRpdHk6IHRvb2woe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgXCLsg4jroZzsmrQgRW50aXR566W8IOyDneyEse2VqeuLiOuLpC4g7IKs7Jqp7J6Q6rCAIOyDiOuhnOyatCDsl5Tti7Dti7Drgpgg7YWM7J2067iUIOyDneyEseydhCDsmpTssq3tlaAg65WMIOyCrOyaqe2VmOyEuOyalC5cIixcbiAgICAgICAgICBpbnB1dFNjaGVtYTogVGVtcGxhdGVPcHRpb25zW1wic2hhcGVcIl0uZW50aXR5LFxuICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChcbiAgICAgICAgICAgIGVudGl0eTogei5pbmZlcjwodHlwZW9mIFRlbXBsYXRlT3B0aW9ucylbXCJzaGFwZVwiXVtcImVudGl0eVwiXT4sXG4gICAgICAgICAgKTogUHJvbWlzZTx7XG4gICAgICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgIGVycm9yPzogc3RyaW5nO1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9ycz86IFZhbGlkYXRpb25FcnJvcltdO1xuICAgICAgICAgIH0+ID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIOyeheugpSDqsoDspp1cbiAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IHZhbGlkYXRlRW50aXR5SnNvbihlbnRpdHkpO1xuXG4gICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBlbnRpdHlJZDogZW50aXR5LmVudGl0eUlkLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGDqsoDspp0g7Jik66WYOiAke3ZhbGlkYXRpb25FcnJvcnMubWFwKChlKSA9PiBgWyR7ZS5maWVsZH1dICR7ZS5tZXNzYWdlfWApLmpvaW4oXCIsIFwiKX1gLFxuICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9ycyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoe1xuICAgICAgICAgICAgICAgIHN1YnNldHM6IHsgQTogW1wiaWRcIl0gfSxcbiAgICAgICAgICAgICAgICBlbnVtczoge30sXG4gICAgICAgICAgICAgICAgLi4uZW50aXR5LFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAvLyBFbnRpdHlNYW5hZ2VyIOumrOuhnOuTnFxuICAgICAgICAgICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLnJlbG9hZCgpO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGVudGl0eUlkOiBlbnRpdHkuZW50aXR5SWQgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVudGl0eUlkOiBlbnRpdHkuZW50aXR5SWQsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHVwZGF0ZUVudGl0eTogdG9vbCh7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBcIuq4sOyhtCBFbnRpdHnrpbwg7IiY7KCV7ZWp64uI64ukLiBFbnVtIOy2lOqwgCwgcHJvcHMg7LaU6rCAL+yImOyglSwgaW5kZXhlcyDsiJjsoJUsIHN1YnNldHMg7IiY7KCVIOuTsSDrqqjrk6Ag7JeU7Yuw7YuwIOyImOyglSDsnpHsl4Xsl5Ag7IKs7Jqp7ZWY7IS47JqULlwiLFxuICAgICAgICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICAgICAgICBlbnRpdHlJZDogei5zdHJpbmcoKS5kZXNjcmliZShcIuyImOygle2VoCBFbnRpdHkgSURcIiksXG4gICAgICAgICAgICB1cGRhdGVzOiBUZW1wbGF0ZU9wdGlvbnNbXCJzaGFwZVwiXS5lbnRpdHkucGFydGlhbCgpLmRlc2NyaWJlKFwi7IiY7KCV7ZWgIO2VhOuTnOuTpFwiKSxcbiAgICAgICAgICAgIG1vZGU6IHpcbiAgICAgICAgICAgICAgLmVudW0oW1wibWVyZ2VcIiwgXCJyZXBsYWNlXCJdKVxuICAgICAgICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAgICAgICAuZGVzY3JpYmUoXCLsiJjsoJUg66qo65OcOiBtZXJnZSjquLDrs7jqsJIsIOq4sOyhtCDqsJLsl5Ag67OR7ZWpKSDrmJDripQgcmVwbGFjZSjsoITssrQg6rWQ7LK0KVwiKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBleGVjdXRlOiBhc3luYyAoe1xuICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICB1cGRhdGVzLFxuICAgICAgICAgICAgbW9kZSA9IFwibWVyZ2VcIixcbiAgICAgICAgICB9OiB7XG4gICAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgICAgdXBkYXRlczogUGFydGlhbDx6LmluZmVyPCh0eXBlb2YgVGVtcGxhdGVPcHRpb25zKVtcInNoYXBlXCJdW1wiZW50aXR5XCJdPj47XG4gICAgICAgICAgICBtb2RlPzogXCJtZXJnZVwiIHwgXCJyZXBsYWNlXCI7XG4gICAgICAgICAgfSk6IFByb21pc2U8e1xuICAgICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvcnM/OiBWYWxpZGF0aW9uRXJyb3JbXTtcbiAgICAgICAgICB9PiA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAgICAgICAgICAgLy8gVXBkYXRlIGJhc2ljIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZXMuZW50aXR5SWQgIT09IHVuZGVmaW5lZCkgZW50aXR5LmlkID0gdXBkYXRlcy5lbnRpdHlJZDtcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZXMucGFyZW50SWQgIT09IHVuZGVmaW5lZCkgZW50aXR5LnBhcmVudElkID0gdXBkYXRlcy5wYXJlbnRJZDtcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZXMudGl0bGUgIT09IHVuZGVmaW5lZCkgZW50aXR5LnRpdGxlID0gdXBkYXRlcy50aXRsZTtcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZXMudGFibGUgIT09IHVuZGVmaW5lZCkgZW50aXR5LnRhYmxlID0gdXBkYXRlcy50YWJsZTtcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZXMuY29uZSAhPT0gdW5kZWZpbmVkKSBlbnRpdHkuY29uZSA9IHVwZGF0ZXMuY29uZTtcblxuICAgICAgICAgICAgICAvLyBwcm9wczogbWVyZ2Ug7IucIOydtOumhCDquLDspIAg67OR7ZWpLCByZXBsYWNlIOyLnCDqtZDssrRcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZXMucHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSBcInJlcGxhY2VcIikge1xuICAgICAgICAgICAgICAgICAgZW50aXR5LnByb3BzID1cbiAgICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBVSSDrj4TqtazsnZggWm9kIOyeheugpSDsiqTtgqTrp4jqsIAg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyB1cGRhdGVzLnByb3BzIGFzIEVudGl0eVByb3BbXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBuZXdQcm9wIG9mIHVwZGF0ZXMucHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IGVudGl0eS5wcm9wcy5maW5kSW5kZXgoKHApID0+IHAubmFtZSA9PT0gbmV3UHJvcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS5wcm9wc1tleGlzdGluZ0luZGV4XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IFVJIOuPhOq1rOydmCBab2Qg7J6F66ClIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIG5ld1Byb3AgYXMgRW50aXR5UHJvcDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkucHJvcHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogVUkg64+E6rWs7J2YIFpvZCDsnoXroKUg7Iqk7YKk66eI6rCAIOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gbmV3UHJvcCBhcyBFbnRpdHlQcm9wLFxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBpbmRleGVzOiBtZXJnZSDsi5wg7LaU6rCALCByZXBsYWNlIOyLnCDqtZDssrRcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZXMuaW5kZXhlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZW50aXR5LmluZGV4ZXMgPVxuICAgICAgICAgICAgICAgICAgbW9kZSA9PT0gXCJyZXBsYWNlXCIgPyB1cGRhdGVzLmluZGV4ZXMgOiBbLi4uZW50aXR5LmluZGV4ZXMsIC4uLnVwZGF0ZXMuaW5kZXhlc107XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBzdWJzZXRzLCBzdWJzZXRzSW50ZXJuYWw6IGFzc2lnbuycvOuhnCDrs5Htlakg65iQ64qUIOq1kOyytFxuICAgICAgICAgICAgICBpZiAodXBkYXRlcy5zdWJzZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUgc3Vic2V0IGZpZWxkczogc2VwYXJhdGUgaW50byBzdWJzZXRzIChub3JtYWwpIGFuZCBzdWJzZXRzSW50ZXJuYWwgKGludGVybmFsKVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdWJzZXRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkU3Vic2V0c0ludGVybmFsOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRzXSBvZiBPYmplY3QuZW50cmllcyh1cGRhdGVzLnN1YnNldHMpKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEFycmF5ID1cbiAgICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBVSSDrj4TqtazsnZggWm9kIOyeheugpSDsiqTtgqTrp4jqsIAg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBmaWVsZHMgYXMgc3RyaW5nW107XG4gICAgICAgICAgICAgICAgICBub3JtYWxpemVkU3Vic2V0c1trZXldID0gZmllbGRBcnJheVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChmOiBzdHJpbmcpID0+ICFpc0ludGVybmFsU3Vic2V0RmllbGQoZikpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAobm9ybWFsaXplU3Vic2V0RmllbGQpO1xuICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFN1YnNldHNJbnRlcm5hbFtrZXldID0gZmllbGRBcnJheVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGlzSW50ZXJuYWxTdWJzZXRGaWVsZClcbiAgICAgICAgICAgICAgICAgICAgLm1hcChub3JtYWxpemVTdWJzZXRGaWVsZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZW50aXR5LnN1YnNldHMgPVxuICAgICAgICAgICAgICAgICAgbW9kZSA9PT0gXCJyZXBsYWNlXCJcbiAgICAgICAgICAgICAgICAgICAgPyBub3JtYWxpemVkU3Vic2V0c1xuICAgICAgICAgICAgICAgICAgICA6IHsgLi4uZW50aXR5LnN1YnNldHMsIC4uLm5vcm1hbGl6ZWRTdWJzZXRzIH07XG4gICAgICAgICAgICAgICAgZW50aXR5LnN1YnNldHNJbnRlcm5hbCA9XG4gICAgICAgICAgICAgICAgICBtb2RlID09PSBcInJlcGxhY2VcIlxuICAgICAgICAgICAgICAgICAgICA/IG5vcm1hbGl6ZWRTdWJzZXRzSW50ZXJuYWxcbiAgICAgICAgICAgICAgICAgICAgOiB7IC4uLmVudGl0eS5zdWJzZXRzSW50ZXJuYWwsIC4uLm5vcm1hbGl6ZWRTdWJzZXRzSW50ZXJuYWwgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVzLmVudW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRFbnVtcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHVwZGF0ZXMuZW51bXMpLm1hcCgoW2tleSwgZW51bURlZl0pID0+IFtcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBnZXRFbnVtRGVmVmFsdWVzKGVudW1EZWYpLFxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlbnRpdHkuZW51bUxhYmVscyA9XG4gICAgICAgICAgICAgICAgICBtb2RlID09PSBcInJlcGxhY2VcIiA/IGNvbnZlcnRlZEVudW1zIDogeyAuLi5lbnRpdHkuZW51bUxhYmVscywgLi4uY29udmVydGVkRW51bXMgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIOyggOyepSDsoIQg6rKA7KadXG4gICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSB2YWxpZGF0ZUVudGl0eUpzb24oe1xuICAgICAgICAgICAgICAgIC4uLmVudGl0eSxcbiAgICAgICAgICAgICAgICBlbnRpdHlJZDogZW50aXR5LmlkLFxuICAgICAgICAgICAgICAgIGVudW1zOiBlbnRpdHkuZW51bUxhYmVscyxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGDqsoDspp0g7Jik66WYOiAke3ZhbGlkYXRpb25FcnJvcnMubWFwKChlKSA9PiBgWyR7ZS5maWVsZH1dICR7ZS5tZXNzYWdlfWApLmpvaW4oXCIsIFwiKX1gLFxuICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9ycyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBlbnRpdHlJZCB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZW50aXR5SWQsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRW50aXR5IEpTT07snbQgZW50aXR5Lmluc3RydWN0aW9ucy5tZOydmCDqt5zsuZnsnYQg65Sw66W064qU7KeAIOqygOymne2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFbnRpdHlKc29uKGlucHV0OiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRpdHlcIl0pOiBWYWxpZGF0aW9uRXJyb3JbXSB7XG4gIGNvbnN0IGVycm9yczogVmFsaWRhdGlvbkVycm9yW10gPSBbXTtcbiAgY29uc3QgeyBlbnRpdHlJZCwgcHJvcHMsIGVudW1zIH0gPSBpbnB1dDtcblxuICAvLyAxLiBpZCwgY3JlYXRlZF9hdCBwcm9wIO2VhOyImFxuICBjb25zdCBoYXNJZFByb3AgPSBwcm9wcz8uc29tZSgocCkgPT4gcC5uYW1lID09PSBcImlkXCIpO1xuICBpZiAoIWhhc0lkUHJvcCkge1xuICAgIGVycm9ycy5wdXNoKHsgZmllbGQ6IFwicHJvcHNcIiwgbWVzc2FnZTogXCJpZCDtlITroZztjbzti7DqsIAg7ZWE7IiY7J6F64uI64ukLlwiIH0pO1xuICB9XG4gIGNvbnN0IGhhc0NyZWF0ZWRBdFByb3AgPSBwcm9wcz8uc29tZSgocCkgPT4gcC5uYW1lID09PSBcImNyZWF0ZWRfYXRcIik7XG4gIGlmICghaGFzQ3JlYXRlZEF0UHJvcCkge1xuICAgIGVycm9ycy5wdXNoKHsgZmllbGQ6IFwicHJvcHNcIiwgbWVzc2FnZTogXCJjcmVhdGVkX2F0IO2UhOuhnO2NvO2LsOqwgCDtlYTsiJjsnoXri4jri6QuXCIgfSk7XG4gIH1cblxuICAvLyAyLiDtlYTsiJggZW51bSDqsoDspp06IEVudGl0eU5hbWVPcmRlckJ5LCBFbnRpdHlOYW1lU2VhcmNoRmllbGRcbiAgY29uc3Qgb3JkZXJCeUVudW1JZCA9IGAke2VudGl0eUlkfU9yZGVyQnlgO1xuICBjb25zdCBzZWFyY2hGaWVsZEVudW1JZCA9IGAke2VudGl0eUlkfVNlYXJjaEZpZWxkYDtcblxuICBpZiAoIWVudW1zPy5bb3JkZXJCeUVudW1JZF0pIHtcbiAgICBlcnJvcnMucHVzaCh7XG4gICAgICBmaWVsZDogXCJlbnVtc1wiLFxuICAgICAgbWVzc2FnZTogYCR7b3JkZXJCeUVudW1JZH0gZW51beydtCDtlYTsiJjsnoXri4jri6QuICjsmIg6IHsgXCJpZC1kZXNjXCI6IFwiSUTstZzsi6DsiJxcIiB9KWAsXG4gICAgfSk7XG4gIH1cbiAgaWYgKCFlbnVtcz8uW3NlYXJjaEZpZWxkRW51bUlkXSkge1xuICAgIGVycm9ycy5wdXNoKHtcbiAgICAgIGZpZWxkOiBcImVudW1zXCIsXG4gICAgICBtZXNzYWdlOiBgJHtzZWFyY2hGaWVsZEVudW1JZH0gZW51beydtCDtlYTsiJjsnoXri4jri6QuICjsmIg6IHsgXCJpZFwiOiBcIklEXCIgfSlgLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gMy4gZW51bSBwcm9w7J2YIGlk6rCAIGVudW1z7JeQIOygleydmOuQmOyWtCDsnojripTsp4Ag7ZmV7J24IChjcm9zcy1maWVsZCDqsoDspp0pXG4gIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcyA/PyBbXSkge1xuICAgIGlmIChwcm9wLnR5cGUgPT09IFwiZW51bVwiICYmICFlbnVtcz8uW3Byb3AuaWRdKSB7XG4gICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgIGZpZWxkOiBgcHJvcHMuJHtwcm9wLm5hbWV9YCxcbiAgICAgICAgbWVzc2FnZTogYGVudW0gaWQgXCIke3Byb3AuaWR9XCLqsIAgZW51bXPsl5Ag7KCV7J2Y65CY7Ja0IOyeiOyngCDslYrsirXri4jri6QuYCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbmV4cG9ydCBjb25zdCBhaUNsaWVudCA9IG5ldyBBSUNsaWVudCgpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBd2hCQSxTQUFTLG1CQUFtQixPQUFxRDtDQUMvRSxNQUFNLFNBQTRCLENBQUM7Q0FDbkMsTUFBTSxFQUFFLFVBQVUsT0FBTyxVQUFVO0NBSW5DLElBQUksQ0FEYyxPQUFPLE1BQU0sTUFBTSxFQUFFLFNBQVMsSUFBSSxHQUVsRCxPQUFPLEtBQUs7RUFBRSxPQUFPO0VBQVMsU0FBUztDQUFrQixDQUFDO0NBRzVELElBQUksQ0FEcUIsT0FBTyxNQUFNLE1BQU0sRUFBRSxTQUFTLFlBQVksR0FFakUsT0FBTyxLQUFLO0VBQUUsT0FBTztFQUFTLFNBQVM7Q0FBMEIsQ0FBQztDQUlwRSxNQUFNLGdCQUFnQixHQUFHLFNBQVM7Q0FDbEMsTUFBTSxvQkFBb0IsR0FBRyxTQUFTO0NBRXRDLElBQUksQ0FBQyxRQUFRLGdCQUNYLE9BQU8sS0FBSztFQUNWLE9BQU87RUFDUCxTQUFTLEdBQUcsY0FBYztDQUM1QixDQUFDO0NBRUgsSUFBSSxDQUFDLFFBQVEsb0JBQ1gsT0FBTyxLQUFLO0VBQ1YsT0FBTztFQUNQLFNBQVMsR0FBRyxrQkFBa0I7Q0FDaEMsQ0FBQztDQUlILEtBQUssTUFB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
|
package/dist/ui/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/ui/api.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/ui/api.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAkF/C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAs0C/D"}
|