@tangle-network/sandbox 0.2.1 → 0.3.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 +71 -0
- package/dist/agent/index.d.ts +435 -0
- package/dist/agent/index.js +1 -0
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.js +1 -271
- package/dist/{errors-BI75IXOM.d.ts → client-BuPZLOxS.d.ts} +2 -129
- package/dist/client-BwRV2Zun.js +1 -0
- package/dist/collaboration/index.d.ts +1 -1
- package/dist/collaboration/index.js +1 -2
- package/dist/collaboration-CRyb5e8F.js +1 -201
- package/dist/core.d.ts +3 -2
- package/dist/core.js +1 -4
- package/dist/errors-1Se5ATyZ.d.ts +128 -0
- package/dist/errors-CljiGR__.js +1 -262
- package/dist/{index-DhNGZ0h4.d.ts → index-2gFsmmQs.d.ts} +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.js +1 -825
- package/dist/openai/index.d.ts +4 -5
- package/dist/openai/index.js +1 -1721
- package/dist/platform-integrations.js +1 -2
- package/dist/{sandbox-aBpWqler.d.ts → sandbox-CpK8etqP.d.ts} +291 -84
- package/dist/sandbox-DTup2jzz.js +1 -0
- package/dist/session-gateway/index.js +1 -667
- package/dist/tangle/index.d.ts +1 -1
- package/dist/tangle/index.js +1 -2
- package/dist/tangle-CnYnTRi6.js +1 -0
- package/package.json +23 -2
- package/dist/client-Uve6A5C6.js +0 -2280
- package/dist/sandbox-ksXTNlo-.js +0 -3394
- package/dist/tangle-DQ05paN7.js +0 -826
- /package/dist/{index-Dpj1oB5i.d.ts → index-D-2pH_70.d.ts} +0 -0
- /package/dist/{index-CCsA3S0D.d.ts → index-D7bwmNs8.d.ts} +0 -0
|
@@ -1,667 +1 @@
|
|
|
1
|
-
//#region src/session-gateway/types.ts
|
|
2
|
-
/**
|
|
3
|
-
* Default connection metrics.
|
|
4
|
-
*/
|
|
5
|
-
const INITIAL_METRICS = {
|
|
6
|
-
lastPingLatencyMs: null,
|
|
7
|
-
avgPingLatencyMs: null,
|
|
8
|
-
missedPongCount: 0,
|
|
9
|
-
reconnectCount: 0,
|
|
10
|
-
lastPongAt: null,
|
|
11
|
-
lastReconnectAt: null,
|
|
12
|
-
quality: "disconnected"
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Calculate connection quality from metrics.
|
|
16
|
-
*/
|
|
17
|
-
function calculateConnectionQuality(metrics, isConnected) {
|
|
18
|
-
if (!isConnected) return "disconnected";
|
|
19
|
-
const { avgPingLatencyMs, missedPongCount, reconnectCount, lastReconnectAt } = metrics;
|
|
20
|
-
const recentReconnect = lastReconnectAt && Date.now() - lastReconnectAt < 300 * 1e3;
|
|
21
|
-
if (missedPongCount >= 2 || recentReconnect && reconnectCount > 1) return "poor";
|
|
22
|
-
if (missedPongCount >= 1 || avgPingLatencyMs !== null && avgPingLatencyMs > 1e3 || recentReconnect) return "degraded";
|
|
23
|
-
if (avgPingLatencyMs !== null && avgPingLatencyMs < 100 && reconnectCount === 0) return "excellent";
|
|
24
|
-
if (avgPingLatencyMs !== null && avgPingLatencyMs <= 300) return "good";
|
|
25
|
-
return "good";
|
|
26
|
-
}
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region src/session-gateway/client.ts
|
|
29
|
-
/**
|
|
30
|
-
* SessionGatewayClient
|
|
31
|
-
*
|
|
32
|
-
* WebSocket client for Sandbox API session streaming.
|
|
33
|
-
* Browser-safe: no Node.js APIs.
|
|
34
|
-
*/
|
|
35
|
-
const DEFAULT_CONFIG = {
|
|
36
|
-
transport: "websocket",
|
|
37
|
-
channels: ["*"],
|
|
38
|
-
autoReconnect: true,
|
|
39
|
-
maxReconnectAttempts: 10,
|
|
40
|
-
initialReconnectDelayMs: 1e3,
|
|
41
|
-
maxReconnectDelayMs: 3e4,
|
|
42
|
-
pingIntervalMs: 3e4,
|
|
43
|
-
pongTimeoutMs: 1e4,
|
|
44
|
-
maxMissedPongs: 2,
|
|
45
|
-
enableDeduplication: true,
|
|
46
|
-
maxDeduplicationSize: 1e3,
|
|
47
|
-
enableReplayPersistence: false,
|
|
48
|
-
replayStorageKeyPrefix: "session_gateway_",
|
|
49
|
-
latencyHistorySize: 10
|
|
50
|
-
};
|
|
51
|
-
const STORAGE_KEYS = {
|
|
52
|
-
lastEventId: "last_event_id",
|
|
53
|
-
executionId: "execution_id",
|
|
54
|
-
sessionId: "session_id"
|
|
55
|
-
};
|
|
56
|
-
/**
|
|
57
|
-
* Legacy wire-protocol message type map. The current server emits the
|
|
58
|
-
* `sidecar.*` message types; the SDK surfaces the canonical `runtime.*`
|
|
59
|
-
* names. Kept at module scope so it isn't re-allocated per inbound
|
|
60
|
-
* WebSocket message.
|
|
61
|
-
*/
|
|
62
|
-
const WIRE_TYPE_MAP = {
|
|
63
|
-
"sidecar.connected": "runtime.connected",
|
|
64
|
-
"sidecar.disconnected": "runtime.disconnected",
|
|
65
|
-
"sidecar.not_found": "runtime.not_found",
|
|
66
|
-
"sidecar.ready": "runtime.ready"
|
|
67
|
-
};
|
|
68
|
-
/**
|
|
69
|
-
* Memory-based storage fallback when localStorage is not available.
|
|
70
|
-
*/
|
|
71
|
-
var MemoryStorage = class {
|
|
72
|
-
store = /* @__PURE__ */ new Map();
|
|
73
|
-
getItem(key) {
|
|
74
|
-
return this.store.get(key) ?? null;
|
|
75
|
-
}
|
|
76
|
-
setItem(key, value) {
|
|
77
|
-
this.store.set(key, value);
|
|
78
|
-
}
|
|
79
|
-
removeItem(key) {
|
|
80
|
-
this.store.delete(key);
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
var SessionGatewayClient = class {
|
|
84
|
-
ws = null;
|
|
85
|
-
config;
|
|
86
|
-
handlers;
|
|
87
|
-
currentToken;
|
|
88
|
-
isRefreshingToken = false;
|
|
89
|
-
state = "disconnected";
|
|
90
|
-
connectedAt = null;
|
|
91
|
-
hasConnectedBefore = false;
|
|
92
|
-
lastPingAt = null;
|
|
93
|
-
lastPongAt = null;
|
|
94
|
-
lastPingSentAt = null;
|
|
95
|
-
missedPongCount = 0;
|
|
96
|
-
reconnectAttempts = 0;
|
|
97
|
-
messagesReceived = 0;
|
|
98
|
-
messagesSent = 0;
|
|
99
|
-
eventsReceived = 0;
|
|
100
|
-
duplicatesSkipped = 0;
|
|
101
|
-
reconnectTimer = null;
|
|
102
|
-
pingInterval = null;
|
|
103
|
-
pongTimeout = null;
|
|
104
|
-
pendingCallbacks = /* @__PURE__ */ new Map();
|
|
105
|
-
messageIdCounter = 0;
|
|
106
|
-
processedEventIds = /* @__PURE__ */ new Set();
|
|
107
|
-
pingLatencyHistory = [];
|
|
108
|
-
connectionMetrics = { ...INITIAL_METRICS };
|
|
109
|
-
lastEventId = null;
|
|
110
|
-
currentExecutionId = null;
|
|
111
|
-
currentSessionId = null;
|
|
112
|
-
isReplaying = false;
|
|
113
|
-
replayProgress = {
|
|
114
|
-
total: 0,
|
|
115
|
-
received: 0
|
|
116
|
-
};
|
|
117
|
-
constructor(config) {
|
|
118
|
-
let storage;
|
|
119
|
-
if (config.replayStorage) storage = config.replayStorage;
|
|
120
|
-
else if (typeof globalThis !== "undefined" && "localStorage" in globalThis) try {
|
|
121
|
-
const testKey = "__test__";
|
|
122
|
-
localStorage.setItem(testKey, testKey);
|
|
123
|
-
localStorage.removeItem(testKey);
|
|
124
|
-
storage = localStorage;
|
|
125
|
-
} catch {
|
|
126
|
-
storage = new MemoryStorage();
|
|
127
|
-
}
|
|
128
|
-
else storage = new MemoryStorage();
|
|
129
|
-
this.config = {
|
|
130
|
-
url: config.url,
|
|
131
|
-
sessionId: config.sessionId,
|
|
132
|
-
token: config.token,
|
|
133
|
-
onTokenRefresh: config.onTokenRefresh,
|
|
134
|
-
transport: config.transport ?? DEFAULT_CONFIG.transport,
|
|
135
|
-
channels: config.channels ?? DEFAULT_CONFIG.channels,
|
|
136
|
-
autoReconnect: config.autoReconnect ?? DEFAULT_CONFIG.autoReconnect,
|
|
137
|
-
maxReconnectAttempts: config.maxReconnectAttempts ?? DEFAULT_CONFIG.maxReconnectAttempts,
|
|
138
|
-
initialReconnectDelayMs: config.initialReconnectDelayMs ?? DEFAULT_CONFIG.initialReconnectDelayMs,
|
|
139
|
-
maxReconnectDelayMs: config.maxReconnectDelayMs ?? DEFAULT_CONFIG.maxReconnectDelayMs,
|
|
140
|
-
pingIntervalMs: config.pingIntervalMs ?? DEFAULT_CONFIG.pingIntervalMs,
|
|
141
|
-
pongTimeoutMs: config.pongTimeoutMs ?? DEFAULT_CONFIG.pongTimeoutMs,
|
|
142
|
-
maxMissedPongs: config.maxMissedPongs ?? DEFAULT_CONFIG.maxMissedPongs,
|
|
143
|
-
enableDeduplication: config.enableDeduplication ?? DEFAULT_CONFIG.enableDeduplication,
|
|
144
|
-
maxDeduplicationSize: config.maxDeduplicationSize ?? DEFAULT_CONFIG.maxDeduplicationSize,
|
|
145
|
-
enableReplayPersistence: config.enableReplayPersistence ?? DEFAULT_CONFIG.enableReplayPersistence,
|
|
146
|
-
replayStorage: storage,
|
|
147
|
-
replayStorageKeyPrefix: config.replayStorageKeyPrefix ?? DEFAULT_CONFIG.replayStorageKeyPrefix,
|
|
148
|
-
latencyHistorySize: config.latencyHistorySize ?? DEFAULT_CONFIG.latencyHistorySize
|
|
149
|
-
};
|
|
150
|
-
this.handlers = config.handlers ?? {};
|
|
151
|
-
this.currentToken = config.token;
|
|
152
|
-
if (this.config.enableReplayPersistence) this.loadReplayState();
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Connect to the session gateway.
|
|
156
|
-
*/
|
|
157
|
-
connect() {
|
|
158
|
-
if (this.state === "connected" || this.state === "connecting") return;
|
|
159
|
-
const isReconnect = this.hasConnectedBefore;
|
|
160
|
-
this.setState(isReconnect ? "reconnecting" : "connecting");
|
|
161
|
-
this.connectWebSocket();
|
|
162
|
-
}
|
|
163
|
-
connectWebSocket() {
|
|
164
|
-
const url = new URL(this.config.url);
|
|
165
|
-
url.searchParams.set("token", this.currentToken);
|
|
166
|
-
this.ws = new WebSocket(url.toString());
|
|
167
|
-
this.ws.onopen = () => this.handleOpen();
|
|
168
|
-
this.ws.onclose = (event) => this.handleClose(event.code, event.reason);
|
|
169
|
-
this.ws.onerror = (_event) => {};
|
|
170
|
-
this.ws.onmessage = (event) => this.handleMessage(event.data);
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Disconnect from the session gateway.
|
|
174
|
-
*/
|
|
175
|
-
disconnect() {
|
|
176
|
-
this.cleanup();
|
|
177
|
-
if (this.ws) {
|
|
178
|
-
this.ws.close(1e3, "Client disconnect");
|
|
179
|
-
this.ws = null;
|
|
180
|
-
}
|
|
181
|
-
this.setState("disconnected");
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Subscribe to additional channels.
|
|
185
|
-
*/
|
|
186
|
-
async subscribe(channels) {
|
|
187
|
-
return (await this.sendWithResponse({
|
|
188
|
-
type: "subscribe",
|
|
189
|
-
channels
|
|
190
|
-
})).channels;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Unsubscribe from channels.
|
|
194
|
-
*/
|
|
195
|
-
async unsubscribe(channels) {
|
|
196
|
-
return (await this.sendWithResponse({
|
|
197
|
-
type: "unsubscribe",
|
|
198
|
-
channels
|
|
199
|
-
})).channels;
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Send a ping and wait for pong.
|
|
203
|
-
*/
|
|
204
|
-
async ping() {
|
|
205
|
-
const start = Date.now();
|
|
206
|
-
await this.sendWithResponse({ type: "ping" });
|
|
207
|
-
return Date.now() - start;
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Request replay of events since a timestamp.
|
|
211
|
-
*/
|
|
212
|
-
replay(since) {
|
|
213
|
-
this.send({
|
|
214
|
-
type: "replay",
|
|
215
|
-
since
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Send terminal input via WebSocket.
|
|
220
|
-
*/
|
|
221
|
-
sendTerminalInput(terminalId, input) {
|
|
222
|
-
if (!this.isConnected()) return false;
|
|
223
|
-
this.send({
|
|
224
|
-
type: "terminal.input",
|
|
225
|
-
data: {
|
|
226
|
-
terminalId,
|
|
227
|
-
input
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
return true;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Set the current session/execution context for event tracking.
|
|
234
|
-
*/
|
|
235
|
-
setSessionContext(sessionId, executionId) {
|
|
236
|
-
this.currentSessionId = sessionId;
|
|
237
|
-
if (executionId) this.currentExecutionId = executionId;
|
|
238
|
-
this.saveReplayState();
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Clear replay state (call when session ends).
|
|
242
|
-
*/
|
|
243
|
-
clearReplayState() {
|
|
244
|
-
this.lastEventId = null;
|
|
245
|
-
this.currentExecutionId = null;
|
|
246
|
-
this.currentSessionId = null;
|
|
247
|
-
this.isReplaying = false;
|
|
248
|
-
this.replayProgress = {
|
|
249
|
-
total: 0,
|
|
250
|
-
received: 0
|
|
251
|
-
};
|
|
252
|
-
this.processedEventIds.clear();
|
|
253
|
-
this.duplicatesSkipped = 0;
|
|
254
|
-
if (this.config.enableReplayPersistence) {
|
|
255
|
-
const prefix = this.config.replayStorageKeyPrefix;
|
|
256
|
-
try {
|
|
257
|
-
this.config.replayStorage.removeItem(prefix + STORAGE_KEYS.lastEventId);
|
|
258
|
-
this.config.replayStorage.removeItem(prefix + STORAGE_KEYS.executionId);
|
|
259
|
-
this.config.replayStorage.removeItem(prefix + STORAGE_KEYS.sessionId);
|
|
260
|
-
} catch {}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Get current replay state for UI indicators.
|
|
265
|
-
*/
|
|
266
|
-
getReplayState() {
|
|
267
|
-
return {
|
|
268
|
-
isReplaying: this.isReplaying,
|
|
269
|
-
progress: { ...this.replayProgress }
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Get connection statistics.
|
|
274
|
-
*/
|
|
275
|
-
getStats() {
|
|
276
|
-
return {
|
|
277
|
-
state: this.state,
|
|
278
|
-
connectedAt: this.connectedAt,
|
|
279
|
-
lastPingAt: this.lastPingAt,
|
|
280
|
-
lastPongAt: this.lastPongAt,
|
|
281
|
-
reconnectAttempts: this.reconnectAttempts,
|
|
282
|
-
messagesReceived: this.messagesReceived,
|
|
283
|
-
messagesSent: this.messagesSent,
|
|
284
|
-
eventsReceived: this.eventsReceived,
|
|
285
|
-
duplicatesSkipped: this.duplicatesSkipped,
|
|
286
|
-
metrics: { ...this.connectionMetrics },
|
|
287
|
-
replay: this.getReplayState()
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
getState() {
|
|
291
|
-
return this.state;
|
|
292
|
-
}
|
|
293
|
-
isConnected() {
|
|
294
|
-
return this.state === "connected";
|
|
295
|
-
}
|
|
296
|
-
getConnectionQuality() {
|
|
297
|
-
return this.connectionMetrics.quality;
|
|
298
|
-
}
|
|
299
|
-
getConnectionMetrics() {
|
|
300
|
-
return { ...this.connectionMetrics };
|
|
301
|
-
}
|
|
302
|
-
resetMetrics() {
|
|
303
|
-
this.pingLatencyHistory = [];
|
|
304
|
-
this.connectionMetrics = { ...INITIAL_METRICS };
|
|
305
|
-
this.handlers.onMetricsChange?.(this.connectionMetrics);
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Update the auth token and reconnect with the new token.
|
|
309
|
-
*/
|
|
310
|
-
updateToken(token) {
|
|
311
|
-
this.currentToken = token;
|
|
312
|
-
if (this.state === "connected" && this.ws) this.ws.close(1e3, "Token refreshed");
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Get the current auth token.
|
|
316
|
-
*/
|
|
317
|
-
getToken() {
|
|
318
|
-
return this.currentToken;
|
|
319
|
-
}
|
|
320
|
-
setState(state) {
|
|
321
|
-
if (this.state !== state) {
|
|
322
|
-
this.state = state;
|
|
323
|
-
this.updateConnectionQuality();
|
|
324
|
-
this.handlers.onStateChange?.(state);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
handleOpen() {
|
|
328
|
-
const isReconnect = this.hasConnectedBefore;
|
|
329
|
-
this.hasConnectedBefore = true;
|
|
330
|
-
this.setState("connected");
|
|
331
|
-
this.connectedAt = Date.now();
|
|
332
|
-
this.reconnectAttempts = 0;
|
|
333
|
-
this.missedPongCount = 0;
|
|
334
|
-
this.startPingInterval();
|
|
335
|
-
this.restoreSubscriptions();
|
|
336
|
-
if (isReconnect) {
|
|
337
|
-
this.trackReconnection();
|
|
338
|
-
this.handlers.onReconnect?.();
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
handleClose(code, reason) {
|
|
342
|
-
this.cleanup();
|
|
343
|
-
this.handlers.onDisconnect?.(code, reason);
|
|
344
|
-
if (this.config.autoReconnect && this.reconnectAttempts < this.config.maxReconnectAttempts) {
|
|
345
|
-
this.setState("reconnecting");
|
|
346
|
-
this.scheduleReconnect();
|
|
347
|
-
} else this.setState("disconnected");
|
|
348
|
-
}
|
|
349
|
-
handleMessage(data) {
|
|
350
|
-
this.messagesReceived++;
|
|
351
|
-
try {
|
|
352
|
-
const raw = JSON.parse(data);
|
|
353
|
-
if (!raw.type && raw.messageType) raw.type = raw.messageType;
|
|
354
|
-
if (typeof raw.type === "string" && WIRE_TYPE_MAP[raw.type] !== void 0) raw.type = WIRE_TYPE_MAP[raw.type];
|
|
355
|
-
if (raw.data && typeof raw.data === "object") {
|
|
356
|
-
const d = raw.data;
|
|
357
|
-
if (d.sidecarId !== void 0 && d.sandboxId === void 0) d.sandboxId = d.sidecarId;
|
|
358
|
-
}
|
|
359
|
-
if (raw.type === "agent.event" && !raw.data && raw.channel) {
|
|
360
|
-
const { type, messageType, channel, id, sequenceId, timestamp, ...rest } = raw;
|
|
361
|
-
raw.data = rest;
|
|
362
|
-
}
|
|
363
|
-
const message = raw;
|
|
364
|
-
if (message.type === "pong") {
|
|
365
|
-
this.handlePong(message.timestamp);
|
|
366
|
-
this.dispatchMessage(message);
|
|
367
|
-
return;
|
|
368
|
-
}
|
|
369
|
-
if ("id" in message && message.id && this.config.enableDeduplication) {
|
|
370
|
-
const eventId = message.id;
|
|
371
|
-
if (this.processedEventIds.has(eventId)) {
|
|
372
|
-
this.duplicatesSkipped++;
|
|
373
|
-
return;
|
|
374
|
-
}
|
|
375
|
-
this.processedEventIds.add(eventId);
|
|
376
|
-
if (this.processedEventIds.size > this.config.maxDeduplicationSize) {
|
|
377
|
-
const entriesToRemove = Math.floor(this.config.maxDeduplicationSize * .1);
|
|
378
|
-
let removed = 0;
|
|
379
|
-
for (const oldId of this.processedEventIds) {
|
|
380
|
-
if (removed >= entriesToRemove) break;
|
|
381
|
-
this.processedEventIds.delete(oldId);
|
|
382
|
-
removed++;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
this.lastEventId = eventId;
|
|
386
|
-
this.saveReplayState();
|
|
387
|
-
}
|
|
388
|
-
this.dispatchMessage(message);
|
|
389
|
-
} catch {}
|
|
390
|
-
}
|
|
391
|
-
handlePong(timestamp) {
|
|
392
|
-
const now = Date.now();
|
|
393
|
-
this.lastPongAt = timestamp;
|
|
394
|
-
this.missedPongCount = 0;
|
|
395
|
-
this.clearPongTimeout();
|
|
396
|
-
if (this.lastPingSentAt) {
|
|
397
|
-
const latency = now - this.lastPingSentAt;
|
|
398
|
-
this.pingLatencyHistory.push(latency);
|
|
399
|
-
if (this.pingLatencyHistory.length > this.config.latencyHistorySize) this.pingLatencyHistory.shift();
|
|
400
|
-
this.updateConnectionMetrics(latency, now);
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
dispatchMessage(message) {
|
|
404
|
-
if ("id" in message && message.id) {
|
|
405
|
-
const callback = this.pendingCallbacks.get(message.id);
|
|
406
|
-
if (callback) {
|
|
407
|
-
this.pendingCallbacks.delete(message.id);
|
|
408
|
-
if (message.type === "error") callback.reject(new Error(message.message));
|
|
409
|
-
else callback.resolve("data" in message ? message.data : void 0);
|
|
410
|
-
return;
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
switch (message.type) {
|
|
414
|
-
case "connection.established":
|
|
415
|
-
this.handlers.onConnect?.(message.data.sessionId);
|
|
416
|
-
break;
|
|
417
|
-
case "runtime.connected":
|
|
418
|
-
this.handlers.onRuntimeConnected?.(message.data.sandboxId, message.data.baseUrl);
|
|
419
|
-
break;
|
|
420
|
-
case "runtime.disconnected":
|
|
421
|
-
this.handlers.onRuntimeDisconnected?.(message.data.sandboxId, message.data.error);
|
|
422
|
-
break;
|
|
423
|
-
case "runtime.not_found":
|
|
424
|
-
this.handlers.onRuntimeNotFound?.(message.data.sessionId, message.data.containerId, message.data.reason);
|
|
425
|
-
break;
|
|
426
|
-
case "container.ready": {
|
|
427
|
-
const data = message.data;
|
|
428
|
-
const id = data.sandboxId ?? data.sidecarId;
|
|
429
|
-
if (id) this.handlers.onContainerReady?.(id);
|
|
430
|
-
else this.handlers.onError?.("container.ready event received without sandboxId", "invalid_payload");
|
|
431
|
-
break;
|
|
432
|
-
}
|
|
433
|
-
case "runtime.ready":
|
|
434
|
-
this.handlers.onRuntimeReady?.(message.data);
|
|
435
|
-
break;
|
|
436
|
-
case "port.opened":
|
|
437
|
-
this.handlers.onPortOpened?.(message.data.port, message.data.protocol, message.data.processName);
|
|
438
|
-
break;
|
|
439
|
-
case "port.closed":
|
|
440
|
-
this.handlers.onPortClosed?.(message.data.port);
|
|
441
|
-
break;
|
|
442
|
-
case "agent.event":
|
|
443
|
-
this.eventsReceived++;
|
|
444
|
-
this.trackExecutionContext(message.data);
|
|
445
|
-
this.handlers.onAgentEvent?.(message.channel, message.data, message.sequenceId);
|
|
446
|
-
break;
|
|
447
|
-
case "replay.start":
|
|
448
|
-
this.isReplaying = true;
|
|
449
|
-
this.replayProgress = {
|
|
450
|
-
total: message.total,
|
|
451
|
-
received: 0
|
|
452
|
-
};
|
|
453
|
-
this.handlers.onReplayStart?.(message.total);
|
|
454
|
-
break;
|
|
455
|
-
case "replay.progress":
|
|
456
|
-
this.replayProgress.received = message.received;
|
|
457
|
-
this.handlers.onReplayProgress?.(message.received, this.replayProgress.total);
|
|
458
|
-
break;
|
|
459
|
-
case "replay.complete":
|
|
460
|
-
this.isReplaying = false;
|
|
461
|
-
this.handlers.onReplayComplete?.(message.total);
|
|
462
|
-
break;
|
|
463
|
-
case "error":
|
|
464
|
-
this.handlers.onError?.(message.message, message.code);
|
|
465
|
-
break;
|
|
466
|
-
case "token.expiring":
|
|
467
|
-
this.handlers.onTokenExpiring?.(message.data.secondsRemaining);
|
|
468
|
-
this.handleTokenExpiring();
|
|
469
|
-
break;
|
|
470
|
-
case "token.expired":
|
|
471
|
-
this.handlers.onTokenExpired?.();
|
|
472
|
-
break;
|
|
473
|
-
case "backpressure.warning":
|
|
474
|
-
this.handlers.onBackpressureWarning?.(message.data.droppedCount, message.data.since, message.data.totalDropped);
|
|
475
|
-
break;
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
trackExecutionContext(data) {
|
|
479
|
-
if (typeof data !== "object" || data === null) return;
|
|
480
|
-
const eventData = data;
|
|
481
|
-
if (eventData.executionId) {
|
|
482
|
-
this.currentExecutionId = eventData.executionId;
|
|
483
|
-
this.saveReplayState();
|
|
484
|
-
}
|
|
485
|
-
if (eventData.type === "execution.started" && eventData.sessionId) {
|
|
486
|
-
this.currentSessionId = eventData.sessionId;
|
|
487
|
-
this.saveReplayState();
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
async handleTokenExpiring() {
|
|
491
|
-
if (!this.config.onTokenRefresh || this.isRefreshingToken) return;
|
|
492
|
-
this.isRefreshingToken = true;
|
|
493
|
-
try {
|
|
494
|
-
const result = await this.config.onTokenRefresh();
|
|
495
|
-
this.updateToken(result.token);
|
|
496
|
-
} catch (error) {
|
|
497
|
-
this.handlers.onError?.(`Token refresh failed: ${error instanceof Error ? error.message : String(error)}`, "TOKEN_REFRESH_FAILED");
|
|
498
|
-
} finally {
|
|
499
|
-
this.isRefreshingToken = false;
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
send(message) {
|
|
503
|
-
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
504
|
-
this.ws.send(JSON.stringify(message));
|
|
505
|
-
this.messagesSent++;
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
sendWithResponse(message) {
|
|
509
|
-
return new Promise((resolve, reject) => {
|
|
510
|
-
const id = `msg_${++this.messageIdCounter}`;
|
|
511
|
-
this.pendingCallbacks.set(id, {
|
|
512
|
-
resolve,
|
|
513
|
-
reject
|
|
514
|
-
});
|
|
515
|
-
setTimeout(() => {
|
|
516
|
-
if (this.pendingCallbacks.has(id)) {
|
|
517
|
-
this.pendingCallbacks.delete(id);
|
|
518
|
-
reject(/* @__PURE__ */ new Error("Request timeout"));
|
|
519
|
-
}
|
|
520
|
-
}, 1e4);
|
|
521
|
-
this.send({
|
|
522
|
-
...message,
|
|
523
|
-
id
|
|
524
|
-
});
|
|
525
|
-
});
|
|
526
|
-
}
|
|
527
|
-
restoreSubscriptions() {
|
|
528
|
-
const channels = this.config.channels;
|
|
529
|
-
const replayOptions = {};
|
|
530
|
-
if (this.lastEventId) replayOptions.lastEventId = this.lastEventId;
|
|
531
|
-
if (this.currentExecutionId) replayOptions.executionId = this.currentExecutionId;
|
|
532
|
-
if (this.currentSessionId) replayOptions.sessionId = this.currentSessionId;
|
|
533
|
-
const hasReplayState = Object.keys(replayOptions).length > 0;
|
|
534
|
-
if (hasReplayState) {
|
|
535
|
-
this.isReplaying = true;
|
|
536
|
-
this.replayProgress = {
|
|
537
|
-
total: 0,
|
|
538
|
-
received: 0
|
|
539
|
-
};
|
|
540
|
-
}
|
|
541
|
-
this.send({
|
|
542
|
-
type: "subscribe",
|
|
543
|
-
channels,
|
|
544
|
-
...hasReplayState ? { replayOptions } : {}
|
|
545
|
-
});
|
|
546
|
-
}
|
|
547
|
-
startPingInterval() {
|
|
548
|
-
this.stopPingInterval();
|
|
549
|
-
this.pingInterval = setInterval(() => {
|
|
550
|
-
this.sendPing();
|
|
551
|
-
}, this.config.pingIntervalMs);
|
|
552
|
-
}
|
|
553
|
-
stopPingInterval() {
|
|
554
|
-
if (this.pingInterval) {
|
|
555
|
-
clearInterval(this.pingInterval);
|
|
556
|
-
this.pingInterval = null;
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
sendPing() {
|
|
560
|
-
if (this.ws?.readyState !== WebSocket.OPEN) return;
|
|
561
|
-
const timeSinceLastPong = this.lastPongAt ? Date.now() - this.lastPongAt : 0;
|
|
562
|
-
if (this.lastPongAt && timeSinceLastPong > this.config.pongTimeoutMs) {
|
|
563
|
-
this.missedPongCount++;
|
|
564
|
-
this.connectionMetrics = {
|
|
565
|
-
...this.connectionMetrics,
|
|
566
|
-
missedPongCount: this.missedPongCount
|
|
567
|
-
};
|
|
568
|
-
this.updateConnectionQuality();
|
|
569
|
-
if (this.missedPongCount >= this.config.maxMissedPongs) {
|
|
570
|
-
this.ws?.close(4e3, "Pong timeout - connection unresponsive");
|
|
571
|
-
return;
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
this.lastPingAt = Date.now();
|
|
575
|
-
this.lastPingSentAt = Date.now();
|
|
576
|
-
this.send({ type: "ping" });
|
|
577
|
-
this.pongTimeout = setTimeout(() => {
|
|
578
|
-
this.missedPongCount++;
|
|
579
|
-
this.connectionMetrics = {
|
|
580
|
-
...this.connectionMetrics,
|
|
581
|
-
missedPongCount: this.missedPongCount
|
|
582
|
-
};
|
|
583
|
-
this.updateConnectionQuality();
|
|
584
|
-
if (this.missedPongCount >= this.config.maxMissedPongs) this.ws?.close(4e3, "Pong timeout - connection unresponsive");
|
|
585
|
-
}, this.config.pongTimeoutMs);
|
|
586
|
-
}
|
|
587
|
-
clearPongTimeout() {
|
|
588
|
-
if (this.pongTimeout) {
|
|
589
|
-
clearTimeout(this.pongTimeout);
|
|
590
|
-
this.pongTimeout = null;
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
scheduleReconnect() {
|
|
594
|
-
if (this.reconnectTimer) return;
|
|
595
|
-
this.reconnectAttempts++;
|
|
596
|
-
const delay = Math.min(this.config.initialReconnectDelayMs * 2 ** (this.reconnectAttempts - 1), this.config.maxReconnectDelayMs);
|
|
597
|
-
const jitter = delay * .3 * (Math.random() * 2 - 1);
|
|
598
|
-
this.reconnectTimer = setTimeout(() => {
|
|
599
|
-
this.reconnectTimer = null;
|
|
600
|
-
this.connect();
|
|
601
|
-
}, delay + jitter);
|
|
602
|
-
}
|
|
603
|
-
cleanup() {
|
|
604
|
-
this.stopPingInterval();
|
|
605
|
-
this.clearPongTimeout();
|
|
606
|
-
if (this.reconnectTimer) {
|
|
607
|
-
clearTimeout(this.reconnectTimer);
|
|
608
|
-
this.reconnectTimer = null;
|
|
609
|
-
}
|
|
610
|
-
for (const [id, callback] of this.pendingCallbacks) {
|
|
611
|
-
callback.reject(/* @__PURE__ */ new Error("Connection closed"));
|
|
612
|
-
this.pendingCallbacks.delete(id);
|
|
613
|
-
}
|
|
614
|
-
}
|
|
615
|
-
updateConnectionMetrics(latency, pongTime) {
|
|
616
|
-
const avgLatency = this.pingLatencyHistory.length > 0 ? this.pingLatencyHistory.reduce((a, b) => a + b, 0) / this.pingLatencyHistory.length : null;
|
|
617
|
-
this.connectionMetrics = {
|
|
618
|
-
...this.connectionMetrics,
|
|
619
|
-
lastPingLatencyMs: latency,
|
|
620
|
-
avgPingLatencyMs: avgLatency,
|
|
621
|
-
missedPongCount: this.missedPongCount,
|
|
622
|
-
lastPongAt: pongTime
|
|
623
|
-
};
|
|
624
|
-
this.updateConnectionQuality();
|
|
625
|
-
}
|
|
626
|
-
updateConnectionQuality() {
|
|
627
|
-
const isConnected = this.state === "connected";
|
|
628
|
-
const quality = calculateConnectionQuality(this.connectionMetrics, isConnected);
|
|
629
|
-
if (this.connectionMetrics.quality !== quality) {
|
|
630
|
-
this.connectionMetrics = {
|
|
631
|
-
...this.connectionMetrics,
|
|
632
|
-
quality
|
|
633
|
-
};
|
|
634
|
-
this.handlers.onMetricsChange?.(this.connectionMetrics);
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
trackReconnection() {
|
|
638
|
-
const now = Date.now();
|
|
639
|
-
this.connectionMetrics = {
|
|
640
|
-
...this.connectionMetrics,
|
|
641
|
-
reconnectCount: this.connectionMetrics.reconnectCount + 1,
|
|
642
|
-
lastReconnectAt: now
|
|
643
|
-
};
|
|
644
|
-
this.pingLatencyHistory = [];
|
|
645
|
-
this.updateConnectionQuality();
|
|
646
|
-
}
|
|
647
|
-
loadReplayState() {
|
|
648
|
-
if (!this.config.enableReplayPersistence) return;
|
|
649
|
-
const prefix = this.config.replayStorageKeyPrefix;
|
|
650
|
-
try {
|
|
651
|
-
this.lastEventId = this.config.replayStorage.getItem(prefix + STORAGE_KEYS.lastEventId);
|
|
652
|
-
this.currentExecutionId = this.config.replayStorage.getItem(prefix + STORAGE_KEYS.executionId);
|
|
653
|
-
this.currentSessionId = this.config.replayStorage.getItem(prefix + STORAGE_KEYS.sessionId);
|
|
654
|
-
} catch {}
|
|
655
|
-
}
|
|
656
|
-
saveReplayState() {
|
|
657
|
-
if (!this.config.enableReplayPersistence) return;
|
|
658
|
-
const prefix = this.config.replayStorageKeyPrefix;
|
|
659
|
-
try {
|
|
660
|
-
if (this.lastEventId) this.config.replayStorage.setItem(prefix + STORAGE_KEYS.lastEventId, this.lastEventId);
|
|
661
|
-
if (this.currentExecutionId) this.config.replayStorage.setItem(prefix + STORAGE_KEYS.executionId, this.currentExecutionId);
|
|
662
|
-
if (this.currentSessionId) this.config.replayStorage.setItem(prefix + STORAGE_KEYS.sessionId, this.currentSessionId);
|
|
663
|
-
} catch {}
|
|
664
|
-
}
|
|
665
|
-
};
|
|
666
|
-
//#endregion
|
|
667
|
-
export { INITIAL_METRICS, SessionGatewayClient, calculateConnectionQuality };
|
|
1
|
+
const a0_0x18574f=a0_0x4556;(function(_0xa740cc,_0x3fb0b9){const _0x24351a=a0_0x4556,_0x2ebd03=_0xa740cc();while(!![]){try{const _0x31719c=-parseInt(_0x24351a(0x25a))/0x1*(-parseInt(_0x24351a(0x2a5))/0x2)+-parseInt(_0x24351a(0x255))/0x3+parseInt(_0x24351a(0x1dd))/0x4+parseInt(_0x24351a(0x245))/0x5+parseInt(_0x24351a(0x1f6))/0x6+-parseInt(_0x24351a(0x1e7))/0x7*(-parseInt(_0x24351a(0x265))/0x8)+-parseInt(_0x24351a(0x25d))/0x9;if(_0x31719c===_0x3fb0b9)break;else _0x2ebd03['push'](_0x2ebd03['shift']());}catch(_0x2e5b97){_0x2ebd03['push'](_0x2ebd03['shift']());}}}(a0_0x594e,0xcc52c));const INITIAL_METRICS={'\x6c\x61\x73\x74\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':null,'\x61\x76\x67\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':null,'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':0x0,'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x43\x6f\x75\x6e\x74':0x0,'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':null,'\x6c\x61\x73\x74\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74':null,'\x71\x75\x61\x6c\x69\x74\x79':'\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64'};function calculateConnectionQuality(_0x48a5ea,_0x2ff699){const _0x150eb9=a0_0x4556,_0x3350ab={'\x78\x41\x68\x79\x51':'\x70\x6f\x6f\x72','\x76\x49\x6c\x4c\x64':function(_0x47b167,_0x4c5059){return _0x47b167!==_0x4c5059;},'\x4f\x54\x72\x6a\x52':_0x150eb9(0x22a),'\x45\x4b\x76\x7a\x4e':function(_0x54947b,_0x3bf9ab){return _0x54947b<_0x3bf9ab;},'\x63\x70\x48\x4b\x66':_0x150eb9(0x1ff),'\x4c\x59\x70\x65\x62':function(_0x2f2169,_0x4ec57e){return _0x2f2169<=_0x4ec57e;},'\x78\x56\x54\x76\x62':_0x150eb9(0x26e)};if(!_0x2ff699)return'\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64';const {avgPingLatencyMs:_0x647fb7,missedPongCount:_0x240dd1,reconnectCount:_0x5b85ce,lastReconnectAt:_0x327704}=_0x48a5ea,_0x3ddd10=_0x327704&&Date['\x6e\x6f\x77']()-_0x327704<0x12c*0x3e8;if(_0x240dd1>=0x2||_0x3ddd10&&_0x5b85ce>0x1)return _0x3350ab[_0x150eb9(0x268)];if(_0x240dd1>=0x1||_0x3350ab['\x76\x49\x6c\x4c\x64'](_0x647fb7,null)&&_0x647fb7>0x3e8||_0x3ddd10)return _0x3350ab[_0x150eb9(0x20b)];if(_0x647fb7!==null&&_0x3350ab[_0x150eb9(0x20f)](_0x647fb7,0x64)&&_0x5b85ce===0x0)return _0x3350ab[_0x150eb9(0x26c)];if(_0x647fb7!==null&&_0x3350ab['\x4c\x59\x70\x65\x62'](_0x647fb7,0x12c))return _0x150eb9(0x26e);return _0x3350ab[_0x150eb9(0x2b0)];}const DEFAULT_CONFIG={'\x74\x72\x61\x6e\x73\x70\x6f\x72\x74':'\x77\x65\x62\x73\x6f\x63\x6b\x65\x74','\x63\x68\x61\x6e\x6e\x65\x6c\x73':['\x2a'],'\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74':!![],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73':0xa,'\x69\x6e\x69\x74\x69\x61\x6c\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':0x3e8,'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':0x7530,'\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c\x4d\x73':0x7530,'\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74\x4d\x73':0x2710,'\x6d\x61\x78\x4d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x73':0x2,'\x65\x6e\x61\x62\x6c\x65\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e':!![],'\x6d\x61\x78\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x53\x69\x7a\x65':0x3e8,'\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65':![],'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78':a0_0x18574f(0x221),'\x6c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79\x53\x69\x7a\x65':0xa},STORAGE_KEYS={'\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64':a0_0x18574f(0x288),'\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64':'\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x5f\x69\x64','\x73\x65\x73\x73\x69\x6f\x6e\x49\x64':a0_0x18574f(0x24f)},WIRE_TYPE_MAP={'\x73\x69\x64\x65\x63\x61\x72\x2e\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64':a0_0x18574f(0x28a),'\x73\x69\x64\x65\x63\x61\x72\x2e\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64':a0_0x18574f(0x259),'\x73\x69\x64\x65\x63\x61\x72\x2e\x6e\x6f\x74\x5f\x66\x6f\x75\x6e\x64':a0_0x18574f(0x212),'\x73\x69\x64\x65\x63\x61\x72\x2e\x72\x65\x61\x64\x79':a0_0x18574f(0x29a)};var MemoryStorage=class{[a0_0x18574f(0x28b)]=new Map();['\x67\x65\x74\x49\x74\x65\x6d'](_0x5aa495){const _0x553ebe=a0_0x18574f;return this[_0x553ebe(0x28b)][_0x553ebe(0x27d)](_0x5aa495)??null;}['\x73\x65\x74\x49\x74\x65\x6d'](_0x27d48e,_0x5720f1){const _0x4c5e25=a0_0x18574f;this[_0x4c5e25(0x28b)]['\x73\x65\x74'](_0x27d48e,_0x5720f1);}['\x72\x65\x6d\x6f\x76\x65\x49\x74\x65\x6d'](_0x4dcb4d){const _0x1eb62d=a0_0x18574f;this['\x73\x74\x6f\x72\x65'][_0x1eb62d(0x22c)](_0x4dcb4d);}},SessionGatewayClient=class{['\x77\x73']=null;[a0_0x18574f(0x274)];['\x68\x61\x6e\x64\x6c\x65\x72\x73'];[a0_0x18574f(0x260)];[a0_0x18574f(0x1d4)]=![];['\x73\x74\x61\x74\x65']='\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64';[a0_0x18574f(0x252)]=null;[a0_0x18574f(0x2b2)]=![];[a0_0x18574f(0x294)]=null;['\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74']=null;['\x6c\x61\x73\x74\x50\x69\x6e\x67\x53\x65\x6e\x74\x41\x74']=null;['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74']=0x0;[a0_0x18574f(0x229)]=0x0;['\x6d\x65\x73\x73\x61\x67\x65\x73\x52\x65\x63\x65\x69\x76\x65\x64']=0x0;[a0_0x18574f(0x299)]=0x0;[a0_0x18574f(0x293)]=0x0;['\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x73\x53\x6b\x69\x70\x70\x65\x64']=0x0;[a0_0x18574f(0x232)]=null;[a0_0x18574f(0x2a0)]=null;['\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74']=null;[a0_0x18574f(0x27a)]=new Map();['\x6d\x65\x73\x73\x61\x67\x65\x49\x64\x43\x6f\x75\x6e\x74\x65\x72']=0x0;['\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x45\x76\x65\x6e\x74\x49\x64\x73']=new Set();[a0_0x18574f(0x247)]=[];[a0_0x18574f(0x271)]={...INITIAL_METRICS};['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64']=null;[a0_0x18574f(0x1f2)]=null;['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64']=null;[a0_0x18574f(0x262)]=![];[a0_0x18574f(0x295)]={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0};constructor(_0x36f3a9){const _0x334433=a0_0x18574f,_0x4a9d8c={'\x41\x65\x43\x4a\x6c':_0x334433(0x249),'\x47\x48\x58\x49\x4b':function(_0x468970,_0x54fdaa){return _0x468970 in _0x54fdaa;},'\x76\x75\x46\x58\x77':'\x5f\x5f\x74\x65\x73\x74\x5f\x5f'};let _0x20a531;if(_0x36f3a9[_0x334433(0x20e)])_0x20a531=_0x36f3a9[_0x334433(0x20e)];else{if(typeof globalThis!==_0x4a9d8c[_0x334433(0x231)]&&_0x4a9d8c[_0x334433(0x227)](_0x334433(0x1ec),globalThis))try{const _0x54a33e=_0x4a9d8c['\x76\x75\x46\x58\x77'];localStorage[_0x334433(0x23c)](_0x54a33e,_0x54a33e),localStorage[_0x334433(0x2a6)](_0x54a33e),_0x20a531=localStorage;}catch{_0x20a531=new MemoryStorage();}else _0x20a531=new MemoryStorage();}this[_0x334433(0x274)]={'\x75\x72\x6c':_0x36f3a9[_0x334433(0x286)],'\x73\x65\x73\x73\x69\x6f\x6e\x49\x64':_0x36f3a9[_0x334433(0x1da)],'\x74\x6f\x6b\x65\x6e':_0x36f3a9[_0x334433(0x2a1)],'\x6f\x6e\x54\x6f\x6b\x65\x6e\x52\x65\x66\x72\x65\x73\x68':_0x36f3a9['\x6f\x6e\x54\x6f\x6b\x65\x6e\x52\x65\x66\x72\x65\x73\x68'],'\x74\x72\x61\x6e\x73\x70\x6f\x72\x74':_0x36f3a9['\x74\x72\x61\x6e\x73\x70\x6f\x72\x74']??DEFAULT_CONFIG['\x74\x72\x61\x6e\x73\x70\x6f\x72\x74'],'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x36f3a9[_0x334433(0x21a)]??DEFAULT_CONFIG['\x63\x68\x61\x6e\x6e\x65\x6c\x73'],'\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74':_0x36f3a9[_0x334433(0x2a7)]??DEFAULT_CONFIG['\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74'],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73':_0x36f3a9[_0x334433(0x203)]??DEFAULT_CONFIG['\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73'],'\x69\x6e\x69\x74\x69\x61\x6c\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':_0x36f3a9['\x69\x6e\x69\x74\x69\x61\x6c\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73']??DEFAULT_CONFIG[_0x334433(0x267)],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':_0x36f3a9['\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73']??DEFAULT_CONFIG[_0x334433(0x24a)],'\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c\x4d\x73':_0x36f3a9[_0x334433(0x1e9)]??DEFAULT_CONFIG[_0x334433(0x1e9)],'\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74\x4d\x73':_0x36f3a9[_0x334433(0x26f)]??DEFAULT_CONFIG['\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74\x4d\x73'],'\x6d\x61\x78\x4d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x73':_0x36f3a9[_0x334433(0x251)]??DEFAULT_CONFIG[_0x334433(0x251)],'\x65\x6e\x61\x62\x6c\x65\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e':_0x36f3a9[_0x334433(0x223)]??DEFAULT_CONFIG[_0x334433(0x223)],'\x6d\x61\x78\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x53\x69\x7a\x65':_0x36f3a9[_0x334433(0x29b)]??DEFAULT_CONFIG[_0x334433(0x29b)],'\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65':_0x36f3a9['\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65']??DEFAULT_CONFIG[_0x334433(0x1ea)],'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65':_0x20a531,'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78':_0x36f3a9[_0x334433(0x225)]??DEFAULT_CONFIG['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78'],'\x6c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79\x53\x69\x7a\x65':_0x36f3a9[_0x334433(0x21b)]??DEFAULT_CONFIG[_0x334433(0x21b)]},this[_0x334433(0x27f)]=_0x36f3a9[_0x334433(0x27f)]??{},this[_0x334433(0x260)]=_0x36f3a9[_0x334433(0x2a1)];if(this[_0x334433(0x274)][_0x334433(0x1ea)])this['\x6c\x6f\x61\x64\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65']();}['\x63\x6f\x6e\x6e\x65\x63\x74'](){const _0x5149c4=a0_0x18574f,_0x81ef39={'\x59\x4c\x6b\x6c\x41':_0x5149c4(0x27b),'\x4e\x6c\x72\x64\x51':function(_0x9486fb,_0x2e07b1){return _0x9486fb===_0x2e07b1;},'\x52\x73\x68\x43\x71':_0x5149c4(0x261)};if(this['\x73\x74\x61\x74\x65']===_0x81ef39[_0x5149c4(0x1cf)]||_0x81ef39[_0x5149c4(0x266)](this[_0x5149c4(0x1e8)],_0x5149c4(0x261)))return;const _0x5029eb=this[_0x5149c4(0x2b2)];this[_0x5149c4(0x2a9)](_0x5029eb?_0x5149c4(0x236):_0x81ef39['\x52\x73\x68\x43\x71']),this[_0x5149c4(0x234)]();}[a0_0x18574f(0x234)](){const _0x1c640c=a0_0x18574f,_0x58076b=new URL(this[_0x1c640c(0x274)][_0x1c640c(0x286)]);_0x58076b['\x73\x65\x61\x72\x63\x68\x50\x61\x72\x61\x6d\x73'][_0x1c640c(0x239)](_0x1c640c(0x2a1),this['\x63\x75\x72\x72\x65\x6e\x74\x54\x6f\x6b\x65\x6e']),this['\x77\x73']=new WebSocket(_0x58076b[_0x1c640c(0x228)]()),this['\x77\x73']['\x6f\x6e\x6f\x70\x65\x6e']=()=>this[_0x1c640c(0x209)](),this['\x77\x73'][_0x1c640c(0x220)]=_0x357811=>this[_0x1c640c(0x1ee)](_0x357811[_0x1c640c(0x21e)],_0x357811['\x72\x65\x61\x73\x6f\x6e']),this['\x77\x73'][_0x1c640c(0x284)]=_0x50a9d8=>{},this['\x77\x73'][_0x1c640c(0x1fe)]=_0x520fe7=>this[_0x1c640c(0x291)](_0x520fe7[_0x1c640c(0x2a2)]);}[a0_0x18574f(0x217)](){const _0x56431a=a0_0x18574f,_0x105fcc={'\x72\x4a\x4f\x66\x6b':_0x56431a(0x224),'\x41\x6e\x45\x78\x46':_0x56431a(0x214)};this['\x63\x6c\x65\x61\x6e\x75\x70'](),this['\x77\x73']&&(this['\x77\x73'][_0x56431a(0x282)](0x3e8,_0x105fcc[_0x56431a(0x269)]),this['\x77\x73']=null),this[_0x56431a(0x2a9)](_0x105fcc[_0x56431a(0x29d)]);}async[a0_0x18574f(0x2ad)](_0x376d6f){const _0xac5129=a0_0x18574f,_0x466803={'\x4e\x4a\x65\x59\x66':'\x73\x75\x62\x73\x63\x72\x69\x62\x65'};return(await this['\x73\x65\x6e\x64\x57\x69\x74\x68\x52\x65\x73\x70\x6f\x6e\x73\x65']({'\x74\x79\x70\x65':_0x466803[_0xac5129(0x26a)],'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x376d6f}))[_0xac5129(0x21a)];}async[a0_0x18574f(0x21d)](_0xeaf958){const _0x48e71d=a0_0x18574f,_0x190ed8={'\x49\x6d\x78\x6b\x77':_0x48e71d(0x21d)};return(await this['\x73\x65\x6e\x64\x57\x69\x74\x68\x52\x65\x73\x70\x6f\x6e\x73\x65']({'\x74\x79\x70\x65':_0x190ed8[_0x48e71d(0x28e)],'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0xeaf958}))[_0x48e71d(0x21a)];}async[a0_0x18574f(0x280)](){const _0x3c65b1=a0_0x18574f,_0x12d1b8=Date[_0x3c65b1(0x242)]();return await this[_0x3c65b1(0x1d3)]({'\x74\x79\x70\x65':'\x70\x69\x6e\x67'}),Date[_0x3c65b1(0x242)]()-_0x12d1b8;}[a0_0x18574f(0x1d8)](_0xb84dcd){const _0x409653=a0_0x18574f,_0x2e4cae={'\x62\x65\x50\x46\x57':_0x409653(0x1d8)};this[_0x409653(0x1eb)]({'\x74\x79\x70\x65':_0x2e4cae[_0x409653(0x240)],'\x73\x69\x6e\x63\x65':_0xb84dcd});}['\x73\x65\x6e\x64\x54\x65\x72\x6d\x69\x6e\x61\x6c\x49\x6e\x70\x75\x74'](_0x3de9aa,_0x56cc18){const _0x1df812=a0_0x18574f;if(!this[_0x1df812(0x1d5)]())return![];return this[_0x1df812(0x1eb)]({'\x74\x79\x70\x65':'\x74\x65\x72\x6d\x69\x6e\x61\x6c\x2e\x69\x6e\x70\x75\x74','\x64\x61\x74\x61':{'\x74\x65\x72\x6d\x69\x6e\x61\x6c\x49\x64':_0x3de9aa,'\x69\x6e\x70\x75\x74':_0x56cc18}}),!![];}[a0_0x18574f(0x1ed)](_0x450e84,_0x50cb67){const _0x29aaa1=a0_0x18574f;this['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64']=_0x450e84;if(_0x50cb67)this[_0x29aaa1(0x1f2)]=_0x50cb67;this[_0x29aaa1(0x208)]();}[a0_0x18574f(0x292)](){const _0x70d3cd=a0_0x18574f,_0x31f6a4={'\x6a\x58\x74\x63\x52':function(_0x42e04a,_0x27bee4){return _0x42e04a+_0x27bee4;}};this[_0x70d3cd(0x1e3)]=null,this[_0x70d3cd(0x1f2)]=null,this[_0x70d3cd(0x219)]=null,this[_0x70d3cd(0x262)]=![],this[_0x70d3cd(0x295)]={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0},this['\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x45\x76\x65\x6e\x74\x49\x64\x73'][_0x70d3cd(0x25c)](),this[_0x70d3cd(0x283)]=0x0;if(this[_0x70d3cd(0x274)][_0x70d3cd(0x1ea)]){const _0x39ebee=this[_0x70d3cd(0x274)][_0x70d3cd(0x225)];try{this[_0x70d3cd(0x274)][_0x70d3cd(0x20e)][_0x70d3cd(0x2a6)](_0x39ebee+STORAGE_KEYS[_0x70d3cd(0x1e3)]),this[_0x70d3cd(0x274)][_0x70d3cd(0x20e)][_0x70d3cd(0x2a6)](_0x31f6a4[_0x70d3cd(0x278)](_0x39ebee,STORAGE_KEYS[_0x70d3cd(0x238)])),this['\x63\x6f\x6e\x66\x69\x67']['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65'][_0x70d3cd(0x2a6)](_0x39ebee+STORAGE_KEYS[_0x70d3cd(0x1da)]);}catch{}}}[a0_0x18574f(0x1d1)](){const _0x3c9301=a0_0x18574f;return{'\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67':this['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67'],'\x70\x72\x6f\x67\x72\x65\x73\x73':{...this[_0x3c9301(0x295)]}};}[a0_0x18574f(0x1d6)](){const _0x219c59=a0_0x18574f;return{'\x73\x74\x61\x74\x65':this[_0x219c59(0x1e8)],'\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x41\x74':this[_0x219c59(0x252)],'\x6c\x61\x73\x74\x50\x69\x6e\x67\x41\x74':this['\x6c\x61\x73\x74\x50\x69\x6e\x67\x41\x74'],'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':this[_0x219c59(0x250)],'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73':this[_0x219c59(0x229)],'\x6d\x65\x73\x73\x61\x67\x65\x73\x52\x65\x63\x65\x69\x76\x65\x64':this[_0x219c59(0x2b1)],'\x6d\x65\x73\x73\x61\x67\x65\x73\x53\x65\x6e\x74':this[_0x219c59(0x299)],'\x65\x76\x65\x6e\x74\x73\x52\x65\x63\x65\x69\x76\x65\x64':this[_0x219c59(0x293)],'\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x73\x53\x6b\x69\x70\x70\x65\x64':this[_0x219c59(0x283)],'\x6d\x65\x74\x72\x69\x63\x73':{...this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']},'\x72\x65\x70\x6c\x61\x79':this[_0x219c59(0x1d1)]()};}[a0_0x18574f(0x273)](){const _0x189684=a0_0x18574f;return this[_0x189684(0x1e8)];}[a0_0x18574f(0x1d5)](){const _0x51e1cd=a0_0x18574f,_0x1286b2={'\x74\x47\x51\x47\x4b':'\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64'};return this[_0x51e1cd(0x1e8)]===_0x1286b2[_0x51e1cd(0x215)];}[a0_0x18574f(0x2aa)](){const _0x598103=a0_0x18574f;return this[_0x598103(0x271)]['\x71\x75\x61\x6c\x69\x74\x79'];}[a0_0x18574f(0x200)](){const _0x4acb2d=a0_0x18574f;return{...this[_0x4acb2d(0x271)]};}[a0_0x18574f(0x296)](){const _0x20a5e8=a0_0x18574f;this['\x70\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79']=[],this[_0x20a5e8(0x271)]={...INITIAL_METRICS},this['\x68\x61\x6e\x64\x6c\x65\x72\x73']['\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73\x43\x68\x61\x6e\x67\x65']?.(this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']);}[a0_0x18574f(0x27e)](_0x41c199){const _0x3cc095=a0_0x18574f,_0x46f09c={'\x77\x6d\x62\x76\x47':function(_0x84de,_0x5db7cb){return _0x84de===_0x5db7cb;}};this[_0x3cc095(0x260)]=_0x41c199;if(_0x46f09c[_0x3cc095(0x1cd)](this[_0x3cc095(0x1e8)],'\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64')&&this['\x77\x73'])this['\x77\x73'][_0x3cc095(0x282)](0x3e8,'\x54\x6f\x6b\x65\x6e\x20\x72\x65\x66\x72\x65\x73\x68\x65\x64');}[a0_0x18574f(0x1e6)](){const _0x2e5add=a0_0x18574f;return this[_0x2e5add(0x260)];}[a0_0x18574f(0x2a9)](_0x34fe97){const _0x46f3f4=a0_0x18574f,_0x412be3={'\x42\x78\x72\x4f\x75':function(_0x5c4bcd,_0x489d3d){return _0x5c4bcd!==_0x489d3d;}};_0x412be3[_0x46f3f4(0x1d0)](this['\x73\x74\x61\x74\x65'],_0x34fe97)&&(this['\x73\x74\x61\x74\x65']=_0x34fe97,this[_0x46f3f4(0x263)](),this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0x46f3f4(0x218)]?.(_0x34fe97));}[a0_0x18574f(0x209)](){const _0x55348b=a0_0x18574f,_0x31d516=this[_0x55348b(0x2b2)];this[_0x55348b(0x2b2)]=!![],this[_0x55348b(0x2a9)](_0x55348b(0x27b)),this['\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x41\x74']=Date[_0x55348b(0x242)](),this[_0x55348b(0x229)]=0x0,this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74']=0x0,this[_0x55348b(0x216)](),this[_0x55348b(0x26b)](),_0x31d516&&(this['\x74\x72\x61\x63\x6b\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e'](),this[_0x55348b(0x27f)][_0x55348b(0x235)]?.());}[a0_0x18574f(0x1ee)](_0x878845,_0x541a50){const _0x3de07e=a0_0x18574f,_0x2eed41={'\x52\x64\x49\x42\x71':_0x3de07e(0x236)};this[_0x3de07e(0x1f9)](),this[_0x3de07e(0x27f)][_0x3de07e(0x1de)]?.(_0x878845,_0x541a50);if(this[_0x3de07e(0x274)]['\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74']&&this[_0x3de07e(0x229)]<this[_0x3de07e(0x274)][_0x3de07e(0x203)])this[_0x3de07e(0x2a9)](_0x2eed41[_0x3de07e(0x1fb)]),this[_0x3de07e(0x207)]();else this[_0x3de07e(0x2a9)](_0x3de07e(0x214));}[a0_0x18574f(0x291)](_0x24025f){const _0x283059=a0_0x18574f,_0x3254d8={'\x58\x46\x61\x57\x55':_0x283059(0x1f7),'\x71\x6c\x69\x4f\x6e':function(_0xfadef6,_0x1f17eb){return _0xfadef6!==_0x1f17eb;},'\x6c\x74\x65\x4e\x4e':'\x6f\x62\x6a\x65\x63\x74','\x53\x47\x58\x79\x62':function(_0x5bce04,_0xa9b1ab){return _0x5bce04===_0xa9b1ab;},'\x65\x71\x68\x6c\x65':_0x283059(0x243),'\x4d\x66\x45\x55\x79':function(_0x207607,_0x50d65b){return _0x207607 in _0x50d65b;},'\x45\x41\x5a\x6f\x5a':function(_0xd09654,_0x4ee7c7){return _0xd09654>_0x4ee7c7;},'\x6c\x48\x48\x52\x49':function(_0x2271d6,_0x40e474){return _0x2271d6*_0x40e474;}};this['\x6d\x65\x73\x73\x61\x67\x65\x73\x52\x65\x63\x65\x69\x76\x65\x64']++;try{const _0x5c5138=JSON[_0x283059(0x253)](_0x24025f);if(!_0x5c5138[_0x283059(0x1d9)]&&_0x5c5138[_0x283059(0x1f1)])_0x5c5138[_0x283059(0x1d9)]=_0x5c5138['\x6d\x65\x73\x73\x61\x67\x65\x54\x79\x70\x65'];if(typeof _0x5c5138[_0x283059(0x1d9)]===_0x3254d8[_0x283059(0x202)]&&_0x3254d8['\x71\x6c\x69\x4f\x6e'](WIRE_TYPE_MAP[_0x5c5138[_0x283059(0x1d9)]],void 0x0))_0x5c5138[_0x283059(0x1d9)]=WIRE_TYPE_MAP[_0x5c5138[_0x283059(0x1d9)]];if(_0x5c5138[_0x283059(0x2a2)]&&typeof _0x5c5138[_0x283059(0x2a2)]===_0x3254d8['\x6c\x74\x65\x4e\x4e']){const _0x1aa7ed=_0x5c5138[_0x283059(0x2a2)];if(_0x1aa7ed['\x73\x69\x64\x65\x63\x61\x72\x49\x64']!==void 0x0&&_0x1aa7ed[_0x283059(0x237)]===void 0x0)_0x1aa7ed[_0x283059(0x237)]=_0x1aa7ed[_0x283059(0x1cb)];}if(_0x3254d8[_0x283059(0x1df)](_0x5c5138[_0x283059(0x1d9)],_0x283059(0x29f))&&!_0x5c5138[_0x283059(0x2a2)]&&_0x5c5138[_0x283059(0x1f0)]){const {type:_0xb1028e,messageType:_0x503a10,channel:_0x933db6,id:_0x59add5,sequenceId:_0x3adcfd,timestamp:_0x75a49,..._0x5252dc}=_0x5c5138;_0x5c5138[_0x283059(0x2a2)]=_0x5252dc;}const _0x330630=_0x5c5138;if(_0x330630[_0x283059(0x1d9)]===_0x3254d8[_0x283059(0x1db)]){this['\x68\x61\x6e\x64\x6c\x65\x50\x6f\x6e\x67'](_0x330630['\x74\x69\x6d\x65\x73\x74\x61\x6d\x70']),this[_0x283059(0x22e)](_0x330630);return;}if(_0x3254d8['\x4d\x66\x45\x55\x79']('\x69\x64',_0x330630)&&_0x330630['\x69\x64']&&this[_0x283059(0x274)]['\x65\x6e\x61\x62\x6c\x65\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e']){const _0x53ddf8=_0x330630['\x69\x64'];if(this[_0x283059(0x222)]['\x68\x61\x73'](_0x53ddf8)){this[_0x283059(0x283)]++;return;}this[_0x283059(0x222)]['\x61\x64\x64'](_0x53ddf8);if(_0x3254d8['\x45\x41\x5a\x6f\x5a'](this[_0x283059(0x222)]['\x73\x69\x7a\x65'],this['\x63\x6f\x6e\x66\x69\x67'][_0x283059(0x29b)])){const _0x56f4e7=Math[_0x283059(0x1f5)](_0x3254d8[_0x283059(0x258)](this[_0x283059(0x274)]['\x6d\x61\x78\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x53\x69\x7a\x65'],0.1));let _0x1a61a0=0x0;for(const _0x138e48 of this[_0x283059(0x222)]){if(_0x1a61a0>=_0x56f4e7)break;this['\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x45\x76\x65\x6e\x74\x49\x64\x73'][_0x283059(0x22c)](_0x138e48),_0x1a61a0++;}}this[_0x283059(0x1e3)]=_0x53ddf8,this[_0x283059(0x208)]();}this[_0x283059(0x22e)](_0x330630);}catch{}}[a0_0x18574f(0x226)](_0x1f307f){const _0x472da6=a0_0x18574f,_0x30421a={'\x49\x69\x69\x6b\x70':function(_0x32e5ee,_0x278643){return _0x32e5ee-_0x278643;}},_0x58d6a3=Date['\x6e\x6f\x77']();this[_0x472da6(0x250)]=_0x1f307f,this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74']=0x0,this[_0x472da6(0x1cc)]();if(this['\x6c\x61\x73\x74\x50\x69\x6e\x67\x53\x65\x6e\x74\x41\x74']){const _0x3ca0f7=_0x30421a[_0x472da6(0x20c)](_0x58d6a3,this[_0x472da6(0x285)]);this[_0x472da6(0x247)][_0x472da6(0x276)](_0x3ca0f7);if(this[_0x472da6(0x247)][_0x472da6(0x20d)]>this[_0x472da6(0x274)][_0x472da6(0x21b)])this[_0x472da6(0x247)][_0x472da6(0x233)]();this['\x75\x70\x64\x61\x74\x65\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'](_0x3ca0f7,_0x58d6a3);}}[a0_0x18574f(0x22e)](_0x37a71c){const _0x4177d5=a0_0x18574f,_0x39e502={'\x74\x45\x56\x6f\x61':function(_0x40918b,_0x200e38){return _0x40918b in _0x200e38;},'\x69\x42\x6b\x57\x52':_0x4177d5(0x23d),'\x7a\x63\x4e\x55\x4f':_0x4177d5(0x241),'\x70\x75\x4b\x4a\x49':_0x4177d5(0x259),'\x4c\x43\x75\x62\x79':'\x72\x65\x70\x6c\x61\x79\x2e\x73\x74\x61\x72\x74','\x7a\x67\x77\x4a\x49':'\x74\x6f\x6b\x65\x6e\x2e\x65\x78\x70\x69\x72\x65\x64','\x52\x4e\x4a\x48\x44':_0x4177d5(0x290)};if(_0x39e502[_0x4177d5(0x26d)]('\x69\x64',_0x37a71c)&&_0x37a71c['\x69\x64']){const _0x1fb7c7=this[_0x4177d5(0x27a)][_0x4177d5(0x27d)](_0x37a71c['\x69\x64']);if(_0x1fb7c7){this[_0x4177d5(0x27a)][_0x4177d5(0x22c)](_0x37a71c['\x69\x64']);if(_0x37a71c[_0x4177d5(0x1d9)]===_0x39e502[_0x4177d5(0x24c)])_0x1fb7c7[_0x4177d5(0x1e1)](new Error(_0x37a71c[_0x4177d5(0x29e)]));else _0x1fb7c7[_0x4177d5(0x1e2)](_0x39e502[_0x4177d5(0x26d)](_0x4177d5(0x2a2),_0x37a71c)?_0x37a71c[_0x4177d5(0x2a2)]:void 0x0);return;}}switch(_0x37a71c[_0x4177d5(0x1d9)]){case _0x39e502['\x7a\x63\x4e\x55\x4f']:this[_0x4177d5(0x27f)][_0x4177d5(0x27c)]?.(_0x37a71c[_0x4177d5(0x2a2)][_0x4177d5(0x1da)]);break;case _0x4177d5(0x28a):this[_0x4177d5(0x27f)]['\x6f\x6e\x52\x75\x6e\x74\x69\x6d\x65\x43\x6f\x6e\x6e\x65\x63\x74\x65\x64']?.(_0x37a71c['\x64\x61\x74\x61'][_0x4177d5(0x237)],_0x37a71c[_0x4177d5(0x2a2)][_0x4177d5(0x1fd)]);break;case _0x39e502[_0x4177d5(0x21c)]:this[_0x4177d5(0x27f)][_0x4177d5(0x297)]?.(_0x37a71c[_0x4177d5(0x2a2)][_0x4177d5(0x237)],_0x37a71c[_0x4177d5(0x2a2)][_0x4177d5(0x23d)]);break;case _0x4177d5(0x212):this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0x4177d5(0x1d7)]?.(_0x37a71c[_0x4177d5(0x2a2)]['\x73\x65\x73\x73\x69\x6f\x6e\x49\x64'],_0x37a71c[_0x4177d5(0x2a2)][_0x4177d5(0x2ab)],_0x37a71c[_0x4177d5(0x2a2)]['\x72\x65\x61\x73\x6f\x6e']);break;case'\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x72\x65\x61\x64\x79':{const _0x3f41dd=_0x37a71c[_0x4177d5(0x2a2)],_0x447f10=_0x3f41dd[_0x4177d5(0x237)]??_0x3f41dd['\x73\x69\x64\x65\x63\x61\x72\x49\x64'];if(_0x447f10)this[_0x4177d5(0x27f)][_0x4177d5(0x22f)]?.(_0x447f10);else this[_0x4177d5(0x27f)][_0x4177d5(0x1e0)]?.(_0x4177d5(0x246),_0x4177d5(0x1ce));break;}case _0x4177d5(0x29a):this[_0x4177d5(0x27f)][_0x4177d5(0x204)]?.(_0x37a71c['\x64\x61\x74\x61']);break;case _0x4177d5(0x287):this[_0x4177d5(0x27f)][_0x4177d5(0x264)]?.(_0x37a71c[_0x4177d5(0x2a2)][_0x4177d5(0x28f)],_0x37a71c[_0x4177d5(0x2a2)][_0x4177d5(0x211)],_0x37a71c[_0x4177d5(0x2a2)][_0x4177d5(0x28c)]);break;case _0x4177d5(0x289):this[_0x4177d5(0x27f)][_0x4177d5(0x24b)]?.(_0x37a71c[_0x4177d5(0x2a2)]['\x70\x6f\x72\x74']);break;case _0x4177d5(0x29f):this[_0x4177d5(0x293)]++,this[_0x4177d5(0x2a8)](_0x37a71c[_0x4177d5(0x2a2)]),this[_0x4177d5(0x27f)][_0x4177d5(0x24d)]?.(_0x37a71c['\x63\x68\x61\x6e\x6e\x65\x6c'],_0x37a71c[_0x4177d5(0x2a2)],_0x37a71c[_0x4177d5(0x25e)]);break;case _0x39e502['\x4c\x43\x75\x62\x79']:this['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67']=!![],this['\x72\x65\x70\x6c\x61\x79\x50\x72\x6f\x67\x72\x65\x73\x73']={'\x74\x6f\x74\x61\x6c':_0x37a71c[_0x4177d5(0x2af)],'\x72\x65\x63\x65\x69\x76\x65\x64':0x0},this[_0x4177d5(0x27f)][_0x4177d5(0x1ef)]?.(_0x37a71c[_0x4177d5(0x2af)]);break;case _0x4177d5(0x29c):this[_0x4177d5(0x295)]['\x72\x65\x63\x65\x69\x76\x65\x64']=_0x37a71c[_0x4177d5(0x23e)],this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0x4177d5(0x275)]?.(_0x37a71c['\x72\x65\x63\x65\x69\x76\x65\x64'],this[_0x4177d5(0x295)]['\x74\x6f\x74\x61\x6c']);break;case _0x4177d5(0x205):this['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67']=![],this[_0x4177d5(0x27f)][_0x4177d5(0x22d)]?.(_0x37a71c[_0x4177d5(0x2af)]);break;case _0x4177d5(0x23d):this['\x68\x61\x6e\x64\x6c\x65\x72\x73']['\x6f\x6e\x45\x72\x72\x6f\x72']?.(_0x37a71c[_0x4177d5(0x29e)],_0x37a71c['\x63\x6f\x64\x65']);break;case'\x74\x6f\x6b\x65\x6e\x2e\x65\x78\x70\x69\x72\x69\x6e\x67':this[_0x4177d5(0x27f)]['\x6f\x6e\x54\x6f\x6b\x65\x6e\x45\x78\x70\x69\x72\x69\x6e\x67']?.(_0x37a71c[_0x4177d5(0x2a2)][_0x4177d5(0x22b)]),this[_0x4177d5(0x20a)]();break;case _0x39e502['\x7a\x67\x77\x4a\x49']:this[_0x4177d5(0x27f)][_0x4177d5(0x230)]?.();break;case _0x39e502[_0x4177d5(0x1f3)]:this[_0x4177d5(0x27f)][_0x4177d5(0x298)]?.(_0x37a71c['\x64\x61\x74\x61']['\x64\x72\x6f\x70\x70\x65\x64\x43\x6f\x75\x6e\x74'],_0x37a71c['\x64\x61\x74\x61'][_0x4177d5(0x277)],_0x37a71c[_0x4177d5(0x2a2)]['\x74\x6f\x74\x61\x6c\x44\x72\x6f\x70\x70\x65\x64']);break;}}['\x74\x72\x61\x63\x6b\x45\x78\x65\x63\x75\x74\x69\x6f\x6e\x43\x6f\x6e\x74\x65\x78\x74'](_0x4fef02){const _0x4b946c=a0_0x18574f,_0x2a9f44={'\x4f\x46\x55\x65\x63':function(_0x1d9156,_0x389510){return _0x1d9156!==_0x389510;},'\x6c\x42\x4c\x7a\x5a':function(_0x50c38d,_0x39f23b){return _0x50c38d===_0x39f23b;},'\x44\x54\x79\x59\x58':_0x4b946c(0x1f4)};if(_0x2a9f44[_0x4b946c(0x1f8)](typeof _0x4fef02,_0x4b946c(0x23b))||_0x2a9f44[_0x4b946c(0x24e)](_0x4fef02,null))return;const _0x4d1b3b=_0x4fef02;_0x4d1b3b[_0x4b946c(0x238)]&&(this[_0x4b946c(0x1f2)]=_0x4d1b3b[_0x4b946c(0x238)],this['\x73\x61\x76\x65\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65']()),_0x2a9f44[_0x4b946c(0x24e)](_0x4d1b3b[_0x4b946c(0x1d9)],_0x2a9f44['\x44\x54\x79\x59\x58'])&&_0x4d1b3b[_0x4b946c(0x1da)]&&(this[_0x4b946c(0x219)]=_0x4d1b3b[_0x4b946c(0x1da)],this['\x73\x61\x76\x65\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65']());}async[a0_0x18574f(0x20a)](){const _0x5304a3=a0_0x18574f,_0x269be8={'\x4e\x61\x4e\x79\x4a':function(_0x1209dc,_0x4758cc){return _0x1209dc instanceof _0x4758cc;},'\x6f\x79\x56\x50\x52':function(_0x3baf7c,_0x405dcc){return _0x3baf7c(_0x405dcc);}};if(!this[_0x5304a3(0x274)][_0x5304a3(0x213)]||this['\x69\x73\x52\x65\x66\x72\x65\x73\x68\x69\x6e\x67\x54\x6f\x6b\x65\x6e'])return;this[_0x5304a3(0x1d4)]=!![];try{const _0xbaee33=await this[_0x5304a3(0x274)][_0x5304a3(0x213)]();this[_0x5304a3(0x27e)](_0xbaee33[_0x5304a3(0x2a1)]);}catch(_0x308bd7){this[_0x5304a3(0x27f)]['\x6f\x6e\x45\x72\x72\x6f\x72']?.(_0x5304a3(0x256)+(_0x269be8[_0x5304a3(0x23a)](_0x308bd7,Error)?_0x308bd7[_0x5304a3(0x29e)]:_0x269be8[_0x5304a3(0x2a4)](String,_0x308bd7)),_0x5304a3(0x1e5));}finally{this[_0x5304a3(0x1d4)]=![];}}[a0_0x18574f(0x1eb)](_0x2b9969){const _0x32f708=a0_0x18574f;this['\x77\x73']?.[_0x32f708(0x1fc)]===WebSocket['\x4f\x50\x45\x4e']&&(this['\x77\x73'][_0x32f708(0x1eb)](JSON['\x73\x74\x72\x69\x6e\x67\x69\x66\x79'](_0x2b9969)),this[_0x32f708(0x299)]++);}['\x73\x65\x6e\x64\x57\x69\x74\x68\x52\x65\x73\x70\x6f\x6e\x73\x65'](_0x198821){const _0xdccc1f={'\x75\x46\x56\x6c\x65':function(_0x4e2c45,_0x2ad4e4,_0x49717b){return _0x4e2c45(_0x2ad4e4,_0x49717b);}};return new Promise((_0x5181b7,_0x2a7197)=>{const _0x527bd3=a0_0x4556,_0x38f9db=_0x527bd3(0x2a3)+ ++this[_0x527bd3(0x28d)];this[_0x527bd3(0x27a)]['\x73\x65\x74'](_0x38f9db,{'\x72\x65\x73\x6f\x6c\x76\x65':_0x5181b7,'\x72\x65\x6a\x65\x63\x74':_0x2a7197}),_0xdccc1f[_0x527bd3(0x25b)](setTimeout,()=>{const _0x1d64d2=_0x527bd3;this[_0x1d64d2(0x27a)]['\x68\x61\x73'](_0x38f9db)&&(this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73'][_0x1d64d2(0x22c)](_0x38f9db),_0x2a7197(new Error(_0x1d64d2(0x2b4))));},0x2710),this['\x73\x65\x6e\x64']({..._0x198821,'\x69\x64':_0x38f9db});});}[a0_0x18574f(0x26b)](){const _0x787f9f=a0_0x18574f,_0xd39f5f=this['\x63\x6f\x6e\x66\x69\x67'][_0x787f9f(0x21a)],_0x1779c5={};if(this[_0x787f9f(0x1e3)])_0x1779c5[_0x787f9f(0x1e3)]=this[_0x787f9f(0x1e3)];if(this['\x63\x75\x72\x72\x65\x6e\x74\x45\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64'])_0x1779c5[_0x787f9f(0x238)]=this[_0x787f9f(0x1f2)];if(this['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64'])_0x1779c5[_0x787f9f(0x1da)]=this[_0x787f9f(0x219)];const _0x2383f1=Object['\x6b\x65\x79\x73'](_0x1779c5)[_0x787f9f(0x20d)]>0x0;_0x2383f1&&(this['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67']=!![],this['\x72\x65\x70\x6c\x61\x79\x50\x72\x6f\x67\x72\x65\x73\x73']={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0}),this[_0x787f9f(0x1eb)]({'\x74\x79\x70\x65':_0x787f9f(0x2ad),'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0xd39f5f,..._0x2383f1?{'\x72\x65\x70\x6c\x61\x79\x4f\x70\x74\x69\x6f\x6e\x73':_0x1779c5}:{}});}['\x73\x74\x61\x72\x74\x50\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c'](){const _0xaa0e24=a0_0x18574f;this[_0xaa0e24(0x2b3)](),this[_0xaa0e24(0x2a0)]=setInterval(()=>{const _0x300bec=_0xaa0e24;this[_0x300bec(0x25f)]();},this[_0xaa0e24(0x274)][_0xaa0e24(0x1e9)]);}[a0_0x18574f(0x2b3)](){const _0x21e1ff=a0_0x18574f;this['\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c']&&(clearInterval(this[_0x21e1ff(0x2a0)]),this['\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c']=null);}[a0_0x18574f(0x25f)](){const _0x43f1f0=a0_0x18574f,_0x11a31b={'\x4d\x7a\x78\x71\x6b':function(_0x2d2519,_0x40bb8a){return _0x2d2519>=_0x40bb8a;},'\x6e\x71\x48\x58\x4b':function(_0x31c025,_0x62f9d){return _0x31c025-_0x62f9d;},'\x42\x67\x6e\x4b\x57':_0x43f1f0(0x1ca)};if(this['\x77\x73']?.[_0x43f1f0(0x1fc)]!==WebSocket[_0x43f1f0(0x1e4)])return;const _0x415d30=this[_0x43f1f0(0x250)]?_0x11a31b[_0x43f1f0(0x281)](Date[_0x43f1f0(0x242)](),this[_0x43f1f0(0x250)]):0x0;if(this[_0x43f1f0(0x250)]&&_0x415d30>this[_0x43f1f0(0x274)][_0x43f1f0(0x26f)]){this[_0x43f1f0(0x257)]++,this[_0x43f1f0(0x271)]={...this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'],'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74']},this[_0x43f1f0(0x263)]();if(this[_0x43f1f0(0x257)]>=this[_0x43f1f0(0x274)][_0x43f1f0(0x251)]){this['\x77\x73']?.[_0x43f1f0(0x282)](0xfa0,_0x11a31b[_0x43f1f0(0x23f)]);return;}}this['\x6c\x61\x73\x74\x50\x69\x6e\x67\x41\x74']=Date[_0x43f1f0(0x242)](),this[_0x43f1f0(0x285)]=Date[_0x43f1f0(0x242)](),this[_0x43f1f0(0x1eb)]({'\x74\x79\x70\x65':_0x43f1f0(0x280)}),this[_0x43f1f0(0x279)]=setTimeout(()=>{const _0x38fffb=_0x43f1f0;this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74']++,this[_0x38fffb(0x271)]={...this[_0x38fffb(0x271)],'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':this[_0x38fffb(0x257)]},this[_0x38fffb(0x263)]();if(_0x11a31b[_0x38fffb(0x1dc)](this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74'],this[_0x38fffb(0x274)]['\x6d\x61\x78\x4d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x73']))this['\x77\x73']?.['\x63\x6c\x6f\x73\x65'](0xfa0,'\x50\x6f\x6e\x67\x20\x74\x69\x6d\x65\x6f\x75\x74\x20\x2d\x20\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x20\x75\x6e\x72\x65\x73\x70\x6f\x6e\x73\x69\x76\x65');},this[_0x43f1f0(0x274)][_0x43f1f0(0x26f)]);}[a0_0x18574f(0x1cc)](){const _0x3ca050=a0_0x18574f;this[_0x3ca050(0x279)]&&(clearTimeout(this[_0x3ca050(0x279)]),this['\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74']=null);}[a0_0x18574f(0x207)](){const _0x1bc7c3=a0_0x18574f,_0x41bebb={'\x59\x73\x56\x51\x53':function(_0x3180c6,_0x55d33a){return _0x3180c6*_0x55d33a;},'\x4c\x4d\x5a\x45\x78':function(_0x5c673f,_0x5b9b22,_0x4376f1){return _0x5c673f(_0x5b9b22,_0x4376f1);},'\x51\x61\x66\x7a\x67':function(_0x44536b,_0x20770d){return _0x44536b+_0x20770d;}};if(this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x54\x69\x6d\x65\x72'])return;this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73']++;const _0x50c7eb=Math['\x6d\x69\x6e'](this['\x63\x6f\x6e\x66\x69\x67'][_0x1bc7c3(0x267)]*0x2**(this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73']-0x1),this['\x63\x6f\x6e\x66\x69\x67'][_0x1bc7c3(0x24a)]),_0xe6f3d1=_0x41bebb[_0x1bc7c3(0x1fa)](_0x50c7eb*0.3,Math['\x72\x61\x6e\x64\x6f\x6d']()*0x2-0x1);this[_0x1bc7c3(0x232)]=_0x41bebb[_0x1bc7c3(0x272)](setTimeout,()=>{const _0x92d491=_0x1bc7c3;this[_0x92d491(0x232)]=null,this[_0x92d491(0x2ae)]();},_0x41bebb[_0x1bc7c3(0x201)](_0x50c7eb,_0xe6f3d1));}[a0_0x18574f(0x1f9)](){const _0x5432b3=a0_0x18574f,_0xa0aeb5={'\x79\x5a\x4d\x50\x55':function(_0xcc6f46,_0x247ed0){return _0xcc6f46(_0x247ed0);}};this['\x73\x74\x6f\x70\x50\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c'](),this[_0x5432b3(0x1cc)]();this[_0x5432b3(0x232)]&&(_0xa0aeb5[_0x5432b3(0x2ac)](clearTimeout,this[_0x5432b3(0x232)]),this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x54\x69\x6d\x65\x72']=null);for(const [_0x1a43d7,_0x2460cb]of this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73']){_0x2460cb[_0x5432b3(0x1e1)](new Error(_0x5432b3(0x210))),this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73'][_0x5432b3(0x22c)](_0x1a43d7);}}['\x75\x70\x64\x61\x74\x65\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'](_0x3b19a9,_0x2a02e2){const _0x28aa57=a0_0x18574f,_0x2ade42={'\x43\x69\x41\x53\x4f':function(_0x1a9e5b,_0x380a32){return _0x1a9e5b>_0x380a32;}},_0xc17f0f=_0x2ade42[_0x28aa57(0x248)](this[_0x28aa57(0x247)][_0x28aa57(0x20d)],0x0)?this[_0x28aa57(0x247)]['\x72\x65\x64\x75\x63\x65']((_0x489561,_0x162aec)=>_0x489561+_0x162aec,0x0)/this['\x70\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79'][_0x28aa57(0x20d)]:null;this[_0x28aa57(0x271)]={...this[_0x28aa57(0x271)],'\x6c\x61\x73\x74\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':_0x3b19a9,'\x61\x76\x67\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':_0xc17f0f,'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':this[_0x28aa57(0x257)],'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':_0x2a02e2},this['\x75\x70\x64\x61\x74\x65\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x51\x75\x61\x6c\x69\x74\x79']();}[a0_0x18574f(0x263)](){const _0x164be4=a0_0x18574f,_0x325307={'\x63\x47\x4d\x62\x65':_0x164be4(0x27b),'\x76\x78\x6b\x46\x75':function(_0x1e6850,_0x37cfc7,_0x11db52){return _0x1e6850(_0x37cfc7,_0x11db52);}},_0x151303=this[_0x164be4(0x1e8)]===_0x325307[_0x164be4(0x270)],_0x26ea1f=_0x325307[_0x164be4(0x244)](calculateConnectionQuality,this[_0x164be4(0x271)],_0x151303);this[_0x164be4(0x271)]['\x71\x75\x61\x6c\x69\x74\x79']!==_0x26ea1f&&(this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']={...this[_0x164be4(0x271)],'\x71\x75\x61\x6c\x69\x74\x79':_0x26ea1f},this[_0x164be4(0x27f)][_0x164be4(0x21f)]?.(this[_0x164be4(0x271)]));}[a0_0x18574f(0x254)](){const _0x5550f9=a0_0x18574f,_0x557e83=Date[_0x5550f9(0x242)]();this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']={...this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'],'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x43\x6f\x75\x6e\x74':this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'][_0x5550f9(0x206)]+0x1,'\x6c\x61\x73\x74\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74':_0x557e83},this[_0x5550f9(0x247)]=[],this[_0x5550f9(0x263)]();}['\x6c\x6f\x61\x64\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65'](){const _0x4f918b=a0_0x18574f;if(!this[_0x4f918b(0x274)][_0x4f918b(0x1ea)])return;const _0x3b1c05=this['\x63\x6f\x6e\x66\x69\x67']['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78'];try{this['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64']=this[_0x4f918b(0x274)][_0x4f918b(0x20e)][_0x4f918b(0x1d2)](_0x3b1c05+STORAGE_KEYS[_0x4f918b(0x1e3)]),this[_0x4f918b(0x1f2)]=this[_0x4f918b(0x274)][_0x4f918b(0x20e)][_0x4f918b(0x1d2)](_0x3b1c05+STORAGE_KEYS['\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64']),this[_0x4f918b(0x219)]=this['\x63\x6f\x6e\x66\x69\x67'][_0x4f918b(0x20e)]['\x67\x65\x74\x49\x74\x65\x6d'](_0x3b1c05+STORAGE_KEYS[_0x4f918b(0x1da)]);}catch{}}['\x73\x61\x76\x65\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65'](){const _0x228c78=a0_0x18574f,_0x1e0a18={'\x6a\x79\x66\x78\x54':function(_0x3e3718,_0x1f015f){return _0x3e3718+_0x1f015f;},'\x65\x69\x55\x71\x46':function(_0x2c9fc0,_0x325e28){return _0x2c9fc0+_0x325e28;}};if(!this['\x63\x6f\x6e\x66\x69\x67'][_0x228c78(0x1ea)])return;const _0x51cf5a=this[_0x228c78(0x274)][_0x228c78(0x225)];try{if(this[_0x228c78(0x1e3)])this[_0x228c78(0x274)][_0x228c78(0x20e)]['\x73\x65\x74\x49\x74\x65\x6d'](_0x1e0a18['\x6a\x79\x66\x78\x54'](_0x51cf5a,STORAGE_KEYS[_0x228c78(0x1e3)]),this[_0x228c78(0x1e3)]);if(this[_0x228c78(0x1f2)])this[_0x228c78(0x274)][_0x228c78(0x20e)]['\x73\x65\x74\x49\x74\x65\x6d'](_0x51cf5a+STORAGE_KEYS[_0x228c78(0x238)],this[_0x228c78(0x1f2)]);if(this['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64'])this[_0x228c78(0x274)][_0x228c78(0x20e)][_0x228c78(0x23c)](_0x1e0a18['\x65\x69\x55\x71\x46'](_0x51cf5a,STORAGE_KEYS[_0x228c78(0x1da)]),this[_0x228c78(0x219)]);}catch{}}};function a0_0x4556(_0x36681b,_0x3d2972){_0x36681b=_0x36681b-0x1ca;const _0x594ebd=a0_0x594e();let _0x4556f3=_0x594ebd[_0x36681b];if(a0_0x4556['\x75\x7a\x4c\x64\x6d\x72']===undefined){var _0x18fb64=function(_0x3e185d){const _0x342c80='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';let _0x3bcc93='',_0x2d1540='';for(let _0x2e50d3=0x0,_0x8b4a31,_0x543d50,_0x36b384=0x0;_0x543d50=_0x3e185d['\x63\x68\x61\x72\x41\x74'](_0x36b384++);~_0x543d50&&(_0x8b4a31=_0x2e50d3%0x4?_0x8b4a31*0x40+_0x543d50:_0x543d50,_0x2e50d3++%0x4)?_0x3bcc93+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0xff&_0x8b4a31>>(-0x2*_0x2e50d3&0x6)):0x0){_0x543d50=_0x342c80['\x69\x6e\x64\x65\x78\x4f\x66'](_0x543d50);}for(let _0x485fbb=0x0,_0x302a1d=_0x3bcc93['\x6c\x65\x6e\x67\x74\x68'];_0x485fbb<_0x302a1d;_0x485fbb++){_0x2d1540+='\x25'+('\x30\x30'+_0x3bcc93['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x485fbb)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10))['\x73\x6c\x69\x63\x65'](-0x2);}return decodeURIComponent(_0x2d1540);};a0_0x4556['\x57\x65\x54\x77\x68\x70']=_0x18fb64,a0_0x4556['\x48\x56\x4c\x4f\x49\x41']={},a0_0x4556['\x75\x7a\x4c\x64\x6d\x72']=!![];}const _0x5aa101=_0x594ebd[0x0],_0xe6471a=_0x36681b+_0x5aa101,_0x2bb917=a0_0x4556['\x48\x56\x4c\x4f\x49\x41'][_0xe6471a];return!_0x2bb917?(_0x4556f3=a0_0x4556['\x57\x65\x54\x77\x68\x70'](_0x4556f3),a0_0x4556['\x48\x56\x4c\x4f\x49\x41'][_0xe6471a]=_0x4556f3):_0x4556f3=_0x2bb917,_0x4556f3;}export{INITIAL_METRICS,SessionGatewayClient,calculateConnectionQuality};function a0_0x594e(){const _0x5cfbdb=['\x43\x67\x39\x59\x44\x63\x35\x56\x43\x67\x76\x55\x7a\x77\x71','\x42\x67\x66\x5a\x44\x66\x39\x4c\x44\x4d\x76\x55\x44\x66\x39\x50\x7a\x61','\x43\x67\x39\x59\x44\x63\x35\x4a\x42\x67\x39\x5a\x7a\x77\x71','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x43\x33\x72\x56\x43\x4d\x75','\x43\x68\x6a\x56\x79\x32\x76\x5a\x43\x30\x35\x48\x42\x77\x75','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x75\x4c\x4b\x71\x32\x39\x31\x42\x4e\x72\x4c\x43\x47','\x73\x77\x31\x34\x41\x33\x43','\x43\x67\x39\x59\x44\x61','\x79\x4d\x66\x4a\x41\x33\x62\x59\x7a\x78\x6e\x5a\x44\x78\x6a\x4c\x6c\x4e\x44\x48\x43\x4d\x35\x50\x42\x4d\x43','\x41\x67\x66\x55\x7a\x67\x58\x4c\x74\x77\x76\x5a\x43\x32\x66\x4e\x7a\x71','\x79\x32\x58\x4c\x79\x78\x6a\x73\x7a\x78\x62\x53\x79\x78\x4c\x74\x44\x67\x66\x30\x7a\x71','\x7a\x78\x7a\x4c\x42\x4e\x72\x5a\x75\x4d\x76\x4a\x7a\x77\x4c\x32\x7a\x77\x71','\x42\x67\x66\x5a\x44\x66\x62\x50\x42\x4d\x44\x62\x44\x61','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x68\x6a\x56\x7a\x33\x6a\x4c\x43\x33\x6d','\x43\x4d\x76\x5a\x7a\x78\x72\x6e\x7a\x78\x72\x59\x41\x77\x6e\x5a','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x72\x67\x4c\x5a\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x42\x32\x35\x63\x79\x77\x6e\x52\x43\x68\x6a\x4c\x43\x33\x6e\x31\x43\x4d\x76\x78\x79\x78\x6a\x55\x41\x77\x35\x4e','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x78\x6e\x74\x7a\x77\x35\x30','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x59\x7a\x77\x66\x4b\x45\x71','\x42\x77\x66\x34\x72\x67\x76\x4b\x44\x78\x62\x53\x41\x77\x6e\x48\x44\x67\x4c\x56\x42\x4c\x6e\x50\x45\x4d\x75','\x43\x4d\x76\x57\x42\x67\x66\x35\x6c\x4e\x62\x59\x42\x32\x44\x59\x7a\x78\x6e\x5a','\x71\x77\x35\x66\x45\x65\x79','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x71','\x79\x77\x44\x4c\x42\x4e\x71\x55\x7a\x78\x7a\x4c\x42\x4e\x71','\x43\x67\x4c\x55\x7a\x30\x4c\x55\x44\x67\x76\x59\x44\x4d\x66\x53','\x44\x67\x39\x52\x7a\x77\x34','\x7a\x67\x66\x30\x79\x71','\x42\x78\x6e\x4e\x78\x57','\x42\x33\x4c\x77\x75\x66\x69','\x6e\x4a\x65\x59\x71\x75\x72\x54\x71\x75\x39\x7a','\x43\x4d\x76\x54\x42\x33\x7a\x4c\x73\x78\x72\x4c\x42\x71','\x79\x78\x76\x30\x42\x31\x6a\x4c\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x44\x68\x6a\x48\x79\x32\x54\x66\x45\x67\x76\x4a\x44\x78\x72\x50\x42\x32\x35\x64\x42\x32\x35\x30\x7a\x78\x48\x30','\x43\x32\x76\x30\x75\x33\x72\x48\x44\x67\x75','\x7a\x32\x76\x30\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4c\x66\x31\x79\x77\x58\x50\x44\x68\x4b','\x79\x32\x39\x55\x44\x67\x66\x50\x42\x4d\x76\x59\x73\x77\x71','\x45\x76\x50\x6e\x75\x66\x75','\x43\x33\x76\x49\x43\x32\x6e\x59\x41\x77\x6a\x4c','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x44\x67\x39\x30\x79\x77\x57','\x45\x66\x7a\x75\x44\x4d\x69','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x78\x6e\x73\x7a\x77\x6e\x4c\x41\x78\x7a\x4c\x7a\x61','\x41\x67\x66\x5a\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b\x71\x4d\x76\x4d\x42\x33\x6a\x4c','\x43\x33\x72\x56\x43\x66\x62\x50\x42\x4d\x44\x6a\x42\x4e\x72\x4c\x43\x4e\x7a\x48\x42\x61','\x75\x4d\x76\x58\x44\x77\x76\x5a\x44\x63\x62\x30\x41\x77\x31\x4c\x42\x33\x76\x30','\x75\x67\x39\x55\x7a\x59\x62\x30\x41\x77\x31\x4c\x42\x33\x76\x30\x69\x63\x30\x47\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x49\x62\x31\x42\x4e\x6a\x4c\x43\x33\x62\x56\x42\x4e\x6e\x50\x44\x4d\x75','\x43\x32\x4c\x4b\x7a\x77\x6e\x48\x43\x4b\x4c\x4b','\x79\x32\x58\x4c\x79\x78\x6a\x71\x42\x32\x35\x4e\x76\x67\x4c\x54\x7a\x77\x39\x31\x44\x61','\x44\x32\x31\x49\x44\x4b\x43','\x41\x77\x35\x32\x79\x77\x58\x50\x7a\x66\x39\x57\x79\x78\x4c\x53\x42\x32\x66\x4b','\x77\x75\x58\x52\x42\x65\x65','\x71\x4e\x48\x59\x74\x33\x75','\x7a\x32\x76\x30\x75\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x48\x44\x67\x75','\x7a\x32\x76\x30\x73\x78\x72\x4c\x42\x71','\x43\x32\x76\x55\x7a\x66\x44\x50\x44\x67\x48\x73\x7a\x78\x6e\x57\x42\x32\x35\x5a\x7a\x71','\x41\x78\x6e\x73\x7a\x77\x7a\x59\x7a\x78\x6e\x4f\x41\x77\x35\x4e\x76\x67\x39\x52\x7a\x77\x34','\x41\x78\x6e\x64\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x7a\x32\x76\x30\x75\x33\x72\x48\x44\x68\x6d','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x74\x4d\x39\x30\x72\x4d\x39\x31\x42\x4d\x71','\x43\x4d\x76\x57\x42\x67\x66\x35','\x44\x68\x4c\x57\x7a\x71','\x43\x32\x76\x5a\x43\x32\x4c\x56\x42\x4b\x4c\x4b','\x7a\x78\x66\x4f\x42\x67\x75','\x74\x78\x50\x34\x43\x77\x53','\x6d\x74\x71\x58\x6e\x4a\x69\x30\x6d\x68\x50\x31\x77\x75\x48\x52\x41\x57','\x42\x32\x35\x65\x41\x78\x6e\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30','\x75\x30\x44\x79\x45\x77\x69','\x42\x32\x35\x66\x43\x4e\x6a\x56\x43\x47','\x43\x4d\x76\x51\x7a\x77\x6e\x30','\x43\x4d\x76\x5a\x42\x32\x58\x32\x7a\x71','\x42\x67\x66\x5a\x44\x65\x76\x32\x7a\x77\x35\x30\x73\x77\x71','\x74\x31\x62\x66\x74\x47','\x76\x65\x39\x6c\x72\x75\x35\x46\x75\x4b\x76\x67\x75\x4b\x76\x74\x73\x66\x39\x67\x71\x75\x4c\x6d\x72\x75\x71','\x7a\x32\x76\x30\x76\x67\x39\x52\x7a\x77\x34','\x6d\x4a\x4b\x57\x6e\x64\x65\x58\x6d\x78\x76\x36\x41\x76\x62\x64\x76\x57','\x43\x33\x72\x48\x44\x67\x75','\x43\x67\x4c\x55\x7a\x30\x4c\x55\x44\x67\x76\x59\x44\x4d\x66\x53\x74\x78\x6d','\x7a\x77\x35\x48\x79\x4d\x58\x4c\x75\x4d\x76\x57\x42\x67\x66\x35\x75\x67\x76\x59\x43\x32\x4c\x5a\x44\x67\x76\x55\x79\x32\x75','\x43\x32\x76\x55\x7a\x61','\x42\x67\x39\x4a\x79\x77\x58\x74\x44\x67\x39\x59\x79\x77\x44\x4c','\x43\x32\x76\x30\x75\x32\x76\x5a\x43\x32\x4c\x56\x42\x4b\x6e\x56\x42\x4e\x72\x4c\x45\x68\x71','\x41\x67\x66\x55\x7a\x67\x58\x4c\x71\x32\x58\x56\x43\x32\x75','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x74\x44\x67\x66\x59\x44\x61','\x79\x32\x48\x48\x42\x4d\x35\x4c\x42\x61','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x76\x72\x35\x43\x67\x75','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x65\x76\x34\x7a\x77\x6e\x31\x44\x67\x4c\x56\x42\x4b\x4c\x4b','\x75\x4b\x35\x6b\x73\x65\x71','\x7a\x78\x48\x4c\x79\x33\x76\x30\x41\x77\x39\x55\x6c\x4e\x6e\x30\x79\x78\x6a\x30\x7a\x77\x71','\x7a\x4d\x58\x56\x42\x33\x69','\x6e\x5a\x69\x31\x6e\x4a\x65\x32\x6e\x4b\x72\x4c\x45\x4b\x44\x64\x74\x71','\x43\x33\x72\x59\x41\x77\x35\x4e','\x74\x30\x7a\x76\x7a\x77\x6d','\x79\x32\x58\x4c\x79\x77\x35\x31\x43\x61','\x77\x78\x6e\x77\x75\x76\x6d','\x75\x4d\x72\x6a\x71\x4e\x65','\x43\x4d\x76\x48\x7a\x68\x4c\x74\x44\x67\x66\x30\x7a\x71','\x79\x4d\x66\x5a\x7a\x76\x76\x59\x42\x61','\x42\x32\x35\x54\x7a\x78\x6e\x5a\x79\x77\x44\x4c','\x7a\x78\x48\x4a\x7a\x77\x58\x53\x7a\x77\x35\x30','\x7a\x32\x76\x30\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4b\x31\x4c\x44\x68\x6a\x50\x79\x33\x6d','\x75\x77\x66\x4d\x45\x4d\x43','\x77\x65\x7a\x48\x76\x31\x75','\x42\x77\x66\x34\x75\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x71\x78\x72\x30\x7a\x77\x31\x57\x44\x68\x6d','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x75\x4d\x76\x48\x7a\x68\x4b','\x43\x4d\x76\x57\x42\x67\x66\x35\x6c\x4d\x6e\x56\x42\x78\x62\x53\x7a\x78\x72\x4c','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x71\x32\x39\x31\x42\x4e\x71','\x43\x32\x6e\x4f\x7a\x77\x72\x31\x42\x67\x76\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x71','\x43\x32\x66\x32\x7a\x76\x6a\x4c\x43\x67\x58\x48\x45\x76\x6e\x30\x79\x78\x72\x4c','\x41\x67\x66\x55\x7a\x67\x58\x4c\x74\x33\x62\x4c\x42\x47','\x41\x67\x66\x55\x7a\x67\x58\x4c\x76\x67\x39\x52\x7a\x77\x35\x66\x45\x68\x62\x50\x43\x4d\x4c\x55\x7a\x57','\x74\x31\x72\x59\x41\x4c\x69','\x73\x77\x4c\x50\x41\x33\x61','\x42\x67\x76\x55\x7a\x33\x72\x4f','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x56\x43\x4d\x66\x4e\x7a\x71','\x72\x75\x54\x32\x45\x4b\x34','\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x49\x62\x4a\x42\x67\x39\x5a\x7a\x77\x71','\x43\x68\x6a\x56\x44\x67\x39\x4a\x42\x32\x57','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x55\x42\x33\x72\x46\x7a\x4d\x39\x31\x42\x4d\x71','\x42\x32\x35\x75\x42\x32\x54\x4c\x42\x4c\x6a\x4c\x7a\x4e\x6a\x4c\x43\x32\x47','\x7a\x67\x4c\x5a\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x44\x65\x44\x72\x72\x30\x53','\x43\x33\x72\x48\x43\x4e\x72\x71\x41\x77\x35\x4e\x73\x77\x35\x30\x7a\x78\x6a\x32\x79\x77\x57','\x7a\x67\x4c\x5a\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x42\x32\x35\x74\x44\x67\x66\x30\x7a\x75\x6e\x4f\x79\x77\x35\x4e\x7a\x71','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x66\x6e\x4c\x43\x33\x6e\x50\x42\x32\x35\x6a\x7a\x61','\x79\x32\x48\x48\x42\x4d\x35\x4c\x42\x68\x6d','\x42\x67\x66\x30\x7a\x77\x35\x4a\x45\x75\x48\x50\x43\x33\x72\x56\x43\x4e\x4c\x74\x41\x78\x50\x4c','\x43\x68\x76\x6c\x73\x4b\x4b','\x44\x77\x35\x5a\x44\x77\x6a\x5a\x79\x33\x6a\x50\x79\x4d\x75','\x79\x32\x39\x4b\x7a\x71','\x42\x32\x35\x6e\x7a\x78\x72\x59\x41\x77\x6e\x5a\x71\x32\x48\x48\x42\x4d\x44\x4c','\x42\x32\x35\x4a\x42\x67\x39\x5a\x7a\x71','\x43\x32\x76\x5a\x43\x32\x4c\x56\x42\x4c\x39\x4e\x79\x78\x72\x4c\x44\x32\x66\x35\x78\x57','\x43\x68\x6a\x56\x79\x32\x76\x5a\x43\x32\x76\x4b\x72\x78\x7a\x4c\x42\x4e\x72\x6a\x7a\x68\x6d','\x7a\x77\x35\x48\x79\x4d\x58\x4c\x72\x67\x76\x4b\x44\x78\x62\x53\x41\x77\x6e\x48\x44\x67\x4c\x56\x42\x47','\x71\x32\x58\x50\x7a\x77\x35\x30\x69\x67\x72\x50\x43\x32\x6e\x56\x42\x4d\x35\x4c\x79\x33\x71','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x56\x43\x4d\x66\x4e\x7a\x75\x54\x4c\x45\x76\x62\x59\x7a\x77\x7a\x50\x45\x61','\x41\x67\x66\x55\x7a\x67\x58\x4c\x75\x67\x39\x55\x7a\x57','\x72\x30\x48\x79\x73\x75\x53','\x44\x67\x39\x74\x44\x68\x6a\x50\x42\x4d\x43','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x71\x78\x72\x30\x7a\x77\x31\x57\x44\x68\x6d','\x7a\x67\x76\x4e\x43\x4d\x66\x4b\x7a\x77\x71','\x43\x32\x76\x4a\x42\x32\x35\x4b\x43\x31\x6a\x4c\x42\x77\x66\x50\x42\x4d\x4c\x55\x7a\x57','\x7a\x67\x76\x53\x7a\x78\x72\x4c','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x64\x42\x32\x31\x57\x42\x67\x76\x30\x7a\x71','\x7a\x67\x4c\x5a\x43\x67\x66\x30\x79\x32\x48\x6e\x7a\x78\x6e\x5a\x79\x77\x44\x4c','\x42\x32\x35\x64\x42\x32\x35\x30\x79\x77\x4c\x55\x7a\x78\x6a\x73\x7a\x77\x66\x4b\x45\x71','\x42\x32\x35\x75\x42\x32\x54\x4c\x42\x4b\x76\x34\x43\x67\x4c\x59\x7a\x77\x71','\x71\x77\x76\x64\x73\x4d\x57','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x76\x67\x4c\x54\x7a\x78\x69','\x43\x32\x48\x50\x7a\x4e\x71','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x66\x44\x4c\x79\x4c\x6e\x56\x79\x32\x54\x4c\x44\x61','\x42\x32\x35\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x71','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x41\x77\x35\x4e','\x43\x32\x66\x55\x7a\x67\x6a\x56\x45\x65\x4c\x4b','\x7a\x78\x48\x4c\x79\x33\x76\x30\x41\x77\x39\x55\x73\x77\x71','\x43\x32\x76\x30','\x74\x4d\x66\x6f\x45\x75\x4f','\x42\x32\x6a\x51\x7a\x77\x6e\x30','\x43\x32\x76\x30\x73\x78\x72\x4c\x42\x71','\x7a\x78\x6a\x59\x42\x33\x69','\x43\x4d\x76\x4a\x7a\x77\x4c\x32\x7a\x77\x71','\x71\x4d\x44\x55\x73\x31\x43','\x79\x4d\x76\x71\x72\x4c\x43','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x49\x35\x4c\x43\x33\x72\x48\x79\x4d\x58\x50\x43\x32\x48\x4c\x7a\x61','\x42\x4d\x39\x33','\x43\x67\x39\x55\x7a\x57','\x44\x4e\x48\x52\x72\x4e\x75','\x6d\x74\x43\x33\x6f\x64\x65\x59\x6e\x77\x35\x6e\x73\x77\x58\x41\x45\x47','\x79\x32\x39\x55\x44\x67\x66\x50\x42\x4d\x76\x59\x6c\x4e\x6a\x4c\x79\x77\x72\x35\x69\x67\x76\x32\x7a\x77\x35\x30\x69\x68\x6a\x4c\x79\x32\x76\x50\x44\x4d\x76\x4b\x69\x68\x44\x50\x44\x67\x48\x56\x44\x78\x71\x47\x43\x32\x66\x55\x7a\x67\x6a\x56\x45\x65\x4c\x4b','\x43\x67\x4c\x55\x7a\x30\x58\x48\x44\x67\x76\x55\x79\x33\x4c\x69\x41\x78\x6e\x30\x42\x33\x6a\x35','\x71\x32\x4c\x62\x75\x30\x38','\x44\x77\x35\x4b\x7a\x77\x7a\x50\x42\x4d\x76\x4b','\x42\x77\x66\x34\x75\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x72\x67\x76\x53\x79\x78\x4c\x6e\x43\x57','\x42\x32\x35\x71\x42\x33\x6a\x30\x71\x32\x58\x56\x43\x32\x76\x4b','\x41\x75\x6a\x52\x76\x31\x69','\x42\x32\x35\x62\x7a\x32\x76\x55\x44\x65\x76\x32\x7a\x77\x35\x30','\x42\x65\x6a\x6d\x45\x4c\x4f','\x43\x32\x76\x5a\x43\x32\x4c\x56\x42\x4c\x39\x50\x7a\x61','\x42\x67\x66\x5a\x44\x66\x62\x56\x42\x4d\x44\x62\x44\x61','\x42\x77\x66\x34\x74\x77\x4c\x5a\x43\x32\x76\x4b\x75\x67\x39\x55\x7a\x33\x6d','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b\x71\x78\x71','\x43\x67\x66\x59\x43\x32\x75','\x44\x68\x6a\x48\x79\x32\x54\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x72\x50\x42\x32\x34','\x6e\x5a\x75\x35\x6e\x4a\x61\x35\x76\x4d\x35\x7a\x73\x66\x50\x33','\x76\x67\x39\x52\x7a\x77\x34\x47\x43\x4d\x76\x4d\x43\x4d\x76\x5a\x41\x63\x62\x4d\x79\x77\x4c\x53\x7a\x77\x71\x36\x69\x61','\x42\x77\x4c\x5a\x43\x32\x76\x4b\x75\x67\x39\x55\x7a\x30\x6e\x56\x44\x77\x35\x30','\x42\x65\x48\x69\x75\x4b\x4b','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x4b\x41\x78\x6e\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x6e\x64\x79\x5a\x6d\x32\x48\x4f\x42\x68\x72\x32\x76\x71','\x44\x75\x7a\x77\x42\x67\x75','\x79\x32\x58\x4c\x79\x78\x69','\x6d\x4a\x6d\x35\x6e\x74\x6d\x31\x6e\x74\x72\x32\x43\x76\x66\x34\x71\x77\x4b','\x43\x32\x76\x58\x44\x77\x76\x55\x79\x32\x76\x6a\x7a\x61','\x43\x32\x76\x55\x7a\x66\x62\x50\x42\x4d\x43','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x66\x72\x56\x41\x32\x76\x55','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x55\x7a\x57','\x41\x78\x6e\x73\x7a\x78\x62\x53\x79\x78\x4c\x50\x42\x4d\x43','\x44\x78\x62\x4b\x79\x78\x72\x4c\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4c\x66\x31\x79\x77\x58\x50\x44\x68\x4b','\x42\x32\x35\x71\x42\x33\x6a\x30\x74\x33\x62\x4c\x42\x4d\x76\x4b','\x6f\x65\x35\x5a\x74\x4e\x48\x70\x77\x71','\x74\x4d\x58\x59\x7a\x66\x65','\x41\x77\x35\x50\x44\x67\x4c\x48\x42\x66\x6a\x4c\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x65\x72\x4c\x42\x67\x66\x35\x74\x78\x6d','\x45\x65\x66\x4f\x45\x76\x65','\x43\x4b\x50\x70\x7a\x4d\x53','\x74\x4b\x50\x4c\x77\x77\x79','\x43\x4d\x76\x5a\x44\x67\x39\x59\x7a\x76\x6e\x31\x79\x4e\x6e\x4a\x43\x4d\x4c\x57\x44\x67\x4c\x56\x42\x4e\x6d','\x79\x33\x62\x69\x73\x32\x79','\x44\x65\x76\x77\x42\x32\x65','\x7a\x32\x39\x56\x7a\x61','\x43\x67\x39\x55\x7a\x31\x72\x50\x42\x77\x76\x56\x44\x78\x72\x6e\x43\x57','\x79\x30\x44\x6e\x79\x4d\x75','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4b\x31\x4c\x44\x68\x6a\x50\x79\x33\x6d','\x74\x65\x31\x41\x72\x78\x47','\x7a\x32\x76\x30\x75\x33\x72\x48\x44\x67\x75','\x79\x32\x39\x55\x7a\x4d\x4c\x4e','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x71\x43\x4d\x39\x4e\x43\x4d\x76\x5a\x43\x57','\x43\x68\x76\x5a\x41\x61','\x43\x32\x4c\x55\x79\x32\x75','\x41\x4c\x48\x30\x79\x31\x69','\x43\x67\x39\x55\x7a\x31\x72\x50\x42\x77\x76\x56\x44\x78\x71','\x43\x67\x76\x55\x7a\x67\x4c\x55\x7a\x30\x6e\x48\x42\x67\x58\x49\x79\x77\x6e\x52\x43\x57','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x42\x32\x35\x64\x42\x32\x35\x55\x7a\x77\x6e\x30','\x7a\x32\x76\x30','\x44\x78\x62\x4b\x79\x78\x72\x4c\x76\x67\x39\x52\x7a\x77\x34','\x41\x67\x66\x55\x7a\x67\x58\x4c\x43\x4e\x6d','\x43\x67\x4c\x55\x7a\x57','\x42\x4e\x66\x69\x77\x65\x53','\x79\x32\x58\x56\x43\x32\x75','\x7a\x68\x76\x57\x42\x67\x4c\x4a\x79\x78\x72\x4c\x43\x31\x6e\x52\x41\x78\x62\x57\x7a\x77\x71','\x42\x32\x35\x4c\x43\x4e\x6a\x56\x43\x47','\x42\x67\x66\x5a\x44\x66\x62\x50\x42\x4d\x44\x74\x7a\x77\x35\x30\x71\x78\x71','\x44\x78\x6a\x53'];a0_0x594e=function(){return _0x5cfbdb;};return a0_0x594e();}
|