@tf2-automatic/bot-manager-data 8.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 ADDED
@@ -0,0 +1,3 @@
1
+ # bot-manager-data
2
+
3
+ This library contains types and constants for the [bot-manager](../../apps/bot-manager).
package/package.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "@tf2-automatic/bot-manager-data",
3
+ "version": "8.0.0",
4
+ "dependencies": {
5
+ "@tf2-automatic/bot-data": "*",
6
+ "steam-user": "^5.2.0",
7
+ "steamcommunity": "^3.48.4",
8
+ "steam-tradeoffer-manager": "^2.11.5",
9
+ "tslib": "^2.7.0"
10
+ },
11
+ "main": "./src/index.js",
12
+ "type": "commonjs",
13
+ "types": "./src/index.d.ts"
14
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export * from './lib/bots';
2
+ export * from './lib/heartbeats';
3
+ export * from './lib/health';
4
+ export * from './lib/inventories';
5
+ export * from './lib/events';
6
+ export * from './lib/trades';
7
+ export * from './lib/escrow';
8
+ export * from './lib/misc';
package/src/index.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./lib/bots"), exports);
5
+ tslib_1.__exportStar(require("./lib/heartbeats"), exports);
6
+ tslib_1.__exportStar(require("./lib/health"), exports);
7
+ tslib_1.__exportStar(require("./lib/inventories"), exports);
8
+ tslib_1.__exportStar(require("./lib/events"), exports);
9
+ tslib_1.__exportStar(require("./lib/trades"), exports);
10
+ tslib_1.__exportStar(require("./lib/escrow"), exports);
11
+ tslib_1.__exportStar(require("./lib/misc"), exports);
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/bot-manager-data/src/index.ts"],"names":[],"mappings":";;;AAAA,qDAA2B;AAC3B,2DAAiC;AACjC,uDAA6B;AAC7B,4DAAkC;AAClC,uDAA6B;AAC7B,uDAA6B;AAC7B,uDAA6B;AAC7B,qDAA2B"}
@@ -0,0 +1,14 @@
1
+ export declare const BOT_BASE_URL = "/bots";
2
+ export declare const BOTS_PATH = "/";
3
+ export declare const BOT_PATH = "/:steamid";
4
+ export declare const BOTS_FULL_PATH = "/bots";
5
+ export declare const BOT_FULL_PATH = "/bots/:steamid";
6
+ export interface Bot {
7
+ steamid64: string;
8
+ ip: string;
9
+ port: number;
10
+ interval: number;
11
+ version: string | null;
12
+ running: boolean;
13
+ lastSeen: number;
14
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BOT_FULL_PATH = exports.BOTS_FULL_PATH = exports.BOT_PATH = exports.BOTS_PATH = exports.BOT_BASE_URL = void 0;
4
+ exports.BOT_BASE_URL = '/bots';
5
+ exports.BOTS_PATH = '/';
6
+ exports.BOT_PATH = '/:steamid';
7
+ exports.BOTS_FULL_PATH = `${exports.BOT_BASE_URL}`;
8
+ exports.BOT_FULL_PATH = `${exports.BOT_BASE_URL}${exports.BOT_PATH}`;
9
+ //# sourceMappingURL=bots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bots.js","sourceRoot":"","sources":["../../../../../libs/bot-manager-data/src/lib/bots.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,OAAO,CAAC;AACvB,QAAA,SAAS,GAAG,GAAG,CAAC;AAChB,QAAA,QAAQ,GAAG,WAAW,CAAC;AAEvB,QAAA,cAAc,GAAG,GAAG,oBAAY,EAAE,CAAC;AACnC,QAAA,aAAa,GAAG,GAAG,oBAAY,GAAG,gBAAQ,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface EscrowResponse {
2
+ cached: boolean;
3
+ timestamp: number;
4
+ escrowDays: number;
5
+ }
6
+ export declare const ESCROW_BASE_URL = "/escrow";
7
+ export declare const ESCROW_PATH = "/:steamid";
8
+ export declare const ESCROW_FULL_PATH = "/escrow/:steamid";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ESCROW_FULL_PATH = exports.ESCROW_PATH = exports.ESCROW_BASE_URL = void 0;
4
+ exports.ESCROW_BASE_URL = '/escrow';
5
+ exports.ESCROW_PATH = '/:steamid';
6
+ exports.ESCROW_FULL_PATH = `${exports.ESCROW_BASE_URL}${exports.ESCROW_PATH}`;
7
+ //# sourceMappingURL=escrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../../../../libs/bot-manager-data/src/lib/escrow.ts"],"names":[],"mappings":";;;AAMa,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,WAAW,GAAG,WAAW,CAAC;AAE1B,QAAA,gBAAgB,GAAG,GAAG,uBAAe,GAAG,mBAAW,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const BOT_MANAGER_EXCHANGE_NAME = "tf2-automatic.bot-manager";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BOT_MANAGER_EXCHANGE_NAME = void 0;
4
+ exports.BOT_MANAGER_EXCHANGE_NAME = 'tf2-automatic.bot-manager';
5
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../../libs/bot-manager-data/src/lib/events.ts"],"names":[],"mappings":";;;AAAa,QAAA,yBAAyB,GAAG,2BAA2B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const HEALTH_BASE_URL = "/health";
2
+ export declare const HEALTH_PATH = "/";
3
+ export declare const HEALTH_FULL_PATH = "/health";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HEALTH_FULL_PATH = exports.HEALTH_PATH = exports.HEALTH_BASE_URL = void 0;
4
+ exports.HEALTH_BASE_URL = '/health';
5
+ exports.HEALTH_PATH = `/`;
6
+ exports.HEALTH_FULL_PATH = `${exports.HEALTH_BASE_URL}`;
7
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../../../libs/bot-manager-data/src/lib/health.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,WAAW,GAAG,GAAG,CAAC;AAElB,QAAA,gBAAgB,GAAG,GAAG,uBAAe,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { BaseEvent } from '@tf2-automatic/bot-data';
2
+ import { Bot } from './bots';
3
+ export declare const HEARTBEAT_BASE_URL = "/heartbeats";
4
+ export declare const HEARTBEAT_PATH = "/:steamid";
5
+ export declare const HEARTBEAT_FULL_PATH = "/heartbeats/:steamid";
6
+ export interface BotHeartbeat {
7
+ ip: string;
8
+ port: number;
9
+ interval: number;
10
+ version?: string;
11
+ }
12
+ export declare const BOT_EVENT_PREFIX = "bots";
13
+ export type BotHeartbeatEventType = 'bots.heartbeat';
14
+ export declare const BOT_HEARTBEAT_EVENT: BotHeartbeatEventType;
15
+ export type BotStoppedEventType = 'bots.stopped';
16
+ export declare const BOT_STOPPED_EVENT: BotStoppedEventType;
17
+ export type BotDeletedEventType = 'bots.deleted';
18
+ export declare const BOT_DELETED_EVENT: BotDeletedEventType;
19
+ export type BotHeartbeatEvent = BaseEvent<BotHeartbeatEventType, Bot>;
20
+ export type BotStoppedEvent = BaseEvent<BotStoppedEventType, Bot>;
21
+ export type BotDeletedEvent = BaseEvent<BotDeletedEventType, Bot>;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BOT_DELETED_EVENT = exports.BOT_STOPPED_EVENT = exports.BOT_HEARTBEAT_EVENT = exports.BOT_EVENT_PREFIX = exports.HEARTBEAT_FULL_PATH = exports.HEARTBEAT_PATH = exports.HEARTBEAT_BASE_URL = void 0;
4
+ exports.HEARTBEAT_BASE_URL = '/heartbeats';
5
+ exports.HEARTBEAT_PATH = '/:steamid';
6
+ exports.HEARTBEAT_FULL_PATH = `${exports.HEARTBEAT_BASE_URL}${exports.HEARTBEAT_PATH}`;
7
+ exports.BOT_EVENT_PREFIX = 'bots';
8
+ exports.BOT_HEARTBEAT_EVENT = `${exports.BOT_EVENT_PREFIX}.heartbeat`;
9
+ exports.BOT_STOPPED_EVENT = `${exports.BOT_EVENT_PREFIX}.stopped`;
10
+ exports.BOT_DELETED_EVENT = `${exports.BOT_EVENT_PREFIX}.deleted`;
11
+ //# sourceMappingURL=heartbeats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeats.js","sourceRoot":"","sources":["../../../../../libs/bot-manager-data/src/lib/heartbeats.ts"],"names":[],"mappings":";;;AAGa,QAAA,kBAAkB,GAAG,aAAa,CAAC;AACnC,QAAA,cAAc,GAAG,WAAW,CAAC;AAE7B,QAAA,mBAAmB,GAAG,GAAG,0BAAkB,GAAG,sBAAc,EAAE,CAAC;AAS/D,QAAA,gBAAgB,GAAG,MAAM,CAAC;AAG1B,QAAA,mBAAmB,GAA0B,GAAG,wBAAgB,YAAY,CAAC;AAG7E,QAAA,iBAAiB,GAAwB,GAAG,wBAAgB,UAAU,CAAC;AAGvE,QAAA,iBAAiB,GAAwB,GAAG,wBAAgB,UAAU,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { BaseEvent, HttpError, Item } from '@tf2-automatic/bot-data';
2
+ import { RetryOptions } from './misc';
3
+ export declare const INVENTORIES_BASE_URL = "/inventories";
4
+ export declare const INVENTORY_PATH = "/:steamid/:appid/:contextid";
5
+ export declare const INVENTORY_FETCH_PATH = "/:steamid/:appid/:contextid/fetch";
6
+ export declare const INVENTORY_FULL_PATH = "/inventories/:steamid/:appid/:contextid";
7
+ export type InventoryItem = Item | {
8
+ appid: number;
9
+ contextid: string;
10
+ assetid: string;
11
+ tradable?: boolean;
12
+ };
13
+ export interface InventoryResponse {
14
+ timestamp: number;
15
+ ttl: number;
16
+ items: InventoryItem[];
17
+ }
18
+ export interface EnqueueInventory {
19
+ bot?: string;
20
+ priority?: number;
21
+ retry?: RetryOptions;
22
+ ttl?: number;
23
+ tradableOnly?: boolean;
24
+ }
25
+ export declare const INVENTORY_EVENT_PREFIX = "inventories";
26
+ export type InventoryLoadedEventType = 'inventories.loaded';
27
+ export declare const INVENTORY_LOADED_EVENT: InventoryLoadedEventType;
28
+ export type InventoryLoadedEvent = BaseEvent<InventoryLoadedEventType, {
29
+ steamid64: string;
30
+ appid: number;
31
+ contextid: string;
32
+ timestamp: number;
33
+ itemCount: number;
34
+ }>;
35
+ interface InventoryEventData {
36
+ job: {
37
+ steamid64: string;
38
+ appid: number;
39
+ contextid: string;
40
+ };
41
+ response: HttpError | null;
42
+ error: string;
43
+ }
44
+ export type InventoryErrorEventType = 'inventories.error';
45
+ export declare const INVENTORY_ERROR_EVENT: InventoryErrorEventType;
46
+ export type InventoryErrorEvent = BaseEvent<InventoryErrorEventType, InventoryEventData>;
47
+ export type InventoryFailedEventType = 'inventories.failed';
48
+ export declare const INVENTORY_FAILED_EVENT: InventoryFailedEventType;
49
+ export type InventoryFailedEvent = BaseEvent<InventoryFailedEventType, InventoryEventData>;
50
+ export type InventoryChangedEventType = 'inventories.changed';
51
+ export declare const INVENTORY_CHANGED_EVENT: InventoryChangedEventType;
52
+ export declare enum InventoryChangedEventReason {
53
+ Trade = "TRADE",
54
+ ExchangeDetails = "EXCHANGE_DETAILS",
55
+ TF2 = "TF2"
56
+ }
57
+ export type InventoryChangedEvent = BaseEvent<InventoryChangedEventType, {
58
+ steamid64: string;
59
+ appid: number;
60
+ contextid: string;
61
+ gained: InventoryItem[];
62
+ lost: InventoryItem[];
63
+ reason: InventoryChangedEventReason;
64
+ }>;
65
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InventoryChangedEventReason = exports.INVENTORY_CHANGED_EVENT = exports.INVENTORY_FAILED_EVENT = exports.INVENTORY_ERROR_EVENT = exports.INVENTORY_LOADED_EVENT = exports.INVENTORY_EVENT_PREFIX = exports.INVENTORY_FULL_PATH = exports.INVENTORY_FETCH_PATH = exports.INVENTORY_PATH = exports.INVENTORIES_BASE_URL = void 0;
4
+ exports.INVENTORIES_BASE_URL = '/inventories';
5
+ exports.INVENTORY_PATH = '/:steamid/:appid/:contextid';
6
+ exports.INVENTORY_FETCH_PATH = `${exports.INVENTORY_PATH}/fetch`;
7
+ exports.INVENTORY_FULL_PATH = `${exports.INVENTORIES_BASE_URL}${exports.INVENTORY_PATH}`;
8
+ exports.INVENTORY_EVENT_PREFIX = 'inventories';
9
+ exports.INVENTORY_LOADED_EVENT = `${exports.INVENTORY_EVENT_PREFIX}.loaded`;
10
+ exports.INVENTORY_ERROR_EVENT = `${exports.INVENTORY_EVENT_PREFIX}.error`;
11
+ exports.INVENTORY_FAILED_EVENT = `${exports.INVENTORY_EVENT_PREFIX}.failed`;
12
+ exports.INVENTORY_CHANGED_EVENT = `${exports.INVENTORY_EVENT_PREFIX}.changed`;
13
+ var InventoryChangedEventReason;
14
+ (function (InventoryChangedEventReason) {
15
+ InventoryChangedEventReason["Trade"] = "TRADE";
16
+ InventoryChangedEventReason["ExchangeDetails"] = "EXCHANGE_DETAILS";
17
+ InventoryChangedEventReason["TF2"] = "TF2";
18
+ })(InventoryChangedEventReason || (exports.InventoryChangedEventReason = InventoryChangedEventReason = {}));
19
+ //# sourceMappingURL=inventories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventories.js","sourceRoot":"","sources":["../../../../../libs/bot-manager-data/src/lib/inventories.ts"],"names":[],"mappings":";;;AAGa,QAAA,oBAAoB,GAAG,cAAc,CAAC;AACtC,QAAA,cAAc,GAAG,6BAA6B,CAAC;AAC/C,QAAA,oBAAoB,GAAG,GAAG,sBAAc,QAAQ,CAAC;AAEjD,QAAA,mBAAmB,GAAG,GAAG,4BAAoB,GAAG,sBAAc,EAAE,CAAC;AAyBjE,QAAA,sBAAsB,GAAG,aAAa,CAAC;AAGvC,QAAA,sBAAsB,GAA6B,GAAG,8BAAsB,SAAS,CAAC;AAwBtF,QAAA,qBAAqB,GAA4B,GAAG,8BAAsB,QAAQ,CAAC;AAQnF,QAAA,sBAAsB,GAA6B,GAAG,8BAAsB,SAAS,CAAC;AAQtF,QAAA,uBAAuB,GAA8B,GAAG,8BAAsB,UAAU,CAAC;AAEtG,IAAY,2BAIX;AAJD,WAAY,2BAA2B;IACrC,8CAAe,CAAA;IACf,mEAAoC,CAAA;IACpC,0CAAW,CAAA;AACb,CAAC,EAJW,2BAA2B,2CAA3B,2BAA2B,QAItC"}
@@ -0,0 +1,15 @@
1
+ export interface RetryOptions {
2
+ strategy?: 'exponential' | 'linear' | 'fixed';
3
+ maxTime?: number;
4
+ delay?: number;
5
+ maxDelay?: number;
6
+ }
7
+ export interface Job {
8
+ id: string;
9
+ type: string;
10
+ data: unknown;
11
+ bot: string;
12
+ attempts: number;
13
+ lastProcessedAt: number | null;
14
+ createdAt: number;
15
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../../../libs/bot-manager-data/src/lib/misc.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { BaseEvent, CounterTrade, CreateTrade, HttpError, TradeOfferExchangeDetails, TradeOfferWithItems } from '@tf2-automatic/bot-data';
2
+ import { Job, RetryOptions } from './misc';
3
+ export declare const TRADES_BASE_URL = "/trades";
4
+ export declare const TRADE_JOBS_PATH = "/";
5
+ export declare const TRADE_JOB_PATH = "/:id";
6
+ export declare const TRADE_JOBS_FULL_PATH = "/trades";
7
+ export declare const TRADE_JOB_FULL_PATH = "/trades/:id";
8
+ export interface ManagerCounterTrade extends CounterTrade {
9
+ id: string;
10
+ }
11
+ export declare const QueueTradeTypes: readonly ["CREATE", "COUNTER", "DELETE", "ACCEPT", "CONFIRM", "REFRESH"];
12
+ export type QueueTradeType = (typeof QueueTradeTypes)[number];
13
+ export type QueueTradeJob = QueueTradeCreate | QueueTradeCounter | QueueTradeDelete | QueueTradeAccept | QueueTradeConfirm | QueueTradeRefresh;
14
+ export type QueueTradeJobData = (QueueTradeCreate & QueueTradeCounter & QueueTradeDelete & QueueTradeAccept & QueueTradeConfirm)['data'];
15
+ export type QueueTradeCreate = QueueTrade<'CREATE', CreateTrade>;
16
+ export type QueueTradeCounter = QueueTrade<'COUNTER', ManagerCounterTrade>;
17
+ export type QueueTradeDelete = QueueTrade<'DELETE', string>;
18
+ export type QueueTradeAccept = QueueTrade<'ACCEPT', string>;
19
+ export type QueueTradeConfirm = QueueTrade<'CONFIRM', string>;
20
+ export type QueueTradeRefresh = QueueTrade<'REFRESH', string>;
21
+ export interface QueueTrade<Type extends QueueTradeType = QueueTradeType, Data = unknown> {
22
+ type: Type;
23
+ data: Data;
24
+ bot: string;
25
+ priority?: number;
26
+ retry?: RetryOptions;
27
+ }
28
+ export interface QueueTradeResponse {
29
+ id: string;
30
+ }
31
+ export declare const TRADES_EVENT_PREFIX = "trades";
32
+ export type ExchangeDetailsEventType = 'trades.exchange_details';
33
+ export declare const EXCHANGE_DETAILS_EVENT: ExchangeDetailsEventType;
34
+ export type ExchangeDetailsEvent = BaseEvent<ExchangeDetailsEventType, {
35
+ offer: TradeOfferWithItems;
36
+ details: TradeOfferExchangeDetails;
37
+ }>;
38
+ interface TradeEventData {
39
+ job: Job;
40
+ response: HttpError | null;
41
+ error: string;
42
+ }
43
+ export type TradeErrorEventType = 'trades.error';
44
+ export declare const TRADE_ERROR_EVENT: TradeErrorEventType;
45
+ export type TradeErrorEvent = BaseEvent<TradeErrorEventType, TradeEventData>;
46
+ export type TradeFailedEventType = 'trades.failed';
47
+ export declare const TRADE_FAILED_EVENT: TradeFailedEventType;
48
+ export type TradeFailedEvent = BaseEvent<TradeFailedEventType, TradeEventData>;
49
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TRADE_FAILED_EVENT = exports.TRADE_ERROR_EVENT = exports.EXCHANGE_DETAILS_EVENT = exports.TRADES_EVENT_PREFIX = exports.QueueTradeTypes = exports.TRADE_JOB_FULL_PATH = exports.TRADE_JOBS_FULL_PATH = exports.TRADE_JOB_PATH = exports.TRADE_JOBS_PATH = exports.TRADES_BASE_URL = void 0;
4
+ exports.TRADES_BASE_URL = '/trades';
5
+ exports.TRADE_JOBS_PATH = `/`;
6
+ exports.TRADE_JOB_PATH = `/:id`;
7
+ exports.TRADE_JOBS_FULL_PATH = `${exports.TRADES_BASE_URL}`;
8
+ exports.TRADE_JOB_FULL_PATH = `${exports.TRADES_BASE_URL}${exports.TRADE_JOB_PATH}`;
9
+ exports.QueueTradeTypes = [
10
+ 'CREATE',
11
+ 'COUNTER',
12
+ 'DELETE',
13
+ 'ACCEPT',
14
+ 'CONFIRM',
15
+ 'REFRESH',
16
+ ];
17
+ exports.TRADES_EVENT_PREFIX = 'trades';
18
+ exports.EXCHANGE_DETAILS_EVENT = `${exports.TRADES_EVENT_PREFIX}.exchange_details`;
19
+ exports.TRADE_ERROR_EVENT = `${exports.TRADES_EVENT_PREFIX}.error`;
20
+ exports.TRADE_FAILED_EVENT = `${exports.TRADES_EVENT_PREFIX}.failed`;
21
+ //# sourceMappingURL=trades.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trades.js","sourceRoot":"","sources":["../../../../../libs/bot-manager-data/src/lib/trades.ts"],"names":[],"mappings":";;;AAUa,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,eAAe,GAAG,GAAG,CAAC;AACtB,QAAA,cAAc,GAAG,MAAM,CAAC;AAExB,QAAA,oBAAoB,GAAG,GAAG,uBAAe,EAAE,CAAC;AAC5C,QAAA,mBAAmB,GAAG,GAAG,uBAAe,GAAG,sBAAc,EAAE,CAAC;AAM5D,QAAA,eAAe,GAAG;IAC7B,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,SAAS;CACD,CAAC;AAuCE,QAAA,mBAAmB,GAAG,QAAQ,CAAC;AAG/B,QAAA,sBAAsB,GAA6B,GAAG,2BAAmB,mBAAmB,CAAC;AAiB7F,QAAA,iBAAiB,GAAwB,GAAG,2BAAmB,QAAQ,CAAC;AAKxE,QAAA,kBAAkB,GAAyB,GAAG,2BAAmB,SAAS,CAAC"}