http-request-manager 18.3.3 → 18.4.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.
Files changed (69) hide show
  1. package/README.md +478 -255
  2. package/esm2022/lib/http-request-manager.module.mjs +20 -47
  3. package/esm2022/lib/http-request-services-demo/database-data-demo/database-data-demo.component.mjs +113 -32
  4. package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +11 -8
  5. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.mjs +3 -6
  6. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.mjs +13 -0
  7. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.mjs +13 -0
  8. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.mjs +128 -0
  9. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/services/state-request.service.mjs +74 -0
  10. package/esm2022/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.mjs +4 -1
  11. package/esm2022/lib/models/database-storage.model.mjs +1 -1
  12. package/esm2022/lib/services/database-manager-service/database.manager.service.mjs +171 -0
  13. package/esm2022/lib/services/database-manager-service/db.storage.service.mjs +183 -0
  14. package/esm2022/lib/services/database-manager-service/index.mjs +4 -0
  15. package/esm2022/lib/services/database-manager-service/models/table-schema.mjs +19 -0
  16. package/esm2022/lib/services/index.mjs +1 -2
  17. package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +7 -1
  18. package/esm2022/lib/services/local-storage-manager-service/models/storage-option.model.mjs +4 -3
  19. package/esm2022/lib/services/request-manager-services/request.service.mjs +2 -2
  20. package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +272 -84
  21. package/esm2022/lib/services/request-manager-state-service/models/ws-options.model.mjs +6 -3
  22. package/esm2022/lib/services/request-manager-state-service/models/ws-user.model.mjs +10 -0
  23. package/esm2022/lib/services/store-state-manager-service/store-state-manager.service.mjs +4 -4
  24. package/esm2022/lib/services/utils/utils.service.mjs +14 -14
  25. package/esm2022/lib/services/ws-manager-service/index.mjs +2 -2
  26. package/esm2022/lib/services/ws-manager-service/models/channel-notification.model.mjs +5 -3
  27. package/esm2022/lib/services/ws-manager-service/models/communication-type.enum.mjs +7 -0
  28. package/esm2022/lib/services/ws-manager-service/models/index.mjs +2 -3
  29. package/esm2022/lib/services/ws-manager-service/models/user-message.model.mjs +1 -1
  30. package/esm2022/lib/services/ws-manager-service/services/websocket.service.mjs +178 -0
  31. package/fesm2022/http-request-manager.mjs +2600 -2024
  32. package/fesm2022/http-request-manager.mjs.map +1 -1
  33. package/http-request-manager-18.4.0.tgz +0 -0
  34. package/lib/http-request-manager.module.d.ts +25 -22
  35. package/lib/http-request-services-demo/database-data-demo/database-data-demo.component.d.ts +39 -12
  36. package/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.d.ts +0 -1
  37. package/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.d.ts +16 -0
  38. package/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.d.ts +14 -0
  39. package/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.d.ts +39 -0
  40. package/lib/http-request-services-demo/request-manager-ws-demo/services/state-request.service.d.ts +14 -0
  41. package/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.d.ts +1 -0
  42. package/lib/services/{database-manager-services → database-manager-service}/database.manager.service.d.ts +9 -7
  43. package/lib/services/{database-manager-services → database-manager-service}/db.storage.service.d.ts +14 -14
  44. package/lib/services/index.d.ts +0 -1
  45. package/lib/services/local-storage-manager-service/models/storage-option.model.d.ts +3 -1
  46. package/lib/services/request-manager-services/request.service.d.ts +1 -1
  47. package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +34 -19
  48. package/lib/services/request-manager-state-service/models/ws-options.model.d.ts +9 -1
  49. package/lib/services/request-manager-state-service/models/ws-user.model.d.ts +10 -0
  50. package/lib/services/store-state-manager-service/store-state-manager.service.d.ts +3 -2
  51. package/lib/services/ws-manager-service/index.d.ts +1 -1
  52. package/lib/services/ws-manager-service/models/channel-notification.model.d.ts +4 -1
  53. package/lib/services/ws-manager-service/models/communication-type.enum.d.ts +5 -0
  54. package/lib/services/ws-manager-service/models/index.d.ts +1 -2
  55. package/lib/services/ws-manager-service/models/user-message.model.d.ts +5 -6
  56. package/lib/services/ws-manager-service/{websocket.service.d.ts → services/websocket.service.d.ts} +5 -2
  57. package/package.json +1 -1
  58. package/esm2022/lib/services/database-manager-services/database.manager.service.mjs +0 -119
  59. package/esm2022/lib/services/database-manager-services/db.storage.service.mjs +0 -143
  60. package/esm2022/lib/services/database-manager-services/index.mjs +0 -4
  61. package/esm2022/lib/services/database-manager-services/models/table-schema.mjs +0 -20
  62. package/esm2022/lib/services/ws-manager-service/models/user-info.model.mjs +0 -11
  63. package/esm2022/lib/services/ws-manager-service/models/user-name-info.model.mjs +0 -12
  64. package/esm2022/lib/services/ws-manager-service/websocket.service.mjs +0 -133
  65. package/http-request-manager-18.3.3.tgz +0 -0
  66. package/lib/services/ws-manager-service/models/user-info.model.d.ts +0 -11
  67. package/lib/services/ws-manager-service/models/user-name-info.model.d.ts +0 -14
  68. /package/lib/services/{database-manager-services → database-manager-service}/index.d.ts +0 -0
  69. /package/lib/services/{database-manager-services → database-manager-service}/models/table-schema.d.ts +0 -0
