sonamu 0.9.19 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.js +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 +200 -387
- package/dist/api/validator.js +5 -8
- package/dist/api/websocket-helpers.js +21 -32
- package/dist/auth/audit-log/builders.js +2 -3
- package/dist/auth/audit-log/events.js +2 -2
- package/dist/auth/audit-log/plugin.js +30 -61
- package/dist/auth/audit-log-ingestor.js +19 -41
- package/dist/auth/auth-generator.js +16 -41
- package/dist/auth/better-auth-entities.js +3 -4
- 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 +151 -258
- 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 +156 -310
- 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 +8 -7
- package/dist/logger/category.js +6 -12
- package/dist/logger/configure.js +23 -34
- package/dist/migration/code-generation.js +146 -314
- 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 +9 -20
- 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.js +1 -2
- 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 +99 -195
- 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 +7 -7
- 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 +14 -4
- 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/entity-basic.md +31 -0
- package/src/skills/sonamu/puri.md +22 -0
- package/src/skills/sonamu/testing-devrunner.md +1 -1
- package/src/skills/sonamu/upsert.md +53 -6
- package/src/stream/ws-telemetry-memory.ts +2 -2
- 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/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,26 +1,21 @@
|
|
|
1
|
-
import { __esmMin } from "../_virtual/
|
|
2
|
-
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
3
2
|
//#region src/stream/ws-telemetry-memory.ts
|
|
4
3
|
function applyTimeWindow(record, since, until) {
|
|
5
|
-
if (since !==
|
|
6
|
-
if (until !==
|
|
4
|
+
if (since !== void 0 && record.timestamp < since) return false;
|
|
5
|
+
if (until !== void 0 && record.timestamp > until) return false;
|
|
7
6
|
return true;
|
|
8
7
|
}
|
|
9
8
|
function estimateEventBytes(record) {
|
|
10
9
|
let size = 200;
|
|
11
|
-
if (record.payloadPreview !==
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
size += 100;
|
|
16
|
-
}
|
|
10
|
+
if (record.payloadPreview !== void 0) try {
|
|
11
|
+
size += Buffer.byteLength(JSON.stringify(record.payloadPreview), "utf-8");
|
|
12
|
+
} catch {
|
|
13
|
+
size += 100;
|
|
17
14
|
}
|
|
18
|
-
if (record.detail) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
size += 100;
|
|
23
|
-
}
|
|
15
|
+
if (record.detail) try {
|
|
16
|
+
size += Buffer.byteLength(JSON.stringify(record.detail), "utf-8");
|
|
17
|
+
} catch {
|
|
18
|
+
size += 100;
|
|
24
19
|
}
|
|
25
20
|
return size;
|
|
26
21
|
}
|
|
@@ -47,8 +42,8 @@ var init_ws_telemetry_memory = __esmMin((() => {
|
|
|
47
42
|
this.capacity = options.maxRecords ?? DEFAULT_MAX_RECORDS;
|
|
48
43
|
this.maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
|
|
49
44
|
this.estimateBytes = estimateBytes;
|
|
50
|
-
this.slots =
|
|
51
|
-
this.slotBytes =
|
|
45
|
+
this.slots = Array.from({ length: this.capacity });
|
|
46
|
+
this.slotBytes = Array.from({ length: this.capacity }, () => 0);
|
|
52
47
|
}
|
|
53
48
|
push(record) {
|
|
54
49
|
if (this.capacity <= 0) return;
|
|
@@ -69,7 +64,7 @@ var init_ws_telemetry_memory = __esmMin((() => {
|
|
|
69
64
|
}
|
|
70
65
|
while (this.currentBytes > this.maxBytes && this.count > 1) {
|
|
71
66
|
this.currentBytes -= this.slotBytes[this.head];
|
|
72
|
-
this.slots[this.head] =
|
|
67
|
+
this.slots[this.head] = void 0;
|
|
73
68
|
this.slotBytes[this.head] = 0;
|
|
74
69
|
this.head = (this.head + 1) % this.capacity;
|
|
75
70
|
this.count -= 1;
|
|
@@ -79,16 +74,14 @@ var init_ws_telemetry_memory = __esmMin((() => {
|
|
|
79
74
|
const matched = [];
|
|
80
75
|
for (let i = 0; i < this.count; i++) {
|
|
81
76
|
const record = this.slots[(this.head + i) % this.capacity];
|
|
82
|
-
if (record !==
|
|
83
|
-
}
|
|
84
|
-
if (limit !== undefined && limit > 0 && matched.length > limit) {
|
|
85
|
-
return matched.slice(-limit);
|
|
77
|
+
if (record !== void 0 && predicate(record)) matched.push(record);
|
|
86
78
|
}
|
|
79
|
+
if (limit !== void 0 && limit > 0 && matched.length > limit) return matched.slice(-limit);
|
|
87
80
|
return matched;
|
|
88
81
|
}
|
|
89
82
|
clear() {
|
|
90
83
|
for (let i = 0; i < this.capacity; i++) {
|
|
91
|
-
this.slots[i] =
|
|
84
|
+
this.slots[i] = void 0;
|
|
92
85
|
this.slotBytes[i] = 0;
|
|
93
86
|
}
|
|
94
87
|
this.head = 0;
|
|
@@ -107,12 +100,12 @@ var init_ws_telemetry_memory = __esmMin((() => {
|
|
|
107
100
|
}
|
|
108
101
|
query(filter) {
|
|
109
102
|
return this.buffer.filter((record) => {
|
|
110
|
-
if (filter.name !==
|
|
111
|
-
if (filter.level !==
|
|
112
|
-
if (filter.connectionId !==
|
|
113
|
-
if (filter.userId !==
|
|
114
|
-
if (filter.namespace !==
|
|
115
|
-
if (filter.traceId !==
|
|
103
|
+
if (filter.name !== void 0 && record.name !== filter.name) return false;
|
|
104
|
+
if (filter.level !== void 0 && record.level !== filter.level) return false;
|
|
105
|
+
if (filter.connectionId !== void 0 && record.connectionId !== filter.connectionId) return false;
|
|
106
|
+
if (filter.userId !== void 0 && record.userId !== filter.userId) return false;
|
|
107
|
+
if (filter.namespace !== void 0 && record.namespace !== filter.namespace) return false;
|
|
108
|
+
if (filter.traceId !== void 0 && record.traceId !== filter.traceId) return false;
|
|
116
109
|
if (!applyTimeWindow(record, filter.since, filter.until)) return false;
|
|
117
110
|
return true;
|
|
118
111
|
}, filter.limit);
|
|
@@ -132,12 +125,12 @@ var init_ws_telemetry_memory = __esmMin((() => {
|
|
|
132
125
|
}
|
|
133
126
|
query(filter) {
|
|
134
127
|
return this.buffer.filter((record) => {
|
|
135
|
-
if (filter.name !==
|
|
136
|
-
if (filter.kind !==
|
|
137
|
-
if (filter.connectionId !==
|
|
138
|
-
if (filter.userId !==
|
|
139
|
-
if (filter.namespace !==
|
|
140
|
-
if (filter.traceId !==
|
|
128
|
+
if (filter.name !== void 0 && record.name !== filter.name) return false;
|
|
129
|
+
if (filter.kind !== void 0 && record.kind !== filter.kind) return false;
|
|
130
|
+
if (filter.connectionId !== void 0 && record.connectionId !== filter.connectionId) return false;
|
|
131
|
+
if (filter.userId !== void 0 && record.userId !== filter.userId) return false;
|
|
132
|
+
if (filter.namespace !== void 0 && record.namespace !== filter.namespace) return false;
|
|
133
|
+
if (filter.traceId !== void 0 && record.traceId !== filter.traceId) return false;
|
|
141
134
|
if (!applyTimeWindow(record, filter.since, filter.until)) return false;
|
|
142
135
|
return true;
|
|
143
136
|
}, filter.limit);
|
|
@@ -157,13 +150,13 @@ var init_ws_telemetry_memory = __esmMin((() => {
|
|
|
157
150
|
}
|
|
158
151
|
query(filter) {
|
|
159
152
|
return this.buffer.filter((record) => {
|
|
160
|
-
if (filter.operationName !==
|
|
161
|
-
if (filter.kind !==
|
|
162
|
-
if (filter.status !==
|
|
163
|
-
if (filter.connectionId !==
|
|
164
|
-
if (filter.userId !==
|
|
165
|
-
if (filter.namespace !==
|
|
166
|
-
if (filter.traceId !==
|
|
153
|
+
if (filter.operationName !== void 0 && record.operationName !== filter.operationName) return false;
|
|
154
|
+
if (filter.kind !== void 0 && record.kind !== filter.kind) return false;
|
|
155
|
+
if (filter.status !== void 0 && record.status !== filter.status) return false;
|
|
156
|
+
if (filter.connectionId !== void 0 && record.connectionId !== filter.connectionId) return false;
|
|
157
|
+
if (filter.userId !== void 0 && record.userId !== filter.userId) return false;
|
|
158
|
+
if (filter.namespace !== void 0 && record.namespace !== filter.namespace) return false;
|
|
159
|
+
if (filter.traceId !== void 0 && record.traceId !== filter.traceId) return false;
|
|
167
160
|
if (!applyTimeWindow(record, filter.since, filter.until)) return false;
|
|
168
161
|
return true;
|
|
169
162
|
}, filter.limit);
|
|
@@ -173,8 +166,8 @@ var init_ws_telemetry_memory = __esmMin((() => {
|
|
|
173
166
|
}
|
|
174
167
|
};
|
|
175
168
|
}));
|
|
176
|
-
|
|
177
169
|
//#endregion
|
|
178
170
|
init_ws_telemetry_memory();
|
|
179
171
|
export { InMemoryEventStore, InMemoryMetricStore, InMemorySpanStore, init_ws_telemetry_memory };
|
|
180
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtdGVsZW1ldHJ5LW1lbW9yeS5qcyIsIm5hbWVzIjpbIm1hdGNoZWQ6IFRSZWNvcmRbXSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJlYW0vd3MtdGVsZW1ldHJ5LW1lbW9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UXVlcnlGaWx0ZXIsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5RXZlbnRSZWNvcmQsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5RXZlbnRTaW5rLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50U3RvcmUsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUXVlcnlGaWx0ZXIsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUmVjb3JkLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1NpbmssXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljU3RvcmUsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5U3BhblF1ZXJ5RmlsdGVyLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeVNwYW5SZWNvcmQsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5U3BhblNpbmssXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5U3BhblN0b3JlLFxufSBmcm9tIFwiLi93cy10ZWxlbWV0cnlcIjtcblxudHlwZSBJbk1lbW9yeVN0b3JlT3B0aW9ucyA9IHtcbiAgbWF4UmVjb3Jkcz86IG51bWJlcjtcbiAgbWF4Qnl0ZXM/OiBudW1iZXI7XG59O1xuXG5jb25zdCBERUZBVUxUX01BWF9SRUNPUkRTID0gMTBfMDAwO1xuY29uc3QgREVGQVVMVF9NQVhfQllURVMgPSAxMCAqIDEwMjQgKiAxMDI0OyAvLyAxMCBNaUJcblxudHlwZSBFc3RpbWF0ZUJ5dGVzPFRSZWNvcmQ+ID0gKHJlY29yZDogVFJlY29yZCkgPT4gbnVtYmVyO1xuXG4vLyDri6jsnbwgRklGTyByaW5nIGJ1ZmZlci4gY3JpdGljYWwvbm9uLWNyaXRpY2FsIOyasOyEoOyInOychOuKlCDrkZDsp4Ag7JWK64qU64ukIOKAlFxuLy8g7J2466mU66qo66asIHN0b3Jl64qUIO2cmOuwnOyEsSDrlJTrsoTquYUg7Jqp64+E7J2066+A66GcIGNyaXRpY2FsIOuztOyhtOydtCDtlYTsmpTtlZjrqbRcbi8vIOuzhOuPhOydmCDsmIHsho0gc2lua+ulvCDrk7HroZ3tlbTshJwg7LKY66as7ZWc64ukLlxuY2xhc3MgSW5NZW1vcnlSaW5nQnVmZmVyPFRSZWNvcmQgZXh0ZW5kcyB7IHRpbWVzdGFtcDogbnVtYmVyIH0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzbG90czogQXJyYXk8VFJlY29yZCB8IHVuZGVmaW5lZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgc2xvdEJ5dGVzOiBudW1iZXJbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYXBhY2l0eTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heEJ5dGVzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXN0aW1hdGVCeXRlczogRXN0aW1hdGVCeXRlczxUUmVjb3JkPjtcbiAgcHJpdmF0ZSBoZWFkID0gMDtcbiAgcHJpdmF0ZSBjb3VudCA9IDA7XG4gIHByaXZhdGUgY3VycmVudEJ5dGVzID0gMDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk1lbW9yeVN0b3JlT3B0aW9ucywgZXN0aW1hdGVCeXRlczogRXN0aW1hdGVCeXRlczxUUmVjb3JkPikge1xuICAgIHRoaXMuY2FwYWNpdHkgPSBvcHRpb25zLm1heFJlY29yZHMgPz8gREVGQVVMVF9NQVhfUkVDT1JEUztcbiAgICB0aGlzLm1heEJ5dGVzID0gb3B0aW9ucy5tYXhCeXRlcyA/PyBERUZBVUxUX01BWF9CWVRFUztcbiAgICB0aGlzLmVzdGltYXRlQnl0ZXMgPSBlc3RpbWF0ZUJ5dGVzO1xuICAgIHRoaXMuc2xvdHMgPSBuZXcgQXJyYXkodGhpcy5jYXBhY2l0eSk7XG4gICAgdGhpcy5zbG90Qnl0ZXMgPSBuZXcgQXJyYXkodGhpcy5jYXBhY2l0eSkuZmlsbCgwKTtcbiAgfVxuXG4gIHB1c2gocmVjb3JkOiBUUmVjb3JkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FwYWNpdHkgPD0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjb3JkU2l6ZSA9IHRoaXMuZXN0aW1hdGVCeXRlcyhyZWNvcmQpO1xuICAgIC8vIOuLqOydvCByZWNvcmTqsIAgbWF4Qnl0ZXPrpbwg64SY7Jy866m0IOuwm+yVhOuTpOydtOyngCDslYrripTri6QuXG4gICAgaWYgKHJlY29yZFNpemUgPiB0aGlzLm1heEJ5dGVzKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5jb3VudCA9PT0gdGhpcy5jYXBhY2l0eSkge1xuICAgICAgLy8g6rCA7J6lIOyYpOuemOuQnCDsiqzroa/snYQg642u7Ja07JO064ukLlxuICAgICAgdGhpcy5jdXJyZW50Qnl0ZXMgLT0gdGhpcy5zbG90Qnl0ZXNbdGhpcy5oZWFkXTtcbiAgICAgIHRoaXMuc2xvdHNbdGhpcy5oZWFkXSA9IHJlY29yZDtcbiAgICAgIHRoaXMuc2xvdEJ5dGVzW3RoaXMuaGVhZF0gPSByZWNvcmRTaXplO1xuICAgICAgdGhpcy5jdXJyZW50Qnl0ZXMgKz0gcmVjb3JkU2l6ZTtcbiAgICAgIHRoaXMuaGVhZCA9ICh0aGlzLmhlYWQgKyAxKSAlIHRoaXMuY2FwYWNpdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRhaWwgPSAodGhpcy5oZWFkICsgdGhpcy5jb3VudCkgJSB0aGlzLmNhcGFjaXR5O1xuICAgICAgdGhpcy5zbG90c1t0YWlsXSA9IHJlY29yZDtcbiAgICAgIHRoaXMuc2xvdEJ5dGVzW3RhaWxdID0gcmVjb3JkU2l6ZTtcbiAgICAgIHRoaXMuY3VycmVudEJ5dGVzICs9IHJlY29yZFNpemU7XG4gICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRoaXMuY3VycmVudEJ5dGVzID4gdGhpcy5tYXhCeXRlcyAmJiB0aGlzLmNvdW50ID4gMSkge1xuICAgICAgdGhpcy5jdXJyZW50Qnl0ZXMgLT0gdGhpcy5zbG90Qnl0ZXNbdGhpcy5oZWFkXTtcbiAgICAgIHRoaXMuc2xvdHNbdGhpcy5oZWFkXSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2xvdEJ5dGVzW3RoaXMuaGVhZF0gPSAwO1xuICAgICAgdGhpcy5oZWFkID0gKHRoaXMuaGVhZCArIDEpICUgdGhpcy5jYXBhY2l0eTtcbiAgICAgIHRoaXMuY291bnQgLT0gMTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXIocHJlZGljYXRlOiAocmVjb3JkOiBUUmVjb3JkKSA9PiBib29sZWFuLCBsaW1pdD86IG51bWJlcik6IFRSZWNvcmRbXSB7XG4gICAgY29uc3QgbWF0Y2hlZDogVFJlY29yZFtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuc2xvdHNbKHRoaXMuaGVhZCArIGkpICUgdGhpcy5jYXBhY2l0eV07XG4gICAgICBpZiAocmVjb3JkICE9PSB1bmRlZmluZWQgJiYgcHJlZGljYXRlKHJlY29yZCkpIG1hdGNoZWQucHVzaChyZWNvcmQpO1xuICAgIH1cbiAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCAmJiBsaW1pdCA+IDAgJiYgbWF0Y2hlZC5sZW5ndGggPiBsaW1pdCkge1xuICAgICAgcmV0dXJuIG1hdGNoZWQuc2xpY2UoLWxpbWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZWQ7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FwYWNpdHk7IGkrKykge1xuICAgICAgdGhpcy5zbG90c1tpXSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2xvdEJ5dGVzW2ldID0gMDtcbiAgICB9XG4gICAgdGhpcy5oZWFkID0gMDtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRCeXRlcyA9IDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUaW1lV2luZG93PFRSZWNvcmQgZXh0ZW5kcyB7IHRpbWVzdGFtcDogbnVtYmVyIH0+KFxuICByZWNvcmQ6IFRSZWNvcmQsXG4gIHNpbmNlOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIHVudGlsOiBudW1iZXIgfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgaWYgKHNpbmNlICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLnRpbWVzdGFtcCA8IHNpbmNlKSByZXR1cm4gZmFsc2U7XG4gIGlmICh1bnRpbCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC50aW1lc3RhbXAgPiB1bnRpbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZXN0aW1hdGVFdmVudEJ5dGVzKHJlY29yZDogV2ViU29ja2V0VGVsZW1ldHJ5RXZlbnRSZWNvcmQpOiBudW1iZXIge1xuICBsZXQgc2l6ZSA9IDIwMDtcbiAgaWYgKHJlY29yZC5wYXlsb2FkUHJldmlldyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNpemUgKz0gQnVmZmVyLmJ5dGVMZW5ndGgoSlNPTi5zdHJpbmdpZnkocmVjb3JkLnBheWxvYWRQcmV2aWV3KSwgXCJ1dGYtOFwiKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHNpemUgKz0gMTAwO1xuICAgIH1cbiAgfVxuICBpZiAocmVjb3JkLmRldGFpbCkge1xuICAgIHRyeSB7XG4gICAgICBzaXplICs9IEJ1ZmZlci5ieXRlTGVuZ3RoKEpTT04uc3RyaW5naWZ5KHJlY29yZC5kZXRhaWwpLCBcInV0Zi04XCIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgc2l6ZSArPSAxMDA7XG4gICAgfVxuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZU1ldHJpY0J5dGVzKF9yZWNvcmQ6IFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1JlY29yZCk6IG51bWJlciB7XG4gIHJldHVybiAyMDA7XG59XG5cbmZ1bmN0aW9uIGVzdGltYXRlU3BhbkJ5dGVzKF9yZWNvcmQ6IFdlYlNvY2tldFRlbGVtZXRyeVNwYW5SZWNvcmQpOiBudW1iZXIge1xuICByZXR1cm4gMjAwO1xufVxuXG5leHBvcnQgY2xhc3MgSW5NZW1vcnlFdmVudFN0b3JlIGltcGxlbWVudHMgV2ViU29ja2V0VGVsZW1ldHJ5RXZlbnRTdG9yZSB7XG4gIHJlYWRvbmx5IHNpbms6IFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50U2luaztcblxuICBwcml2YXRlIHJlYWRvbmx5IGJ1ZmZlcjogSW5NZW1vcnlSaW5nQnVmZmVyPFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UmVjb3JkPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk1lbW9yeVN0b3JlT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5idWZmZXIgPSBuZXcgSW5NZW1vcnlSaW5nQnVmZmVyPFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UmVjb3JkPihcbiAgICAgIG9wdGlvbnMsXG4gICAgICBlc3RpbWF0ZUV2ZW50Qnl0ZXMsXG4gICAgKTtcblxuICAgIHRoaXMuc2luayA9IHtcbiAgICAgIGVtaXQ6IChyZWNvcmQ6IFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UmVjb3JkKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuYnVmZmVyLnB1c2gocmVjb3JkKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHF1ZXJ5KGZpbHRlcjogV2ViU29ja2V0VGVsZW1ldHJ5RXZlbnRRdWVyeUZpbHRlcik6IFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UmVjb3JkW10ge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlci5maWx0ZXIoKHJlY29yZCkgPT4ge1xuICAgICAgaWYgKGZpbHRlci5uYW1lICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLm5hbWUgIT09IGZpbHRlci5uYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLmxldmVsICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLmxldmVsICE9PSBmaWx0ZXIubGV2ZWwpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIuY29ubmVjdGlvbklkICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLmNvbm5lY3Rpb25JZCAhPT0gZmlsdGVyLmNvbm5lY3Rpb25JZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci51c2VySWQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQudXNlcklkICE9PSBmaWx0ZXIudXNlcklkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5uYW1lc3BhY2UgIT09IGZpbHRlci5uYW1lc3BhY2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIudHJhY2VJZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC50cmFjZUlkICE9PSBmaWx0ZXIudHJhY2VJZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFhcHBseVRpbWVXaW5kb3cocmVjb3JkLCBmaWx0ZXIuc2luY2UsIGZpbHRlci51bnRpbCkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIGZpbHRlci5saW1pdCk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmJ1ZmZlci5jbGVhcigpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbk1lbW9yeU1ldHJpY1N0b3JlIGltcGxlbWVudHMgV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljU3RvcmUge1xuICByZWFkb25seSBzaW5rOiBXZWJTb2NrZXRUZWxlbWV0cnlNZXRyaWNTaW5rO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyOiBJbk1lbW9yeVJpbmdCdWZmZXI8V2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUmVjb3JkPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk1lbW9yeVN0b3JlT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5idWZmZXIgPSBuZXcgSW5NZW1vcnlSaW5nQnVmZmVyPFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1JlY29yZD4oXG4gICAgICBvcHRpb25zLFxuICAgICAgZXN0aW1hdGVNZXRyaWNCeXRlcyxcbiAgICApO1xuXG4gICAgdGhpcy5zaW5rID0ge1xuICAgICAgZW1pdDogKHJlY29yZDogV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUmVjb3JkKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuYnVmZmVyLnB1c2gocmVjb3JkKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHF1ZXJ5KGZpbHRlcjogV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUXVlcnlGaWx0ZXIpOiBXZWJTb2NrZXRUZWxlbWV0cnlNZXRyaWNSZWNvcmRbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmZpbHRlcigocmVjb3JkKSA9PiB7XG4gICAgICBpZiAoZmlsdGVyLm5hbWUgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQubmFtZSAhPT0gZmlsdGVyLm5hbWUpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIua2luZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5raW5kICE9PSBmaWx0ZXIua2luZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci5jb25uZWN0aW9uSWQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQuY29ubmVjdGlvbklkICE9PSBmaWx0ZXIuY29ubmVjdGlvbklkKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLnVzZXJJZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC51c2VySWQgIT09IGZpbHRlci51c2VySWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLm5hbWVzcGFjZSAhPT0gZmlsdGVyLm5hbWVzcGFjZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci50cmFjZUlkICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLnRyYWNlSWQgIT09IGZpbHRlci50cmFjZUlkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWFwcGx5VGltZVdpbmRvdyhyZWNvcmQsIGZpbHRlci5zaW5jZSwgZmlsdGVyLnVudGlsKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgZmlsdGVyLmxpbWl0KTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuYnVmZmVyLmNsZWFyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluTWVtb3J5U3BhblN0b3JlIGltcGxlbWVudHMgV2ViU29ja2V0VGVsZW1ldHJ5U3BhblN0b3JlIHtcbiAgcmVhZG9ubHkgc2luazogV2ViU29ja2V0VGVsZW1ldHJ5U3BhblNpbms7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBidWZmZXI6IEluTWVtb3J5UmluZ0J1ZmZlcjxXZWJTb2NrZXRUZWxlbWV0cnlTcGFuUmVjb3JkPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk1lbW9yeVN0b3JlT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5idWZmZXIgPSBuZXcgSW5NZW1vcnlSaW5nQnVmZmVyPFdlYlNvY2tldFRlbGVtZXRyeVNwYW5SZWNvcmQ+KG9wdGlvbnMsIGVzdGltYXRlU3BhbkJ5dGVzKTtcblxuICAgIHRoaXMuc2luayA9IHtcbiAgICAgIGVtaXQ6IChyZWNvcmQ6IFdlYlNvY2tldFRlbGVtZXRyeVNwYW5SZWNvcmQpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5idWZmZXIucHVzaChyZWNvcmQpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcXVlcnkoZmlsdGVyOiBXZWJTb2NrZXRUZWxlbWV0cnlTcGFuUXVlcnlGaWx0ZXIpOiBXZWJTb2NrZXRUZWxlbWV0cnlTcGFuUmVjb3JkW10ge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlci5maWx0ZXIoKHJlY29yZCkgPT4ge1xuICAgICAgaWYgKGZpbHRlci5vcGVyYXRpb25OYW1lICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLm9wZXJhdGlvbk5hbWUgIT09IGZpbHRlci5vcGVyYXRpb25OYW1lKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLmtpbmQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQua2luZCAhPT0gZmlsdGVyLmtpbmQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIuc3RhdHVzICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLnN0YXR1cyAhPT0gZmlsdGVyLnN0YXR1cykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci5jb25uZWN0aW9uSWQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQuY29ubmVjdGlvbklkICE9PSBmaWx0ZXIuY29ubmVjdGlvbklkKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLnVzZXJJZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC51c2VySWQgIT09IGZpbHRlci51c2VySWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLm5hbWVzcGFjZSAhPT0gZmlsdGVyLm5hbWVzcGFjZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci50cmFjZUlkICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLnRyYWNlSWQgIT09IGZpbHRlci50cmFjZUlkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWFwcGx5VGltZVdpbmRvdyhyZWNvcmQsIGZpbHRlci5zaW5jZSwgZmlsdGVyLnVudGlsKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgZmlsdGVyLmxpbWl0KTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuYnVmZmVyLmNsZWFyKCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBb0dBLFNBQVMsZ0JBQ1AsUUFDQSxPQUNBLE9BQ1M7QUFDVCxLQUFJLFVBQVUsYUFB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
|
|
172
|
+
|
|
173
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtdGVsZW1ldHJ5LW1lbW9yeS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWFtL3dzLXRlbGVtZXRyeS1tZW1vcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBXZWJTb2NrZXRUZWxlbWV0cnlFdmVudFF1ZXJ5RmlsdGVyLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UmVjb3JkLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50U2luayxcbiAgdHlwZSBXZWJTb2NrZXRUZWxlbWV0cnlFdmVudFN0b3JlLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1F1ZXJ5RmlsdGVyLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1JlY29yZCxcbiAgdHlwZSBXZWJTb2NrZXRUZWxlbWV0cnlNZXRyaWNTaW5rLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1N0b3JlLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeVNwYW5RdWVyeUZpbHRlcixcbiAgdHlwZSBXZWJTb2NrZXRUZWxlbWV0cnlTcGFuUmVjb3JkLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeVNwYW5TaW5rLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeVNwYW5TdG9yZSxcbn0gZnJvbSBcIi4vd3MtdGVsZW1ldHJ5XCI7XG5cbnR5cGUgSW5NZW1vcnlTdG9yZU9wdGlvbnMgPSB7XG4gIG1heFJlY29yZHM/OiBudW1iZXI7XG4gIG1heEJ5dGVzPzogbnVtYmVyO1xufTtcblxuY29uc3QgREVGQVVMVF9NQVhfUkVDT1JEUyA9IDEwXzAwMDtcbmNvbnN0IERFRkFVTFRfTUFYX0JZVEVTID0gMTAgKiAxMDI0ICogMTAyNDsgLy8gMTAgTWlCXG5cbnR5cGUgRXN0aW1hdGVCeXRlczxUUmVjb3JkPiA9IChyZWNvcmQ6IFRSZWNvcmQpID0+IG51bWJlcjtcblxuLy8g64uo7J28IEZJRk8gcmluZyBidWZmZXIuIGNyaXRpY2FsL25vbi1jcml0aWNhbCDsmrDshKDsiJzsnITripQg65GQ7KeAIOyViuuKlOuLpCDigJRcbi8vIOyduOuplOuqqOumrCBzdG9yZeuKlCDtnJjrsJzshLEg65SU67KE6rmFIOyaqeuPhOydtOuvgOuhnCBjcml0aWNhbCDrs7TsobTsnbQg7ZWE7JqU7ZWY66m0XG4vLyDrs4Trj4TsnZgg7JiB7IaNIHNpbmvrpbwg65Ox66Gd7ZW07IScIOyymOumrO2VnOuLpC5cbmNsYXNzIEluTWVtb3J5UmluZ0J1ZmZlcjxUUmVjb3JkIGV4dGVuZHMgeyB0aW1lc3RhbXA6IG51bWJlciB9PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2xvdHM6IEFycmF5PFRSZWNvcmQgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IHNsb3RCeXRlczogbnVtYmVyW107XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FwYWNpdHk6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhCeXRlczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVzdGltYXRlQnl0ZXM6IEVzdGltYXRlQnl0ZXM8VFJlY29yZD47XG4gIHByaXZhdGUgaGVhZCA9IDA7XG4gIHByaXZhdGUgY291bnQgPSAwO1xuICBwcml2YXRlIGN1cnJlbnRCeXRlcyA9IDA7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSW5NZW1vcnlTdG9yZU9wdGlvbnMsIGVzdGltYXRlQnl0ZXM6IEVzdGltYXRlQnl0ZXM8VFJlY29yZD4pIHtcbiAgICB0aGlzLmNhcGFjaXR5ID0gb3B0aW9ucy5tYXhSZWNvcmRzID8/IERFRkFVTFRfTUFYX1JFQ09SRFM7XG4gICAgdGhpcy5tYXhCeXRlcyA9IG9wdGlvbnMubWF4Qnl0ZXMgPz8gREVGQVVMVF9NQVhfQllURVM7XG4gICAgdGhpcy5lc3RpbWF0ZUJ5dGVzID0gZXN0aW1hdGVCeXRlcztcbiAgICB0aGlzLnNsb3RzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogdGhpcy5jYXBhY2l0eSB9KTtcbiAgICB0aGlzLnNsb3RCeXRlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMuY2FwYWNpdHkgfSwgKCkgPT4gMCk7XG4gIH1cblxuICBwdXNoKHJlY29yZDogVFJlY29yZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhcGFjaXR5IDw9IDApIHJldHVybjtcblxuICAgIGNvbnN0IHJlY29yZFNpemUgPSB0aGlzLmVzdGltYXRlQnl0ZXMocmVjb3JkKTtcbiAgICAvLyDri6jsnbwgcmVjb3Jk6rCAIG1heEJ5dGVz66W8IOuEmOycvOuptCDrsJvslYTrk6TsnbTsp4Ag7JWK64qU64ukLlxuICAgIGlmIChyZWNvcmRTaXplID4gdGhpcy5tYXhCeXRlcykgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuY291bnQgPT09IHRoaXMuY2FwYWNpdHkpIHtcbiAgICAgIC8vIOqwgOyepSDsmKTrnpjrkJwg7Iqs66Gv7J2EIOuNruyWtOyTtOuLpC5cbiAgICAgIHRoaXMuY3VycmVudEJ5dGVzIC09IHRoaXMuc2xvdEJ5dGVzW3RoaXMuaGVhZF07XG4gICAgICB0aGlzLnNsb3RzW3RoaXMuaGVhZF0gPSByZWNvcmQ7XG4gICAgICB0aGlzLnNsb3RCeXRlc1t0aGlzLmhlYWRdID0gcmVjb3JkU2l6ZTtcbiAgICAgIHRoaXMuY3VycmVudEJ5dGVzICs9IHJlY29yZFNpemU7XG4gICAgICB0aGlzLmhlYWQgPSAodGhpcy5oZWFkICsgMSkgJSB0aGlzLmNhcGFjaXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0YWlsID0gKHRoaXMuaGVhZCArIHRoaXMuY291bnQpICUgdGhpcy5jYXBhY2l0eTtcbiAgICAgIHRoaXMuc2xvdHNbdGFpbF0gPSByZWNvcmQ7XG4gICAgICB0aGlzLnNsb3RCeXRlc1t0YWlsXSA9IHJlY29yZFNpemU7XG4gICAgICB0aGlzLmN1cnJlbnRCeXRlcyArPSByZWNvcmRTaXplO1xuICAgICAgdGhpcy5jb3VudCArPSAxO1xuICAgIH1cblxuICAgIHdoaWxlICh0aGlzLmN1cnJlbnRCeXRlcyA+IHRoaXMubWF4Qnl0ZXMgJiYgdGhpcy5jb3VudCA+IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudEJ5dGVzIC09IHRoaXMuc2xvdEJ5dGVzW3RoaXMuaGVhZF07XG4gICAgICB0aGlzLnNsb3RzW3RoaXMuaGVhZF0gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnNsb3RCeXRlc1t0aGlzLmhlYWRdID0gMDtcbiAgICAgIHRoaXMuaGVhZCA9ICh0aGlzLmhlYWQgKyAxKSAlIHRoaXMuY2FwYWNpdHk7XG4gICAgICB0aGlzLmNvdW50IC09IDE7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyKHByZWRpY2F0ZTogKHJlY29yZDogVFJlY29yZCkgPT4gYm9vbGVhbiwgbGltaXQ/OiBudW1iZXIpOiBUUmVjb3JkW10ge1xuICAgIGNvbnN0IG1hdGNoZWQ6IFRSZWNvcmRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCByZWNvcmQgPSB0aGlzLnNsb3RzWyh0aGlzLmhlYWQgKyBpKSAlIHRoaXMuY2FwYWNpdHldO1xuICAgICAgaWYgKHJlY29yZCAhPT0gdW5kZWZpbmVkICYmIHByZWRpY2F0ZShyZWNvcmQpKSBtYXRjaGVkLnB1c2gocmVjb3JkKTtcbiAgICB9XG4gICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbGltaXQgPiAwICYmIG1hdGNoZWQubGVuZ3RoID4gbGltaXQpIHtcbiAgICAgIHJldHVybiBtYXRjaGVkLnNsaWNlKC1saW1pdCk7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVkO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNhcGFjaXR5OyBpKyspIHtcbiAgICAgIHRoaXMuc2xvdHNbaV0gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnNsb3RCeXRlc1tpXSA9IDA7XG4gICAgfVxuICAgIHRoaXMuaGVhZCA9IDA7XG4gICAgdGhpcy5jb3VudCA9IDA7XG4gICAgdGhpcy5jdXJyZW50Qnl0ZXMgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VGltZVdpbmRvdzxUUmVjb3JkIGV4dGVuZHMgeyB0aW1lc3RhbXA6IG51bWJlciB9PihcbiAgcmVjb3JkOiBUUmVjb3JkLFxuICBzaW5jZTogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICB1bnRpbDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuKTogYm9vbGVhbiB7XG4gIGlmIChzaW5jZSAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC50aW1lc3RhbXAgPCBzaW5jZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodW50aWwgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQudGltZXN0YW1wID4gdW50aWwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGVzdGltYXRlRXZlbnRCeXRlcyhyZWNvcmQ6IFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UmVjb3JkKTogbnVtYmVyIHtcbiAgbGV0IHNpemUgPSAyMDA7XG4gIGlmIChyZWNvcmQucGF5bG9hZFByZXZpZXcgIT09IHVuZGVmaW5lZCkge1xuICAgIHRyeSB7XG4gICAgICBzaXplICs9IEJ1ZmZlci5ieXRlTGVuZ3RoKEpTT04uc3RyaW5naWZ5KHJlY29yZC5wYXlsb2FkUHJldmlldyksIFwidXRmLThcIik7XG4gICAgfSBjYXRjaCB7XG4gICAgICBzaXplICs9IDEwMDtcbiAgICB9XG4gIH1cbiAgaWYgKHJlY29yZC5kZXRhaWwpIHtcbiAgICB0cnkge1xuICAgICAgc2l6ZSArPSBCdWZmZXIuYnl0ZUxlbmd0aChKU09OLnN0cmluZ2lmeShyZWNvcmQuZGV0YWlsKSwgXCJ1dGYtOFwiKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHNpemUgKz0gMTAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cblxuZnVuY3Rpb24gZXN0aW1hdGVNZXRyaWNCeXRlcyhfcmVjb3JkOiBXZWJTb2NrZXRUZWxlbWV0cnlNZXRyaWNSZWNvcmQpOiBudW1iZXIge1xuICByZXR1cm4gMjAwO1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZVNwYW5CeXRlcyhfcmVjb3JkOiBXZWJTb2NrZXRUZWxlbWV0cnlTcGFuUmVjb3JkKTogbnVtYmVyIHtcbiAgcmV0dXJuIDIwMDtcbn1cblxuZXhwb3J0IGNsYXNzIEluTWVtb3J5RXZlbnRTdG9yZSBpbXBsZW1lbnRzIFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50U3RvcmUge1xuICByZWFkb25seSBzaW5rOiBXZWJTb2NrZXRUZWxlbWV0cnlFdmVudFNpbms7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBidWZmZXI6IEluTWVtb3J5UmluZ0J1ZmZlcjxXZWJTb2NrZXRUZWxlbWV0cnlFdmVudFJlY29yZD47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSW5NZW1vcnlTdG9yZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuYnVmZmVyID0gbmV3IEluTWVtb3J5UmluZ0J1ZmZlcjxXZWJTb2NrZXRUZWxlbWV0cnlFdmVudFJlY29yZD4oXG4gICAgICBvcHRpb25zLFxuICAgICAgZXN0aW1hdGVFdmVudEJ5dGVzLFxuICAgICk7XG5cbiAgICB0aGlzLnNpbmsgPSB7XG4gICAgICBlbWl0OiAocmVjb3JkOiBXZWJTb2NrZXRUZWxlbWV0cnlFdmVudFJlY29yZCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKHJlY29yZCk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBxdWVyeShmaWx0ZXI6IFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UXVlcnlGaWx0ZXIpOiBXZWJTb2NrZXRUZWxlbWV0cnlFdmVudFJlY29yZFtdIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuZmlsdGVyKChyZWNvcmQpID0+IHtcbiAgICAgIGlmIChmaWx0ZXIubmFtZSAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5uYW1lICE9PSBmaWx0ZXIubmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci5sZXZlbCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5sZXZlbCAhPT0gZmlsdGVyLmxldmVsKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLmNvbm5lY3Rpb25JZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5jb25uZWN0aW9uSWQgIT09IGZpbHRlci5jb25uZWN0aW9uSWQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIudXNlcklkICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLnVzZXJJZCAhPT0gZmlsdGVyLnVzZXJJZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQubmFtZXNwYWNlICE9PSBmaWx0ZXIubmFtZXNwYWNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLnRyYWNlSWQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQudHJhY2VJZCAhPT0gZmlsdGVyLnRyYWNlSWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghYXBwbHlUaW1lV2luZG93KHJlY29yZCwgZmlsdGVyLnNpbmNlLCBmaWx0ZXIudW50aWwpKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBmaWx0ZXIubGltaXQpO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXIuY2xlYXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5NZW1vcnlNZXRyaWNTdG9yZSBpbXBsZW1lbnRzIFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1N0b3JlIHtcbiAgcmVhZG9ubHkgc2luazogV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljU2luaztcblxuICBwcml2YXRlIHJlYWRvbmx5IGJ1ZmZlcjogSW5NZW1vcnlSaW5nQnVmZmVyPFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1JlY29yZD47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSW5NZW1vcnlTdG9yZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuYnVmZmVyID0gbmV3IEluTWVtb3J5UmluZ0J1ZmZlcjxXZWJTb2NrZXRUZWxlbWV0cnlNZXRyaWNSZWNvcmQ+KFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGVzdGltYXRlTWV0cmljQnl0ZXMsXG4gICAgKTtcblxuICAgIHRoaXMuc2luayA9IHtcbiAgICAgIGVtaXQ6IChyZWNvcmQ6IFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1JlY29yZCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKHJlY29yZCk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBxdWVyeShmaWx0ZXI6IFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1F1ZXJ5RmlsdGVyKTogV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUmVjb3JkW10ge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlci5maWx0ZXIoKHJlY29yZCkgPT4ge1xuICAgICAgaWYgKGZpbHRlci5uYW1lICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLm5hbWUgIT09IGZpbHRlci5uYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLmtpbmQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQua2luZCAhPT0gZmlsdGVyLmtpbmQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIuY29ubmVjdGlvbklkICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLmNvbm5lY3Rpb25JZCAhPT0gZmlsdGVyLmNvbm5lY3Rpb25JZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci51c2VySWQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQudXNlcklkICE9PSBmaWx0ZXIudXNlcklkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5uYW1lc3BhY2UgIT09IGZpbHRlci5uYW1lc3BhY2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIudHJhY2VJZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC50cmFjZUlkICE9PSBmaWx0ZXIudHJhY2VJZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFhcHBseVRpbWVXaW5kb3cocmVjb3JkLCBmaWx0ZXIuc2luY2UsIGZpbHRlci51bnRpbCkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIGZpbHRlci5saW1pdCk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmJ1ZmZlci5jbGVhcigpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbk1lbW9yeVNwYW5TdG9yZSBpbXBsZW1lbnRzIFdlYlNvY2tldFRlbGVtZXRyeVNwYW5TdG9yZSB7XG4gIHJlYWRvbmx5IHNpbms6IFdlYlNvY2tldFRlbGVtZXRyeVNwYW5TaW5rO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyOiBJbk1lbW9yeVJpbmdCdWZmZXI8V2ViU29ja2V0VGVsZW1ldHJ5U3BhblJlY29yZD47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSW5NZW1vcnlTdG9yZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuYnVmZmVyID0gbmV3IEluTWVtb3J5UmluZ0J1ZmZlcjxXZWJTb2NrZXRUZWxlbWV0cnlTcGFuUmVjb3JkPihvcHRpb25zLCBlc3RpbWF0ZVNwYW5CeXRlcyk7XG5cbiAgICB0aGlzLnNpbmsgPSB7XG4gICAgICBlbWl0OiAocmVjb3JkOiBXZWJTb2NrZXRUZWxlbWV0cnlTcGFuUmVjb3JkKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuYnVmZmVyLnB1c2gocmVjb3JkKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHF1ZXJ5KGZpbHRlcjogV2ViU29ja2V0VGVsZW1ldHJ5U3BhblF1ZXJ5RmlsdGVyKTogV2ViU29ja2V0VGVsZW1ldHJ5U3BhblJlY29yZFtdIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuZmlsdGVyKChyZWNvcmQpID0+IHtcbiAgICAgIGlmIChmaWx0ZXIub3BlcmF0aW9uTmFtZSAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5vcGVyYXRpb25OYW1lICE9PSBmaWx0ZXIub3BlcmF0aW9uTmFtZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci5raW5kICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLmtpbmQgIT09IGZpbHRlci5raW5kKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLnN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5zdGF0dXMgIT09IGZpbHRlci5zdGF0dXMpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIuY29ubmVjdGlvbklkICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLmNvbm5lY3Rpb25JZCAhPT0gZmlsdGVyLmNvbm5lY3Rpb25JZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci51c2VySWQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQudXNlcklkICE9PSBmaWx0ZXIudXNlcklkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5uYW1lc3BhY2UgIT09IGZpbHRlci5uYW1lc3BhY2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIudHJhY2VJZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC50cmFjZUlkICE9PSBmaWx0ZXIudHJhY2VJZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFhcHBseVRpbWVXaW5kb3cocmVjb3JkLCBmaWx0ZXIuc2luY2UsIGZpbHRlci51bnRpbCkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIGZpbHRlci5saW1pdCk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmJ1ZmZlci5jbGVhcigpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBb0dBLFNBQVMsZ0JBQ1AsUUFDQSxPQUNBLE9BQ1M7Q0FDVCxJQUFJLFVB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
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { __esmMin } from "../_virtual/
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { randomBytes } from "node:crypto";
|
|
3
|
-
|
|
4
3
|
//#region src/stream/ws-telemetry-trace.ts
|
|
5
4
|
function parseTraceParent(header) {
|
|
6
5
|
const trimmed = header.trim().toLowerCase();
|
|
@@ -25,8 +24,7 @@ function generateSpanId() {
|
|
|
25
24
|
return randomBytes(8).toString("hex");
|
|
26
25
|
}
|
|
27
26
|
function formatTraceParent(traceId, spanId, sampled) {
|
|
28
|
-
|
|
29
|
-
return `00-${traceId}-${spanId}-${flags}`;
|
|
27
|
+
return `00-${traceId}-${spanId}-${sampled ? "01" : "00"}`;
|
|
30
28
|
}
|
|
31
29
|
var TRACEPARENT_REGEX, ALL_ZERO_TRACE_ID, ALL_ZERO_SPAN_ID;
|
|
32
30
|
var init_ws_telemetry_trace = __esmMin((() => {
|
|
@@ -34,8 +32,8 @@ var init_ws_telemetry_trace = __esmMin((() => {
|
|
|
34
32
|
ALL_ZERO_TRACE_ID = "00000000000000000000000000000000";
|
|
35
33
|
ALL_ZERO_SPAN_ID = "0000000000000000";
|
|
36
34
|
}));
|
|
37
|
-
|
|
38
35
|
//#endregion
|
|
39
36
|
init_ws_telemetry_trace();
|
|
40
37
|
export { formatTraceParent, generateSpanId, generateTraceId, init_ws_telemetry_trace, parseTraceParent };
|
|
41
|
-
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtdGVsZW1ldHJ5LXRyYWNlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJlYW0vd3MtdGVsZW1ldHJ5LXRyYWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFRyYWNlUGFyZW50ID0ge1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHRyYWNlSWQ6IHN0cmluZztcbiAgcGFyZW50SWQ6IHN0cmluZztcbiAgdHJhY2VGbGFnczogbnVtYmVyO1xuICBzYW1wbGVkOiBib29sZWFuO1xufTtcblxuLy8gdHJhY2VwYXJlbnQg7Y+s66e3OiAwMC08MzIgaGV4IHRyYWNlSWQ+LTwxNiBoZXggc3BhbklkPi08MiBoZXggZmxhZ3M+XG4vLyDsmIjsi5w6IDAwLTRiZjkyZjM1NzdiMTZkOGEyZTNlMjRmZjAyZTZjOTk4LTAwZjA2N2FhMGJhOTAyYjctMDFcbmNvbnN0IFRSQUNFUEFSRU5UX1JFR0VYID0gL14oWzAtOWEtZl17Mn0pLShbMC05YS1mXXszMn0pLShbMC05YS1mXXsxNn0pLShbMC05YS1mXXsyfSkkLztcbmNvbnN0IEFMTF9aRVJPX1RSQUNFX0lEID0gXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiO1xuY29uc3QgQUxMX1pFUk9fU1BBTl9JRCA9IFwiMDAwMDAwMDAwMDAwMDAwMFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUcmFjZVBhcmVudChoZWFkZXI6IHN0cmluZyk6IFBhcnNlZFRyYWNlUGFyZW50IHwgbnVsbCB7XG4gIGNvbnN0IHRyaW1tZWQgPSBoZWFkZXIudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG1hdGNoID0gVFJBQ0VQQVJFTlRfUkVHRVguZXhlYyh0cmltbWVkKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgWywgdmVyc2lvbiwgdHJhY2VJZCwgcGFyZW50SWQsIGZsYWdzSGV4XSA9IG1hdGNoO1xuXG4gIC8vIGZm64qUIFczQyBUcmFjZSBDb250ZXh0IOyKpO2OmeyXkOyEnCBpbnZhbGlkIHZlcnNpb24gbWFya2Vy66GcIOyYiOyVveuQmOyWtCDsnojsnYxcbiAgaWYgKHZlcnNpb24gPT09IFwiZmZcIikgcmV0dXJuIG51bGw7XG5cbiAgLy8gVzNDIOyKpO2OmeyXkCDrlLDrnbwg66qo65GQIDDsnbggdHJhY2UgaWQgLyBzcGFuIGlk64qUIOycoO2aqO2VmOyngCDslYrsnYxcbiAgaWYgKHRyYWNlSWQgPT09IEFMTF9aRVJPX1RSQUNFX0lEIHx8IHBhcmVudElkID09PSBBTExfWkVST19TUEFOX0lEKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCB0cmFjZUZsYWdzID0gcGFyc2VJbnQoZmxhZ3NIZXgsIDE2KTtcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb24sXG4gICAgdHJhY2VJZCxcbiAgICBwYXJlbnRJZCxcbiAgICB0cmFjZUZsYWdzLFxuICAgIHNhbXBsZWQ6ICh0cmFjZUZsYWdzICYgMHgwMSkgPT09IDEsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVRyYWNlSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZyhcImhleFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU3BhbklkKCk6IHN0cmluZyB7XG4gIHJldHVybiByYW5kb21CeXRlcyg4KS50b1N0cmluZyhcImhleFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRyYWNlUGFyZW50KHRyYWNlSWQ6IHN0cmluZywgc3BhbklkOiBzdHJpbmcsIHNhbXBsZWQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBmbGFncyA9IHNhbXBsZWQgPyBcIjAxXCIgOiBcIjAwXCI7XG4gIHJldHVybiBgMDAtJHt0cmFjZUlkfS0ke3NwYW5JZH0tJHtmbGFnc31gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFnQkEsU0FBZ0IsaUJBQWlCLFFBQTBDO0NBQ3pFLE1BQU0sVUFBVSxPQUFPLEtBQUssQ0FBQyxDQUFDLFlBQVk7Q0FDMUMsTUFBTSxRQUFRLGtCQUFrQixLQUFLLE9BQU87Q0FDNUMsSUFBSSxDQUFDLE9BQU8sT0FBTztDQUVuQixNQUFNLEdBQUcsU0FBUyxTQUFTLFVBQVUsWUFBWTtDQUdqRCxJQUFJLFlBQVksTUFBTSxPQUFPO0NBRzdCLElBQUksWUFBWSxxQkFBcUIsYUFBYSxrQkFBa0IsT0FBTztDQUUzRSxNQUFNLGFBQWEsU0FBUyxVQUFVLEVBQUU7Q0FFeEMsT0FBTztFQUNMO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsVUFBVSxhQUFhLE9BQVU7Q0FDbkM7QUFDRjtBQUVBLFNBQWdCLGtCQUEwQjtDQUN4QyxPQUFPLFlBQVksRUFBRSxDQUFDLENBQUMsU0FBUyxLQUFLO0FBQ3ZDO0FBRUEsU0FBZ0IsaUJBQXlCO0NBQ3ZDLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUs7QUFDdEM7QUFFQSxTQUFnQixrQkFBa0IsU0FBaUIsUUFBZ0IsU0FBMEI7Q0FFM0YsT0FBTyxNQUFNLFFBQVEsR0FBRyxPQUFPLEdBRGpCLFVBQVUsT0FBTztBQUVqQzs7O0NBdkNNLG9CQUFvQjtDQUNwQixvQkFBb0I7Q0FDcEIsbUJBQW1CIn0=
|