sonamu 0.9.20 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.js +36 -0
- package/dist/ai/agents/agent.js +5 -7
- package/dist/ai/agents/index.js +1 -2
- package/dist/ai/agents/types.js +1 -1
- package/dist/ai/index.js +1 -2
- package/dist/ai/providers/rtzr/api.js +2 -3
- package/dist/ai/providers/rtzr/error.js +14 -29
- package/dist/ai/providers/rtzr/index.js +1 -2
- package/dist/ai/providers/rtzr/model.js +13 -20
- package/dist/ai/providers/rtzr/options.js +2 -3
- package/dist/ai/providers/rtzr/provider.js +2 -3
- package/dist/ai/providers/rtzr/utils.js +12 -21
- package/dist/api/base-frame.js +4 -4
- package/dist/api/caster.js +21 -38
- package/dist/api/code-converters.js +41 -98
- package/dist/api/config.d.ts +1 -10
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +9 -8
- package/dist/api/context.js +2 -3
- package/dist/api/decorators.js +80 -116
- package/dist/api/index.js +2 -3
- package/dist/api/secret.js +6 -10
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +210 -406
- package/dist/api/validator.js +5 -8
- package/dist/api/websocket-helpers.js +22 -33
- package/dist/auth/audit-log/builders.d.ts.map +1 -1
- package/dist/auth/audit-log/builders.js +4 -3
- package/dist/auth/audit-log/client-ip.d.ts +3 -0
- package/dist/auth/audit-log/client-ip.d.ts.map +1 -0
- package/dist/auth/audit-log/client-ip.js +27 -0
- package/dist/auth/audit-log/events.d.ts +1 -0
- package/dist/auth/audit-log/events.d.ts.map +1 -1
- package/dist/auth/audit-log/events.js +2 -2
- package/dist/auth/audit-log/plugin.js +30 -61
- package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
- package/dist/auth/audit-log-ingestor.js +26 -43
- package/dist/auth/auth-generator.js +16 -41
- package/dist/auth/better-auth-entities.js +3 -4
- package/dist/auth/better-auth-request.d.ts +3 -0
- package/dist/auth/better-auth-request.d.ts.map +1 -0
- package/dist/auth/better-auth-request.js +23 -0
- package/dist/auth/index.js +2 -3
- package/dist/auth/knex-adapter.js +18 -45
- package/dist/auth/plugins/entity-definitions/admin.js +2 -2
- package/dist/auth/plugins/entity-definitions/anonymous.js +2 -2
- package/dist/auth/plugins/entity-definitions/api-key.js +2 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +2 -2
- package/dist/auth/plugins/entity-definitions/index.js +2 -3
- package/dist/auth/plugins/entity-definitions/jwt.js +2 -2
- package/dist/auth/plugins/entity-definitions/organization.js +2 -2
- package/dist/auth/plugins/entity-definitions/passkey.js +2 -2
- package/dist/auth/plugins/entity-definitions/phone-number.js +2 -2
- package/dist/auth/plugins/entity-definitions/sso.js +2 -2
- package/dist/auth/plugins/entity-definitions/two-factor.js +2 -2
- package/dist/auth/plugins/entity-definitions/types.js +1 -1
- package/dist/auth/plugins/entity-definitions/username.js +2 -2
- package/dist/auth/plugins/index.js +1 -2
- package/dist/auth/plugins/wrappers/admin.js +2 -3
- package/dist/auth/plugins/wrappers/anonymous.js +2 -3
- package/dist/auth/plugins/wrappers/api-key.js +2 -3
- package/dist/auth/plugins/wrappers/index.js +1 -2
- package/dist/auth/plugins/wrappers/jwt.js +2 -3
- package/dist/auth/plugins/wrappers/organization.js +2 -3
- package/dist/auth/plugins/wrappers/passkey.js +2 -3
- package/dist/auth/plugins/wrappers/phone-number.js +2 -3
- package/dist/auth/plugins/wrappers/sso.js +2 -3
- package/dist/auth/plugins/wrappers/two-factor.js +2 -3
- package/dist/auth/plugins/wrappers/username.js +2 -3
- package/dist/bin/build-config.js +2 -2
- package/dist/bin/cli.js +152 -259
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +55 -97
- package/dist/bin/hmr-hook-register.js +3 -3
- package/dist/bin/migrate-targets.d.ts +3 -0
- package/dist/bin/migrate-targets.d.ts.map +1 -0
- package/dist/bin/migrate-targets.js +11 -0
- package/dist/bin/test-command.js +25 -55
- package/dist/bin/ts-loader-register.js +5 -6
- package/dist/bin/ts-loader-registration.js +6 -13
- package/dist/cache/cache-manager.js +3 -4
- package/dist/cache/decorator.js +11 -21
- package/dist/cache/drivers.js +2 -3
- package/dist/cache/index.js +2 -3
- package/dist/cache/types.js +1 -1
- package/dist/cache-control/cache-control.js +21 -34
- package/dist/cache-control/types.js +1 -1
- package/dist/compress/compress.js +10 -10
- package/dist/compress/index.js +1 -2
- package/dist/compress/types.js +1 -1
- package/dist/cone/cone-generator.js +25 -63
- package/dist/database/_batch_update.js +26 -46
- package/dist/database/base-model.js +44 -97
- package/dist/database/base-model.types.js +1 -1
- package/dist/database/db.d.ts +8 -14
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +127 -72
- package/dist/database/knex.js +5 -8
- package/dist/database/puri-subset.types.js +1 -1
- package/dist/database/puri-wrapper.js +11 -15
- package/dist/database/puri.js +117 -234
- package/dist/database/puri.types.js +3 -4
- package/dist/database/transaction-context.js +4 -5
- package/dist/database/upsert-builder.js +109 -176
- package/dist/dict/en.d.ts +1 -0
- package/dist/dict/en.d.ts.map +1 -1
- package/dist/dict/en.js +4 -4
- package/dist/dict/index.js +2 -3
- package/dist/dict/ko.d.ts +1 -0
- package/dist/dict/ko.d.ts.map +1 -1
- package/dist/dict/ko.js +4 -4
- package/dist/dict/rc-keys.js +3 -4
- package/dist/dict/sd.js +8 -19
- package/dist/dict/sonamu-dictionary.js +141 -284
- package/dist/dict/types.js +1 -1
- package/dist/dict/utils.js +4 -5
- package/dist/entity/entity-manager.d.ts +2 -2
- package/dist/entity/entity-manager.js +34 -82
- package/dist/entity/entity-template-cone.js +33 -66
- package/dist/entity/entity.js +157 -311
- package/dist/env.d.ts +14 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +75 -0
- package/dist/exceptions/error-handler.js +2 -3
- package/dist/exceptions/so-exceptions.js +7 -5
- package/dist/filter/index.js +1 -2
- package/dist/filter/types.js +3 -4
- package/dist/filter/utils.js +21 -54
- package/dist/index.js +9 -8
- package/dist/logger/category.js +6 -12
- package/dist/logger/configure.js +23 -34
- package/dist/migration/code-generation.js +147 -315
- package/dist/migration/index-where-predicate.js +52 -144
- package/dist/migration/migration-set.js +19 -33
- package/dist/migration/migrator.d.ts +2 -0
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +69 -53
- package/dist/migration/postgresql-schema-reader.js +126 -225
- package/dist/migration/slack-confirm.d.ts +1 -0
- package/dist/migration/slack-confirm.d.ts.map +1 -1
- package/dist/migration/slack-confirm.js +28 -38
- package/dist/migration/types.js +1 -1
- package/dist/naite/messaging-types.js +1 -1
- package/dist/naite/naite-reporter.js +15 -32
- package/dist/naite/naite.js +43 -76
- package/dist/ssr/index.js +6 -9
- package/dist/ssr/registry.js +10 -18
- package/dist/ssr/renderer.js +10 -21
- package/dist/ssr/types.js +1 -1
- package/dist/storage/base-file.js +5 -10
- package/dist/storage/buffered-file.js +3 -4
- package/dist/storage/drivers.js +2 -3
- package/dist/storage/index.js +2 -3
- package/dist/storage/s3-driver.js +5 -9
- package/dist/storage/storage-manager.js +5 -5
- package/dist/storage/types.js +1 -1
- package/dist/storage/uploaded-file.js +4 -6
- package/dist/stream/index.js +1 -2
- package/dist/stream/sse.js +8 -13
- package/dist/stream/ws-audience-resolver.js +5 -5
- package/dist/stream/ws-audience.js +3 -4
- package/dist/stream/ws-cluster-bus.js +3 -4
- package/dist/stream/ws-core.js +1 -1
- package/dist/stream/ws-delivery.js +11 -25
- package/dist/stream/ws-local-connection-store.js +9 -18
- package/dist/stream/ws-presence-store.js +43 -97
- package/dist/stream/ws-registry.js +17 -22
- package/dist/stream/ws-telemetry-memory.js +38 -45
- package/dist/stream/ws-telemetry-trace.js +4 -6
- package/dist/stream/ws-telemetry.js +82 -135
- package/dist/stream/ws.js +47 -91
- package/dist/syncer/api-parser.js +81 -147
- package/dist/syncer/checksum.js +14 -32
- package/dist/syncer/code-generator.js +29 -47
- package/dist/syncer/entity-operations.js +17 -27
- package/dist/syncer/event-batcher.js +8 -15
- package/dist/syncer/file-patterns.js +3 -4
- package/dist/syncer/file-tracking.js +6 -10
- package/dist/syncer/index.js +1 -2
- package/dist/syncer/module-loader.js +10 -26
- package/dist/syncer/syncer-actions.js +19 -37
- package/dist/syncer/syncer.js +46 -98
- package/dist/syncer/watcher.js +12 -26
- package/dist/tasks/decorator.js +7 -11
- package/dist/tasks/step-wrapper.js +7 -8
- package/dist/tasks/workflow-manager.js +18 -25
- package/dist/template/entity-converter.js +40 -64
- package/dist/template/helpers.js +32 -63
- package/dist/template/implementations/entity.template.js +7 -11
- package/dist/template/implementations/entry-server.template.js +2 -3
- package/dist/template/implementations/generated.template.js +25 -51
- package/dist/template/implementations/generated_http.template.js +31 -58
- package/dist/template/implementations/generated_sso.template.js +45 -85
- package/dist/template/implementations/init_types.template.js +4 -7
- package/dist/template/implementations/model.template.js +5 -10
- package/dist/template/implementations/model_test.template.js +2 -3
- package/dist/template/implementations/queries.template.js +4 -7
- package/dist/template/implementations/sd.template.js +17 -35
- package/dist/template/implementations/services.template.js +18 -30
- package/dist/template/implementations/view_form.template.js +72 -125
- package/dist/template/implementations/view_id_all_select.template.js +2 -3
- package/dist/template/implementations/view_list.template.js +86 -143
- package/dist/template/implementations/view_search_input.template.js +2 -3
- package/dist/template/index.js +5 -8
- package/dist/template/template-manager.js +13 -26
- package/dist/template/template-types.js +2 -3
- package/dist/template/template.js +7 -11
- package/dist/template/zod-converter.js +173 -348
- package/dist/testing/_relation-graph.js +18 -37
- package/dist/testing/bootstrap.js +5 -8
- package/dist/testing/data-explorer.js +34 -78
- package/dist/testing/dev-test-routes.js +54 -60
- package/dist/testing/dev-vitest-manager.js +33 -84
- package/dist/testing/faker-mappings.js +3 -4
- package/dist/testing/fixture-generator.d.ts +2 -1
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +159 -321
- package/dist/testing/fixture-loader.js +2 -2
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +124 -227
- package/dist/testing/global-setup.d.ts.map +1 -1
- package/dist/testing/global-setup.js +29 -17
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +5 -4
- package/dist/testing/naite-vitest-reporter.js +2 -3
- package/dist/testing/parallel-db-manager.js +5 -3
- package/dist/testing/vitest-helpers.d.ts.map +1 -1
- package/dist/testing/vitest-helpers.js +15 -12
- package/dist/types/types.d.ts +14 -14
- package/dist/types/types.js +27 -50
- package/dist/ui/ai-api.js +6 -11
- package/dist/ui/ai-client.js +86 -134
- package/dist/ui/api.js +100 -196
- package/dist/ui/cdd-service.js +78 -130
- package/dist/ui/cdd-types.js +1 -1
- package/dist/ui-web/assets/{index-Df8q-fhb.js → index-DFStGyd0.js} +49 -49
- package/dist/ui-web/assets/index-Dx4ap5i4.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/async-utils.js +13 -25
- package/dist/utils/class-name.js +3 -4
- package/dist/utils/console-util.js +11 -26
- package/dist/utils/controller.d.ts.map +1 -1
- package/dist/utils/controller.js +14 -12
- package/dist/utils/esm-utils.js +5 -8
- package/dist/utils/formatter.js +10 -22
- package/dist/utils/fs-utils.js +14 -25
- package/dist/utils/lodash-able.js +3 -4
- package/dist/utils/model.js +7 -14
- package/dist/utils/object-utils.js +41 -73
- package/dist/utils/path-utils.js +5 -9
- package/dist/utils/process-utils.js +4 -7
- package/dist/utils/sql-parser.js +6 -13
- package/dist/utils/type-utils.js +16 -26
- package/dist/utils/utils.js +18 -40
- package/dist/utils/zod-error.js +9 -16
- package/dist/vector/chunking.js +24 -37
- package/dist/vector/config.js +2 -2
- package/dist/vector/embedding.js +8 -19
- package/dist/vector/index.js +1 -2
- package/dist/vector/types.js +1 -1
- package/package.json +8 -8
- package/src/__tests__/env.test.ts +127 -0
- package/src/api/__tests__/config.test.ts +10 -1
- package/src/api/config.ts +4 -12
- package/src/api/sonamu.ts +28 -33
- package/src/auth/audit-log/builders.ts +3 -0
- package/src/auth/audit-log/client-ip.ts +38 -0
- package/src/auth/audit-log/events.ts +1 -0
- package/src/auth/audit-log-ingestor.ts +22 -15
- package/src/auth/better-auth-request.ts +20 -0
- package/src/bin/__tests__/migrate-targets.test.ts +28 -0
- package/src/bin/__tests__/test-command.test.ts +82 -1
- package/src/bin/cli.ts +9 -18
- package/src/bin/fixture.ts +5 -4
- package/src/bin/migrate-targets.ts +7 -0
- package/src/bin/test-command.ts +2 -2
- package/src/database/__tests__/db.test.ts +175 -0
- package/src/database/db.ts +193 -71
- package/src/dict/en.ts +2 -0
- package/src/dict/ko.ts +2 -0
- package/src/env.ts +123 -0
- package/src/migration/__tests__/migrator.test.ts +149 -0
- package/src/migration/migrator.ts +74 -17
- package/src/migration/slack-confirm.ts +21 -0
- package/src/skills/sonamu/database.md +1 -1
- package/src/skills/sonamu/puri.md +33 -0
- package/src/skills/sonamu/testing-devrunner.md +1 -1
- package/src/stream/ws-telemetry-memory.ts +2 -2
- package/src/syncer/checksum.ts +7 -12
- package/src/testing/fixture-generator.ts +2 -1
- package/src/testing/fixture-manager.ts +3 -4
- package/src/testing/global-setup.ts +42 -18
- package/src/testing/index.ts +1 -0
- package/src/testing/vitest-helpers.ts +14 -0
- package/src/utils/controller.ts +14 -7
- package/tsdown.api.config.ts +6 -0
- package/dist/_virtual/rolldown_runtime.js +0 -39
- package/dist/ui-web/assets/index-D4rYm-Xz.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __esmMin } from "../_virtual/
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { AlreadyProcessedException, init_so_exceptions } from "../exceptions/so-exceptions.js";
|
|
3
3
|
import { init_controller, isTest } from "../utils/controller.js";
|
|
4
4
|
import { formatCode, init_formatter } from "../utils/formatter.js";
|
|
@@ -8,10 +8,9 @@ import { Naite, init_naite } from "../naite/naite.js";
|
|
|
8
8
|
import { init_file_tracking, trackWritten } from "./file-tracking.js";
|
|
9
9
|
import { generateTemplate, init_code_generator } from "./code-generator.js";
|
|
10
10
|
import assert from "assert";
|
|
11
|
-
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
12
11
|
import path, { dirname } from "path";
|
|
12
|
+
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
13
13
|
import chalk from "chalk";
|
|
14
|
-
|
|
15
14
|
//#region src/syncer/syncer-actions.ts
|
|
16
15
|
async function actionSyncConfig() {
|
|
17
16
|
const { host, port } = Sonamu.config.server.listen ?? {};
|
|
@@ -28,8 +27,7 @@ async function actionSyncConfig() {
|
|
|
28
27
|
*/
|
|
29
28
|
async function actionGenerateServices(paramsArray) {
|
|
30
29
|
Naite.t("actionGenerateServices", paramsArray);
|
|
31
|
-
|
|
32
|
-
return [...servicesFile];
|
|
30
|
+
return [...await generateTemplate("services", {}, { overwrite: true })];
|
|
33
31
|
}
|
|
34
32
|
/**
|
|
35
33
|
* Entity에 딸린 초기 types.ts를 만들어줍니다.
|
|
@@ -72,9 +70,7 @@ async function actionGenerateSsrEntryServerIfNotExists() {
|
|
|
72
70
|
try {
|
|
73
71
|
return await generateTemplate("entry_server", {}, { overwrite: false });
|
|
74
72
|
} catch (e) {
|
|
75
|
-
if (e instanceof AlreadyProcessedException)
|
|
76
|
-
return [];
|
|
77
|
-
}
|
|
73
|
+
if (e instanceof AlreadyProcessedException) return [];
|
|
78
74
|
throw e;
|
|
79
75
|
}
|
|
80
76
|
}
|
|
@@ -92,16 +88,13 @@ async function actionSyncFilesToTargets(tsPaths) {
|
|
|
92
88
|
return (await Promise.all(targets.map(async (target) => Promise.all(tsPaths.map(async (realSrc) => {
|
|
93
89
|
const dst = realSrc.replace(`/${apiDir}/`, `/${target}/`).replace("/application/", "/services/");
|
|
94
90
|
const dir = dirname(dst);
|
|
95
|
-
if (!await exists(dir)) {
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
const syncHeader = [
|
|
91
|
+
if (!await exists(dir)) await mkdir(dir, { recursive: true });
|
|
92
|
+
await copyFileWithReplaceCoreToShared(realSrc, dst, [
|
|
99
93
|
"/**",
|
|
100
94
|
" * @generated",
|
|
101
95
|
" * API에서 동기화된 파일입니다. 직접 수정하지 마세요.",
|
|
102
96
|
" */"
|
|
103
|
-
].join("\n");
|
|
104
|
-
await copyFileWithReplaceCoreToShared(realSrc, dst, syncHeader);
|
|
97
|
+
].join("\n"));
|
|
105
98
|
await trackWritten(dst);
|
|
106
99
|
!isTest() && console.log(chalk.bold("Copied: ") + chalk.blue(dst.replace(`${Sonamu.appRootPath}/`, "")));
|
|
107
100
|
return dst;
|
|
@@ -123,12 +116,8 @@ async function actionCopySharedToTargetsIfNotExists() {
|
|
|
123
116
|
};
|
|
124
117
|
for (const target of targets) {
|
|
125
118
|
const srcPath = path.join(import.meta.dirname.replace("/dist/", "/src/"), `../shared/${target}.shared.ts.txt`);
|
|
126
|
-
if (!await exists(srcPath))
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
if (!await exists(path.join(Sonamu.appRootPath, target))) {
|
|
130
|
-
throw new Error(`Tried to copy sonamu.shared.ts to target '${target}' but the target directory does not exist. Please check your project directory structure.`);
|
|
131
|
-
}
|
|
119
|
+
if (!await exists(srcPath)) continue;
|
|
120
|
+
if (!await exists(path.join(Sonamu.appRootPath, target))) throw new Error(`Tried to copy sonamu.shared.ts to target '${target}' but the target directory does not exist. Please check your project directory structure.`);
|
|
132
121
|
const fullText = await readFile(srcPath, "utf-8");
|
|
133
122
|
const convertedText = Object.entries(convertMap).reduce((acc, [key, value]) => acc.replace(`$[[${key}]]`, value), fullText);
|
|
134
123
|
const destPath = path.join(Sonamu.appRootPath, target, "src/services/sonamu.shared.ts");
|
|
@@ -136,9 +125,7 @@ async function actionCopySharedToTargetsIfNotExists() {
|
|
|
136
125
|
await mkdir(path.dirname(destPath), { recursive: true });
|
|
137
126
|
console.warn(`Created directory '${path.dirname(destPath)}' because it did not exist.`);
|
|
138
127
|
}
|
|
139
|
-
if (await exists(destPath))
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
128
|
+
if (await exists(destPath)) continue;
|
|
142
129
|
await writeFile(destPath, await formatCode(convertedText, destPath));
|
|
143
130
|
!isTest() && console.log(chalk.bold("Copied: ") + chalk.blue(path.relative(Sonamu.appRootPath, destPath)));
|
|
144
131
|
}
|
|
@@ -157,15 +144,11 @@ async function actionSyncSonamuDictionary() {
|
|
|
157
144
|
const i18nConfig = Sonamu.config.i18n;
|
|
158
145
|
const targetList = ["api", ...targets];
|
|
159
146
|
const apiI18nDir = path.join(Sonamu.appRootPath, Sonamu.config.api.dir, "src/i18n");
|
|
160
|
-
for (const target of targetList) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
await generateTemplate("sd", { target }, { overwrite: true });
|
|
166
|
-
} catch (e) {
|
|
167
|
-
console.error(`Failed to generate SD template for ${target}:`, e);
|
|
168
|
-
}
|
|
147
|
+
for (const target of targetList) try {
|
|
148
|
+
if (target !== "api") await syncLocaleFiles(target, apiI18nDir, i18nConfig.supportedLocales);
|
|
149
|
+
await generateTemplate("sd", { target }, { overwrite: true });
|
|
150
|
+
} catch (e) {
|
|
151
|
+
console.error(`Failed to generate SD template for ${target}:`, e);
|
|
169
152
|
}
|
|
170
153
|
}
|
|
171
154
|
/**
|
|
@@ -177,13 +160,12 @@ async function syncLocaleFiles(target, apiI18nDir, locales) {
|
|
|
177
160
|
for (const locale of locales) {
|
|
178
161
|
const sourceFile = path.join(apiI18nDir, `${locale}.ts`);
|
|
179
162
|
const targetFile = path.join(targetI18nDir, `${locale}.ts`);
|
|
180
|
-
|
|
163
|
+
await copyFileWithReplaceCoreToShared(sourceFile, targetFile, [
|
|
181
164
|
"/**",
|
|
182
165
|
" * @generated",
|
|
183
166
|
" * API에서 동기화된 파일입니다. 직접 수정하지 마세요.",
|
|
184
167
|
" */"
|
|
185
|
-
].join("\n");
|
|
186
|
-
await copyFileWithReplaceCoreToShared(sourceFile, targetFile, syncHeader);
|
|
168
|
+
].join("\n"));
|
|
187
169
|
await trackWritten(targetFile);
|
|
188
170
|
!isTest() && console.log(chalk.bold("Copied: ") + chalk.cyan(`${target}/src/i18n/${locale}.ts`));
|
|
189
171
|
}
|
|
@@ -198,8 +180,8 @@ var init_syncer_actions = __esmMin((() => {
|
|
|
198
180
|
init_code_generator();
|
|
199
181
|
init_file_tracking();
|
|
200
182
|
}));
|
|
201
|
-
|
|
202
183
|
//#endregion
|
|
203
184
|
init_syncer_actions();
|
|
204
185
|
export { actionCopySharedToTargetsIfNotExists, actionGenerateHttps, actionGenerateInitialTypes, actionGenerateSchemas, actionGenerateServices, actionGenerateSsrEntryServerIfNotExists, actionGenerateSsrQueries, actionSyncConfig, actionSyncFilesToTargets, actionSyncSonamuDictionary, init_syncer_actions };
|
|
205
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCwgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVGVtcGxhdGUgfSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuXG4vLyB3ZWIvLnNvbmFtdS5lbnYg7JeQIO2YhOyerCDshKTsoJXqsJIg7KCA7J6lXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0NvbmZpZygpIHtcbiAgY29uc3QgeyBob3N0LCBwb3J0IH0gPSBTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4gPz8ge307XG4gIGNvbnN0IGNvbnRlbnQgPSBgQVBJX0hPU1Q9JHtob3N0ID8/IFwibG9jYWxob3N0XCJ9XFxuQVBJX1BPUlQ9JHtwb3J0ID8/IDMwMDB9YDtcblxuICBOYWl0ZS50KFwiYWN0aW9uU3luY0NvbmZpZ1wiLCB7IGNvbnRlbnQgfSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAuLi5Tb25hbXUuY29uZmlnLnN5bmMudGFyZ2V0cy5tYXAoYXN5bmMgKHRhcmdldCkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgXCIuc29uYW11LmVudlwiKSwgY29udGVudCk7XG4gICAgfSksXG4gICAgZ2VuZXJhdGVUZW1wbGF0ZShcImdlbmVyYXRlZF9zc29cIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICBdKTtcbn1cblxuLyoqXG4gKiBzZXJ2aWNlcy5nZW5lcmF0ZWQudHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHBhcmFtIHBhcmFtc0FycmF5XG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzKFxuICBwYXJhbXNBcnJheToge1xuICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgfVtdLFxuKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBOYWl0ZS50KFwiYWN0aW9uR2VuZXJhdGVTZXJ2aWNlc1wiLCBwYXJhbXNBcnJheSk7XG5cbiAgLy8gc2VydmljZXMuZ2VuZXJhdGVkLnRzIO2Gte2VqSDtjIzsnbwg7IOd7ISxXG4gIGNvbnN0IHNlcnZpY2VzRmlsZSA9IGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXG4gICAgXCJzZXJ2aWNlc1wiLFxuICAgIHt9LFxuICAgIHtcbiAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIHJldHVybiBbLi4uc2VydmljZXNGaWxlXTtcbn1cblxuLyoqXG4gKiBFbnRpdHnsl5Ag65S466awIOy0iOq4sCB0eXBlcy50c+ulvCDrp4zrk6TslrTspI3ri4jri6QuXG4gKiBAcGFyYW0gZW50aXR5SWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSW5pdGlhbFR5cGVzKGVudGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIHJldHVybiBnZW5lcmF0ZVRlbXBsYXRlKFwiaW5pdF90eXBlc1wiLCB7IGVudGl0eUlkIH0pO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQudHPsmYAgc29uYW11LmdlbmVyYXRlZC5zc28udHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTY2hlbWFzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICBdKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzb25hbXUuZ2VuZXJhdGVkLmh0dHDrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZUh0dHBzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IFtyZXNdID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcImdlbmVyYXRlZF9odHRwXCIsXG4gICAgeyBlbnRpdHlJZDogXCJkdW1teVwiIH0sXG4gICAgeyBvdmVyd3JpdGU6IHRydWUgfSxcbiAgKTtcbiAgYXNzZXJ0KHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICogcXVlcmllcy5nZW5lcmF0ZWQudHMg7J6s7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JRdWVyaWVzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJxdWVyaWVzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOulvCDsg53shLHtlanri4jri6QuXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqIOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5zrnbwg66ek67KIIG92ZXJ3cml0ZeuKlCBtdGltZeunjCDqsLHsi6DtlZjripQg7J2Y66+4IOyXhuuKlCDrj5nsnpEuXG4gKiDthZztlIzrpr8g7J6Q7LK06rCAIOuzgOqyveuQnCDqsr3smrAoU29uYW11IOyXheq3uOugiOydtOuTnCnsl5DripQg7IKs7Jqp7J6Q6rCAIO2MjOydvOydhCDsgq3soJztlZwg65KkIHN5bmProZwg7J6s7IOd7ISxLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0ICjsnbTrr7gg7J6I7Jy866m0IOu5iCDrsLDsl7QpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JFbnRyeVNlcnZlcklmTm90RXhpc3RzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudHJ5X3NlcnZlclwiLCB7fSwgeyBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZ2VuZXJhdGVUZW1wbGF0ZeydgCBvdmVyd3JpdGU6IGZhbHNl7JeQ7IScIO2MjOydvOydtCDsnbTrr7gg7J6I7Jy866m0IOyYiOyZuOulvCDrjZjsp5Hri4jri6QuXG4gICAgLy8gSWZOb3RFeGlzdHMg7J2Y66+47IOBIFwi6re464OlIOuGlOuRlOuLpFwi6rCAIOygleyDgeydtOuvgOuhnCDruYgg67Cw7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIOyjvOyWtOynhCAudHMg7YyM7J2865OkKGFwaeyXkCDsnojri6Tqs6Ag6rCA7KCVKeydhCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOydmCBzZXJ2aWNlc+yXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7J2065WMIOuCtOu2gOydmCBzb25hbXUgaW1wb3J064qUIHNvbmFtdS5zaGFyZWQudHMgaW1wb3J066GcIOy5mO2ZmOuQmOqzoCxcbiAqIOqyveuhnOydmCAvYXBwbGljYXRpb24v7J2AIC9zZXJ2aWNlcy/roZwg7LmY7ZmY65Cp64uI64ukLlxuICpcbiAqIEBwYXJhbSB0c1BhdGhzIOuzteyCrO2VoCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnFxuICogQHJldHVybnMg6rCBIO2DgOqyn+yXkCDrs7XsgqzrkJwg7YyM7J2865Ok7J2YIOygiOuMgCDqsr3roZwg67Cw7Je0IChmbGF0KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyh0c1BhdGhzOiBBYnNvbHV0ZVBhdGhbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gIGNvbnN0IHsgZGlyOiBhcGlEaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gIHJldHVybiAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0YXJnZXRzLm1hcChhc3luYyAodGFyZ2V0KSA9PlxuICAgICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgICB0c1BhdGhzLm1hcChhc3luYyAocmVhbFNyYykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHN0ID0gcmVhbFNyY1xuICAgICAgICAgICAgICAucmVwbGFjZShgLyR7YXBpRGlyfS9gLCBgLyR7dGFyZ2V0fS9gKVxuICAgICAgICAgICAgICAucmVwbGFjZShcIi9hcHBsaWNhdGlvbi9cIiwgXCIvc2VydmljZXMvXCIpO1xuICAgICAgICAgICAgY29uc3QgZGlyID0gZGlybmFtZShkc3QpO1xuICAgICAgICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzeW5jSGVhZGVyID0gW1xuICAgICAgICAgICAgICBcIi8qKlwiLFxuICAgICAgICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgICAgICAgXCIgKiBBUEnsl5DshJwg64+Z6riw7ZmU65CcIO2MjOydvOyeheuLiOuLpC4g7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgICBhd2FpdCBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKHJlYWxTcmMsIGRzdCwgc3luY0hlYWRlcik7XG4gICAgICAgICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0IGFzIEFic29sdXRlUGF0aCk7XG4gICAgICAgICAgICAhaXNUZXN0KCkgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShkc3QucmVwbGFjZShgJHtTb25hbXUuYXBwUm9vdFBhdGh9L2AsIFwiXCIpKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBkc3Q7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICogc2hhcmVkIO2FnO2UjOumv+ycvOuhnOu2gO2EsCBzb25hbXUuc2hhcmVkLnRzIO2MjOydvOydhCDrp4zrk6TslrTshJwg66qo65OgIO2DgOqynyDrlJTroInthqDrpqzsl5Ag6rCW64ukIOuRoeuLiOuLpC5cbiAqIO2MjOydvOydhCDrp4zrk5zripQg6rO87KCV7JeQ7IScIOyXrOufrCDsuZjtmZgg6rCA6rO17J20IOydvOyWtOuCqeuLiOuLpC5cbiAqXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkNvcHlTaGFyZWRUb1RhcmdldHNJZk5vdEV4aXN0cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG5cbiAgLy8gcGx1cmFsLnRzIOuCtOyaqeydhCDsnb3slrTshJwgc2hhcmVkIO2MjOydvOyXkCDsgr3snoXtlanri4jri6QuXG4gIGNvbnN0IGRpY3RVdGlsc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgXCIuLi9kaWN0L3V0aWxzLnRzXCIsXG4gICk7XG4gIGNvbnN0IGRpY3RVdGlsc0NvZGUgPSAoYXdhaXQgZXhpc3RzKGRpY3RVdGlsc1BhdGgpKSA/IGF3YWl0IHJlYWRGaWxlKGRpY3RVdGlsc1BhdGgsIFwidXRmLThcIikgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzcmNQYXRoKSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0KSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUcmllZCB0byBjb3B5IHNvbmFtdS5zaGFyZWQudHMgdG8gdGFyZ2V0ICcke3RhcmdldH0nIGJ1dCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIGNoZWNrIHlvdXIgcHJvamVjdCBkaXJlY3Rvcnkgc3RydWN0dXJlLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxUZXh0ID0gYXdhaXQgcmVhZEZpbGUoc3JjUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICBjb25zdCBjb252ZXJ0ZWRUZXh0ID0gT2JqZWN0LmVudHJpZXMoY29udmVydE1hcCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiBhY2MucmVwbGFjZShgJFtbJHtrZXl9XV1gLCB2YWx1ZSksXG4gICAgICBmdWxsVGV4dCxcbiAgICApO1xuXG4gICAgLy8g7J206rG0IO2UhOuhnOygne2KuOyXkCAudHMg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnYQg7IOd7ISx7ZWY64qUIOqyg+ydtOuvgOuhnCBzcmPsnZggLnRzIOqyveuhnOuhnCDqsJHri4jri6QuXG4gICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIFwic3JjL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWQudHNcIik7XG5cbiAgICAvLyDsoJXrp5Ag7Zi57Iuc64KY7KeA66eMIHRhcmdldCDrlJTroInthqDrpqzripQg7J6I7Ja064+EIHNyYy9zZXJ2aWNlcyDrlJTroInthqDrpqzripQg7JeG7J2EIOyImCDsnojsnLzrr4DroZwg66+466asIOyDneyEse2VtOykjeuLiOuLpC5cbiAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSkpKSB7XG4gICAgICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUud2FybihgQ3JlYXRlZCBkaXJlY3RvcnkgJyR7cGF0aC5kaXJuYW1lKGRlc3RQYXRoKX0nIGJlY2F1c2UgaXQgZGlkIG5vdCBleGlzdC5gKTtcbiAgICB9XG5cbiAgICAvLyDtjIzsnbzsnbQg7J2066+4IOyhtOyerO2VmOuptCDqsbTrhIjrnIHri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+uKlCDtlITroZzsoJ3tirjsl5DshJwg7J6Q7Jyg66Gt6rKMIOy7pOyKpO2EsOuniOydtOynle2VoCDsiJgg7J6I7Ja07JW8IO2VmOuvgOuhnCxcbiAgICAvLyDstZzstIggMe2ajOunjCDsg53shLHtlZjqs6Ag7J207ZuE7JeQ64qUIOuNruyWtOyTsOyngCDslYrsirXri4jri6QuXG4gICAgLy8g7YWc7ZSM66a/IOuCtOyaqSgkW1tkaWN0VXRpbHNdXSDrk7Ep7J20IOuzgOqyveuQmOyXiOydhCDrlYwg67CY7JiB7J20IO2VhOyalO2VmOuptCxcbiAgICAvLyDtlbTri7kg7YyM7J287J2EIOyCreygnO2VnCDrkqQgYHBucG0gc29uYW11IHN5bmNg66GcIOyerOyDneyEse2VmOuptCDrkKnri4jri6QuXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhkZXN0UGF0aCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IHdyaXRlRmlsZShkZXN0UGF0aCwgYXdhaXQgZm9ybWF0Q29kZShjb252ZXJ0ZWRUZXh0LCBkZXN0UGF0aCkpO1xuICAgICFpc1Rlc3QoKSAmJlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcHBSb290UGF0aCwgZGVzdFBhdGgpKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTb25hbXUgRGljdGlvbmFyeShTRCnrpbwg66qo65OgIO2DgOqynyhhcGkgKyB3ZWIvYXBwIOuTsSnsl5Ag64+Z6riw7ZmU7ZWp64uI64ukLlxuICpcbiAqIOqwgSDtg4Dqsp/sl5Ag64yA7ZW0OlxuICogLSB0YXJnZXTsnbQgYXBp6rCAIOyVhOuLiOuptCDsgqzsmqnsnpAg7J6R7ISxIGxvY2FsZSDtjIzsnbwoa28udHMvZW4udHMvLi4uKeydhCBhcGkg4oaSIHRhcmdldOycvOuhnCDrs7XsgqxcbiAqIC0gc2Qg7YWc7ZSM66a/7J2EIOugjOuNlOunge2VtOyEnCBzZC5nZW5lcmF0ZWQudHMg7IOd7ISxIChvdmVyd3JpdGUpXG4gKlxuICog7ZWcIO2DgOqyn+yXkOyEnCDsi6TtjKjtlbTrj4Qg64uk66W4IO2DgOqyn+ydgCDqs4Tsho0g7KeE7ZaJ7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY1NvbmFtdURpY3Rpb25hcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuICBjb25zdCBpMThuQ29uZmlnID0gU29uYW11LmNvbmZpZy5pMThuO1xuXG4gIGNvbnN0IHRhcmdldExpc3QgPSBbXCJhcGlcIiwgLi4udGFyZ2V0c10gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IG1rZGlyKHRhcmdldEkxOG5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gcGF0aC5qb2luKGFwaUkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcbiAgICBjb25zdCB0YXJnZXRGaWxlID0gcGF0aC5qb2luKHRhcmdldEkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcblxuICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICBcIi8qKlwiLFxuICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgIFwiICovXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSwgc3luY0hlYWRlcik7XG4gICAgYXdhaXQgdHJhY2tXcml0dGVuKHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmN5YW4oYCR7dGFyZ2V0fS9zcmMvaTE4bi8ke2xvY2FsZX0udHNgKSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLGVBQXNCLG1CQUFtQjtDQUN2QyxNQUFNLEVBQUUsTUFBTSxTQUFTLE9BQU8sT0FBTyxPQUFPLFVBQVUsRUFBRTtDQUN4RCxNQUFNLFVBQVUsWUFBWSxRQUFRLFlBQVksYUFBYSxRQUFRO0FBRXJFLE9BQU0sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLENBQUM7QUFDeEMsT0FBTSxRQUFRLElBQUksQ0FDaEIsR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxXQUFXO0FBQ2xELFFBQU0sVUFBVSxLQUFLLEtBQUssT0FBTyxhQUFhLFFBQVEsY0FBYyxFQUFFLFFBQVE7R0FDOUUsRUFDRixpQkFBaUIsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLFdBQVcsTUFBTSxDQUFDLENBQzNELENBQUM7Ozs7Ozs7QUFRSixlQUFzQix1QkFDcEIsYUFHeUI7QUFDekIsT0FBTSxFQUFFLDBCQUEwQixZQUFZO0NBRzlDLE1BQU0sZUFBZSxNQUFNLGlCQUN6QixZQUNBLEVB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
|
|
186
|
+
|
|
187
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCwgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVGVtcGxhdGUgfSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuXG4vLyB3ZWIvLnNvbmFtdS5lbnYg7JeQIO2YhOyerCDshKTsoJXqsJIg7KCA7J6lXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0NvbmZpZygpIHtcbiAgY29uc3QgeyBob3N0LCBwb3J0IH0gPSBTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4gPz8ge307XG4gIGNvbnN0IGNvbnRlbnQgPSBgQVBJX0hPU1Q9JHtob3N0ID8/IFwibG9jYWxob3N0XCJ9XFxuQVBJX1BPUlQ9JHtwb3J0ID8/IDMwMDB9YDtcblxuICBOYWl0ZS50KFwiYWN0aW9uU3luY0NvbmZpZ1wiLCB7IGNvbnRlbnQgfSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAuLi5Tb25hbXUuY29uZmlnLnN5bmMudGFyZ2V0cy5tYXAoYXN5bmMgKHRhcmdldCkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgXCIuc29uYW11LmVudlwiKSwgY29udGVudCk7XG4gICAgfSksXG4gICAgZ2VuZXJhdGVUZW1wbGF0ZShcImdlbmVyYXRlZF9zc29cIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICBdKTtcbn1cblxuLyoqXG4gKiBzZXJ2aWNlcy5nZW5lcmF0ZWQudHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHBhcmFtIHBhcmFtc0FycmF5XG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzKFxuICBwYXJhbXNBcnJheToge1xuICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgfVtdLFxuKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBOYWl0ZS50KFwiYWN0aW9uR2VuZXJhdGVTZXJ2aWNlc1wiLCBwYXJhbXNBcnJheSk7XG5cbiAgLy8gc2VydmljZXMuZ2VuZXJhdGVkLnRzIO2Gte2VqSDtjIzsnbwg7IOd7ISxXG4gIGNvbnN0IHNlcnZpY2VzRmlsZSA9IGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXG4gICAgXCJzZXJ2aWNlc1wiLFxuICAgIHt9LFxuICAgIHtcbiAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIHJldHVybiBbLi4uc2VydmljZXNGaWxlXTtcbn1cblxuLyoqXG4gKiBFbnRpdHnsl5Ag65S466awIOy0iOq4sCB0eXBlcy50c+ulvCDrp4zrk6TslrTspI3ri4jri6QuXG4gKiBAcGFyYW0gZW50aXR5SWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSW5pdGlhbFR5cGVzKGVudGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIHJldHVybiBnZW5lcmF0ZVRlbXBsYXRlKFwiaW5pdF90eXBlc1wiLCB7IGVudGl0eUlkIH0pO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQudHPsmYAgc29uYW11LmdlbmVyYXRlZC5zc28udHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTY2hlbWFzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICBdKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzb25hbXUuZ2VuZXJhdGVkLmh0dHDrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZUh0dHBzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IFtyZXNdID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcImdlbmVyYXRlZF9odHRwXCIsXG4gICAgeyBlbnRpdHlJZDogXCJkdW1teVwiIH0sXG4gICAgeyBvdmVyd3JpdGU6IHRydWUgfSxcbiAgKTtcbiAgYXNzZXJ0KHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICogcXVlcmllcy5nZW5lcmF0ZWQudHMg7J6s7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JRdWVyaWVzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJxdWVyaWVzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOulvCDsg53shLHtlanri4jri6QuXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqIOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5zrnbwg66ek67KIIG92ZXJ3cml0ZeuKlCBtdGltZeunjCDqsLHsi6DtlZjripQg7J2Y66+4IOyXhuuKlCDrj5nsnpEuXG4gKiDthZztlIzrpr8g7J6Q7LK06rCAIOuzgOqyveuQnCDqsr3smrAoU29uYW11IOyXheq3uOugiOydtOuTnCnsl5DripQg7IKs7Jqp7J6Q6rCAIO2MjOydvOydhCDsgq3soJztlZwg65KkIHN5bmProZwg7J6s7IOd7ISxLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0ICjsnbTrr7gg7J6I7Jy866m0IOu5iCDrsLDsl7QpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JFbnRyeVNlcnZlcklmTm90RXhpc3RzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudHJ5X3NlcnZlclwiLCB7fSwgeyBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZ2VuZXJhdGVUZW1wbGF0ZeydgCBvdmVyd3JpdGU6IGZhbHNl7JeQ7IScIO2MjOydvOydtCDsnbTrr7gg7J6I7Jy866m0IOyYiOyZuOulvCDrjZjsp5Hri4jri6QuXG4gICAgLy8gSWZOb3RFeGlzdHMg7J2Y66+47IOBIFwi6re464OlIOuGlOuRlOuLpFwi6rCAIOygleyDgeydtOuvgOuhnCDruYgg67Cw7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIOyjvOyWtOynhCAudHMg7YyM7J2865OkKGFwaeyXkCDsnojri6Tqs6Ag6rCA7KCVKeydhCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOydmCBzZXJ2aWNlc+yXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7J2065WMIOuCtOu2gOydmCBzb25hbXUgaW1wb3J064qUIHNvbmFtdS5zaGFyZWQudHMgaW1wb3J066GcIOy5mO2ZmOuQmOqzoCxcbiAqIOqyveuhnOydmCAvYXBwbGljYXRpb24v7J2AIC9zZXJ2aWNlcy/roZwg7LmY7ZmY65Cp64uI64ukLlxuICpcbiAqIEBwYXJhbSB0c1BhdGhzIOuzteyCrO2VoCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnFxuICogQHJldHVybnMg6rCBIO2DgOqyn+yXkCDrs7XsgqzrkJwg7YyM7J2865Ok7J2YIOygiOuMgCDqsr3roZwg67Cw7Je0IChmbGF0KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyh0c1BhdGhzOiBBYnNvbHV0ZVBhdGhbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gIGNvbnN0IHsgZGlyOiBhcGlEaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gIHJldHVybiAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0YXJnZXRzLm1hcChhc3luYyAodGFyZ2V0KSA9PlxuICAgICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgICB0c1BhdGhzLm1hcChhc3luYyAocmVhbFNyYykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHN0ID0gcmVhbFNyY1xuICAgICAgICAgICAgICAucmVwbGFjZShgLyR7YXBpRGlyfS9gLCBgLyR7dGFyZ2V0fS9gKVxuICAgICAgICAgICAgICAucmVwbGFjZShcIi9hcHBsaWNhdGlvbi9cIiwgXCIvc2VydmljZXMvXCIpO1xuICAgICAgICAgICAgY29uc3QgZGlyID0gZGlybmFtZShkc3QpO1xuICAgICAgICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzeW5jSGVhZGVyID0gW1xuICAgICAgICAgICAgICBcIi8qKlwiLFxuICAgICAgICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgICAgICAgXCIgKiBBUEnsl5DshJwg64+Z6riw7ZmU65CcIO2MjOydvOyeheuLiOuLpC4g7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgICBhd2FpdCBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKHJlYWxTcmMsIGRzdCwgc3luY0hlYWRlcik7XG4gICAgICAgICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0IGFzIEFic29sdXRlUGF0aCk7XG4gICAgICAgICAgICAhaXNUZXN0KCkgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShkc3QucmVwbGFjZShgJHtTb25hbXUuYXBwUm9vdFBhdGh9L2AsIFwiXCIpKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBkc3Q7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICogc2hhcmVkIO2FnO2UjOumv+ycvOuhnOu2gO2EsCBzb25hbXUuc2hhcmVkLnRzIO2MjOydvOydhCDrp4zrk6TslrTshJwg66qo65OgIO2DgOqynyDrlJTroInthqDrpqzsl5Ag6rCW64ukIOuRoeuLiOuLpC5cbiAqIO2MjOydvOydhCDrp4zrk5zripQg6rO87KCV7JeQ7IScIOyXrOufrCDsuZjtmZgg6rCA6rO17J20IOydvOyWtOuCqeuLiOuLpC5cbiAqXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkNvcHlTaGFyZWRUb1RhcmdldHNJZk5vdEV4aXN0cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG5cbiAgLy8gcGx1cmFsLnRzIOuCtOyaqeydhCDsnb3slrTshJwgc2hhcmVkIO2MjOydvOyXkCDsgr3snoXtlanri4jri6QuXG4gIGNvbnN0IGRpY3RVdGlsc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgXCIuLi9kaWN0L3V0aWxzLnRzXCIsXG4gICk7XG4gIGNvbnN0IGRpY3RVdGlsc0NvZGUgPSAoYXdhaXQgZXhpc3RzKGRpY3RVdGlsc1BhdGgpKSA/IGF3YWl0IHJlYWRGaWxlKGRpY3RVdGlsc1BhdGgsIFwidXRmLThcIikgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzcmNQYXRoKSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0KSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUcmllZCB0byBjb3B5IHNvbmFtdS5zaGFyZWQudHMgdG8gdGFyZ2V0ICcke3RhcmdldH0nIGJ1dCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIGNoZWNrIHlvdXIgcHJvamVjdCBkaXJlY3Rvcnkgc3RydWN0dXJlLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxUZXh0ID0gYXdhaXQgcmVhZEZpbGUoc3JjUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICBjb25zdCBjb252ZXJ0ZWRUZXh0ID0gT2JqZWN0LmVudHJpZXMoY29udmVydE1hcCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiBhY2MucmVwbGFjZShgJFtbJHtrZXl9XV1gLCB2YWx1ZSksXG4gICAgICBmdWxsVGV4dCxcbiAgICApO1xuXG4gICAgLy8g7J206rG0IO2UhOuhnOygne2KuOyXkCAudHMg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnYQg7IOd7ISx7ZWY64qUIOqyg+ydtOuvgOuhnCBzcmPsnZggLnRzIOqyveuhnOuhnCDqsJHri4jri6QuXG4gICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIFwic3JjL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWQudHNcIik7XG5cbiAgICAvLyDsoJXrp5Ag7Zi57Iuc64KY7KeA66eMIHRhcmdldCDrlJTroInthqDrpqzripQg7J6I7Ja064+EIHNyYy9zZXJ2aWNlcyDrlJTroInthqDrpqzripQg7JeG7J2EIOyImCDsnojsnLzrr4DroZwg66+466asIOyDneyEse2VtOykjeuLiOuLpC5cbiAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSkpKSB7XG4gICAgICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUud2FybihgQ3JlYXRlZCBkaXJlY3RvcnkgJyR7cGF0aC5kaXJuYW1lKGRlc3RQYXRoKX0nIGJlY2F1c2UgaXQgZGlkIG5vdCBleGlzdC5gKTtcbiAgICB9XG5cbiAgICAvLyDtjIzsnbzsnbQg7J2066+4IOyhtOyerO2VmOuptCDqsbTrhIjrnIHri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+uKlCDtlITroZzsoJ3tirjsl5DshJwg7J6Q7Jyg66Gt6rKMIOy7pOyKpO2EsOuniOydtOynle2VoCDsiJgg7J6I7Ja07JW8IO2VmOuvgOuhnCxcbiAgICAvLyDstZzstIggMe2ajOunjCDsg53shLHtlZjqs6Ag7J207ZuE7JeQ64qUIOuNruyWtOyTsOyngCDslYrsirXri4jri6QuXG4gICAgLy8g7YWc7ZSM66a/IOuCtOyaqSgkW1tkaWN0VXRpbHNdXSDrk7Ep7J20IOuzgOqyveuQmOyXiOydhCDrlYwg67CY7JiB7J20IO2VhOyalO2VmOuptCxcbiAgICAvLyDtlbTri7kg7YyM7J287J2EIOyCreygnO2VnCDrkqQgYHBucG0gc29uYW11IHN5bmNg66GcIOyerOyDneyEse2VmOuptCDrkKnri4jri6QuXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhkZXN0UGF0aCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IHdyaXRlRmlsZShkZXN0UGF0aCwgYXdhaXQgZm9ybWF0Q29kZShjb252ZXJ0ZWRUZXh0LCBkZXN0UGF0aCkpO1xuICAgICFpc1Rlc3QoKSAmJlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcHBSb290UGF0aCwgZGVzdFBhdGgpKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTb25hbXUgRGljdGlvbmFyeShTRCnrpbwg66qo65OgIO2DgOqynyhhcGkgKyB3ZWIvYXBwIOuTsSnsl5Ag64+Z6riw7ZmU7ZWp64uI64ukLlxuICpcbiAqIOqwgSDtg4Dqsp/sl5Ag64yA7ZW0OlxuICogLSB0YXJnZXTsnbQgYXBp6rCAIOyVhOuLiOuptCDsgqzsmqnsnpAg7J6R7ISxIGxvY2FsZSDtjIzsnbwoa28udHMvZW4udHMvLi4uKeydhCBhcGkg4oaSIHRhcmdldOycvOuhnCDrs7XsgqxcbiAqIC0gc2Qg7YWc7ZSM66a/7J2EIOugjOuNlOunge2VtOyEnCBzZC5nZW5lcmF0ZWQudHMg7IOd7ISxIChvdmVyd3JpdGUpXG4gKlxuICog7ZWcIO2DgOqyn+yXkOyEnCDsi6TtjKjtlbTrj4Qg64uk66W4IO2DgOqyn+ydgCDqs4Tsho0g7KeE7ZaJ7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY1NvbmFtdURpY3Rpb25hcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuICBjb25zdCBpMThuQ29uZmlnID0gU29uYW11LmNvbmZpZy5pMThuO1xuXG4gIGNvbnN0IHRhcmdldExpc3QgPSBbXCJhcGlcIiwgLi4udGFyZ2V0c10gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IG1rZGlyKHRhcmdldEkxOG5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gcGF0aC5qb2luKGFwaUkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcbiAgICBjb25zdCB0YXJnZXRGaWxlID0gcGF0aC5qb2luKHRhcmdldEkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcblxuICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICBcIi8qKlwiLFxuICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgIFwiICovXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSwgc3luY0hlYWRlcik7XG4gICAgYXdhaXQgdHJhY2tXcml0dGVuKHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmN5YW4oYCR7dGFyZ2V0fS9zcmMvaTE4bi8ke2xvY2FsZX0udHNgKSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFrQkEsZUFBc0IsbUJBQW1CO0NBQ3ZDLE1BQU0sRUFBRSxNQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sVUFBVSxDQUFDO0NBQ3ZELE1BQU0sVUFBVSxZQUFZLFFBQVEsWUFBWSxhQUFhLFFBQVE7Q0FFckUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsQ0FBQztDQUN2QyxNQUFNLFFBQVEsSUFBSSxDQUNoQixHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLFdBQVc7RUFDbEQsTUFBTSxVQUFVLEtBQUssS0FBSyxPQUFPLGFBQWEsUUFBUSxhQUFhLEdBQUcsT0FBTztDQUMvRSxDQUFDLEdBQ0QsaUJBQWlCLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQyxDQUMzRCxDQUFDO0FBQ0g7Ozs7OztBQU9BLGVBQXNCLHVCQUNwQixhQUd5QjtDQUN6QixNQUFNLEVBQUUsMEJBQTBCLFdBQVc7Q0FXN0MsT0FBTyxDQUFDLEdBQUcsTUFSZ0IsaUJBQ3pCLFlBQ0EsQ0FBQyxHQUNELEVBQ0UsV0FBVyxLQUNiLENBQ0YsQ0FFdUI7QUFDekI7Ozs7O0FBTUEsZUFBc0IsMkJBQTJCLFVBQTJDO0NBQzFGLE9BQU8saUJBQWlCLGNBQWMsRUFBRSxTQUFTLENBQUM7QUFDcEQ7Ozs7O0FBTUEsZUFBc0Isd0JBQWlEO0NBQ3JFLFFBQ0UsTUFBTSxRQUFRLElBQUksQ0FDaEIsaUJBQWlCLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQyxHQUN6RCxpQkFBaUIsYUFBYSxDQUFDLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQyxDQUN2RCxDQUFDLEVBQUEsQ0FDRCxLQUFLO0FBQ1Q7Ozs7O0FBTUEsZUFBc0Isc0JBQTZDO0NBQ2pFLE1BQU0sQ0FBQyxPQUFPLE1BQU0saUJBQ2xCLGtCQUNBLEVBQUUsVUFBVSxRQUFRLEdBQ3BCLEVBQUUsV0FBVyxLQUFLLENBQ3BCO0NBQ0EsT0FBTyxHQUFHO0NBQ1YsT0FBTztBQUNUOzs7OztBQU1BLGVBQXNCLDJCQUFvRDtDQUN4RSxPQUFPLGlCQUFpQixXQUFXLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQzVEOzs7Ozs7OztBQVNBLGVBQXNCLDBDQUFtRTtDQUN2RixJQUFJO0VBQ0YsT0FBTyxNQUFNLGlCQUFpQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsV0FBVyxNQUFNLENBQUM7Q0FDeEUsU0FBUyxHQUFHO0VBR1YsSUFBSSxhQUFhLDJCQUNmLE9BQU8sQ0FBQztFQUVWLE1BQU07Q0FDUjtBQUNGOzs7Ozs7Ozs7QUFVQSxlQUFzQix5QkFBeUIsU0FBNEM7Q0FDekYsTUFBTSxFQUFFLFlBQVksT0FBTyxPQUFPO0NBQ2xDLE1BQU0sRUFBRSxLQUFLLFdBQVcsT0FBTyxPQUFPO0NBRXRDLFFBQ0UsTUFBTSxRQUFRLElBQ1osUUFBUSxJQUFJLE9BQU8sV0FDakIsUUFBUSxJQUNOLFFBQVEsSUFBSSxPQUFPLFlBQVk7RUFDN0IsTUFBTSxNQUFNLFFBQ1QsUUFBUSxJQUFJLE9BQU8sSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQ3JDLFFBQVEsaUJBQWlCLFlBQVk7RUFDeEMsTUFBTSxNQUFNLFFBQVEsR0FBRztFQUN2QixJQUFJLENBQUUsTUFBTSxPQUFPLEdBQUcsR0FDcEIsTUFBTSxNQUFNLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQztFQVF0QyxNQUFNLGdDQUFnQyxTQUFTLEtBTjVCO0dBQ2pCO0dBQ0E7R0FDQTtHQUNBO0VBQ0YsQ0FBQyxDQUFDLEtBQUssSUFDNkMsQ0FBVTtFQUM5RCxNQUFNLGFBQWEsR0FBbUI7RUFDdEMsQ0FBQyxPQUFPLEtBQ04sUUFBUSxJQUNOLE1BQU0sS0FBSyxVQUFVLElBQUksTUFBTSxLQUFLLElBQUksUUFBUSxHQUFHLE9BQU8sWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUMvRTtFQUNGLE9BQU87Q0FDVCxDQUFDLENBQ0gsQ0FDRixDQUNGLEVBQUEsQ0FDQSxLQUFLO0FBQ1Q7Ozs7Ozs7QUFRQSxlQUFzQix1Q0FBc0Q7Q0FDMUUsTUFBTSxFQUFFLFlBQVksT0FBTyxPQUFPO0NBR2xDLE1BQU0sZ0JBQWdCLEtBQUssS0FDekIsT0FBTyxLQUFLLFFBQVEsUUFBUSxVQUFVLE9BQU8sR0FDN0Msa0JBQ0Y7Q0FDQSxNQUFNLGdCQUFpQixNQUFNLE9BQU8sYUFBYSxJQUFLLE1BQU0sU0FBUyxlQUFlLE9BQU8sSUFBSTtDQUcvRixNQUFNLGFBQWE7RUFDakIsU0FDRSxPQUFPLE9BQU8sT0FBTyxXQUNyQixVQUFVLE9BQU8sT0FBTyxPQUFPLFFBQVEsUUFBUSxZQUFZLEdBQUcsT0FBTyxPQUFPLE9BQU8sUUFBUSxRQUFRO0VBQ3JHLFdBQVc7Q0FDYjtDQUVBLEtBQUssTUFBTSxVQUFVLFNBQVM7RUFJNUIsTUFBTSxVQUFVLEtBQUssS0FDbkIsT0FBTyxLQUFLLFFBQVEsUUFBUSxVQUFVLE9BQU8sR0FDN0MsYUFBYSxPQUFPLGVBQ3RCO0VBQ0EsSUFBSSxDQUFFLE1BQU0sT0FBTyxPQUFPLEdBQ3hCO0VBRUYsSUFBSSxDQUFFLE1BQU0sT0FBTyxLQUFLLEtBQUssT0FBTyxhQUFhLE1BQU0sQ0FBQyxHQUN0RCxNQUFNLElBQUksTUFDUiw2Q0FBNkMsT0FBTywwRkFDdEQ7RUFHRixNQUFNLFdBQVcsTUFBTSxTQUFTLFNBQVMsT0FBTztFQUNoRCxNQUFNLGdCQUFnQixPQUFPLFFBQVEsVUFBVSxDQUFDLENBQUMsUUFDOUMsS0FBSyxDQUFDLEtBQUssV0FBVyxJQUFJLFFBQVEsTUFBTSxJQUFJLEtBQUssS0FBSyxHQUN2RCxRQUNGO0VBR0EsTUFBTSxXQUFXLEtBQUssS0FBSyxPQUFPLGFBQWEsUUFBUSwrQkFBK0I7RUFHdEYsSUFBSSxDQUFFLE1BQU0sT0FBTyxLQUFLLFFBQVEsUUFBUSxDQUFDLEdBQUk7R0FDM0MsTUFBTSxNQUFNLEtBQUssUUFBUSxRQUFRLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztHQUN2RCxRQUFRLEtBQUssc0JBQXNCLEtBQUssUUFBUSxRQUFRLEVBQUUsNEJBQTRCO0VBQ3hGO0VBT0EsSUFBSSxNQUFNLE9BQU8sUUFBUSxHQUN2QjtFQUdGLE1BQU0sVUFBVSxVQUFVLE1BQU0sV0FBVyxlQUFlLFFBQVEsQ0FBQztFQUNuRSxDQUFDLE9BQU8sS0FDTixRQUFRLElBQUksTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLEtBQUssS0FBSyxTQUFTLE9BQU8sYUFBYSxRQUFRLENBQUMsQ0FBQztDQUNoRztBQUNGOzs7Ozs7Ozs7O0FBV0EsZUFBc0IsNkJBQTRDO0NBQ2hFLE1BQU0sRUFBRSxZQUFZLE9BQU8sT0FBTztDQUNsQyxNQUFNLGFBQWEsT0FBTyxPQUFPO0NBRWpDLE1BQU0sYUFBYSxDQUFDLE9BQU8sR0FBRyxPQUFPO0NBRXJDLE1BQU0sYUFBYSxLQUFLLEtBQUssT0FBTyxhQUFhLE9BQU8sT0FBTyxJQUFJLEtBQUssVUFBVTtDQUVsRixLQUFLLE1BQU0sVUFBVSxZQUNuQixJQUFJO0VBRUYsSUFBSSxXQUFXLE9BQ2IsTUFBTSxnQkFBZ0IsUUFBUSxZQUFZLFdBQVcsZ0JBQWdCO0VBR3ZFLE1BQU0saUJBQWlCLE1BQU0sRUFBRSxPQUFPLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztDQUM5RCxTQUFTLEdBQUc7RUFDVixRQUFRLE1BQU0sc0NBQXNDLE9BQU8sSUFBSSxDQUFDO0NBQ2xFO0FBRUo7Ozs7QUFLQSxlQUFlLGdCQUNiLFFBQ0EsWUFDQSxTQUNlO0NBQ2YsTUFBTSxnQkFBZ0IsS0FBSyxLQUFLLE9BQU8sYUFBYSxRQUFRLFVBQVU7Q0FHdEUsTUFBTSxNQUFNLGVBQWUsRUFBRSxXQUFXLEtBQUssQ0FBQztDQUU5QyxLQUFLLE1BQU0sVUFBVSxTQUFTO0VBQzVCLE1BQU0sYUFBYSxLQUFLLEtBQUssWUFBWSxHQUFHLE9BQU8sSUFBSTtFQUN2RCxNQUFNLGFBQWEsS0FBSyxLQUFLLGVBQWUsR0FBRyxPQUFPLElBQUk7RUFRMUQsTUFBTSxnQ0FBZ0MsWUFBWSxZQU4vQjtHQUNqQjtHQUNBO0dBQ0E7R0FDQTtFQUNGLENBQUMsQ0FBQyxLQUFLLElBQ3VELENBQVU7RUFDeEUsTUFBTSxhQUFhLFVBQTBCO0VBQzdDLENBQUMsT0FBTyxLQUNOLFFBQVEsSUFBSSxNQUFNLEtBQUssVUFBVSxJQUFJLE1BQU0sS0FBSyxHQUFHLE9BQU8sWUFBWSxPQUFPLElBQUksQ0FBQztDQUN0RjtBQUNGOzthQTlSc0M7b0JBRWlDO1lBQ2pDO2lCQUNNO2dCQUNHO2VBQzRCO3FCQUV4QjtvQkFDTCJ9
|