@@ -0,0 +1,183 @@
1
+ import { Injectable } from '@angular/core';
2
+ import Dexie from 'dexie';
3
+ import * as i0 from "@angular/core";
4
+ export class DbService extends Dexie {
5
+ get db() { return this; }
6
+ constructor() {
7
+ super("global_storage_db");
8
+ this.storageDB = "global_storage_db";
9
+ this.on('blocked', () => {
10
+ console.warn('Database upgrade blocked! Please close other tabs/windows of this app.');
11
+ });
12
+ this.on('versionchange', () => {
13
+ console.warn('Database version changed in another tab. Reloading...');
14
+ window.location.reload();
15
+ });
16
+ this.dbReady = this.init();
17
+ }
18
+ async init() {
19
+ try {
20
+ // Check if database already exists
21
+ const dbExists = await Dexie.exists(this.storageDB);
22
+ if (dbExists) {
23
+ // Database exists - just open it without declaring version
24
+ // This allows Dexie to use the existing schema and version
25
+ console.log(`Database "${this.storageDB}" already exists. Opening with existing schema...`);
26
+ if (!this.isOpen()) {
27
+ await this.open();
28
+ }
29
+ console.log(`✅ Connected to existing database. Current version: ${this.verno}`);
30
+ console.log(`📊 Existing tables: ${this.getTables.join(', ')}`);
31
+ }
32
+ else {
33
+ // New database - initialize with empty schema at version 1
34
+ console.log(`Creating new database "${this.storageDB}"...`);
35
+ if (this.isOpen()) {
36
+ this.close();
37
+ }
38
+ this.version(1).stores({});
39
+ await this.open();
40
+ console.log(`✅ New database initialized. Current version: ${this.verno}`);
41
+ }
42
+ }
43
+ catch (err) {
44
+ console.error('Failed to initialize database:', err);
45
+ throw err;
46
+ }
47
+ }
48
+ async createNewDatabase() {
49
+ return this.dbReady;
50
+ }
51
+ get vr() {
52
+ return this.verno;
53
+ }
54
+ get nextVr() {
55
+ const v = this.verno;
56
+ return (isNaN(v) || v === 0) ? 1 : v + 1;
57
+ }
58
+ get getTables() {
59
+ return this.tables.map((table) => table.name);
60
+ }
61
+ async hasDatabase() {
62
+ return await Dexie.exists(this.storageDB);
63
+ }
64
+ getTable(tableName) {
65
+ try {
66
+ return this.table(tableName);
67
+ }
68
+ catch (error) {
69
+ return undefined;
70
+ }
71
+ }
72
+ tableExists(tableName) {
73
+ return this.tables.some(t => t.name === tableName);
74
+ }
75
+ async updateTable(tableName, find, data) {
76
+ const table = this.getTable(tableName);
77
+ if (!table || !find || !find.key)
78
+ return false;
79
+ try {
80
+ const count = await table.where(find.key).equals(find.value).modify(data);
81
+ return count > 0;
82
+ }
83
+ catch (error) {
84
+ console.error('Error updating table:', error);
85
+ return false;
86
+ }
87
+ }
88
+ async createTable(tableName, schema) {
89
+ if (!tableName || !schema)
90
+ return;
91
+ await this.dbReady;
92
+ const safeTableName = this.cleanTableName(tableName);
93
+ const safeSchema = schema.trim();
94
+ if (this.tableExists(safeTableName)) {
95
+ console.log(`Table ${safeTableName} already exists.`);
96
+ return;
97
+ }
98
+ const currentSchema = this.getCurrentSchema();
99
+ console.log('Current Schema before update:', currentSchema);
100
+ currentSchema[safeTableName] = safeSchema;
101
+ const nextVersion = this.verno + 1;
102
+ console.log(`Creating table ${safeTableName}. Upgrading to version ${nextVersion}. New Schema:`, currentSchema);
103
+ if (this.isOpen()) {
104
+ this.close();
105
+ }
106
+ this.version(nextVersion).stores(currentSchema);
107
+ try {
108
+ await this.open();
109
+ const created = this.tables.some(t => t.name === safeTableName);
110
+ if (!created) {
111
+ console.error(`CRITICAL: Table ${safeTableName} was NOT created after upgrade! Tables found:`, this.tables.map(t => t.name));
112
+ }
113
+ else {
114
+ console.log(`Database opened successfully version ${this.verno}. Table ${safeTableName} verified.`);
115
+ }
116
+ }
117
+ catch (err) {
118
+ console.error('Error opening database after schema update:', err);
119
+ }
120
+ }
121
+ async DBOpened() {
122
+ if (!this.isOpen()) {
123
+ try {
124
+ await this.open();
125
+ return true;
126
+ }
127
+ catch (err) {
128
+ return false;
129
+ }
130
+ }
131
+ return true;
132
+ }
133
+ getCurrentSchema() {
134
+ const schema = {};
135
+ if (!this.tables || this.tables.length === 0) {
136
+ return schema;
137
+ }
138
+ this.tables.forEach(table => {
139
+ const primKey = table.schema.primKey;
140
+ const indexes = table.schema.indexes;
141
+ let schemaStr = "";
142
+ if (primKey.auto)
143
+ schemaStr += "++";
144
+ if (Array.isArray(primKey.keyPath)) {
145
+ schemaStr += `[${primKey.keyPath.join('+')}]`;
146
+ }
147
+ else {
148
+ schemaStr += primKey.keyPath || "";
149
+ }
150
+ indexes.forEach(idx => {
151
+ schemaStr += ",";
152
+ if (idx.unique)
153
+ schemaStr += "&";
154
+ if (idx.multi)
155
+ schemaStr += "*";
156
+ if (Array.isArray(idx.keyPath)) {
157
+ schemaStr += `[${idx.keyPath.join('+')}]`;
158
+ }
159
+ else {
160
+ schemaStr += idx.keyPath || "";
161
+ }
162
+ });
163
+ schema[table.name] = schemaStr;
164
+ });
165
+ return schema;
166
+ }
167
+ cleanTableName(str) {
168
+ return str
169
+ .replace(/[^a-zA-Z0-9\s_]/g, '')
170
+ .replace(/\s+/g, '_')
171
+ .trim()
172
+ .toLowerCase();
173
+ }
174
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DbService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
175
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DbService, providedIn: 'root' }); }
176
+ }
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DbService, decorators: [{
178
+ type: Injectable,
179
+ args: [{
180
+ providedIn: 'root',
181
+ }]
182
+ }], ctorParameters: () => [] });
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9kYXRhYmFzZS1tYW5hZ2VyLXNlcnZpY2UvZGIuc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFjLE1BQU0sT0FBTyxDQUFDOztBQUtuQyxNQUFNLE9BQU8sU0FBVSxTQUFRLEtBQUs7SUFJbEMsSUFBSSxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBSXpCO1FBRUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFScEIsY0FBUyxHQUFHLG1CQUFtQixDQUFBO1FBVXRDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLHdFQUF3RSxDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7WUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUU3QixDQUFDO0lBRU8sS0FBSyxDQUFDLElBQUk7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsbUNBQW1DO1lBQ25DLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFcEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYiwyREFB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QUksSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUM5QyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osU0FBUyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2dCQUNuQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFUyxjQUFjLENBQUMsR0FBVztRQUNsQyxPQUFPLEdBQUc7YUFDUCxPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO2FBQy9CLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ3BCLElBQUksRUFBRTthQUNOLFdBQVcsRUFBRSxDQUFDO0lBQ25CLENBQUM7K0dBek1VLFNBQVM7bUhBQVQsU0FBUyxjQUZSLE1BQU07OzRGQUVQLFNBQVM7a0JBSHJCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IERleGllLCB7VGFibGV9IGZyb20gJ2RleGllJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIERiU2VydmljZSBleHRlbmRzIERleGllIHtcblxuICByZWFkb25seSBzdG9yYWdlREIgPSBcImdsb2JhbF9zdG9yYWdlX2RiXCJcblxuICBnZXQgZGIoKSB7IHJldHVybiB0aGlzOyB9XG5cbiAgcHJpdmF0ZSBkYlJlYWR5OiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuXG4gICAgc3VwZXIoXCJnbG9iYWxfc3RvcmFnZV9kYlwiKTtcblxuICAgIHRoaXMub24oJ2Jsb2NrZWQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignRGF0YWJhc2UgdXBncmFkZSBibG9ja2VkISBQbGVhc2UgY2xvc2Ugb3RoZXIgdGFicy93aW5kb3dzIG9mIHRoaXMgYXBwLicpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbigndmVyc2lvbmNoYW5nZScsICgpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdEYXRhYmFzZSB2ZXJzaW9uIGNoYW5nZWQgaW4gYW5vdGhlciB0YWIuIFJlbG9hZGluZy4uLicpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRiUmVhZHkgPSB0aGlzLmluaXQoKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0KCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBpZiBkYXRhYmFzZSBhbHJlYWR5IGV4aXN0c1xuICAgICAgY29uc3QgZGJFeGlzdHMgPSBhd2FpdCBEZXhpZS5leGlzdHModGhpcy5zdG9yYWdlREIpO1xuXG4gICAgICBpZiAoZGJFeGlzdHMpIHtcbiAgICAgICAgLy8gRGF0YWJhc2UgZXhpc3RzIC0ganVzdCBvcGVuIGl0IHdpdGhvdXQgZGVjbGFyaW5nIHZlcnNpb25cbiAgICAgICAgLy8gVGhpcyBhbGxvd3MgRGV4aWUgdG8gdXNlIHRoZSBleGlzdGluZyBzY2hlbWEgYW5kIHZlcnNpb25cbiAgICAgICAgY29uc29sZS5sb2coYERhdGFiYXNlIFwiJHt0aGlzLnN0b3JhZ2VEQn1cIiBhbHJlYWR5IGV4aXN0cy4gT3BlbmluZyB3aXRoIGV4aXN0aW5nIHNjaGVtYS4uLmApO1xuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMub3BlbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYOKchSBDb25uZWN0ZWQgdG8gZXhpc3RpbmcgZGF0YWJhc2UuIEN1cnJlbnQgdmVyc2lvbjogJHt0aGlzLnZlcm5vfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhg8J+TiiBFeGlzdGluZyB0YWJsZXM6ICR7dGhpcy5nZXRUYWJsZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5ldyBkYXRhYmFzZSAtIGluaXRpYWxpemUgd2l0aCBlbXB0eSBzY2hlbWEgYXQgdmVyc2lvbiAxXG4gICAgICAgIGNvbnNvbGUubG9nKGBDcmVhdGluZyBuZXcgZGF0YWJhc2UgXCIke3RoaXMuc3RvcmFnZURCfVwiLi4uYCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZlcnNpb24oMSkuc3RvcmVzKHt9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGDinIUgTmV3IGRhdGFiYXNlIGluaXRpYWxpemVkLiBDdXJyZW50IHZlcnNpb246ICR7dGhpcy52ZXJub31gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIGRhdGFiYXNlOicsIGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZU5ld0RhdGFiYXNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGJSZWFkeTtcbiAgfVxuXG4gIGdldCB2cigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJubztcbiAgfVxuXG4gIGdldCBuZXh0VnIoKSB7XG4gICAgY29uc3QgdiA9IHRoaXMudmVybm87XG4gICAgcmV0dXJuIChpc05hTih2KSB8fCB2ID09PSAwKSA/IDEgOiB2ICsgMTtcbiAgfVxuXG4gIGdldCBnZXRUYWJsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzLm1hcCgodGFibGUpID0+IHRhYmxlLm5hbWUpO1xuICB9XG5cbiAgYXN5bmMgaGFzRGF0YWJhc2UoKSB7XG4gICAgcmV0dXJuIGF3YWl0IERleGllLmV4aXN0cyh0aGlzLnN0b3JhZ2VEQik7XG4gIH1cblxuICBnZXRUYWJsZSh0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlPGFueSwgYW55PiB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUodGFibGVOYW1lKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHRhYmxlRXhpc3RzKHRhYmxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzLnNvbWUodCA9PiB0Lm5hbWUgPT09IHRhYmxlTmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgdXBkYXRlVGFibGUodGFibGVOYW1lOiBzdHJpbmcsIGZpbmQ6IHsga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfSwgZGF0YTogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZSB8fCAhZmluZCB8fCAhZmluZC5rZXkpIHJldHVybiBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb3VudCA9IGF3YWl0IHRhYmxlLndoZXJlKGZpbmQua2V5KS5lcXVhbHMoZmluZC52YWx1ZSkubW9kaWZ5KGRhdGEpO1xuICAgICAgcmV0dXJuIGNvdW50ID4gMDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBkYXRpbmcgdGFibGU6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjcmVhdGVUYWJsZSh0YWJsZU5hbWU6IHN0cmluZywgc2NoZW1hOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRhYmxlTmFtZSB8fCAhc2NoZW1hKSByZXR1cm47XG5cbiAgICBhd2FpdCB0aGlzLmRiUmVhZHk7XG5cbiAgICBjb25zdCBzYWZlVGFibGVOYW1lID0gdGhpcy5jbGVhblRhYmxlTmFtZSh0YWJsZU5hbWUpO1xuICAgIGNvbnN0IHNhZmVTY2hlbWEgPSBzY2hlbWEudHJpbSgpO1xuXG4gICAgaWYgKHRoaXMudGFibGVFeGlzdHMoc2FmZVRhYmxlTmFtZSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBUYWJsZSAke3NhZmVUYWJsZU5hbWV9IGFscmVhZHkgZXhpc3RzLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRTY2hlbWEgPSB0aGlzLmdldEN1cnJlbnRTY2hlbWEoKTtcbiAgICBjb25zb2xlLmxvZygnQ3VycmVudCBTY2hlbWEgYmVmb3JlIHVwZGF0ZTonLCBjdXJyZW50U2NoZW1hKTtcblxuICAgIGN1cnJlbnRTY2hlbWFbc2FmZVRhYmxlTmFtZV0gPSBzYWZlU2NoZW1hO1xuXG4gICAgY29uc3QgbmV4dFZlcnNpb24gPSB0aGlzLnZlcm5vICsgMTtcbiAgICBjb25zb2xlLmxvZyhgQ3JlYXRpbmcgdGFibGUgJHtzYWZlVGFibGVOYW1lfS4gVXBncmFkaW5nIHRvIHZlcnNpb24gJHtuZXh0VmVyc2lvbn0uIE5ldyBTY2hlbWE6YCwgY3VycmVudFNjaGVtYSk7XG5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMudmVyc2lvbihuZXh0VmVyc2lvbikuc3RvcmVzKGN1cnJlbnRTY2hlbWEpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuKCk7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSB0aGlzLnRhYmxlcy5zb21lKHQgPT4gdC5uYW1lID09PSBzYWZlVGFibGVOYW1lKTtcbiAgICAgICAgaWYgKCFjcmVhdGVkKSB7XG4gICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ1JJVElDQUw6IFRhYmxlICR7c2FmZVRhYmxlTmFtZX0gd2FzIE5PVCBjcmVhdGVkIGFmdGVyIHVwZ3JhZGUhIFRhYmxlcyBmb3VuZDpgLCB0aGlzLnRhYmxlcy5tYXAodCA9PiB0Lm5hbWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRGF0YWJhc2Ugb3BlbmVkIHN1Y2Nlc3NmdWxseSB2ZXJzaW9uICR7dGhpcy52ZXJub30uIFRhYmxlICR7c2FmZVRhYmxlTmFtZX0gdmVyaWZpZWQuYCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb3BlbmluZyBkYXRhYmFzZSBhZnRlciBzY2hlbWEgdXBkYXRlOicsIGVycik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIERCT3BlbmVkKCkge1xuICAgIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRTY2hlbWEoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3Qgc2NoZW1hOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgICBpZiAoIXRoaXMudGFibGVzIHx8IHRoaXMudGFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cblxuICAgIHRoaXMudGFibGVzLmZvckVhY2godGFibGUgPT4ge1xuICAgICAgY29uc3QgcHJpbUtleSA9IHRhYmxlLnNjaGVtYS5wcmltS2V5O1xuICAgICAgY29uc3QgaW5kZXhlcyA9IHRhYmxlLnNjaGVtYS5pbmRleGVzO1xuXG4gICAgICBsZXQgc2NoZW1hU3RyID0gXCJcIjtcblxuICAgICAgaWYgKHByaW1LZXkuYXV0bykgc2NoZW1hU3RyICs9IFwiKytcIjtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJpbUtleS5rZXlQYXRoKSkge1xuICAgICAgICAgIHNjaGVtYVN0ciArPSBgWyR7cHJpbUtleS5rZXlQYXRoLmpvaW4oJysnKX1dYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NoZW1hU3RyICs9IHByaW1LZXkua2V5UGF0aCB8fCBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpbmRleGVzLmZvckVhY2goaWR4ID0+IHtcbiAgICAgICAgc2NoZW1hU3RyICs9IFwiLFwiO1xuICAgICAgICBpZiAoaWR4LnVuaXF1ZSkgc2NoZW1hU3RyICs9IFwiJlwiO1xuICAgICAgICBpZiAoaWR4Lm11bHRpKSBzY2hlbWFTdHIgKz0gXCIqXCI7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaWR4LmtleVBhdGgpKSB7XG4gICAgICAgICAgICBzY2hlbWFTdHIgKz0gYFske2lkeC5rZXlQYXRoLmpvaW4oJysnKX1dYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNjaGVtYVN0ciArPSBpZHgua2V5UGF0aCB8fCBcIlwiO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2NoZW1hW3RhYmxlLm5hbWVdID0gc2NoZW1hU3RyO1xuICAgIH0pO1xuICAgIHJldHVybiBzY2hlbWE7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW5UYWJsZU5hbWUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHJcbiAgICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOVxcc19dL2csICcnKVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJ18nKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxufVxuIl19
@@ -0,0 +1,4 @@
1
+ export * from "./models/table-schema";
2
+ export * from "./database.manager.service";
3
+ export * from "./db.storage.service";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2RhdGFiYXNlLW1hbmFnZXItc2VydmljZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFDO0FBRXRDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL21vZGVscy90YWJsZS1zY2hlbWFcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2UubWFuYWdlci5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYi5zdG9yYWdlLnNlcnZpY2VcIjtcbiJdfQ==
@@ -0,0 +1,19 @@
1
+ export class TableSchemaDef {
2
+ constructor(table = 'unknown', schema = '') {
3
+ this.table = table;
4
+ this.schema = schema;
5
+ }
6
+ static adapt(item) {
7
+ const schemaArray = (item?.schema && Array.isArray(item.schema)) ? item.schema : item.schema.split(',');
8
+ const schema = schemaArray.map((item) => this.cleanString(item)).join();
9
+ return new TableSchemaDef((item?.table) ? this.cleanString(item.table) : 'unknown', schema);
10
+ }
11
+ static cleanString(str) {
12
+ // Allow alphanumeric, spaces, underscores, and Dexie schema characters (+, &, *, [, ])
13
+ const cleanStr = str
14
+ .replace(/[^a-zA-Z0-9\s_+\&*\[\]]/g, '')
15
+ .trim();
16
+ return cleanStr;
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9kYXRhYmFzZS1tYW5hZ2VyLXNlcnZpY2UvbW9kZWxzL3RhYmxlLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUNTLFFBQVEsU0FBUyxFQUNqQixTQUFpQixFQUFFO1FBRG5CLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBYTtJQUN6QixDQUFDO0lBRUosTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFVO1FBRXJCLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN2RyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFL0UsT0FBTyxJQUFJLGNBQWMsQ0FDdkIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ3hELE1BQU0sQ0FDUCxDQUFBO0lBRUgsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBVztRQUM1Qix1RkFBdUY7UUFDdkYsTUFBTSxRQUFRLEdBQUcsR0FBRzthQUNqQixPQUFPLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxDQUFDO2FBQ3ZDLElBQUksRUFBRSxDQUFDO1FBRVYsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUYWJsZVNjaGVtYURlZkludGVyZmFjZSB7XG4gIHRhYmxlOiBzdHJpbmdcbiAgc2NoZW1hOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlU2NoZW1hRGVmIGltcGxlbWVudHMgVGFibGVTY2hlbWFEZWZJbnRlcmZhY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGFibGUgPSAndW5rbm93bicsXG4gICAgcHVibGljIHNjaGVtYTogc3RyaW5nID0gJycsXG4gICkge31cblxuICBzdGF0aWMgYWRhcHQoaXRlbT86IGFueSk6IFRhYmxlU2NoZW1hRGVmIHtcblxuICAgIGNvbnN0IHNjaGVtYUFycmF5ID0gKGl0ZW0/LnNjaGVtYSAmJiBBcnJheS5pc0FycmF5KGl0ZW0uc2NoZW1hKSkgPyBpdGVtLnNjaGVtYSA6IGl0ZW0uc2NoZW1hLnNwbGl0KCcsJylcbiAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFBcnJheS5tYXAoKGl0ZW06IHN0cmluZykgPT4gdGhpcy5jbGVhblN0cmluZyhpdGVtKSkuam9pbigpXG5cbiAgICByZXR1cm4gbmV3IFRhYmxlU2NoZW1hRGVmKFxuICAgICAgKGl0ZW0/LnRhYmxlKSA/IHRoaXMuY2xlYW5TdHJpbmcoaXRlbS50YWJsZSkgOiAndW5rbm93bicsXG4gICAgICBzY2hlbWEsXG4gICAgKVxuXG4gIH1cblxuICBzdGF0aWMgY2xlYW5TdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIEFsbG93IGFscGhhbnVtZXJpYywgc3BhY2VzLCB1bmRlcnNjb3JlcywgYW5kIERleGllIHNjaGVtYSBjaGFyYWN0ZXJzICgrLCAmLCAqLCBbLCBdKVxuICAgIGNvbnN0IGNsZWFuU3RyID0gc3RyXG4gICAgICAucmVwbGFjZSgvW15hLXpBLVowLTlcXHNfK1xcJipcXFtcXF1dL2csICcnKVxuICAgICAgLnRyaW0oKTtcblxuICAgIHJldHVybiBjbGVhblN0cjtcbiAgfVxuXG59XG4iXX0=
@@ -2,7 +2,6 @@
2
2
  export * from "./local-storage-manager-service/index";
3
3
  export * from "./request-manager-services/index";
4
4
  export * from "./request-manager-state-service/index";
5
- export * from "./store-state-manager-service/index";
6
5
  export * from "./ws-manager-service/index";
7
6
  export * from "./utils/index";
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLHFEQUFxRDtBQUNyRCxjQUFjLHVDQUF1QyxDQUFDO0FBRXRELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsNEJBQTRCLENBQUM7QUFFM0MsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8vIGV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlLW1hbmFnZXItc2VydmljZXMvaW5kZXhcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL2luZGV4XCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcy9pbmRleFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVxdWVzdC1tYW5hZ2VyLXN0YXRlLXNlcnZpY2UvaW5kZXhcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0b3JlLXN0YXRlLW1hbmFnZXItc2VydmljZS9pbmRleFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vd3MtbWFuYWdlci1zZXJ2aWNlL2luZGV4XCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL2luZGV4XCI7XG4iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLHFEQUFxRDtBQUNyRCxjQUFjLHVDQUF1QyxDQUFDO0FBRXRELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDRCQUE0QixDQUFDO0FBRTNDLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vLyBleHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS1tYW5hZ2VyLXNlcnZpY2VzL2luZGV4XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb2NhbC1zdG9yYWdlLW1hbmFnZXItc2VydmljZS9pbmRleFwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMvaW5kZXhcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL2luZGV4XCI7XG5leHBvcnQgKiBmcm9tIFwiLi93cy1tYW5hZ2VyLXNlcnZpY2UvaW5kZXhcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvaW5kZXhcIjtcbiJdfQ==
@@ -53,6 +53,7 @@ export class LocalStorageManagerService extends ComponentStore {
53
53
  this.stores$ = this.select((state) => state.settings);
54
54
  this.storeExists$ = (store) => this.select(this.data$, (data) => data.settings.find(item => item.name === store) ? true : false);
55
55
  this.store$ = (store) => this.select(this.data$, (data) => {
56
+ store = store.toLowerCase();
56
57
  const foundStore = data.settings.find(item => item.name === store);
57
58
  if (foundStore) {
58
59
  const options = SettingOptions.adapt(foundStore.options);
@@ -89,6 +90,7 @@ export class LocalStorageManagerService extends ComponentStore {
89
90
  }));
90
91
  this.setStore = this.updater((state, store) => {
91
92
  const settings = StorageOption.adapt(store);
93
+ store.name = store.name.toLowerCase();
92
94
  settings.options = this.objectMergerService.mergeStorageOptions(settings.options);
93
95
  const type = store.options.storage;
94
96
  const hasStore = this.hasGlobalStorage(type, store.id);
@@ -111,6 +113,8 @@ export class LocalStorageManagerService extends ComponentStore {
111
113
  }
112
114
  });
113
115
  this.createStore = this.updater((state, store) => {
116
+ store.name = store.name.toLowerCase();
117
+ store.options = this.objectMergerService.mergeStorageOptions(store.options);
114
118
  const settings = StorageOption.adapt(store);
115
119
  settings.options = this.objectMergerService.mergeStorageOptions(settings.options);
116
120
  const foundStore = state?.settings.some(item => item.name === store.name);
@@ -139,6 +143,7 @@ export class LocalStorageManagerService extends ComponentStore {
139
143
  }
140
144
  });
141
145
  this.updateStore = this.updater((state, store) => {
146
+ store.name = store.name.toLowerCase();
142
147
  store.name = this.validStoreName(store.name);
143
148
  const settings = state.settings.find(item => item.name === store.name);
144
149
  if (settings) {
@@ -163,6 +168,7 @@ export class LocalStorageManagerService extends ComponentStore {
163
168
  return state;
164
169
  });
165
170
  this.deleteStore = this.updater((state, store) => {
171
+ store.name = store.name.toLowerCase();
166
172
  store.name = this.validStoreName(store.name);
167
173
  const id = state.settings.find(item => item.name === store.name)?.id;
168
174
  if (id) {
@@ -299,4 +305,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
299
305
  type: Inject,
300
306
  args: [CONFIG_SETTINGS_TOKEN]
301
307
  }] }] });
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVsRyxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQVFyRSxNQUFNLE9BQU8sR0FBVTtJQUNyQixXQUFXLEVBQUUsRUFBRTtJQUNmLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLFFBQVEsRUFBRSxFQUFFO0NB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QUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDL0MsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFFL0IsQ0FBQztJQUVRLFdBQVc7UUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNqQyxDQUFDOytHQXBZVSwwQkFBMEIsa0JBNkdMLHFCQUFxQjttSEE3RzFDLDBCQUEwQixjQURiLE1BQU07OzRGQUNuQiwwQkFBMEI7a0JBRHRDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkE4R25CLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IHdpdGhMYXRlc3RGcm9tLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMuc2VydmljZSc7XG5pbXBvcnQgeyBTeW1tZXRyaWNhbEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvZW5jcnlwdGlvbi9zeW1tZXRyaWNhbC1lbmNyeXB0aW9uLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBTdG9yYWdlT3B0aW9uLCBTdG9yYWdlVHlwZSB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSAnLi9tb2RlbHMvc2V0dGluZy1vcHRpb25zLm1vZGVsJztcbmltcG9ydCB7IFN0b3JhZ2VEYXRhIH0gZnJvbSAnLi9tb2RlbHMvc3RvcmFnZS1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEVuY3J5cHRpb25UZXN0U2VydmljZSB9IGZyb20gJy4uL3V0aWxzL2VuY3J5cHRpb24vZW5jcnlwdGlvbi10ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9hcHAuc2VydmljZSc7XG5pbXBvcnQgeyBDT05GSUdfU0VUVElOR1NfVE9LRU4gfSBmcm9tICcuLi8uLi9tb2RlbHMvY29uZmlnLXRva2VuLm1vZGVsJztcbmltcG9ydCB7IENvbmZpZ09wdGlvbnMgfSBmcm9tICcuLi9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMnO1xuaW1wb3J0IHsgT2JqZWN0TWVyZ2VyU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL29iamVjdC1tZXJnZXIuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGUge1xuICBsb2NhbFN0b3JlczogU3RvcmFnZURhdGFbXVxuICBzZXNzaW9uU3RvcmVzOiBTdG9yYWdlRGF0YVtdXG4gIHNldHRpbmdzOiBTdG9yYWdlT3B0aW9uW11cbn1cblxuY29uc3Qgc3RvcmFnZTogU3RhdGUgPSB7XG4gIGxvY2FsU3RvcmVzOiBbXSxcbiAgc2Vzc2lvblN0b3JlczogW10sXG4gIHNldHRpbmdzOiBbXSxcbn07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UgZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHN0b3JhZ2VOYW1lID0gJ3N0b3JhZ2UnXG4gIHN0b3JhZ2VTZXR0aW5nc05hbWUgPSAnZ2xvYmFsLXN0b3JhZ2UnXG4gIGRlZmF1bHRPcHRpb25zID0gU2V0dGluZ09wdGlvbnMuYWRhcHQoKVxuXG4gIHN0YXRlUmV0cmlldmVkID0gZmFsc2VcbiAgZW5jcnlwdGVkID0gZmFsc2VcblxuICBhcHAgPSBpbmplY3QoQXBwU2VydmljZSlcbiAgdXRpbHMgPSBpbmplY3QoVXRpbHNTZXJ2aWNlKVxuICBvYmplY3RNZXJnZXJTZXJ2aWNlID0gaW5qZWN0KE9iamVjdE1lcmdlclNlcnZpY2UpXG4gIGVuY3J5cHRpb24gPSBpbmplY3QoU3ltbWV0cmljYWxFbmNyeXB0aW9uU2VydmljZSlcbiAgZW5jcnlwdGlvblRlc3QgPSBpbmplY3QoRW5jcnlwdGlvblRlc3RTZXJ2aWNlKVxuXG4gIC8vIFNFTEVDVE9SU1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YSQgPSB0aGlzLnNlbGVjdCgoc3RhdGUpID0+IHN0YXRlKVxuXG4gIHJlYWRvbmx5IHN0b3JlcyQgPSB0aGlzLnNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLnNldHRpbmdzKVxuXG4gIHJlYWRvbmx5IHN0b3JlRXhpc3RzJCA9IChzdG9yZTogc3RyaW5nKSA9PiB0aGlzLnNlbGVjdChcbiAgICB0aGlzLmRhdGEkLFxuICAgIChkYXRhKSA9PiAgZGF0YS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZSkgPyB0cnVlIDogZmFsc2VcbiAgKVxuXG4gIHJlYWRvbmx5IHN0b3JlJCA9IChzdG9yZTogc3RyaW5nKSA9PiB0aGlzLnNlbGVjdChcbiAgICB0aGlzLmRhdGEkLFxuICAgIChkYXRhKSA9PiB7XG5cbiAgICAgIGNvbnN0IGZvdW5kU3RvcmUgPSBkYXRhLnNldHRpbmdzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHN0b3JlKVxuXG4gICAgICBpZihmb3VuZFN0b3JlKSB7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IFNldHRpbmdPcHRpb25zLmFkYXB0KGZvdW5kU3RvcmUub3B0aW9ucylcblxuICAgICAgICBjb25zdCBmb3VuZCA9IGZvdW5kU3RvcmUub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuR0xPQkFMXG4gICAgICAgICAgPyBkYXRhLmxvY2FsU3RvcmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmb3VuZFN0b3JlLmlkKSBhcyBTdG9yYWdlRGF0YVxuICAgICAgICAgIDogZGF0YS5zZXNzaW9uU3RvcmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmb3VuZFN0b3JlLmlkKSBhcyBTdG9yYWdlRGF0YVxuXG4gICAgICAgIGlmKCFmb3VuZCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlU3RvcmUoeyBuYW1lOiBzdG9yZSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYoIXRoaXMuYXBwPy5hcHBJRCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignTm8gQXBwIElEIGZvdW5kIC0gQXBwSWQgbm90IFByb3ZpZGVkJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VEYXRhID0gKG9wdGlvbnMuZW5jcnlwdGVkKSA/IHRoaXMuZW5jcnlwdGlvbi5kZWNyeXB0KGZvdW5kLmRhdGEsIHRoaXMuYXBwLmFwcElEKSA6IGZvdW5kLmRhdGFcbiAgICAgICAgcmV0dXJuICh0aGlzLmlzU3RyaW5nKHN0b3JhZ2VEYXRhKSkgPyBKU09OLnBhcnNlKHN0b3JhZ2VEYXRhKTogc3RvcmFnZURhdGFcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgIH1cbiAgKVxuXG4gIHJlYWRvbmx5IHNldHRpbmdzJCA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IChzdGF0ZSkgPyBzdGF0ZS5zZXR0aW5ncyA6IHN0b3JhZ2Uuc2V0dGluZ3MpXG5cbiAgcmVhZG9ubHkgc2V0dGluZyQgPSAoc3RvcmU6IHN0cmluZykgPT4gdGhpcy5zZWxlY3QoXG4gICAgdGhpcy5kYXRhJCxcbiAgICAoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kU2V0dGluZyA9IHN0YXRlLnNldHRpbmdzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHN0b3JlKVxuICAgICAgcmV0dXJuIChmb3VuZFNldHRpbmcpID8gZm91bmRTZXR0aW5nIDogbnVsbFxuICAgIH1cbiAgKVxuXG4gIHBlcnNpc3RlbmNlJCA9IHRoaXMuZGF0YSRcbiAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICBpZih0aGlzLnN0YXRlUmV0cmlldmVkKSB0aGlzLnBlcnNpc3RTdGF0ZShkYXRhKVxuICB9KVxuXG4gIHN0YXJ0VGltZXIoKSB7XG4gICAgY29uc3QgdGltZXIkID0gaW50ZXJ2YWwoMTAwMCAqIDMpLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmRhdGEkKSxcbiAgICAgIG1hcCgoW18sIHN0YXRlXSkgPT4gc3RhdGUpLFxuICAgICAgdGFwKChzdGF0ZSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGV4cGlyZWQ6IFN0b3JhZ2VPcHRpb25bXSA9IHRoaXMuZXhwaXJlZChzdGF0ZSkgPyB0aGlzLmV4cGlyZWQoc3RhdGUpIDogW11cblxuICAgICAgICBpZiAoZXhwaXJlZC5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICBjb25zdCBpZHMgPSBleHBpcmVkLm1hcCgoaXRlbSkgPT4gaXRlbS5pZClcblxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRTdGF0ZTogU3RhdGUgPSB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGxvY2FsU3RvcmVzOiBzdGF0ZS5sb2NhbFN0b3Jlcy5maWx0ZXIoKGl0ZW0pID0+ICFpZHMuaW5jbHVkZXMoaXRlbS5pZCkpLFxuICAgICAgICAgICAgc2Vzc2lvblN0b3Jlczogc3RhdGUuc2Vzc2lvblN0b3Jlcy5maWx0ZXIoKGl0ZW0pID0+ICFpZHMuaW5jbHVkZXMoaXRlbS5pZCkpLFxuICAgICAgICAgICAgc2V0dGluZ3M6IHN0YXRlLnNldHRpbmdzLmZpbHRlcigoaXRlbSkgPT4gIWlkcy5pbmNsdWRlcyhpdGVtLmlkKSksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMucGVyc2lzdFN0YXRlKHVwZGF0ZWRTdGF0ZSlcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHVwZGF0ZWRTdGF0ZSlcblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aW1lciQuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB1cGRhdGVkU3RhdGU6IFN0YXRlKSA9PiAoe1xuICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgfSkpXG5cblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KENPTkZJR19TRVRUSU5HU19UT0tFTikgcHJpdmF0ZSBjb25maWdPcHRpb25zPzogQ29uZmlnT3B0aW9ucykge1xuXG4gICAgc3VwZXIoc3RvcmFnZSlcblxuICAgIHRoaXMuc3RvcmFnZU5hbWUgPSBjb25maWdPcHRpb25zPy5Mb2NhbFN0b3JhZ2VPcHRpb25zPy5zdG9yYWdlTmFtZSB8fCB0aGlzLnN0b3JhZ2VOYW1lXG4gICAgdGhpcy5zdG9yYWdlU2V0dGluZ3NOYW1lID0gY29uZmlnT3B0aW9ucz8uTG9jYWxTdG9yYWdlT3B0aW9ucz8uc3RvcmFnZVNldHRpbmdzTmFtZSB8fCB0aGlzLnN0b3JhZ2VTZXR0aW5nc05hbWVcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnT3B0aW9ucz8uTG9jYWxTdG9yYWdlT3B0aW9ucz8ub3B0aW9ucyB8fCB0aGlzLmRlZmF1bHRPcHRpb25zXG5cbiAgICB0aGlzLnJldHJpZXZlU3RhdGUoKVxuICAgIHRoaXMuc3RhcnRUaW1lcigpXG4gIH1cblxuICByZWFkb25seSBzZXRTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9uczogU2V0dGluZ09wdGlvbnMgfSk6IGFueSA9PiB7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IFN0b3JhZ2VPcHRpb24uYWRhcHQoc3RvcmUpXG4gICAgc2V0dGluZ3Mub3B0aW9ucyA9IHRoaXMub2JqZWN0TWVyZ2VyU2VydmljZS5tZXJnZVN0b3JhZ2VPcHRpb25zKHNldHRpbmdzLm9wdGlvbnMpXG5cbiAgICBjb25zdCB0eXBlID0gc3RvcmUub3B0aW9ucy5zdG9yYWdlXG4gICAgY29uc3QgaGFzU3RvcmUgPSB0aGlzLmhhc0dsb2JhbFN0b3JhZ2UodHlwZSwgc3RvcmUuaWQpXG5cbiAgICBzdG9yZS5uYW1lID0gdGhpcy52YWxpZFN0b3JlTmFtZShzdG9yZS5uYW1lKVxuXG4gICAgaWYoIWhhc1N0b3JlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5vIHN1Y2ggU3RvcmU6ICR7c3RvcmUubmFtZX1gKVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSBlbHNlIHtcblxuICAgIGNvbnN0IHN0ciA9IHRoaXMuZW5jcnlwdGlvblRlc3QuaXNFbmNyeXB0ZWQoc3RvcmUuZGF0YSkgPyBzdG9yZS5kYXRhIDogSlNPTi5zdHJpbmdpZnkoc3RvcmUuZGF0YSlcbiAgICBjb25zdCBkYXRhU3RyID0gKHRoaXMuaXNPYmplY3RPckFycmF5KHN0cikpID8gKHN0b3JlLm9wdGlvbnMuZW5jcnlwdGVkKSA/IHRoaXMuZW5jcnlwdGlvbi5lbmNyeXB0KHN0ciwgdGhpcy5hcHAuYXBwSUQpIDogc3RvcmUuZGF0YSA6IHN0b3JlLmRhdGFcblxuICAgIGNvbnN0IGxvY2FsRGF0YSA9IChkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCkgPyBbeyBkYXRhOiBkYXRhU3RyLCBpZDogc2V0dGluZ3MuaWQgfV0gOiBbXVxuICAgIGNvbnN0IHNlc3Npb25EYXRhID0gKGRhdGFTdHIgJiYgc2V0dGluZ3Mub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuU0VTU0lPTikgPyBbeyBkYXRhOiBkYXRhU3RyLCBpZDogc2V0dGluZ3MuaWQgfV0gOiBbXVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9jYWxTdG9yZXM6IFsuLi5zdGF0ZS5sb2NhbFN0b3JlcywgLi4ubG9jYWxEYXRhXSxcbiAgICAgIHNlc3Npb25TdG9yZXM6IFsuLi5zdGF0ZS5zZXNzaW9uU3RvcmVzLCAuLi5zZXNzaW9uRGF0YV0sXG4gICAgICBzZXR0aW5nczogWy4uLnN0YXRlLnNldHRpbmdzLCAuLi5bc2V0dGluZ3NdXSxcbiAgICAgIH1cblxuICAgIH1cblxuICB9KVxuXG4gIHJlYWRvbmx5IGNyZWF0ZVN0b3JlID0gdGhpcy51cGRhdGVyKChzdGF0ZTogU3RhdGUsIHN0b3JlOiB7IGlkPzogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9uczogU2V0dGluZ09wdGlvbnMgfSk6IGFueSA9PiB7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IFN0b3JhZ2VPcHRpb24uYWRhcHQoc3RvcmUpXG4gICAgc2V0dGluZ3Mub3B0aW9ucyA9IHRoaXMub2JqZWN0TWVyZ2VyU2VydmljZS5tZXJnZVN0b3JhZ2VPcHRpb25zKHNldHRpbmdzLm9wdGlvbnMpXG4gICAgY29uc3QgZm91bmRTdG9yZSA9IHN0YXRlPy5zZXR0aW5ncy5zb21lKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKVxuXG4gICAgY29uc3QgZXhwaXJlcyA9IChzZXR0aW5ncy5vcHRpb25zPy5leHBpcmVzSW4pID8gdGhpcy51dGlscy5leHBpcmVzKHNldHRpbmdzLm9wdGlvbnM/LmV4cGlyZXNJbikgOiAwXG4gICAgaWYoc2V0dGluZ3Mub3B0aW9ucykgc2V0dGluZ3Mub3B0aW9ucy5leHBpcmVzID0gZXhwaXJlc1xuXG4gICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSlcblxuICAgIGlmKGZvdW5kU3RvcmUpIHtcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0gZWxzZSB7XG4gICAgICBpZighdGhpcy5pc09iamVjdE9yQXJyYXkoc3RvcmUuZGF0YSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdEYXRhIG11c3QgYmEgYW4gT2JqZWN0IG9yIEFycmF5JylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHN0b3JlLmRhdGEgPSAodGhpcy5pc1N0cmluZyhzdG9yZS5kYXRhKSkgPyBKU09OLnBhcnNlKHN0b3JlLmRhdGEpIDogc3RvcmUuZGF0YVxuICAgICAgY29uc3QgZGF0YVN0ciA9IChzdG9yZS5vcHRpb25zLmVuY3J5cHRlZCkgPyB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdG9yZS5kYXRhLCB0aGlzLmFwcC5hcHBJRCkgOiBzdG9yZS5kYXRhXG5cbiAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IChzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gKHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLlNFU1NJT04pID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvY2FsU3RvcmVzOiBbLi4uc3RhdGUubG9jYWxTdG9yZXMsIC4uLmxvY2FsRGF0YV0sXG4gICAgICAgIHNlc3Npb25TdG9yZXM6IFsuLi5zdGF0ZS5zZXNzaW9uU3RvcmVzLCAuLi5zZXNzaW9uRGF0YV0sXG4gICAgICAgIHNldHRpbmdzOiBbLi4uc3RhdGUuc2V0dGluZ3MsIC4uLltzZXR0aW5nc11dLFxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgfSlcblxuICByZWFkb25seSB1cGRhdGVTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSB9KTogYW55ID0+IHtcblxuICAgICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSlcblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBzdGF0ZS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKVxuXG4gICAgICBpZihzZXR0aW5ncykge1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlXG4gICAgICAgIGNvbnN0IGhhc1N0b3JlID0gdGhpcy5oYXNHbG9iYWxTdG9yYWdlKHR5cGUsIHNldHRpbmdzLmlkIHx8ICcnKVxuXG4gICAgICAgIGlmKCFoYXNTdG9yZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gc3VjaCBTdG9yZTogJHtzdG9yZS5uYW1lfWApXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgY29uc3QgZGF0YVN0ciA9IChzZXR0aW5ncy5vcHRpb25zPy5lbmNyeXB0ZWQpID8gdGhpcy5lbmNyeXB0aW9uLmVuY3J5cHQoc3RvcmUuZGF0YSwgdGhpcy5hcHAuYXBwSUQpIDogc3RvcmUuZGF0YVxuXG4gICAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IChkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCkgPyBbeyBkYXRhOiBkYXRhU3RyLCBpZDogc2V0dGluZ3MuaWQgfV0gOiBbXVxuICAgICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IChkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLlNFU1NJT04pID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cblxuICAgICAgICBzdGF0ZS5sb2NhbFN0b3JlcyA9IHN0YXRlLmxvY2FsU3RvcmVzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IHNldHRpbmdzLmlkKVxuICAgICAgICBzdGF0ZS5zZXNzaW9uU3RvcmVzID0gc3RhdGUuc2Vzc2lvblN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBzZXR0aW5ncy5pZClcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGxvY2FsU3RvcmVzOiBbLi4uc3RhdGUubG9jYWxTdG9yZXMsIC4uLmxvY2FsRGF0YV0sXG4gICAgICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnN0YXRlLnNlc3Npb25TdG9yZXMsIC4uLnNlc3Npb25EYXRhXSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlXG5cbiAgfSlcblxuICByZWFkb25seSBkZWxldGVTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBuYW1lOiBzdHJpbmcgfSk6IGFueSA9PiB7XG5cbiAgICBzdG9yZS5uYW1lID0gdGhpcy52YWxpZFN0b3JlTmFtZShzdG9yZS5uYW1lKVxuXG4gICAgY29uc3QgaWQgPSBzdGF0ZS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKT8uaWRcblxuICAgIGlmKGlkKSB7XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gc3RhdGUuc2V0dGluZ3MuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWQpXG4gICAgICBjb25zdCBsb2NhbERhdGEgPSBzdGF0ZS5sb2NhbFN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBpZClcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gc3RhdGUuc2Vzc2lvblN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBpZClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvY2FsU3RvcmVzOiBbLi4ubG9jYWxEYXRhXSxcbiAgICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnNlc3Npb25EYXRhXSxcbiAgICAgICAgc2V0dGluZ3M6IFsuLi5zZXR0aW5nc10sXG4gICAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5vIHN1Y2ggU3RvcmU6ICR7c3RvcmUubmFtZX1gKVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfVxuXG4gIH0pXG5cbiAgcmVzZXRTdG9yZSgpIHtcblxuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgbG9jYWxTdG9yZXM6IFtdLFxuICAgICAgc2Vzc2lvblN0b3JlczogW10sXG4gICAgICBzZXR0aW5nczogW10sXG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGUobmV3U3RhdGUpXG4gICAgICB0aGlzLnBlcnNpc3RTdGF0ZShuZXdTdGF0ZSlcblxuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0U3RhdGUoc3RhdGU6IFN0YXRlfG51bGwpIHtcblxuICAgIGlmKCFzdGF0ZSkgcmV0dXJuXG5cbiAgICBjb25zdCBzdHJMb2NhbCA9IEpTT04uc3RyaW5naWZ5KHN0YXRlLmxvY2FsU3RvcmVzKVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUsIHN0ckxvY2FsKVxuXG4gICAgY29uc3Qgc3RyU2Vzc2lvbiA9IEpTT04uc3RyaW5naWZ5KHN0YXRlLnNlc3Npb25TdG9yZXMpXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lLCBzdHJTZXNzaW9uKVxuXG4gICAgY29uc3Qgc2V0dGluZ3NTdHIgPSB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdGF0ZS5zZXR0aW5ncywgdGhpcy5hcHAuYXBwSUQpXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlU2V0dGluZ3NOYW1lLCBzZXR0aW5nc1N0ciB8fCAnJylcblxuICB9XG5cbiAgcHJpdmF0ZSBleHBpcmVkKHN0YXRlOiBTdGF0ZXxudWxsKSB7XG5cbiAgICBpZighc3RhdGUpIHJldHVybiBbXVxuICAgIHJldHVybiBzdGF0ZS5zZXR0aW5ncz8uZmlsdGVyKGl0ZW0gPT4gKGl0ZW0ub3B0aW9ucz8uZXhwaXJlcyB8fCAwKSA+IDAgJiYgdGhpcy51dGlscy5oYXNFeHBpcmVkKGl0ZW0ub3B0aW9ucz8uZXhwaXJlcyB8fCAwKSlcblxuICB9XG5cbiAgcmV0cmlldmVTdGF0ZSgpIHtcblxuICAgIGNvbnN0IHN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZVNldHRpbmdzTmFtZSlcblxuICAgIGNvbnN0IGxvY2FsU3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSlcbiAgICBjb25zdCBzZXNzaW9uU3RyID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lKVxuXG4gICAgY29uc3QgbG9jYWxEYXRhOiBTdG9yYWdlRGF0YVtdID0gKGxvY2FsU3RyKSA/IEpTT04ucGFyc2UobG9jYWxTdHIpIDogbnVsbFxuICAgIGNvbnN0IHNlc3Npb25EYXRhOiBTdG9yYWdlRGF0YVtdID0gKHNlc3Npb25TdHIpID8gSlNPTi5wYXJzZShzZXNzaW9uU3RyKSA6IG51bGxcblxuICAgIGNvbnN0IGRlY3J5cHRlZFN0ciA9IHN0ciA/IHRoaXMuZW5jcnlwdGlvbi5kZWNyeXB0KHN0ciwgdGhpcy5hcHAuYXBwSUQpIDogbnVsbFxuICAgIGNvbnN0IHNldHRpbmdzOiBTdG9yYWdlT3B0aW9uW10gPSAoZGVjcnlwdGVkU3RyICYmIGRlY3J5cHRlZFN0ciAhPT0gbnVsbCkgPyBKU09OLnBhcnNlKGRlY3J5cHRlZFN0cikgOiBbXVxuXG4gICAgc2V0dGluZ3MuZm9yRWFjaChzdG9yZSA9PiB7XG5cbiAgICAgIGNvbnN0IGV4cGlyZWQgPSAgKHN0b3JlLm9wdGlvbnM/LmV4cGlyZXMgfHwgMCkgPiAwICYmIHRoaXMudXRpbHMuaGFzRXhwaXJlZChzdG9yZS5vcHRpb25zPy5leHBpcmVzIHx8IDApXG5cbiAgICAgIGlmKCFleHBpcmVkKSB7XG5cbiAgICAgICAgY29uc3QgaGFzU3RvcmFnZSA9IHRoaXMuaGFzR2xvYmFsU3RvcmFnZShzdG9yZS5vcHRpb25zPy5zdG9yYWdlLCBzdG9yZS5pZCB8fCAnJylcblxuICAgICAgICBpZighaGFzU3RvcmFnZSkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlU3RvcmUoeyBpZDogc3RvcmUuaWQsIG5hbWU6IHN0b3JlLm5hbWUsIGRhdGE6IFtdLCBvcHRpb25zOiBTZXR0aW5nT3B0aW9ucy5hZGFwdChzdG9yZS5vcHRpb25zKX0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3RvcmVEYXRhID0gKHN0b3JlLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCkgPyBsb2NhbERhdGEuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IHN0b3JlLmlkKSA6IHNlc3Npb25EYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBzdG9yZS5pZClcbiAgICAgICAgICB0aGlzLnNldFN0b3JlKHsgaWQ6IHN0b3JlLmlkIHx8ICcnLCBuYW1lOiBzdG9yZS5uYW1lLCBkYXRhOiBzdG9yZURhdGE/LmRhdGEsIG9wdGlvbnM6IFNldHRpbmdPcHRpb25zLmFkYXB0KHN0b3JlLm9wdGlvbnMpIH0pXG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgfSlcblxuICAgIHRoaXMuc3RhdGVSZXRyaWV2ZWQgPSB0cnVlXG5cbiAgfVxuXG4gIHByaXZhdGUgaXNPYmplY3RPckFycmF5ID0gKG9iajogYW55KSA9PiB7XG5cbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9ICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JykgPyBvYmogOiBKU09OLnBhcnNlKG9iailcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgY29uc3QgYWxsU3RyaW5nc09yT2JqZWN0c09yTnVtYmVycyA9IHBhcnNlZC5ldmVyeShpdGVtID0+XG4gICAgICAgICAgdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwgfHxcbiAgICAgICAgICB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcidcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWxsU3RyaW5nc09yT2JqZWN0c09yTnVtYmVycztcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsO1xuXG4gIH1cblxuICBwcml2YXRlIGlzU3RyaW5nIChvYmo6IGFueSkge1xuICAgIHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IFN0cmluZ10nKVxuICB9XG5cbiAgcHJpdmF0ZSBmaXhBbmRQYXJzZUpTT04oanNvblN0cmluZzogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBmaXhlZFN0cmluZyA9IGpzb25TdHJpbmdcbiAgICAgIC5yZXBsYWNlKC8nL2csICdcIicpXG4gICAgICAucmVwbGFjZSgvKFt7LF1cXHMqKShcXHcrKVxccyo6L2csICckMVwiJDJcIjonKVxuICAgICAgLnJlcGxhY2UoLyxcXHMqKFxcfXxcXF0pL2csICckMScpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGZpeGVkU3RyaW5nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBKU09OOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZFN0b3JlTmFtZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBzdHJcbiAgICAgIC50b0xvd2VyQ2FzZSgpIC8vIENvbnZlcnQgdG8gbG93ZXJjYXNlXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnXycpIC8vIFJlcGxhY2Ugc3BhY2VzIHdpdGggdW5kZXJzY29yZXNcbiAgICAgIC5yZXBsYWNlKC9bXiAtfl0vZywgJycpOyAvLyBSZW1vdmUgbm9uLUFTQ0lJIGNoYXJhY3RlcnNcbiAgfVxuXG4gIHByaXZhdGUgaGFzR2xvYmFsU3RvcmFnZSh0eXBlOiBTdG9yYWdlVHlwZSA9IFN0b3JhZ2VUeXBlLkdMT0JBTCwgaWQ6IHN0cmluZykge1xuXG4gICAgY29uc3Qgc3RyRGF0YTogU3RvcmFnZU9wdGlvbltdID0gW11cblxuICAgIGlmKHR5cGUgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCkge1xuICAgICAgY29uc3Qgc3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSlcbiAgICAgIHN0ckRhdGEucHVzaCguLi4oc3RyID8gSlNPTi5wYXJzZShzdHIpIDogW10pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHIgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUpXG4gICAgICBzdHJEYXRhLnB1c2goLi4uKHN0ciA/IEpTT04ucGFyc2Uoc3RyKSA6IFtdKSlcbiAgICB9XG5cbiAgICBjb25zdCBmb3VuZCA9IHN0ckRhdGEuZmluZChzdG9yZSA9PiBzdG9yZS5pZCA9PT0gaWQpXG4gICAgcmV0dXJuIChmb3VuZCkgPyB0cnVlIDogZmFsc2VcblxuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5wZXJzaXN0ZW5jZSQudW5zdWJzY3JpYmUoKVxuICB9XG5cbn1cbiJdfQ==
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVsRyxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQVFyRSxNQUFNLE9BQU8sR0FBVTtJQUNyQixXQUFXLEVBQUUsRUFBRTtJQUNmLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLFFBQVEsRUFBRSxFQUFFO0NB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QUFROzswQkFBSSxNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBPcHRpb25hbCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZSB9IGZyb20gJ0BuZ3J4L2NvbXBvbmVudC1zdG9yZSc7XG5pbXBvcnQgeyB3aXRoTGF0ZXN0RnJvbSwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL3V0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ltbWV0cmljYWxFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL2VuY3J5cHRpb24vc3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlJztcblxuaW1wb3J0IHsgU3RvcmFnZU9wdGlvbiwgU3RvcmFnZVR5cGUgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL3NldHRpbmctb3B0aW9ucy5tb2RlbCc7XG5pbXBvcnQgeyBTdG9yYWdlRGF0YSB9IGZyb20gJy4vbW9kZWxzL3N0b3JhZ2UtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uVGVzdFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9lbmNyeXB0aW9uL2VuY3J5cHRpb24tdGVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvYXBwLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09ORklHX1NFVFRJTkdTX1RPS0VOIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbmZpZy10b2tlbi5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWdPcHRpb25zIH0gZnJvbSAnLi4vcmVxdWVzdC1tYW5hZ2VyLXNlcnZpY2VzJztcbmltcG9ydCB7IE9iamVjdE1lcmdlclNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9vYmplY3QtbWVyZ2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlIHtcbiAgbG9jYWxTdG9yZXM6IFN0b3JhZ2VEYXRhW11cbiAgc2Vzc2lvblN0b3JlczogU3RvcmFnZURhdGFbXVxuICBzZXR0aW5nczogU3RvcmFnZU9wdGlvbltdXG59XG5cbmNvbnN0IHN0b3JhZ2U6IFN0YXRlID0ge1xuICBsb2NhbFN0b3JlczogW10sXG4gIHNlc3Npb25TdG9yZXM6IFtdLFxuICBzZXR0aW5nczogW10sXG59O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZU1hbmFnZXJTZXJ2aWNlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8U3RhdGU+IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBzdG9yYWdlTmFtZSA9ICdzdG9yYWdlJ1xuICBzdG9yYWdlU2V0dGluZ3NOYW1lID0gJ2dsb2JhbC1zdG9yYWdlJ1xuICBkZWZhdWx0T3B0aW9ucyA9IFNldHRpbmdPcHRpb25zLmFkYXB0KClcblxuICBzdGF0ZVJldHJpZXZlZCA9IGZhbHNlXG4gIGVuY3J5cHRlZCA9IGZhbHNlXG5cbiAgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpXG4gIHV0aWxzID0gaW5qZWN0KFV0aWxzU2VydmljZSlcbiAgb2JqZWN0TWVyZ2VyU2VydmljZSA9IGluamVjdChPYmplY3RNZXJnZXJTZXJ2aWNlKVxuICBlbmNyeXB0aW9uID0gaW5qZWN0KFN5bW1ldHJpY2FsRW5jcnlwdGlvblNlcnZpY2UpXG4gIGVuY3J5cHRpb25UZXN0ID0gaW5qZWN0KEVuY3J5cHRpb25UZXN0U2VydmljZSlcblxuICAvLyBTRUxFQ1RPUlNcblxuICBwcml2YXRlIHJlYWRvbmx5IGRhdGEkID0gdGhpcy5zZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZSlcblxuICByZWFkb25seSBzdG9yZXMkID0gdGhpcy5zZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZS5zZXR0aW5ncylcblxuICByZWFkb25seSBzdG9yZUV4aXN0cyQgPSAoc3RvcmU6IHN0cmluZykgPT4gdGhpcy5zZWxlY3QoXG4gICAgdGhpcy5kYXRhJCxcbiAgICAoZGF0YSkgPT4gIGRhdGEuc2V0dGluZ3MuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gc3RvcmUpID8gdHJ1ZSA6IGZhbHNlXG4gIClcblxuICByZWFkb25seSBzdG9yZSQgPSAoc3RvcmU6IHN0cmluZykgPT4gdGhpcy5zZWxlY3QoXG4gICAgdGhpcy5kYXRhJCxcbiAgICAoZGF0YSkgPT4ge1xuICAgICAgc3RvcmUgPSBzdG9yZS50b0xvd2VyQ2FzZSgpXG4gICAgICBjb25zdCBmb3VuZFN0b3JlID0gZGF0YS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZSlcblxuICAgICAgaWYoZm91bmRTdG9yZSkge1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBTZXR0aW5nT3B0aW9ucy5hZGFwdChmb3VuZFN0b3JlLm9wdGlvbnMpXG5cbiAgICAgICAgY29uc3QgZm91bmQgPSBmb3VuZFN0b3JlLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTFxuICAgICAgICAgID8gZGF0YS5sb2NhbFN0b3Jlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZm91bmRTdG9yZS5pZCkgYXMgU3RvcmFnZURhdGFcbiAgICAgICAgICA6IGRhdGEuc2Vzc2lvblN0b3Jlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZm91bmRTdG9yZS5pZCkgYXMgU3RvcmFnZURhdGFcblxuICAgICAgICBpZighZm91bmQpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZVN0b3JlKHsgbmFtZTogc3RvcmUgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCF0aGlzLmFwcD8uYXBwSUQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIEFwcCBJRCBmb3VuZCAtIEFwcElkIG5vdCBQcm92aWRlZCcpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9yYWdlRGF0YSA9IChvcHRpb25zLmVuY3J5cHRlZCkgPyB0aGlzLmVuY3J5cHRpb24uZGVjcnlwdChmb3VuZC5kYXRhLCB0aGlzLmFwcC5hcHBJRCkgOiBmb3VuZC5kYXRhXG4gICAgICAgIHJldHVybiAodGhpcy5pc1N0cmluZyhzdG9yYWdlRGF0YSkpID8gSlNPTi5wYXJzZShzdG9yYWdlRGF0YSk6IHN0b3JhZ2VEYXRhXG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICB9XG4gIClcblxuICByZWFkb25seSBzZXR0aW5ncyQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiAoc3RhdGUpID8gc3RhdGUuc2V0dGluZ3MgOiBzdG9yYWdlLnNldHRpbmdzKVxuXG4gIHJlYWRvbmx5IHNldHRpbmckID0gKHN0b3JlOiBzdHJpbmcpID0+IHRoaXMuc2VsZWN0KFxuICAgIHRoaXMuZGF0YSQsXG4gICAgKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZFNldHRpbmcgPSBzdGF0ZS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZSlcbiAgICAgIHJldHVybiAoZm91bmRTZXR0aW5nKSA/IGZvdW5kU2V0dGluZyA6IG51bGxcbiAgICB9XG4gIClcblxuICBwZXJzaXN0ZW5jZSQgPSB0aGlzLmRhdGEkXG4gIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgaWYodGhpcy5zdGF0ZVJldHJpZXZlZCkgdGhpcy5wZXJzaXN0U3RhdGUoZGF0YSlcbiAgfSlcblxuICBzdGFydFRpbWVyKCkge1xuICAgIGNvbnN0IHRpbWVyJCA9IGludGVydmFsKDEwMDAgKiAzKS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5kYXRhJCksXG4gICAgICBtYXAoKFtfLCBzdGF0ZV0pID0+IHN0YXRlKSxcbiAgICAgIHRhcCgoc3RhdGUpID0+IHtcblxuICAgICAgICBjb25zdCBleHBpcmVkOiBTdG9yYWdlT3B0aW9uW10gPSB0aGlzLmV4cGlyZWQoc3RhdGUpID8gdGhpcy5leHBpcmVkKHN0YXRlKSA6IFtdXG5cbiAgICAgICAgaWYgKGV4cGlyZWQubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgY29uc3QgaWRzID0gZXhwaXJlZC5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpXG5cbiAgICAgICAgICBjb25zdCB1cGRhdGVkU3RhdGU6IFN0YXRlID0ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBsb2NhbFN0b3Jlczogc3RhdGUubG9jYWxTdG9yZXMuZmlsdGVyKChpdGVtKSA9PiAhaWRzLmluY2x1ZGVzKGl0ZW0uaWQpKSxcbiAgICAgICAgICAgIHNlc3Npb25TdG9yZXM6IHN0YXRlLnNlc3Npb25TdG9yZXMuZmlsdGVyKChpdGVtKSA9PiAhaWRzLmluY2x1ZGVzKGl0ZW0uaWQpKSxcbiAgICAgICAgICAgIHNldHRpbmdzOiBzdGF0ZS5zZXR0aW5ncy5maWx0ZXIoKGl0ZW0pID0+ICFpZHMuaW5jbHVkZXMoaXRlbS5pZCkpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnBlcnNpc3RTdGF0ZSh1cGRhdGVkU3RhdGUpXG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh1cGRhdGVkU3RhdGUpXG5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGltZXIkLnN1YnNjcmliZSgpXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdXBkYXRlZFN0YXRlOiBTdGF0ZSkgPT4gKHtcbiAgICAuLi51cGRhdGVkU3RhdGUsXG4gIH0pKVxuXG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChDT05GSUdfU0VUVElOR1NfVE9LRU4pIHByaXZhdGUgY29uZmlnT3B0aW9ucz86IENvbmZpZ09wdGlvbnMpIHtcblxuICAgIHN1cGVyKHN0b3JhZ2UpXG5cbiAgICB0aGlzLnN0b3JhZ2VOYW1lID0gY29uZmlnT3B0aW9ucz8uTG9jYWxTdG9yYWdlT3B0aW9ucz8uc3RvcmFnZU5hbWUgfHwgdGhpcy5zdG9yYWdlTmFtZVxuICAgIHRoaXMuc3RvcmFnZVNldHRpbmdzTmFtZSA9IGNvbmZpZ09wdGlvbnM/LkxvY2FsU3RvcmFnZU9wdGlvbnM/LnN0b3JhZ2VTZXR0aW5nc05hbWUgfHwgdGhpcy5zdG9yYWdlU2V0dGluZ3NOYW1lXG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGNvbmZpZ09wdGlvbnM/LkxvY2FsU3RvcmFnZU9wdGlvbnM/Lm9wdGlvbnMgfHwgdGhpcy5kZWZhdWx0T3B0aW9uc1xuXG4gICAgdGhpcy5yZXRyaWV2ZVN0YXRlKClcbiAgICB0aGlzLnN0YXJ0VGltZXIoKVxuICB9XG5cbiAgcmVhZG9ubHkgc2V0U3RvcmUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBTdGF0ZSwgc3RvcmU6IHsgaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCBkYXRhOiBhbnksIG9wdGlvbnM6IFNldHRpbmdPcHRpb25zIH0pOiBhbnkgPT4ge1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBTdG9yYWdlT3B0aW9uLmFkYXB0KHN0b3JlKVxuICAgIHN0b3JlLm5hbWUgPSBzdG9yZS5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICBzZXR0aW5ncy5vcHRpb25zID0gdGhpcy5vYmplY3RNZXJnZXJTZXJ2aWNlLm1lcmdlU3RvcmFnZU9wdGlvbnMoc2V0dGluZ3Mub3B0aW9ucylcblxuICAgIGNvbnN0IHR5cGUgPSBzdG9yZS5vcHRpb25zLnN0b3JhZ2VcbiAgICBjb25zdCBoYXNTdG9yZSA9IHRoaXMuaGFzR2xvYmFsU3RvcmFnZSh0eXBlLCBzdG9yZS5pZClcblxuICAgIHN0b3JlLm5hbWUgPSB0aGlzLnZhbGlkU3RvcmVOYW1lKHN0b3JlLm5hbWUpXG5cbiAgICBpZighaGFzU3RvcmUpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTm8gc3VjaCBTdG9yZTogJHtzdG9yZS5uYW1lfWApXG4gICAgICByZXR1cm4gc3RhdGVcbiAgICB9IGVsc2Uge1xuXG4gICAgY29uc3Qgc3RyID0gdGhpcy5lbmNyeXB0aW9uVGVzdC5pc0VuY3J5cHRlZChzdG9yZS5kYXRhKSA/IHN0b3JlLmRhdGEgOiBKU09OLnN0cmluZ2lmeShzdG9yZS5kYXRhKVxuICAgIGNvbnN0IGRhdGFTdHIgPSAodGhpcy5pc09iamVjdE9yQXJyYXkoc3RyKSkgPyAoc3RvcmUub3B0aW9ucy5lbmNyeXB0ZWQpID8gdGhpcy5lbmNyeXB0aW9uLmVuY3J5cHQoc3RyLCB0aGlzLmFwcC5hcHBJRCkgOiBzdG9yZS5kYXRhIDogc3RvcmUuZGF0YVxuXG4gICAgY29uc3QgbG9jYWxEYXRhID0gKGRhdGFTdHIgJiYgc2V0dGluZ3Mub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuR0xPQkFMKSA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XSA6IFtdXG4gICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSAoZGF0YVN0ciAmJiBzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5TRVNTSU9OKSA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XSA6IFtdXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2NhbFN0b3JlczogWy4uLnN0YXRlLmxvY2FsU3RvcmVzLCAuLi5sb2NhbERhdGFdLFxuICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnN0YXRlLnNlc3Npb25TdG9yZXMsIC4uLnNlc3Npb25EYXRhXSxcbiAgICAgIHNldHRpbmdzOiBbLi4uc3RhdGUuc2V0dGluZ3MsIC4uLltzZXR0aW5nc11dLFxuICAgICAgfVxuXG4gICAgfVxuXG4gIH0pXG5cbiAgcmVhZG9ubHkgY3JlYXRlU3RvcmUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBTdGF0ZSwgc3RvcmU6IHsgaWQ/OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZGF0YTogYW55LCBvcHRpb25zOiBTZXR0aW5nT3B0aW9ucyB9KTogYW55ID0+IHtcblxuICAgIHN0b3JlLm5hbWUgPSBzdG9yZS5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICBzdG9yZS5vcHRpb25zID0gdGhpcy5vYmplY3RNZXJnZXJTZXJ2aWNlLm1lcmdlU3RvcmFnZU9wdGlvbnMoc3RvcmUub3B0aW9ucylcbiAgICBjb25zdCBzZXR0aW5ncyA9IFN0b3JhZ2VPcHRpb24uYWRhcHQoc3RvcmUpXG4gICAgc2V0dGluZ3Mub3B0aW9ucyA9IHRoaXMub2JqZWN0TWVyZ2VyU2VydmljZS5tZXJnZVN0b3JhZ2VPcHRpb25zKHNldHRpbmdzLm9wdGlvbnMpXG4gICAgY29uc3QgZm91bmRTdG9yZSA9IHN0YXRlPy5zZXR0aW5ncy5zb21lKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKVxuXG4gICAgY29uc3QgZXhwaXJlcyA9IChzZXR0aW5ncy5vcHRpb25zPy5leHBpcmVzSW4pID8gdGhpcy51dGlscy5leHBpcmVzKHNldHRpbmdzLm9wdGlvbnM/LmV4cGlyZXNJbikgOiAwXG4gICAgaWYoc2V0dGluZ3Mub3B0aW9ucykgc2V0dGluZ3Mub3B0aW9ucy5leHBpcmVzID0gZXhwaXJlc1xuXG4gICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSlcblxuICAgIGlmKGZvdW5kU3RvcmUpIHtcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0gZWxzZSB7XG4gICAgICBpZighdGhpcy5pc09iamVjdE9yQXJyYXkoc3RvcmUuZGF0YSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdEYXRhIG11c3QgYmEgYW4gT2JqZWN0IG9yIEFycmF5JylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHN0b3JlLmRhdGEgPSAodGhpcy5pc1N0cmluZyhzdG9yZS5kYXRhKSkgPyBKU09OLnBhcnNlKHN0b3JlLmRhdGEpIDogc3RvcmUuZGF0YVxuICAgICAgY29uc3QgZGF0YVN0ciA9IChzdG9yZS5vcHRpb25zLmVuY3J5cHRlZCkgPyB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdG9yZS5kYXRhLCB0aGlzLmFwcC5hcHBJRCkgOiBzdG9yZS5kYXRhXG5cbiAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IChzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gKHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLlNFU1NJT04pID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvY2FsU3RvcmVzOiBbLi4uc3RhdGUubG9jYWxTdG9yZXMsIC4uLmxvY2FsRGF0YV0sXG4gICAgICAgIHNlc3Npb25TdG9yZXM6IFsuLi5zdGF0ZS5zZXNzaW9uU3RvcmVzLCAuLi5zZXNzaW9uRGF0YV0sXG4gICAgICAgIHNldHRpbmdzOiBbLi4uc3RhdGUuc2V0dGluZ3MsIC4uLltzZXR0aW5nc11dLFxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgfSlcblxuICByZWFkb25seSB1cGRhdGVTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSB9KTogYW55ID0+IHtcblxuICAgIHN0b3JlLm5hbWUgPSBzdG9yZS5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICBzdG9yZS5uYW1lID0gdGhpcy52YWxpZFN0b3JlTmFtZShzdG9yZS5uYW1lKVxuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBzdGF0ZS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKVxuXG4gICAgaWYoc2V0dGluZ3MpIHtcblxuICAgICAgY29uc3QgdHlwZSA9IHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2VcbiAgICAgIGNvbnN0IGhhc1N0b3JlID0gdGhpcy5oYXNHbG9iYWxTdG9yYWdlKHR5cGUsIHNldHRpbmdzLmlkIHx8ICcnKVxuXG4gICAgICBpZighaGFzU3RvcmUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBObyBzdWNoIFN0b3JlOiAke3N0b3JlLm5hbWV9YClcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgIGNvbnN0IGRhdGFTdHIgPSAoc2V0dGluZ3Mub3B0aW9ucz8uZW5jcnlwdGVkKSA/IHRoaXMuZW5jcnlwdGlvbi5lbmNyeXB0KHN0b3JlLmRhdGEsIHRoaXMuYXBwLmFwcElEKSA6IHN0b3JlLmRhdGFcblxuICAgICAgY29uc3QgbG9jYWxEYXRhID0gKGRhdGFTdHIgJiYgc2V0dGluZ3Mub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuR0xPQkFMKSA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XSA6IFtdXG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IChkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLlNFU1NJT04pID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cblxuICAgICAgc3RhdGUubG9jYWxTdG9yZXMgPSBzdGF0ZS5sb2NhbFN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBzZXR0aW5ncy5pZClcbiAgICAgIHN0YXRlLnNlc3Npb25TdG9yZXMgPSBzdGF0ZS5zZXNzaW9uU3RvcmVzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IHNldHRpbmdzLmlkKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9jYWxTdG9yZXM6IFsuLi5zdGF0ZS5sb2NhbFN0b3JlcywgLi4ubG9jYWxEYXRhXSxcbiAgICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnN0YXRlLnNlc3Npb25TdG9yZXMsIC4uLnNlc3Npb25EYXRhXSxcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlXG5cbiAgfSlcblxuICByZWFkb25seSBkZWxldGVTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBuYW1lOiBzdHJpbmcgfSk6IGFueSA9PiB7XG5cbiAgICBzdG9yZS5uYW1lID0gc3RvcmUubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSlcblxuICAgIGNvbnN0IGlkID0gc3RhdGUuc2V0dGluZ3MuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gc3RvcmUubmFtZSk/LmlkXG5cbiAgICBpZihpZCkge1xuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHN0YXRlLnNldHRpbmdzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGlkKVxuICAgICAgY29uc3QgbG9jYWxEYXRhID0gc3RhdGUubG9jYWxTdG9yZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWQpXG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IHN0YXRlLnNlc3Npb25TdG9yZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWQpXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2NhbFN0b3JlczogWy4uLmxvY2FsRGF0YV0sXG4gICAgICAgIHNlc3Npb25TdG9yZXM6IFsuLi5zZXNzaW9uRGF0YV0sXG4gICAgICAgIHNldHRpbmdzOiBbLi4uc2V0dGluZ3NdLFxuICAgICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKGBObyBzdWNoIFN0b3JlOiAke3N0b3JlLm5hbWV9YClcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH1cblxuICB9KVxuXG4gIHJlc2V0U3RvcmUoKSB7XG5cbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGxvY2FsU3RvcmVzOiBbXSxcbiAgICAgIHNlc3Npb25TdG9yZXM6IFtdLFxuICAgICAgc2V0dGluZ3M6IFtdLFxuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKG5ld1N0YXRlKVxuICAgICAgdGhpcy5wZXJzaXN0U3RhdGUobmV3U3RhdGUpXG5cbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdFN0YXRlKHN0YXRlOiBTdGF0ZXxudWxsKSB7XG5cbiAgICBpZighc3RhdGUpIHJldHVyblxuXG4gICAgY29uc3Qgc3RyTG9jYWwgPSBKU09OLnN0cmluZ2lmeShzdGF0ZS5sb2NhbFN0b3JlcylcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lLCBzdHJMb2NhbClcblxuICAgIGNvbnN0IHN0clNlc3Npb24gPSBKU09OLnN0cmluZ2lmeShzdGF0ZS5zZXNzaW9uU3RvcmVzKVxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSwgc3RyU2Vzc2lvbilcblxuICAgIGNvbnN0IHNldHRpbmdzU3RyID0gdGhpcy5lbmNyeXB0aW9uLmVuY3J5cHQoc3RhdGUuc2V0dGluZ3MsIHRoaXMuYXBwLmFwcElEKVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZVNldHRpbmdzTmFtZSwgc2V0dGluZ3NTdHIgfHwgJycpXG5cbiAgfVxuXG4gIHByaXZhdGUgZXhwaXJlZChzdGF0ZTogU3RhdGV8bnVsbCkge1xuXG4gICAgaWYoIXN0YXRlKSByZXR1cm4gW11cbiAgICByZXR1cm4gc3RhdGUuc2V0dGluZ3M/LmZpbHRlcihpdGVtID0+IChpdGVtLm9wdGlvbnM/LmV4cGlyZXMgfHwgMCkgPiAwICYmIHRoaXMudXRpbHMuaGFzRXhwaXJlZChpdGVtLm9wdGlvbnM/LmV4cGlyZXMgfHwgMCkpXG5cbiAgfVxuXG4gIHJldHJpZXZlU3RhdGUoKSB7XG5cbiAgICBjb25zdCBzdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VTZXR0aW5nc05hbWUpXG5cbiAgICBjb25zdCBsb2NhbFN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUpXG4gICAgY29uc3Qgc2Vzc2lvblN0ciA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSlcblxuICAgIGNvbnN0IGxvY2FsRGF0YTogU3RvcmFnZURhdGFbXSA9IChsb2NhbFN0cikgPyBKU09OLnBhcnNlKGxvY2FsU3RyKSA6IG51bGxcbiAgICBjb25zdCBzZXNzaW9uRGF0YTogU3RvcmFnZURhdGFbXSA9IChzZXNzaW9uU3RyKSA/IEpTT04ucGFyc2Uoc2Vzc2lvblN0cikgOiBudWxsXG5cbiAgICBjb25zdCBkZWNyeXB0ZWRTdHIgPSBzdHIgPyB0aGlzLmVuY3J5cHRpb24uZGVjcnlwdChzdHIsIHRoaXMuYXBwLmFwcElEKSA6IG51bGxcbiAgICBjb25zdCBzZXR0aW5nczogU3RvcmFnZU9wdGlvbltdID0gKGRlY3J5cHRlZFN0ciAmJiBkZWNyeXB0ZWRTdHIgIT09IG51bGwpID8gSlNPTi5wYXJzZShkZWNyeXB0ZWRTdHIpIDogW11cblxuICAgIHNldHRpbmdzLmZvckVhY2goc3RvcmUgPT4ge1xuXG4gICAgICBjb25zdCBleHBpcmVkID0gIChzdG9yZS5vcHRpb25zPy5leHBpcmVzIHx8IDApID4gMCAmJiB0aGlzLnV0aWxzLmhhc0V4cGlyZWQoc3RvcmUub3B0aW9ucz8uZXhwaXJlcyB8fCAwKVxuXG4gICAgICBpZighZXhwaXJlZCkge1xuXG4gICAgICAgIGNvbnN0IGhhc1N0b3JhZ2UgPSB0aGlzLmhhc0dsb2JhbFN0b3JhZ2Uoc3RvcmUub3B0aW9ucz8uc3RvcmFnZSwgc3RvcmUuaWQgfHwgJycpXG5cbiAgICAgICAgaWYoIWhhc1N0b3JhZ2UpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVN0b3JlKHsgaWQ6IHN0b3JlLmlkLCBuYW1lOiBzdG9yZS5uYW1lLCBkYXRhOiBbXSwgb3B0aW9uczogU2V0dGluZ09wdGlvbnMuYWRhcHQoc3RvcmUub3B0aW9ucyl9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN0b3JlRGF0YSA9IChzdG9yZS5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpID8gbG9jYWxEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBzdG9yZS5pZCkgOiBzZXNzaW9uRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gc3RvcmUuaWQpXG4gICAgICAgICAgdGhpcy5zZXRTdG9yZSh7IGlkOiBzdG9yZS5pZCB8fCAnJywgbmFtZTogc3RvcmUubmFtZSwgZGF0YTogc3RvcmVEYXRhPy5kYXRhLCBvcHRpb25zOiBTZXR0aW5nT3B0aW9ucy5hZGFwdChzdG9yZS5vcHRpb25zKSB9KVxuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgIH0pXG5cbiAgICB0aGlzLnN0YXRlUmV0cmlldmVkID0gdHJ1ZVxuXG4gIH1cblxuICBwcml2YXRlIGlzT2JqZWN0T3JBcnJheSA9IChvYmo6IGFueSkgPT4ge1xuXG4gICAgbGV0IHBhcnNlZDtcblxuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpID8gb2JqIDogSlNPTi5wYXJzZShvYmopXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgIGNvbnN0IGFsbFN0cmluZ3NPck9iamVjdHNPck51bWJlcnMgPSBwYXJzZWQuZXZlcnkoaXRlbSA9PlxuICAgICAgICAgIHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsIHx8XG4gICAgICAgICAgdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFsbFN0cmluZ3NPck9iamVjdHNPck51bWJlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnICYmIHBhcnNlZCAhPT0gbnVsbDtcblxuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmluZyAob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBTdHJpbmddJylcbiAgfVxuXG4gIHByaXZhdGUgZml4QW5kUGFyc2VKU09OKGpzb25TdHJpbmc6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgZml4ZWRTdHJpbmcgPSBqc29uU3RyaW5nXG4gICAgICAucmVwbGFjZSgvJy9nLCAnXCInKVxuICAgICAgLnJlcGxhY2UoLyhbeyxdXFxzKikoXFx3KylcXHMqOi9nLCAnJDFcIiQyXCI6JylcbiAgICAgIC5yZXBsYWNlKC8sXFxzKihcXH18XFxdKS9nLCAnJDEnKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShmaXhlZFN0cmluZyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcGFyc2UgSlNPTjogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRTdG9yZU5hbWUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAudG9Mb3dlckNhc2UoKSAvLyBDb252ZXJ0IHRvIGxvd2VyY2FzZVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJ18nKSAvLyBSZXBsYWNlIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzXG4gICAgICAucmVwbGFjZSgvW14gLX5dL2csICcnKTsgLy8gUmVtb3ZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzXG4gIH1cblxuICBwcml2YXRlIGhhc0dsb2JhbFN0b3JhZ2UodHlwZTogU3RvcmFnZVR5cGUgPSBTdG9yYWdlVHlwZS5HTE9CQUwsIGlkOiBzdHJpbmcpIHtcblxuICAgIGNvbnN0IHN0ckRhdGE6IFN0b3JhZ2VPcHRpb25bXSA9IFtdXG5cbiAgICBpZih0eXBlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpIHtcbiAgICAgIGNvbnN0IHN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUpXG4gICAgICBzdHJEYXRhLnB1c2goLi4uKHN0ciA/IEpTT04ucGFyc2Uoc3RyKSA6IFtdKSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RyID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lKVxuICAgICAgc3RyRGF0YS5wdXNoKC4uLihzdHIgPyBKU09OLnBhcnNlKHN0cikgOiBbXSkpXG4gICAgfVxuXG4gICAgY29uc3QgZm91bmQgPSBzdHJEYXRhLmZpbmQoc3RvcmUgPT4gc3RvcmUuaWQgPT09IGlkKVxuICAgIHJldHVybiAoZm91bmQpID8gdHJ1ZSA6IGZhbHNlXG5cbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucGVyc2lzdGVuY2UkLnVuc3Vic2NyaWJlKClcbiAgfVxuXG59XG4iXX0=
@@ -1,12 +1,13 @@
1
1
  import { SettingOptions } from "./setting-options.model";
2
2
  export class StorageOption {
3
- constructor(id, name = 'untitled', options) {
3
+ constructor(id, name = 'untitled', data, options) {
4
4
  this.id = id;
5
5
  this.name = name;
6
+ this.data = data;
6
7
  this.options = options;
7
8
  }
8
9
  static adapt(item) {
9
- return new StorageOption((item?.id) ? item.id : crypto.randomUUID(), item?.name, (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt());
10
+ return new StorageOption((item?.id) ? item.id : crypto.randomUUID(), (item?.name) ? item.name.toLowerCase() : 'untitled', item?.data, (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt());
10
11
  }
11
12
  }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1vcHRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL21vZGVscy9zdG9yYWdlLW9wdGlvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFReEQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFDUyxFQUFXLEVBQ1gsT0FBTyxVQUFVLEVBQ2pCLE9BQXdCO1FBRnhCLE9BQUUsR0FBRixFQUFFLENBQVM7UUFDWCxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQWlCO0lBQzlCLENBQUM7SUFFSixNQUFNLENBQUMsS0FBSyxDQUFDLElBQVU7UUFFckIsT0FBTyxJQUFJLGFBQWEsQ0FDdEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFDMUMsSUFBSSxFQUFFLElBQUksRUFDVixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FDOUUsQ0FBQTtJQUVILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4vc2V0dGluZy1vcHRpb25zLm1vZGVsXCJcblxuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlT3B0aW9uSW50ZXJmYWNlIHtcbiAgaWQ/OiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIG9wdGlvbnM/OiBTZXR0aW5nT3B0aW9uc1xufVxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZU9wdGlvbiBpbXBsZW1lbnRzIFN0b3JhZ2VPcHRpb25JbnRlcmZhY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpZD86IHN0cmluZyxcbiAgICBwdWJsaWMgbmFtZSA9ICd1bnRpdGxlZCcsXG4gICAgcHVibGljIG9wdGlvbnM/OiBTZXR0aW5nT3B0aW9ucyxcbiAgKSB7fVxuXG4gIHN0YXRpYyBhZGFwdChpdGVtPzogYW55KTogU3RvcmFnZU9wdGlvbiB7XG5cbiAgICByZXR1cm4gbmV3IFN0b3JhZ2VPcHRpb24oXG4gICAgICAoaXRlbT8uaWQpID8gaXRlbS5pZCA6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICBpdGVtPy5uYW1lLFxuICAgICAgKGl0ZW0/Lm9wdGlvbnMpID8gU2V0dGluZ09wdGlvbnMuYWRhcHQoaXRlbS5vcHRpb25zKSA6IFNldHRpbmdPcHRpb25zLmFkYXB0KCksXG4gICAgKVxuXG4gIH1cblxufVxuXG5cbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1vcHRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL21vZGVscy9zdG9yYWdlLW9wdGlvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFTeEQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFDUyxFQUFXLEVBQ1gsT0FBZSxVQUFVLEVBQ3pCLElBQVUsRUFDVixPQUF3QjtRQUh4QixPQUFFLEdBQUYsRUFBRSxDQUFTO1FBQ1gsU0FBSSxHQUFKLElBQUksQ0FBcUI7UUFDekIsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUNWLFlBQU8sR0FBUCxPQUFPLENBQWlCO0lBQzlCLENBQUM7SUFFSixNQUFNLENBQUMsS0FBSyxDQUFDLElBQVU7UUFFckIsT0FBTyxJQUFJLGFBQWEsQ0FDdEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFDMUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFDbkQsSUFBSSxFQUFFLElBQUksRUFDVixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FDOUUsQ0FBQTtJQUVILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4vc2V0dGluZy1vcHRpb25zLm1vZGVsXCJcblxuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlT3B0aW9uSW50ZXJmYWNlIHtcbiAgaWQ/OiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGRhdGE/OiBhbnlcbiAgb3B0aW9ucz86IFNldHRpbmdPcHRpb25zXG59XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlT3B0aW9uIGltcGxlbWVudHMgU3RvcmFnZU9wdGlvbkludGVyZmFjZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGlkPzogc3RyaW5nLFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSAndW50aXRsZWQnLFxuICAgIHB1YmxpYyBkYXRhPzogYW55LFxuICAgIHB1YmxpYyBvcHRpb25zPzogU2V0dGluZ09wdGlvbnMsXG4gICkge31cblxuICBzdGF0aWMgYWRhcHQoaXRlbT86IGFueSk6IFN0b3JhZ2VPcHRpb24ge1xuXG4gICAgcmV0dXJuIG5ldyBTdG9yYWdlT3B0aW9uKFxuICAgICAgKGl0ZW0/LmlkKSA/IGl0ZW0uaWQgOiBjcnlwdG8ucmFuZG9tVVVJRCgpLFxuICAgICAgKGl0ZW0/Lm5hbWUpID8gaXRlbS5uYW1lLnRvTG93ZXJDYXNlKCkgOiAndW50aXRsZWQnLFxuICAgICAgaXRlbT8uZGF0YSxcbiAgICAgIChpdGVtPy5vcHRpb25zKSA/IFNldHRpbmdPcHRpb25zLmFkYXB0KGl0ZW0ub3B0aW9ucykgOiBTZXR0aW5nT3B0aW9ucy5hZGFwdCgpLFxuICAgIClcblxuICB9XG5cbn1cblxuXG4iXX0=