@antglobal/rlog-sdk 0.0.1755855517-dev.9 → 1.0.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/README.md +192 -432
- package/dist/esm/index.d.ts +14 -41
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +92 -76
- package/dist/esm/lib/api.d.ts +10 -0
- package/dist/esm/lib/api.d.ts.map +1 -1
- package/dist/esm/lib/api.js +58 -35
- package/dist/esm/lib/config.d.ts +13 -6
- package/dist/esm/lib/config.d.ts.map +1 -1
- package/dist/esm/lib/config.js +61 -33
- package/dist/esm/lib/constants.d.ts +89 -0
- package/dist/esm/lib/constants.d.ts.map +1 -0
- package/dist/esm/lib/constants.js +145 -0
- package/dist/esm/lib/drive/indexeddb-adapt.d.ts +12 -0
- package/dist/esm/lib/drive/indexeddb-adapt.d.ts.map +1 -1
- package/dist/esm/lib/drive/indexeddb-adapt.js +190 -20
- package/dist/esm/lib/drive/localstorage-adapt.d.ts +12 -0
- package/dist/esm/lib/drive/localstorage-adapt.d.ts.map +1 -1
- package/dist/esm/lib/drive/localstorage-adapt.js +179 -36
- package/dist/esm/lib/drive/memory-adapt.d.ts +10 -2
- package/dist/esm/lib/drive/memory-adapt.d.ts.map +1 -1
- package/dist/esm/lib/drive/memory-adapt.js +118 -26
- package/dist/esm/lib/drive/safe-storage.d.ts +24 -0
- package/dist/esm/lib/drive/safe-storage.d.ts.map +1 -0
- package/dist/esm/lib/drive/safe-storage.js +96 -0
- package/dist/esm/lib/drive/storage-interface.d.ts +20 -0
- package/dist/esm/lib/drive/storage-interface.d.ts.map +1 -1
- package/dist/esm/lib/error-trigger.d.ts +73 -0
- package/dist/esm/lib/error-trigger.d.ts.map +1 -0
- package/dist/esm/lib/error-trigger.js +162 -0
- package/dist/esm/lib/error.d.ts +9 -0
- package/dist/esm/lib/error.d.ts.map +1 -1
- package/dist/esm/lib/error.js +70 -118
- package/dist/esm/lib/init.d.ts +0 -4
- package/dist/esm/lib/init.d.ts.map +1 -1
- package/dist/esm/lib/init.js +148 -47
- package/dist/esm/lib/logger.d.ts +27 -0
- package/dist/esm/lib/logger.d.ts.map +1 -0
- package/dist/esm/lib/logger.js +79 -0
- package/dist/esm/lib/net.d.ts +11 -0
- package/dist/esm/lib/net.d.ts.map +1 -1
- package/dist/esm/lib/net.js +264 -119
- package/dist/esm/lib/request.d.ts.map +1 -1
- package/dist/esm/lib/request.js +2 -2
- package/dist/esm/lib/router-monitor.d.ts.map +1 -1
- package/dist/esm/lib/router-monitor.js +135 -49
- package/dist/esm/lib/rrweb.d.ts.map +1 -1
- package/dist/esm/lib/rrweb.js +31 -24
- package/dist/esm/lib/storage-manager.d.ts +12 -0
- package/dist/esm/lib/storage-manager.d.ts.map +1 -1
- package/dist/esm/lib/storage-manager.js +129 -46
- package/dist/esm/lib/upload-worker-manager.d.ts +47 -0
- package/dist/esm/lib/upload-worker-manager.d.ts.map +1 -0
- package/dist/esm/lib/upload-worker-manager.js +559 -0
- package/dist/esm/lib/upload-worker.d.ts +58 -0
- package/dist/esm/lib/upload-worker.d.ts.map +1 -0
- package/dist/esm/lib/upload-worker.js +28 -0
- package/dist/esm/lib/uploader.d.ts +43 -0
- package/dist/esm/lib/uploader.d.ts.map +1 -1
- package/dist/esm/lib/uploader.js +464 -102
- package/dist/esm/lib/utils.d.ts +75 -0
- package/dist/esm/lib/utils.d.ts.map +1 -1
- package/dist/esm/lib/utils.js +268 -5
- package/dist/lib/index.d.ts +14 -41
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +81 -63
- package/dist/lib/lib/api.d.ts +10 -0
- package/dist/lib/lib/api.d.ts.map +1 -1
- package/dist/lib/lib/api.js +59 -35
- package/dist/lib/lib/config.d.ts +13 -6
- package/dist/lib/lib/config.d.ts.map +1 -1
- package/dist/lib/lib/config.js +63 -33
- package/dist/lib/lib/constants.d.ts +89 -0
- package/dist/lib/lib/constants.d.ts.map +1 -0
- package/dist/lib/lib/constants.js +151 -0
- package/dist/lib/lib/drive/indexeddb-adapt.d.ts +12 -0
- package/dist/lib/lib/drive/indexeddb-adapt.d.ts.map +1 -1
- package/dist/lib/lib/drive/indexeddb-adapt.js +191 -19
- package/dist/lib/lib/drive/localstorage-adapt.d.ts +12 -0
- package/dist/lib/lib/drive/localstorage-adapt.d.ts.map +1 -1
- package/dist/lib/lib/drive/localstorage-adapt.js +179 -36
- package/dist/lib/lib/drive/memory-adapt.d.ts +10 -2
- package/dist/lib/lib/drive/memory-adapt.d.ts.map +1 -1
- package/dist/lib/lib/drive/memory-adapt.js +117 -26
- package/dist/lib/lib/drive/safe-storage.d.ts +24 -0
- package/dist/lib/lib/drive/safe-storage.d.ts.map +1 -0
- package/dist/lib/lib/drive/safe-storage.js +102 -0
- package/dist/lib/lib/drive/storage-interface.d.ts +20 -0
- package/dist/lib/lib/drive/storage-interface.d.ts.map +1 -1
- package/dist/lib/lib/error-trigger.d.ts +73 -0
- package/dist/lib/lib/error-trigger.d.ts.map +1 -0
- package/dist/lib/lib/error-trigger.js +167 -0
- package/dist/lib/lib/error.d.ts +9 -0
- package/dist/lib/lib/error.d.ts.map +1 -1
- package/dist/lib/lib/error.js +73 -118
- package/dist/lib/lib/init.d.ts +0 -4
- package/dist/lib/lib/init.d.ts.map +1 -1
- package/dist/lib/lib/init.js +144 -43
- package/dist/lib/lib/logger.d.ts +27 -0
- package/dist/lib/lib/logger.d.ts.map +1 -0
- package/dist/lib/lib/logger.js +84 -0
- package/dist/lib/lib/net.d.ts +11 -0
- package/dist/lib/lib/net.d.ts.map +1 -1
- package/dist/lib/lib/net.js +268 -120
- package/dist/lib/lib/request.d.ts.map +1 -1
- package/dist/lib/lib/request.js +3 -3
- package/dist/lib/lib/router-monitor.d.ts.map +1 -1
- package/dist/lib/lib/router-monitor.js +136 -49
- package/dist/lib/lib/rrweb.d.ts.map +1 -1
- package/dist/lib/lib/rrweb.js +31 -23
- package/dist/lib/lib/storage-manager.d.ts +12 -0
- package/dist/lib/lib/storage-manager.d.ts.map +1 -1
- package/dist/lib/lib/storage-manager.js +130 -46
- package/dist/lib/lib/upload-worker-manager.d.ts +47 -0
- package/dist/lib/lib/upload-worker-manager.d.ts.map +1 -0
- package/dist/lib/lib/upload-worker-manager.js +570 -0
- package/dist/lib/lib/upload-worker.d.ts +58 -0
- package/dist/lib/lib/upload-worker.d.ts.map +1 -0
- package/dist/lib/lib/upload-worker.js +33 -0
- package/dist/lib/lib/uploader.d.ts +43 -0
- package/dist/lib/lib/uploader.d.ts.map +1 -1
- package/dist/lib/lib/uploader.js +468 -101
- package/dist/lib/lib/utils.d.ts +75 -0
- package/dist/lib/lib/utils.d.ts.map +1 -1
- package/dist/lib/lib/utils.js +276 -6
- package/dist/rlog-sdk.min.js +1 -1
- package/package.json +3 -2
|
@@ -11,6 +11,8 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
11
11
|
import { IndexedDBAdapter } from "./drive/indexeddb-adapt";
|
|
12
12
|
import { LocalStorageAdapter } from "./drive/localstorage-adapt";
|
|
13
13
|
import { MemoryAdapter } from "./drive/memory-adapt";
|
|
14
|
+
import logger from "./logger";
|
|
15
|
+
import { STORAGE_TEST_KEY } from "./constants";
|
|
14
16
|
|
|
15
17
|
/**
|
|
16
18
|
* 存储管理器 - 支持并发安全的存储操作
|
|
@@ -26,33 +28,31 @@ var StorageManager = /*#__PURE__*/function () {
|
|
|
26
28
|
key: "selectAdapter",
|
|
27
29
|
value: function selectAdapter() {
|
|
28
30
|
// 优先使用IndexedDB
|
|
29
|
-
if (typeof window !== 'undefined' && window.indexedDB) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
}
|
|
31
|
+
// if (typeof window !== 'undefined' && window.indexedDB) {
|
|
32
|
+
// try {
|
|
33
|
+
// // 测试IndexedDB是否可用
|
|
34
|
+
// const test = indexedDB.open('__rlog_test__', 1);
|
|
35
|
+
// test.onerror = () => { throw new Error('IndexedDB blocked'); };
|
|
36
|
+
// test.onsuccess = () => {
|
|
37
|
+
// test.result.close();
|
|
38
|
+
// // 清理测试数据库
|
|
39
|
+
// indexedDB.deleteDatabase('__rlog_test__');
|
|
40
|
+
// };
|
|
41
|
+
// return new IndexedDBAdapter();
|
|
42
|
+
// } catch (e) {
|
|
43
|
+
// logger.warn('IndexedDB不可用,降级使用LocalStorage');
|
|
44
|
+
// }
|
|
45
|
+
// }
|
|
46
46
|
|
|
47
47
|
// 其次使用LocalStorage
|
|
48
48
|
if (typeof window !== 'undefined' && window.localStorage) {
|
|
49
49
|
try {
|
|
50
|
-
var testKey =
|
|
50
|
+
var testKey = STORAGE_TEST_KEY;
|
|
51
51
|
window.localStorage.setItem(testKey, 'test');
|
|
52
52
|
window.localStorage.removeItem(testKey);
|
|
53
53
|
return new LocalStorageAdapter();
|
|
54
54
|
} catch (e) {
|
|
55
|
-
|
|
55
|
+
logger.warn('LocalStorage不可用,降级使用内存缓存');
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -77,7 +77,7 @@ var StorageManager = /*#__PURE__*/function () {
|
|
|
77
77
|
newOperation = previousOperation.then(function () {
|
|
78
78
|
return operation();
|
|
79
79
|
}).catch(function (error) {
|
|
80
|
-
|
|
80
|
+
logger.error('Storage operation failed:', error);
|
|
81
81
|
throw error;
|
|
82
82
|
}).finally(function () {
|
|
83
83
|
// 清理已完成的操作
|
|
@@ -198,7 +198,7 @@ var StorageManager = /*#__PURE__*/function () {
|
|
|
198
198
|
if (_this6.adapter.clear) {
|
|
199
199
|
return _this6.adapter.clear(deviceId);
|
|
200
200
|
}
|
|
201
|
-
|
|
201
|
+
logger.warn('Storage adapter does not support clear operation');
|
|
202
202
|
return Promise.resolve();
|
|
203
203
|
}));
|
|
204
204
|
case 1:
|
|
@@ -212,9 +212,69 @@ var StorageManager = /*#__PURE__*/function () {
|
|
|
212
212
|
}
|
|
213
213
|
return clear;
|
|
214
214
|
}()
|
|
215
|
+
/**
|
|
216
|
+
* 按时间范围提取事件(用于 error 模式)
|
|
217
|
+
*/
|
|
218
|
+
}, {
|
|
219
|
+
key: "pullByTimeRange",
|
|
220
|
+
value: (function () {
|
|
221
|
+
var _pullByTimeRange = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(deviceId, startTime, endTime) {
|
|
222
|
+
var _this7 = this;
|
|
223
|
+
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
|
224
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
225
|
+
case 0:
|
|
226
|
+
return _context7.abrupt("return", this.serialize(deviceId, function () {
|
|
227
|
+
if (_this7.adapter.pullByTimeRange) {
|
|
228
|
+
return _this7.adapter.pullByTimeRange(deviceId, startTime, endTime);
|
|
229
|
+
}
|
|
230
|
+
logger.warn('Storage adapter does not support pullByTimeRange operation');
|
|
231
|
+
return Promise.resolve([]);
|
|
232
|
+
}));
|
|
233
|
+
case 1:
|
|
234
|
+
case "end":
|
|
235
|
+
return _context7.stop();
|
|
236
|
+
}
|
|
237
|
+
}, _callee7, this);
|
|
238
|
+
}));
|
|
239
|
+
function pullByTimeRange(_x12, _x13, _x14) {
|
|
240
|
+
return _pullByTimeRange.apply(this, arguments);
|
|
241
|
+
}
|
|
242
|
+
return pullByTimeRange;
|
|
243
|
+
}()
|
|
244
|
+
/**
|
|
245
|
+
* 按时间范围移除事件(用于 error 模式)
|
|
246
|
+
*/
|
|
247
|
+
)
|
|
248
|
+
}, {
|
|
249
|
+
key: "removeByTimeRange",
|
|
250
|
+
value: (function () {
|
|
251
|
+
var _removeByTimeRange = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(deviceId, sinceTime) {
|
|
252
|
+
var _this8 = this;
|
|
253
|
+
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
254
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
255
|
+
case 0:
|
|
256
|
+
return _context8.abrupt("return", this.serialize(deviceId, function () {
|
|
257
|
+
if (_this8.adapter.removeByTimeRange) {
|
|
258
|
+
return _this8.adapter.removeByTimeRange(deviceId, sinceTime);
|
|
259
|
+
}
|
|
260
|
+
logger.warn('Storage adapter does not support removeByTimeRange operation');
|
|
261
|
+
return Promise.resolve();
|
|
262
|
+
}));
|
|
263
|
+
case 1:
|
|
264
|
+
case "end":
|
|
265
|
+
return _context8.stop();
|
|
266
|
+
}
|
|
267
|
+
}, _callee8, this);
|
|
268
|
+
}));
|
|
269
|
+
function removeByTimeRange(_x15, _x16) {
|
|
270
|
+
return _removeByTimeRange.apply(this, arguments);
|
|
271
|
+
}
|
|
272
|
+
return removeByTimeRange;
|
|
273
|
+
}()
|
|
215
274
|
/**
|
|
216
275
|
* 获取当前存储适配器类型
|
|
217
276
|
*/
|
|
277
|
+
)
|
|
218
278
|
}, {
|
|
219
279
|
key: "getAdapterType",
|
|
220
280
|
value: function getAdapterType() {
|
|
@@ -228,48 +288,71 @@ var StorageManager = /*#__PURE__*/function () {
|
|
|
228
288
|
return 'Unknown';
|
|
229
289
|
}
|
|
230
290
|
|
|
291
|
+
/**
|
|
292
|
+
* 获取存储的事件数量(非破坏性只读操作)
|
|
293
|
+
*/
|
|
294
|
+
}, {
|
|
295
|
+
key: "count",
|
|
296
|
+
value: (function () {
|
|
297
|
+
var _count = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(deviceId) {
|
|
298
|
+
var _this9 = this;
|
|
299
|
+
return _regeneratorRuntime().wrap(function _callee9$(_context9) {
|
|
300
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
301
|
+
case 0:
|
|
302
|
+
return _context9.abrupt("return", this.serialize(deviceId, function () {
|
|
303
|
+
if (_this9.adapter.count) {
|
|
304
|
+
return _this9.adapter.count(deviceId);
|
|
305
|
+
}
|
|
306
|
+
logger.warn('Storage adapter does not support count operation');
|
|
307
|
+
return Promise.resolve(0);
|
|
308
|
+
}));
|
|
309
|
+
case 1:
|
|
310
|
+
case "end":
|
|
311
|
+
return _context9.stop();
|
|
312
|
+
}
|
|
313
|
+
}, _callee9, this);
|
|
314
|
+
}));
|
|
315
|
+
function count(_x17) {
|
|
316
|
+
return _count.apply(this, arguments);
|
|
317
|
+
}
|
|
318
|
+
return count;
|
|
319
|
+
}()
|
|
231
320
|
/**
|
|
232
321
|
* 获取存储状态(调试用)
|
|
233
322
|
*/
|
|
323
|
+
)
|
|
234
324
|
}, {
|
|
235
325
|
key: "getStorageState",
|
|
236
326
|
value: (function () {
|
|
237
|
-
var _getStorageState = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
238
|
-
var adapterType,
|
|
239
|
-
return _regeneratorRuntime().wrap(function
|
|
240
|
-
while (1) switch (
|
|
327
|
+
var _getStorageState = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(deviceId) {
|
|
328
|
+
var adapterType, eventCount;
|
|
329
|
+
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
330
|
+
while (1) switch (_context10.prev = _context10.next) {
|
|
241
331
|
case 0:
|
|
242
332
|
adapterType = this.getAdapterType();
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
return this.
|
|
333
|
+
_context10.prev = 1;
|
|
334
|
+
_context10.next = 4;
|
|
335
|
+
return this.count(deviceId);
|
|
246
336
|
case 4:
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
_context7.next = 8;
|
|
250
|
-
break;
|
|
251
|
-
}
|
|
252
|
-
_context7.next = 8;
|
|
253
|
-
return this.unshiftBatch(deviceId, events);
|
|
254
|
-
case 8:
|
|
255
|
-
return _context7.abrupt("return", {
|
|
337
|
+
eventCount = _context10.sent;
|
|
338
|
+
return _context10.abrupt("return", {
|
|
256
339
|
adapterType: adapterType,
|
|
257
|
-
eventCount:
|
|
340
|
+
eventCount: eventCount
|
|
258
341
|
});
|
|
259
|
-
case
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
return
|
|
342
|
+
case 8:
|
|
343
|
+
_context10.prev = 8;
|
|
344
|
+
_context10.t0 = _context10["catch"](1);
|
|
345
|
+
return _context10.abrupt("return", {
|
|
263
346
|
adapterType: adapterType,
|
|
264
347
|
eventCount: -1
|
|
265
348
|
});
|
|
266
|
-
case
|
|
349
|
+
case 11:
|
|
267
350
|
case "end":
|
|
268
|
-
return
|
|
351
|
+
return _context10.stop();
|
|
269
352
|
}
|
|
270
|
-
},
|
|
353
|
+
}, _callee10, this, [[1, 8]]);
|
|
271
354
|
}));
|
|
272
|
-
function getStorageState(
|
|
355
|
+
function getStorageState(_x18) {
|
|
273
356
|
return _getStorageState.apply(this, arguments);
|
|
274
357
|
}
|
|
275
358
|
return getStorageState;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload Worker 管理器
|
|
3
|
+
*
|
|
4
|
+
* 职责:
|
|
5
|
+
* - Worker 生命周期管理(创建、销毁、降级)
|
|
6
|
+
* - 将 Worker 脚本以 inline Blob 方式加载
|
|
7
|
+
* - 封装 postMessage/onmessage 通信
|
|
8
|
+
* - 处理 Worker 回传的消息,调用对应的主线程逻辑
|
|
9
|
+
* - 提供与现有 uploader.ts 相同的对外 API
|
|
10
|
+
*/
|
|
11
|
+
import type { WorkerConfig } from './upload-worker';
|
|
12
|
+
/**
|
|
13
|
+
* 设置 SDK 取消回调(由 init.ts 在启动上传循环前注入)
|
|
14
|
+
*/
|
|
15
|
+
export declare function setWorkerCancelCallback(callback: (() => void) | null): void;
|
|
16
|
+
/**
|
|
17
|
+
* 设置 Worker 降级回调
|
|
18
|
+
* @param callback 降级回调函数
|
|
19
|
+
*/
|
|
20
|
+
export declare function setWorkerFallbackCallback(callback: (() => void) | null): void;
|
|
21
|
+
/**
|
|
22
|
+
* 尝试初始化 Worker 模式
|
|
23
|
+
* @returns 是否成功启用 Worker 模式
|
|
24
|
+
*/
|
|
25
|
+
export declare function initWorkerUpload(serv: string, appId: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* 销毁 Worker
|
|
28
|
+
* @param triggerFallback 是否触发降级回调
|
|
29
|
+
*/
|
|
30
|
+
export declare function destroyWorker(triggerFallback?: boolean): void;
|
|
31
|
+
/**
|
|
32
|
+
* 是否正在使用 Worker 模式
|
|
33
|
+
*/
|
|
34
|
+
export declare function isUsingWorkerMode(): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* 设置错误模式上传状态(Worker 模式)
|
|
37
|
+
*/
|
|
38
|
+
export declare function setWorkerErrorModeUploading(uploading: boolean): void;
|
|
39
|
+
/**
|
|
40
|
+
* 设置错误模式上传时间窗口起点(Worker 模式)
|
|
41
|
+
*/
|
|
42
|
+
export declare function setWorkerErrorModeWindowStart(startTime: number): void;
|
|
43
|
+
/**
|
|
44
|
+
* 更新 Worker 配置
|
|
45
|
+
*/
|
|
46
|
+
export declare function updateWorkerConfig(config: Partial<WorkerConfig>): void;
|
|
47
|
+
//# sourceMappingURL=upload-worker-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-worker-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/upload-worker-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAgC,MAAM,iBAAiB,CAAC;AA+ClF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE3E;AA6SD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE7E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAwCrE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,eAAe,UAAQ,GAAG,IAAI,CA6B3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAQpE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAKtE"}
|