@capgo/capacitor-stream-call 0.0.6 → 0.0.18

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.
@@ -48,8 +48,9 @@ class StreamCallWeb extends core.WebPlugin {
48
48
  }
49
49
  };
50
50
  this.callSessionStartedCallback = (event) => {
51
+ var _a, _b;
51
52
  console.log('Call created (session started)', event);
52
- if (event.call && event.call.session && event.call.session.participants) {
53
+ if ((_b = (_a = event.call) === null || _a === void 0 ? void 0 : _a.session) === null || _b === void 0 ? void 0 : _b.participants) {
53
54
  // Store the number of expected participants for this call
54
55
  const callCid = event.call.cid;
55
56
  const memberCount = event.call.session.participants.length;
@@ -57,7 +58,7 @@ class StreamCallWeb extends core.WebPlugin {
57
58
  this.callMembersExpected.set(callCid, memberCount);
58
59
  // Store call members in callStates
59
60
  this.callStates.set(callCid, {
60
- members: event.call.session.participants.map(p => { var _a; return ({ user_id: ((_a = p.user) === null || _a === void 0 ? void 0 : _a.id) || '' }); }),
61
+ members: event.call.session.participants.map((p) => { var _a; return ({ user_id: ((_a = p.user) === null || _a === void 0 ? void 0 : _a.id) || '' }); }),
61
62
  participantResponses: new Map(),
62
63
  expectedMemberCount: memberCount,
63
64
  createdAt: new Date(),
@@ -73,8 +74,9 @@ class StreamCallWeb extends core.WebPlugin {
73
74
  }
74
75
  };
75
76
  this.callRejectedCallback = (event) => {
77
+ var _a;
76
78
  console.log('Call rejected', event);
77
- if (event.user && event.user.id) {
79
+ if ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) {
78
80
  this.participantResponses.set(event.user.id, 'rejected');
79
81
  // Update the combined callStates map
80
82
  const callState = this.callStates.get(event.call_cid);
@@ -85,14 +87,15 @@ class StreamCallWeb extends core.WebPlugin {
85
87
  this.notifyListeners('callEvent', {
86
88
  callId: event.call_cid,
87
89
  state: 'rejected',
88
- userId: event.user.id
90
+ userId: event.user.id,
89
91
  });
90
92
  this.checkAllParticipantsResponded();
91
93
  }
92
94
  };
93
95
  this.callAcceptedCallback = (event) => {
96
+ var _a;
94
97
  console.log('Call accepted', event);
95
- if (event.user && event.user.id) {
98
+ if ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) {
96
99
  this.participantResponses.set(event.user.id, 'accepted');
97
100
  // Update the combined callStates map
98
101
  const callState = this.callStates.get(event.call_cid);
@@ -108,13 +111,14 @@ class StreamCallWeb extends core.WebPlugin {
108
111
  this.notifyListeners('callEvent', {
109
112
  callId: event.call_cid,
110
113
  state: 'accepted',
111
- userId: event.user.id
114
+ userId: event.user.id,
112
115
  });
113
116
  }
114
117
  };
115
118
  this.callMissedCallback = (event) => {
119
+ var _a;
116
120
  console.log('Call missed', event);
117
- if (event.user && event.user.id) {
121
+ if ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) {
118
122
  this.participantResponses.set(event.user.id, 'missed');
119
123
  // Update the combined callStates map
120
124
  const callState = this.callStates.get(event.call_cid);
@@ -125,7 +129,7 @@ class StreamCallWeb extends core.WebPlugin {
125
129
  this.notifyListeners('callEvent', {
126
130
  callId: event.call_cid,
127
131
  state: 'missed',
128
- userId: event.user.id
132
+ userId: event.user.id,
129
133
  });
130
134
  this.checkAllParticipantsResponded();
131
135
  }
@@ -167,7 +171,7 @@ class StreamCallWeb extends core.WebPlugin {
167
171
  }
168
172
  };
169
173
  this.participantLeftListener = (event) => {
170
- var _a, _b;
174
+ var _a, _b, _c;
171
175
  if (this.magicDivId && event.participant) {
172
176
  const videoId = `video-${event.participant.sessionId}`;
173
177
  const audioId = `audio-${event.participant.sessionId}`;
@@ -207,7 +211,7 @@ class StreamCallWeb extends core.WebPlugin {
207
211
  }
208
212
  }
209
213
  // Check if we're the only participant left in the call
210
- if (this.currentCall && this.currentCall.state.session) {
214
+ if ((_a = this.currentCall) === null || _a === void 0 ? void 0 : _a.state.session) {
211
215
  // Get the remaining participants count (we need to subtract 1 as we haven't been removed from the list yet)
212
216
  const remainingParticipants = this.currentCall.state.session.participants.length - 1;
213
217
  // If we're the only one left, end the call
@@ -218,12 +222,12 @@ class StreamCallWeb extends core.WebPlugin {
218
222
  // Clean up resources
219
223
  const callCid = this.currentCall.cid;
220
224
  // Invalidate and remove timer
221
- const callState = (_a = this.callStates) === null || _a === void 0 ? void 0 : _a.get(callCid);
225
+ const callState = (_b = this.callStates) === null || _b === void 0 ? void 0 : _b.get(callCid);
222
226
  if (callState === null || callState === void 0 ? void 0 : callState.timer) {
223
227
  clearInterval(callState.timer);
224
228
  }
225
229
  // Remove from callStates
226
- (_b = this.callStates) === null || _b === void 0 ? void 0 : _b.delete(callCid);
230
+ (_c = this.callStates) === null || _c === void 0 ? void 0 : _c.delete(callCid);
227
231
  // Reset the current call
228
232
  this.currentCall = undefined;
229
233
  // this.currentActiveCallId = undefined;
@@ -234,7 +238,7 @@ class StreamCallWeb extends core.WebPlugin {
234
238
  this.notifyListeners('callEvent', {
235
239
  callId: callCid,
236
240
  state: 'left',
237
- reason: 'participant_left'
241
+ reason: 'participant_left',
238
242
  });
239
243
  }
240
244
  }
@@ -293,19 +297,18 @@ class StreamCallWeb extends core.WebPlugin {
293
297
  if (elapsedSeconds >= 30) {
294
298
  console.log(`Call ${callCid} has timed out after ${elapsedSeconds} seconds`);
295
299
  // Check if anyone has accepted
296
- const hasAccepted = Array.from(callState.participantResponses.values())
297
- .some(response => response === 'accepted');
300
+ const hasAccepted = Array.from(callState.participantResponses.values()).some((response) => response === 'accepted');
298
301
  if (!hasAccepted) {
299
302
  console.log(`No one accepted call ${callCid}, marking all non-responders as missed`);
300
303
  // Mark all members who haven't responded as "missed"
301
- callState.members.forEach(member => {
304
+ callState.members.forEach((member) => {
302
305
  if (!callState.participantResponses.has(member.user_id)) {
303
306
  callState.participantResponses.set(member.user_id, 'missed');
304
307
  this.participantResponses.set(member.user_id, 'missed');
305
308
  this.notifyListeners('callEvent', {
306
309
  callId: callCid,
307
310
  state: 'missed',
308
- userId: member.user_id
311
+ userId: member.user_id,
309
312
  });
310
313
  }
311
314
  });
@@ -326,7 +329,7 @@ class StreamCallWeb extends core.WebPlugin {
326
329
  this.notifyListeners('callEvent', {
327
330
  callId: callCid,
328
331
  state: 'ended',
329
- reason: 'timeout'
332
+ reason: 'timeout',
330
333
  });
331
334
  }
332
335
  }
@@ -343,7 +346,7 @@ class StreamCallWeb extends core.WebPlugin {
343
346
  console.log(`Total expected participants: ${totalParticipants}`);
344
347
  // Count rejections and misses
345
348
  let rejectedOrMissedCount = 0;
346
- this.participantResponses.forEach(response => {
349
+ this.participantResponses.forEach((response) => {
347
350
  if (response === 'rejected' || response === 'missed') {
348
351
  rejectedOrMissedCount++;
349
352
  }
@@ -352,7 +355,7 @@ class StreamCallWeb extends core.WebPlugin {
352
355
  console.log(`Rejected or missed: ${rejectedOrMissedCount}`);
353
356
  const allResponded = this.participantResponses.size >= totalParticipants;
354
357
  const allRejectedOrMissed = allResponded &&
355
- Array.from(this.participantResponses.values()).every(response => response === 'rejected' || response === 'missed');
358
+ Array.from(this.participantResponses.values()).every((response) => response === 'rejected' || response === 'missed');
356
359
  // If all participants have rejected or missed the call
357
360
  if (allResponded && allRejectedOrMissed) {
358
361
  console.log('All participants have rejected or missed the call');
@@ -373,7 +376,7 @@ class StreamCallWeb extends core.WebPlugin {
373
376
  this.notifyListeners('callEvent', {
374
377
  callId: callCid,
375
378
  state: 'ended',
376
- reason: 'all_rejected_or_missed'
379
+ reason: 'all_rejected_or_missed',
377
380
  });
378
381
  }
379
382
  }
@@ -481,7 +484,7 @@ class StreamCallWeb extends core.WebPlugin {
481
484
  if (this.client.streamClient.userID && !options.userIds.includes(this.client.streamClient.userID)) {
482
485
  members.push({ user_id: this.client.streamClient.userID });
483
486
  }
484
- await call.getOrCreate({ data: { members } });
487
+ await call.getOrCreate({ data: { members, team: options.team } });
485
488
  // Store the expected member count for this call
486
489
  // -1, because we don't count the caller themselves
487
490
  this.callMembersExpected.set(call.cid, members.length);
@@ -569,6 +572,39 @@ class StreamCallWeb extends core.WebPlugin {
569
572
  const enabled = await this.currentCall.camera.enabled;
570
573
  return { enabled };
571
574
  }
575
+ async getCallStatus() {
576
+ if (!this.currentCall) {
577
+ throw new Error('No active call');
578
+ }
579
+ const callingState = this.currentCall.state.callingState;
580
+ let state;
581
+ switch (callingState) {
582
+ case videoClient.CallingState.IDLE:
583
+ state = 'idle';
584
+ break;
585
+ case videoClient.CallingState.RINGING:
586
+ state = 'ringing';
587
+ break;
588
+ case videoClient.CallingState.JOINING:
589
+ state = 'joining';
590
+ break;
591
+ case videoClient.CallingState.RECONNECTING:
592
+ state = 'reconnecting';
593
+ break;
594
+ case videoClient.CallingState.JOINED:
595
+ state = 'joined';
596
+ break;
597
+ case videoClient.CallingState.LEFT:
598
+ state = 'left';
599
+ break;
600
+ default:
601
+ state = 'unknown';
602
+ }
603
+ return {
604
+ callId: this.currentCall.id,
605
+ state,
606
+ };
607
+ }
572
608
  }
573
609
 
574
610
  var web = /*#__PURE__*/Object.freeze({
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst StreamCall = registerPlugin('StreamCall', {\n web: () => import('./web').then((m) => new m.StreamCallWeb()),\n});\nexport * from './definitions';\nexport { StreamCall };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CallingState, StreamVideoClient } from '@stream-io/video-client';\nexport class StreamCallWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.videoBindings = new Map();\n this.audioBindings = new Map();\n this.participantResponses = new Map();\n this.callMembersExpected = new Map();\n this.ringCallback = (event) => {\n var _a, _b;\n console.log('Call ringing', event, this.currentCall);\n this.incomingCall = event.call;\n if (!this.currentCall) {\n console.log('Creating new call', event.call.id);\n this.currentCall = (_a = this.client) === null || _a === void 0 ? void 0 : _a.call(event.call.type, event.call.id);\n // this.currentActiveCallId = this.currentCall?.cid;\n this.notifyListeners('callEvent', { callId: event.call.id, state: CallingState.RINGING });\n // Clear previous responses when a new call starts\n this.participantResponses.clear();\n }\n if (this.currentCall) {\n console.log('Call found', this.currentCall.id);\n this.callStateSubscription = (_b = this.currentCall) === null || _b === void 0 ? void 0 : _b.state.callingState$.subscribe((s) => {\n var _a;\n console.log('Call state', s);\n if (s === CallingState.JOINED) {\n this.setupParticipantListener();\n this.setupCallEventListeners();\n }\n else if (s === CallingState.LEFT || s === CallingState.RECONNECTING_FAILED) {\n this.cleanupCall();\n }\n if (this.outgoingCall && s === CallingState.RINGING) {\n this.outgoingCall = undefined;\n }\n else {\n this.notifyListeners('callEvent', { callId: (_a = this.currentCall) === null || _a === void 0 ? void 0 : _a.id, state: s });\n }\n });\n }\n };\n this.callSessionStartedCallback = (event) => {\n console.log('Call created (session started)', event);\n if (event.call && event.call.session && event.call.session.participants) {\n // Store the number of expected participants for this call\n const callCid = event.call.cid;\n const memberCount = event.call.session.participants.length;\n console.log(`Call ${callCid} created with ${memberCount} members`);\n this.callMembersExpected.set(callCid, memberCount);\n // Store call members in callStates\n this.callStates.set(callCid, {\n members: event.call.session.participants.map(p => { var _a; return ({ user_id: ((_a = p.user) === null || _a === void 0 ? void 0 : _a.id) || '' }); }),\n participantResponses: new Map(),\n expectedMemberCount: memberCount,\n createdAt: new Date(),\n });\n // Start a timeout task that runs every second\n const timeoutTask = setInterval(() => this.checkCallTimeout(callCid), 1000);\n // Update the callState with the timeout task\n const callState = this.callStates.get(callCid);\n if (callState) {\n callState.timer = timeoutTask;\n this.callStates.set(callCid, callState);\n }\n }\n };\n this.callRejectedCallback = (event) => {\n console.log('Call rejected', event);\n if (event.user && event.user.id) {\n this.participantResponses.set(event.user.id, 'rejected');\n // Update the combined callStates map\n const callState = this.callStates.get(event.call_cid);\n if (callState) {\n callState.participantResponses.set(event.user.id, 'rejected');\n this.callStates.set(event.call_cid, callState);\n }\n this.notifyListeners('callEvent', {\n callId: event.call_cid,\n state: 'rejected',\n userId: event.user.id\n });\n this.checkAllParticipantsResponded();\n }\n };\n this.callAcceptedCallback = (event) => {\n console.log('Call accepted', event);\n if (event.user && event.user.id) {\n this.participantResponses.set(event.user.id, 'accepted');\n // Update the combined callStates map\n const callState = this.callStates.get(event.call_cid);\n if (callState) {\n callState.participantResponses.set(event.user.id, 'accepted');\n // If someone accepted, clear the timer as we don't need to check anymore\n if (callState.timer) {\n clearInterval(callState.timer);\n callState.timer = undefined;\n }\n this.callStates.set(event.call_cid, callState);\n }\n this.notifyListeners('callEvent', {\n callId: event.call_cid,\n state: 'accepted',\n userId: event.user.id\n });\n }\n };\n this.callMissedCallback = (event) => {\n console.log('Call missed', event);\n if (event.user && event.user.id) {\n this.participantResponses.set(event.user.id, 'missed');\n // Update the combined callStates map\n const callState = this.callStates.get(event.call_cid);\n if (callState) {\n callState.participantResponses.set(event.user.id, 'missed');\n this.callStates.set(event.call_cid, callState);\n }\n this.notifyListeners('callEvent', {\n callId: event.call_cid,\n state: 'missed',\n userId: event.user.id\n });\n this.checkAllParticipantsResponded();\n }\n };\n // Add a combined map for call states, mirroring the iOS implementation\n this.callStates = new Map();\n }\n // private currentActiveCallId?: string;\n setupCallRingListener() {\n var _a, _b, _c, _d;\n (_a = this.client) === null || _a === void 0 ? void 0 : _a.off('call.ring', this.ringCallback);\n (_b = this.client) === null || _b === void 0 ? void 0 : _b.off('call.session_started', this.callSessionStartedCallback);\n (_c = this.client) === null || _c === void 0 ? void 0 : _c.on('call.ring', this.ringCallback);\n (_d = this.client) === null || _d === void 0 ? void 0 : _d.on('call.session_started', this.callSessionStartedCallback);\n }\n setupCallEventListeners() {\n var _a, _b, _c, _d, _e, _f;\n // Clear previous listeners if any\n (_a = this.client) === null || _a === void 0 ? void 0 : _a.off('call.rejected', this.callRejectedCallback);\n (_b = this.client) === null || _b === void 0 ? void 0 : _b.off('call.accepted', this.callAcceptedCallback);\n (_c = this.client) === null || _c === void 0 ? void 0 : _c.off('call.missed', this.callMissedCallback);\n // Register event listeners\n (_d = this.client) === null || _d === void 0 ? void 0 : _d.on('call.rejected', this.callRejectedCallback);\n (_e = this.client) === null || _e === void 0 ? void 0 : _e.on('call.accepted', this.callAcceptedCallback);\n (_f = this.client) === null || _f === void 0 ? void 0 : _f.on('call.missed', this.callMissedCallback);\n }\n setupParticipantListener() {\n // Subscribe to participant changes\n this.incomingCall = undefined;\n if (!this.currentCall)\n return;\n this.participantJoinedListener = (event) => {\n if (this.magicDivId && event.participant) {\n const magicDiv = document.getElementById(this.magicDivId);\n if (magicDiv && this.currentCall) {\n this.setupParticipantVideo(this.currentCall, event.participant, magicDiv);\n this.setupParticipantAudio(this.currentCall, event.participant, magicDiv);\n }\n }\n };\n this.participantLeftListener = (event) => {\n var _a, _b;\n if (this.magicDivId && event.participant) {\n const videoId = `video-${event.participant.sessionId}`;\n const audioId = `audio-${event.participant.sessionId}`;\n // Remove video element\n const videoEl = document.getElementById(videoId);\n if (videoEl) {\n const unbindVideo = this.videoBindings.get(videoId);\n if (unbindVideo) {\n unbindVideo();\n this.videoBindings.delete(videoId);\n }\n const tracks = videoEl.srcObject;\n if (tracks) {\n tracks.getTracks().forEach((track) => {\n track.stop();\n });\n }\n videoEl.srcObject = null;\n videoEl.remove();\n }\n // Remove audio element\n const audioEl = document.getElementById(audioId);\n if (audioEl) {\n const unbindAudio = this.audioBindings.get(audioId);\n if (unbindAudio) {\n unbindAudio();\n this.audioBindings.delete(audioId);\n }\n const tracks = audioEl.srcObject;\n if (tracks) {\n tracks.getTracks().forEach((track) => {\n track.stop();\n });\n }\n audioEl.srcObject = null;\n audioEl.remove();\n }\n }\n // Check if we're the only participant left in the call\n if (this.currentCall && this.currentCall.state.session) {\n // Get the remaining participants count (we need to subtract 1 as we haven't been removed from the list yet)\n const remainingParticipants = this.currentCall.state.session.participants.length - 1;\n // If we're the only one left, end the call\n if (remainingParticipants <= 1) {\n console.log(`We are left solo in a call. Ending. cID: ${this.currentCall.cid}`);\n // End the call\n this.currentCall.leave();\n // Clean up resources\n const callCid = this.currentCall.cid;\n // Invalidate and remove timer\n const callState = (_a = this.callStates) === null || _a === void 0 ? void 0 : _a.get(callCid);\n if (callState === null || callState === void 0 ? void 0 : callState.timer) {\n clearInterval(callState.timer);\n }\n // Remove from callStates\n (_b = this.callStates) === null || _b === void 0 ? void 0 : _b.delete(callCid);\n // Reset the current call\n this.currentCall = undefined;\n // this.currentActiveCallId = undefined;\n // Clean up\n this.cleanupCall();\n console.log(`Cleaned up resources for ended call: ${callCid}`);\n // Notify that the call has ended\n this.notifyListeners('callEvent', {\n callId: callCid,\n state: 'left',\n reason: 'participant_left'\n });\n }\n }\n };\n this.currentCall.on('participantJoined', this.participantJoinedListener);\n this.currentCall.on('participantLeft', this.participantLeftListener);\n // Setup initial participants\n const participants = this.currentCall.state.participants;\n if (this.magicDivId) {\n const magicDiv = document.getElementById(this.magicDivId);\n if (magicDiv) {\n participants.forEach((participant) => {\n if (this.currentCall) {\n this.setupParticipantVideo(this.currentCall, participant, magicDiv);\n this.setupParticipantAudio(this.currentCall, participant, magicDiv);\n }\n });\n }\n }\n }\n setupParticipantVideo(call, participant, container) {\n const id = `video-${participant.sessionId}`;\n if (!document.getElementById(id)) {\n const videoEl = document.createElement('video');\n videoEl.id = id;\n videoEl.style.width = '100%';\n videoEl.style.maxWidth = '300px';\n videoEl.style.aspectRatio = '16/9';\n container.appendChild(videoEl);\n const unbind = call.bindVideoElement(videoEl, participant.sessionId, 'videoTrack');\n if (unbind)\n this.videoBindings.set(id, unbind);\n }\n }\n setupParticipantAudio(call, participant, container) {\n if (participant.isLocalParticipant)\n return;\n const id = `audio-${participant.sessionId}`;\n if (!document.getElementById(id)) {\n const audioEl = document.createElement('audio');\n audioEl.id = id;\n container.appendChild(audioEl);\n const unbind = call.bindAudioElement(audioEl, participant.sessionId);\n if (unbind)\n this.audioBindings.set(id, unbind);\n }\n }\n checkCallTimeout(callCid) {\n const callState = this.callStates.get(callCid);\n if (!callState)\n return;\n // Calculate time elapsed since call creation\n const now = new Date();\n const elapsedSeconds = (now.getTime() - callState.createdAt.getTime()) / 1000;\n // Check if 30 seconds have passed\n if (elapsedSeconds >= 30) {\n console.log(`Call ${callCid} has timed out after ${elapsedSeconds} seconds`);\n // Check if anyone has accepted\n const hasAccepted = Array.from(callState.participantResponses.values())\n .some(response => response === 'accepted');\n if (!hasAccepted) {\n console.log(`No one accepted call ${callCid}, marking all non-responders as missed`);\n // Mark all members who haven't responded as \"missed\"\n callState.members.forEach(member => {\n if (!callState.participantResponses.has(member.user_id)) {\n callState.participantResponses.set(member.user_id, 'missed');\n this.participantResponses.set(member.user_id, 'missed');\n this.notifyListeners('callEvent', {\n callId: callCid,\n state: 'missed',\n userId: member.user_id\n });\n }\n });\n // End the call\n if (this.currentCall && this.currentCall.cid === callCid) {\n this.currentCall.leave();\n }\n // Clear the timeout task\n if (callState.timer) {\n clearInterval(callState.timer);\n callState.timer = undefined;\n }\n // Remove from callStates\n this.callStates.delete(callCid);\n // Clean up\n this.cleanupCall();\n // Notify that the call has ended\n this.notifyListeners('callEvent', {\n callId: callCid,\n state: 'ended',\n reason: 'timeout'\n });\n }\n }\n }\n checkAllParticipantsResponded() {\n if (!this.currentCall)\n return;\n const callCid = this.currentCall.cid;\n const totalParticipants = this.callMembersExpected.get(callCid);\n if (!totalParticipants) {\n console.log(`No expected participant count found for call: ${callCid}`);\n return;\n }\n console.log(`Total expected participants: ${totalParticipants}`);\n // Count rejections and misses\n let rejectedOrMissedCount = 0;\n this.participantResponses.forEach(response => {\n if (response === 'rejected' || response === 'missed') {\n rejectedOrMissedCount++;\n }\n });\n console.log(`Participants responded: ${this.participantResponses.size}/${totalParticipants}`);\n console.log(`Rejected or missed: ${rejectedOrMissedCount}`);\n const allResponded = this.participantResponses.size >= totalParticipants;\n const allRejectedOrMissed = allResponded &&\n Array.from(this.participantResponses.values()).every(response => response === 'rejected' || response === 'missed');\n // If all participants have rejected or missed the call\n if (allResponded && allRejectedOrMissed) {\n console.log('All participants have rejected or missed the call');\n // End the call\n this.currentCall.leave();\n // Clean up the timer if exists in callStates\n const callState = this.callStates.get(callCid);\n if (callState === null || callState === void 0 ? void 0 : callState.timer) {\n clearInterval(callState.timer);\n }\n // Remove from callStates\n this.callStates.delete(callCid);\n // Clear the responses\n this.participantResponses.clear();\n // Clean up\n this.cleanupCall();\n // Notify that the call has ended\n this.notifyListeners('callEvent', {\n callId: callCid,\n state: 'ended',\n reason: 'all_rejected_or_missed'\n });\n }\n }\n cleanupCall() {\n var _a;\n // First cleanup the call listeners\n if (this.currentCall) {\n if (this.participantJoinedListener) {\n this.currentCall.off('participantJoined', this.participantJoinedListener);\n this.participantJoinedListener = undefined;\n }\n if (this.participantLeftListener) {\n this.currentCall.off('participantLeft', this.participantLeftListener);\n this.participantLeftListener = undefined;\n }\n (_a = this.callStateSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n }\n if (this.magicDivId) {\n const magicDiv = document.getElementById(this.magicDivId);\n if (magicDiv) {\n // Remove all video elements\n const videoElements = magicDiv.querySelectorAll('video');\n videoElements.forEach((video) => {\n const id = video.id;\n const unbind = this.videoBindings.get(id);\n if (unbind) {\n unbind();\n this.videoBindings.delete(id);\n }\n // Stop all tracks\n const tracks = video.srcObject;\n if (tracks) {\n tracks.getTracks().forEach((track) => {\n track.stop();\n track.enabled = false;\n });\n video.srcObject = null;\n }\n video.remove();\n });\n // Remove all audio elements\n const audioElements = magicDiv.querySelectorAll('audio');\n audioElements.forEach((audio) => {\n const id = audio.id;\n const unbind = this.audioBindings.get(id);\n if (unbind) {\n unbind();\n this.audioBindings.delete(id);\n }\n // Stop all tracks\n const tracks = audio.srcObject;\n if (tracks) {\n tracks.getTracks().forEach((track) => {\n track.stop();\n track.enabled = false;\n });\n audio.srcObject = null;\n }\n audio.remove();\n });\n // Clear the container\n while (magicDiv.firstChild) {\n magicDiv.removeChild(magicDiv.firstChild);\n }\n }\n }\n // Clear all bindings\n this.videoBindings.clear();\n this.audioBindings.clear();\n // Clear call references\n this.currentCall = undefined;\n this.incomingCall = undefined;\n }\n async login(options) {\n this.client = StreamVideoClient.getOrCreateInstance({\n apiKey: options.apiKey,\n user: { id: options.userId, name: options.name, image: options.imageURL },\n token: options.token,\n });\n this.magicDivId = options.magicDivId;\n this.setupCallRingListener();\n return { success: true };\n }\n async logout() {\n var _a;\n if (!this.client) {\n console.log('No client', this.client);\n throw new Error('Client not initialized');\n }\n // Cleanup subscription\n (_a = this.callStateSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.callStateSubscription = undefined;\n await this.client.disconnectUser();\n this.client = undefined;\n this.currentCall = undefined;\n return { success: true };\n }\n async call(options) {\n if (!this.client) {\n console.log('No client', this.client);\n throw new Error('Client not initialized - Please login first');\n }\n const call = this.client.call(options.type || 'default', crypto.randomUUID());\n const members = options.userIds.map((userId) => ({ user_id: userId }));\n if (this.client.streamClient.userID && !options.userIds.includes(this.client.streamClient.userID)) {\n members.push({ user_id: this.client.streamClient.userID });\n }\n await call.getOrCreate({ data: { members } });\n // Store the expected member count for this call\n // -1, because we don't count the caller themselves\n this.callMembersExpected.set(call.cid, members.length);\n console.log(`Setting expected members for call ${call.cid}: ${members.length}`);\n this.currentCall = call;\n if (options.ring) {\n this.outgoingCall = call.cid;\n await call.ring();\n }\n await call.join();\n return { success: true };\n }\n async endCall() {\n if (!this.currentCall) {\n console.log('No active call', this.currentCall);\n throw new Error('No active call');\n }\n await this.currentCall.leave();\n this.currentCall = undefined;\n this.cleanupCall();\n return { success: true };\n }\n async setMicrophoneEnabled(options) {\n if (!this.currentCall) {\n console.log('No active call', this.currentCall);\n throw new Error('No active call');\n }\n if (options.enabled) {\n await this.currentCall.microphone.enable();\n }\n else {\n await this.currentCall.microphone.disable();\n }\n return { success: true };\n }\n async setCameraEnabled(options) {\n if (!this.currentCall) {\n console.log('No active call', this.currentCall);\n throw new Error('No active call');\n }\n if (options.enabled) {\n await this.currentCall.camera.enable();\n }\n else {\n await this.currentCall.camera.disable();\n }\n return { success: true };\n }\n async acceptCall() {\n if (!this.incomingCall || !this.client) {\n console.log('No incoming call to accept', this.incomingCall, this.client);\n throw new Error('No incoming call to accept');\n }\n console.log('Accepting call', this.incomingCall);\n const call = this.client.call(this.incomingCall.type, this.incomingCall.id);\n this.currentCall = call;\n console.log('Joining call', call);\n await call.accept();\n await call.join();\n console.log('Joined call', call);\n this.notifyListeners('callEvent', { callId: call.id, state: CallingState.JOINED });\n this.setupParticipantListener();\n return { success: true };\n }\n async rejectCall() {\n if (!this.incomingCall || !this.client) {\n console.log('No incoming call to reject', this.incomingCall, this.client);\n throw new Error('No incoming call to reject');\n }\n console.log('Rejecting call', this.incomingCall);\n const call = this.client.call(this.incomingCall.type, this.incomingCall.id);\n console.log('Leaving call', call);\n await call.reject();\n this.incomingCall = undefined;\n console.log('Rejected call', call);\n this.notifyListeners('callEvent', { callId: call.id, state: CallingState.LEFT });\n this.cleanupCall();\n return { success: true };\n }\n async isCameraEnabled() {\n if (!this.currentCall) {\n console.log('No active call', this.currentCall);\n throw new Error('No active call');\n }\n const enabled = await this.currentCall.camera.enabled;\n return { enabled };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin","CallingState","StreamVideoClient"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst StreamCall = registerPlugin('StreamCall', {\n web: () => import('./web').then((m) => new m.StreamCallWeb()),\n});\nexport * from './definitions';\nexport { StreamCall };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CallingState, StreamVideoClient } from '@stream-io/video-client';\nexport class StreamCallWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.videoBindings = new Map();\n this.audioBindings = new Map();\n this.participantResponses = new Map();\n this.callMembersExpected = new Map();\n this.ringCallback = (event) => {\n var _a, _b;\n console.log('Call ringing', event, this.currentCall);\n this.incomingCall = event.call;\n if (!this.currentCall) {\n console.log('Creating new call', event.call.id);\n this.currentCall = (_a = this.client) === null || _a === void 0 ? void 0 : _a.call(event.call.type, event.call.id);\n // this.currentActiveCallId = this.currentCall?.cid;\n this.notifyListeners('callEvent', { callId: event.call.id, state: CallingState.RINGING });\n // Clear previous responses when a new call starts\n this.participantResponses.clear();\n }\n if (this.currentCall) {\n console.log('Call found', this.currentCall.id);\n this.callStateSubscription = (_b = this.currentCall) === null || _b === void 0 ? void 0 : _b.state.callingState$.subscribe((s) => {\n var _a;\n console.log('Call state', s);\n if (s === CallingState.JOINED) {\n this.setupParticipantListener();\n this.setupCallEventListeners();\n }\n else if (s === CallingState.LEFT || s === CallingState.RECONNECTING_FAILED) {\n this.cleanupCall();\n }\n if (this.outgoingCall && s === CallingState.RINGING) {\n this.outgoingCall = undefined;\n }\n else {\n this.notifyListeners('callEvent', { callId: (_a = this.currentCall) === null || _a === void 0 ? void 0 : _a.id, state: s });\n }\n });\n }\n };\n this.callSessionStartedCallback = (event) => {\n var _a, _b;\n console.log('Call created (session started)', event);\n if ((_b = (_a = event.call) === null || _a === void 0 ? void 0 : _a.session) === null || _b === void 0 ? void 0 : _b.participants) {\n // Store the number of expected participants for this call\n const callCid = event.call.cid;\n const memberCount = event.call.session.participants.length;\n console.log(`Call ${callCid} created with ${memberCount} members`);\n this.callMembersExpected.set(callCid, memberCount);\n // Store call members in callStates\n this.callStates.set(callCid, {\n members: event.call.session.participants.map((p) => { var _a; return ({ user_id: ((_a = p.user) === null || _a === void 0 ? void 0 : _a.id) || '' }); }),\n participantResponses: new Map(),\n expectedMemberCount: memberCount,\n createdAt: new Date(),\n });\n // Start a timeout task that runs every second\n const timeoutTask = setInterval(() => this.checkCallTimeout(callCid), 1000);\n // Update the callState with the timeout task\n const callState = this.callStates.get(callCid);\n if (callState) {\n callState.timer = timeoutTask;\n this.callStates.set(callCid, callState);\n }\n }\n };\n this.callRejectedCallback = (event) => {\n var _a;\n console.log('Call rejected', event);\n if ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) {\n this.participantResponses.set(event.user.id, 'rejected');\n // Update the combined callStates map\n const callState = this.callStates.get(event.call_cid);\n if (callState) {\n callState.participantResponses.set(event.user.id, 'rejected');\n this.callStates.set(event.call_cid, callState);\n }\n this.notifyListeners('callEvent', {\n callId: event.call_cid,\n state: 'rejected',\n userId: event.user.id,\n });\n this.checkAllParticipantsResponded();\n }\n };\n this.callAcceptedCallback = (event) => {\n var _a;\n console.log('Call accepted', event);\n if ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) {\n this.participantResponses.set(event.user.id, 'accepted');\n // Update the combined callStates map\n const callState = this.callStates.get(event.call_cid);\n if (callState) {\n callState.participantResponses.set(event.user.id, 'accepted');\n // If someone accepted, clear the timer as we don't need to check anymore\n if (callState.timer) {\n clearInterval(callState.timer);\n callState.timer = undefined;\n }\n this.callStates.set(event.call_cid, callState);\n }\n this.notifyListeners('callEvent', {\n callId: event.call_cid,\n state: 'accepted',\n userId: event.user.id,\n });\n }\n };\n this.callMissedCallback = (event) => {\n var _a;\n console.log('Call missed', event);\n if ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) {\n this.participantResponses.set(event.user.id, 'missed');\n // Update the combined callStates map\n const callState = this.callStates.get(event.call_cid);\n if (callState) {\n callState.participantResponses.set(event.user.id, 'missed');\n this.callStates.set(event.call_cid, callState);\n }\n this.notifyListeners('callEvent', {\n callId: event.call_cid,\n state: 'missed',\n userId: event.user.id,\n });\n this.checkAllParticipantsResponded();\n }\n };\n // Add a combined map for call states, mirroring the iOS implementation\n this.callStates = new Map();\n }\n // private currentActiveCallId?: string;\n setupCallRingListener() {\n var _a, _b, _c, _d;\n (_a = this.client) === null || _a === void 0 ? void 0 : _a.off('call.ring', this.ringCallback);\n (_b = this.client) === null || _b === void 0 ? void 0 : _b.off('call.session_started', this.callSessionStartedCallback);\n (_c = this.client) === null || _c === void 0 ? void 0 : _c.on('call.ring', this.ringCallback);\n (_d = this.client) === null || _d === void 0 ? void 0 : _d.on('call.session_started', this.callSessionStartedCallback);\n }\n setupCallEventListeners() {\n var _a, _b, _c, _d, _e, _f;\n // Clear previous listeners if any\n (_a = this.client) === null || _a === void 0 ? void 0 : _a.off('call.rejected', this.callRejectedCallback);\n (_b = this.client) === null || _b === void 0 ? void 0 : _b.off('call.accepted', this.callAcceptedCallback);\n (_c = this.client) === null || _c === void 0 ? void 0 : _c.off('call.missed', this.callMissedCallback);\n // Register event listeners\n (_d = this.client) === null || _d === void 0 ? void 0 : _d.on('call.rejected', this.callRejectedCallback);\n (_e = this.client) === null || _e === void 0 ? void 0 : _e.on('call.accepted', this.callAcceptedCallback);\n (_f = this.client) === null || _f === void 0 ? void 0 : _f.on('call.missed', this.callMissedCallback);\n }\n setupParticipantListener() {\n // Subscribe to participant changes\n this.incomingCall = undefined;\n if (!this.currentCall)\n return;\n this.participantJoinedListener = (event) => {\n if (this.magicDivId && event.participant) {\n const magicDiv = document.getElementById(this.magicDivId);\n if (magicDiv && this.currentCall) {\n this.setupParticipantVideo(this.currentCall, event.participant, magicDiv);\n this.setupParticipantAudio(this.currentCall, event.participant, magicDiv);\n }\n }\n };\n this.participantLeftListener = (event) => {\n var _a, _b, _c;\n if (this.magicDivId && event.participant) {\n const videoId = `video-${event.participant.sessionId}`;\n const audioId = `audio-${event.participant.sessionId}`;\n // Remove video element\n const videoEl = document.getElementById(videoId);\n if (videoEl) {\n const unbindVideo = this.videoBindings.get(videoId);\n if (unbindVideo) {\n unbindVideo();\n this.videoBindings.delete(videoId);\n }\n const tracks = videoEl.srcObject;\n if (tracks) {\n tracks.getTracks().forEach((track) => {\n track.stop();\n });\n }\n videoEl.srcObject = null;\n videoEl.remove();\n }\n // Remove audio element\n const audioEl = document.getElementById(audioId);\n if (audioEl) {\n const unbindAudio = this.audioBindings.get(audioId);\n if (unbindAudio) {\n unbindAudio();\n this.audioBindings.delete(audioId);\n }\n const tracks = audioEl.srcObject;\n if (tracks) {\n tracks.getTracks().forEach((track) => {\n track.stop();\n });\n }\n audioEl.srcObject = null;\n audioEl.remove();\n }\n }\n // Check if we're the only participant left in the call\n if ((_a = this.currentCall) === null || _a === void 0 ? void 0 : _a.state.session) {\n // Get the remaining participants count (we need to subtract 1 as we haven't been removed from the list yet)\n const remainingParticipants = this.currentCall.state.session.participants.length - 1;\n // If we're the only one left, end the call\n if (remainingParticipants <= 1) {\n console.log(`We are left solo in a call. Ending. cID: ${this.currentCall.cid}`);\n // End the call\n this.currentCall.leave();\n // Clean up resources\n const callCid = this.currentCall.cid;\n // Invalidate and remove timer\n const callState = (_b = this.callStates) === null || _b === void 0 ? void 0 : _b.get(callCid);\n if (callState === null || callState === void 0 ? void 0 : callState.timer) {\n clearInterval(callState.timer);\n }\n // Remove from callStates\n (_c = this.callStates) === null || _c === void 0 ? void 0 : _c.delete(callCid);\n // Reset the current call\n this.currentCall = undefined;\n // this.currentActiveCallId = undefined;\n // Clean up\n this.cleanupCall();\n console.log(`Cleaned up resources for ended call: ${callCid}`);\n // Notify that the call has ended\n this.notifyListeners('callEvent', {\n callId: callCid,\n state: 'left',\n reason: 'participant_left',\n });\n }\n }\n };\n this.currentCall.on('participantJoined', this.participantJoinedListener);\n this.currentCall.on('participantLeft', this.participantLeftListener);\n // Setup initial participants\n const participants = this.currentCall.state.participants;\n if (this.magicDivId) {\n const magicDiv = document.getElementById(this.magicDivId);\n if (magicDiv) {\n participants.forEach((participant) => {\n if (this.currentCall) {\n this.setupParticipantVideo(this.currentCall, participant, magicDiv);\n this.setupParticipantAudio(this.currentCall, participant, magicDiv);\n }\n });\n }\n }\n }\n setupParticipantVideo(call, participant, container) {\n const id = `video-${participant.sessionId}`;\n if (!document.getElementById(id)) {\n const videoEl = document.createElement('video');\n videoEl.id = id;\n videoEl.style.width = '100%';\n videoEl.style.maxWidth = '300px';\n videoEl.style.aspectRatio = '16/9';\n container.appendChild(videoEl);\n const unbind = call.bindVideoElement(videoEl, participant.sessionId, 'videoTrack');\n if (unbind)\n this.videoBindings.set(id, unbind);\n }\n }\n setupParticipantAudio(call, participant, container) {\n if (participant.isLocalParticipant)\n return;\n const id = `audio-${participant.sessionId}`;\n if (!document.getElementById(id)) {\n const audioEl = document.createElement('audio');\n audioEl.id = id;\n container.appendChild(audioEl);\n const unbind = call.bindAudioElement(audioEl, participant.sessionId);\n if (unbind)\n this.audioBindings.set(id, unbind);\n }\n }\n checkCallTimeout(callCid) {\n const callState = this.callStates.get(callCid);\n if (!callState)\n return;\n // Calculate time elapsed since call creation\n const now = new Date();\n const elapsedSeconds = (now.getTime() - callState.createdAt.getTime()) / 1000;\n // Check if 30 seconds have passed\n if (elapsedSeconds >= 30) {\n console.log(`Call ${callCid} has timed out after ${elapsedSeconds} seconds`);\n // Check if anyone has accepted\n const hasAccepted = Array.from(callState.participantResponses.values()).some((response) => response === 'accepted');\n if (!hasAccepted) {\n console.log(`No one accepted call ${callCid}, marking all non-responders as missed`);\n // Mark all members who haven't responded as \"missed\"\n callState.members.forEach((member) => {\n if (!callState.participantResponses.has(member.user_id)) {\n callState.participantResponses.set(member.user_id, 'missed');\n this.participantResponses.set(member.user_id, 'missed');\n this.notifyListeners('callEvent', {\n callId: callCid,\n state: 'missed',\n userId: member.user_id,\n });\n }\n });\n // End the call\n if (this.currentCall && this.currentCall.cid === callCid) {\n this.currentCall.leave();\n }\n // Clear the timeout task\n if (callState.timer) {\n clearInterval(callState.timer);\n callState.timer = undefined;\n }\n // Remove from callStates\n this.callStates.delete(callCid);\n // Clean up\n this.cleanupCall();\n // Notify that the call has ended\n this.notifyListeners('callEvent', {\n callId: callCid,\n state: 'ended',\n reason: 'timeout',\n });\n }\n }\n }\n checkAllParticipantsResponded() {\n if (!this.currentCall)\n return;\n const callCid = this.currentCall.cid;\n const totalParticipants = this.callMembersExpected.get(callCid);\n if (!totalParticipants) {\n console.log(`No expected participant count found for call: ${callCid}`);\n return;\n }\n console.log(`Total expected participants: ${totalParticipants}`);\n // Count rejections and misses\n let rejectedOrMissedCount = 0;\n this.participantResponses.forEach((response) => {\n if (response === 'rejected' || response === 'missed') {\n rejectedOrMissedCount++;\n }\n });\n console.log(`Participants responded: ${this.participantResponses.size}/${totalParticipants}`);\n console.log(`Rejected or missed: ${rejectedOrMissedCount}`);\n const allResponded = this.participantResponses.size >= totalParticipants;\n const allRejectedOrMissed = allResponded &&\n Array.from(this.participantResponses.values()).every((response) => response === 'rejected' || response === 'missed');\n // If all participants have rejected or missed the call\n if (allResponded && allRejectedOrMissed) {\n console.log('All participants have rejected or missed the call');\n // End the call\n this.currentCall.leave();\n // Clean up the timer if exists in callStates\n const callState = this.callStates.get(callCid);\n if (callState === null || callState === void 0 ? void 0 : callState.timer) {\n clearInterval(callState.timer);\n }\n // Remove from callStates\n this.callStates.delete(callCid);\n // Clear the responses\n this.participantResponses.clear();\n // Clean up\n this.cleanupCall();\n // Notify that the call has ended\n this.notifyListeners('callEvent', {\n callId: callCid,\n state: 'ended',\n reason: 'all_rejected_or_missed',\n });\n }\n }\n cleanupCall() {\n var _a;\n // First cleanup the call listeners\n if (this.currentCall) {\n if (this.participantJoinedListener) {\n this.currentCall.off('participantJoined', this.participantJoinedListener);\n this.participantJoinedListener = undefined;\n }\n if (this.participantLeftListener) {\n this.currentCall.off('participantLeft', this.participantLeftListener);\n this.participantLeftListener = undefined;\n }\n (_a = this.callStateSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n }\n if (this.magicDivId) {\n const magicDiv = document.getElementById(this.magicDivId);\n if (magicDiv) {\n // Remove all video elements\n const videoElements = magicDiv.querySelectorAll('video');\n videoElements.forEach((video) => {\n const id = video.id;\n const unbind = this.videoBindings.get(id);\n if (unbind) {\n unbind();\n this.videoBindings.delete(id);\n }\n // Stop all tracks\n const tracks = video.srcObject;\n if (tracks) {\n tracks.getTracks().forEach((track) => {\n track.stop();\n track.enabled = false;\n });\n video.srcObject = null;\n }\n video.remove();\n });\n // Remove all audio elements\n const audioElements = magicDiv.querySelectorAll('audio');\n audioElements.forEach((audio) => {\n const id = audio.id;\n const unbind = this.audioBindings.get(id);\n if (unbind) {\n unbind();\n this.audioBindings.delete(id);\n }\n // Stop all tracks\n const tracks = audio.srcObject;\n if (tracks) {\n tracks.getTracks().forEach((track) => {\n track.stop();\n track.enabled = false;\n });\n audio.srcObject = null;\n }\n audio.remove();\n });\n // Clear the container\n while (magicDiv.firstChild) {\n magicDiv.removeChild(magicDiv.firstChild);\n }\n }\n }\n // Clear all bindings\n this.videoBindings.clear();\n this.audioBindings.clear();\n // Clear call references\n this.currentCall = undefined;\n this.incomingCall = undefined;\n }\n async login(options) {\n this.client = StreamVideoClient.getOrCreateInstance({\n apiKey: options.apiKey,\n user: { id: options.userId, name: options.name, image: options.imageURL },\n token: options.token,\n });\n this.magicDivId = options.magicDivId;\n this.setupCallRingListener();\n return { success: true };\n }\n async logout() {\n var _a;\n if (!this.client) {\n console.log('No client', this.client);\n throw new Error('Client not initialized');\n }\n // Cleanup subscription\n (_a = this.callStateSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.callStateSubscription = undefined;\n await this.client.disconnectUser();\n this.client = undefined;\n this.currentCall = undefined;\n return { success: true };\n }\n async call(options) {\n if (!this.client) {\n console.log('No client', this.client);\n throw new Error('Client not initialized - Please login first');\n }\n const call = this.client.call(options.type || 'default', crypto.randomUUID());\n const members = options.userIds.map((userId) => ({ user_id: userId }));\n if (this.client.streamClient.userID && !options.userIds.includes(this.client.streamClient.userID)) {\n members.push({ user_id: this.client.streamClient.userID });\n }\n await call.getOrCreate({ data: { members, team: options.team } });\n // Store the expected member count for this call\n // -1, because we don't count the caller themselves\n this.callMembersExpected.set(call.cid, members.length);\n console.log(`Setting expected members for call ${call.cid}: ${members.length}`);\n this.currentCall = call;\n if (options.ring) {\n this.outgoingCall = call.cid;\n await call.ring();\n }\n await call.join();\n return { success: true };\n }\n async endCall() {\n if (!this.currentCall) {\n console.log('No active call', this.currentCall);\n throw new Error('No active call');\n }\n await this.currentCall.leave();\n this.currentCall = undefined;\n this.cleanupCall();\n return { success: true };\n }\n async setMicrophoneEnabled(options) {\n if (!this.currentCall) {\n console.log('No active call', this.currentCall);\n throw new Error('No active call');\n }\n if (options.enabled) {\n await this.currentCall.microphone.enable();\n }\n else {\n await this.currentCall.microphone.disable();\n }\n return { success: true };\n }\n async setCameraEnabled(options) {\n if (!this.currentCall) {\n console.log('No active call', this.currentCall);\n throw new Error('No active call');\n }\n if (options.enabled) {\n await this.currentCall.camera.enable();\n }\n else {\n await this.currentCall.camera.disable();\n }\n return { success: true };\n }\n async acceptCall() {\n if (!this.incomingCall || !this.client) {\n console.log('No incoming call to accept', this.incomingCall, this.client);\n throw new Error('No incoming call to accept');\n }\n console.log('Accepting call', this.incomingCall);\n const call = this.client.call(this.incomingCall.type, this.incomingCall.id);\n this.currentCall = call;\n console.log('Joining call', call);\n await call.accept();\n await call.join();\n console.log('Joined call', call);\n this.notifyListeners('callEvent', { callId: call.id, state: CallingState.JOINED });\n this.setupParticipantListener();\n return { success: true };\n }\n async rejectCall() {\n if (!this.incomingCall || !this.client) {\n console.log('No incoming call to reject', this.incomingCall, this.client);\n throw new Error('No incoming call to reject');\n }\n console.log('Rejecting call', this.incomingCall);\n const call = this.client.call(this.incomingCall.type, this.incomingCall.id);\n console.log('Leaving call', call);\n await call.reject();\n this.incomingCall = undefined;\n console.log('Rejected call', call);\n this.notifyListeners('callEvent', { callId: call.id, state: CallingState.LEFT });\n this.cleanupCall();\n return { success: true };\n }\n async isCameraEnabled() {\n if (!this.currentCall) {\n console.log('No active call', this.currentCall);\n throw new Error('No active call');\n }\n const enabled = await this.currentCall.camera.enabled;\n return { enabled };\n }\n async getCallStatus() {\n if (!this.currentCall) {\n throw new Error('No active call');\n }\n const callingState = this.currentCall.state.callingState;\n let state;\n switch (callingState) {\n case CallingState.IDLE:\n state = 'idle';\n break;\n case CallingState.RINGING:\n state = 'ringing';\n break;\n case CallingState.JOINING:\n state = 'joining';\n break;\n case CallingState.RECONNECTING:\n state = 'reconnecting';\n break;\n case CallingState.JOINED:\n state = 'joined';\n break;\n case CallingState.LEFT:\n state = 'left';\n break;\n default:\n state = 'unknown';\n }\n return {\n callId: this.currentCall.id,\n state,\n };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin","CallingState","StreamVideoClient"],"mappings":";;;;;AACK,MAAC,UAAU,GAAGA,mBAAc,CAAC,YAAY,EAAE;AAChD,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;AACjE,CAAC;;ACDM,MAAM,aAAa,SAASC,cAAS,CAAC;AAC7C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE;AACtC,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE;AACtC,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,EAAE;AAC7C,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAE;AAC5C,QAAQ,IAAI,CAAC,YAAY,GAAG,CAAC,KAAK,KAAK;AACvC,YAAY,IAAI,EAAE,EAAE,EAAE;AACtB,YAAY,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;AAChE,YAAY,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI;AAC1C,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnC,gBAAgB,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/D,gBAAgB,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAClI;AACA,gBAAgB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAEC,wBAAY,CAAC,OAAO,EAAE,CAAC;AACzG;AACA,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACjD;AACA,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,gBAAgB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AAC9D,gBAAgB,IAAI,CAAC,qBAAqB,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;AAClJ,oBAAoB,IAAI,EAAE;AAC1B,oBAAoB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;AAChD,oBAAoB,IAAI,CAAC,KAAKA,wBAAY,CAAC,MAAM,EAAE;AACnD,wBAAwB,IAAI,CAAC,wBAAwB,EAAE;AACvD,wBAAwB,IAAI,CAAC,uBAAuB,EAAE;AACtD;AACA,yBAAyB,IAAI,CAAC,KAAKA,wBAAY,CAAC,IAAI,IAAI,CAAC,KAAKA,wBAAY,CAAC,mBAAmB,EAAE;AAChG,wBAAwB,IAAI,CAAC,WAAW,EAAE;AAC1C;AACA,oBAAoB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,KAAKA,wBAAY,CAAC,OAAO,EAAE;AACzE,wBAAwB,IAAI,CAAC,YAAY,GAAG,SAAS;AACrD;AACA,yBAAyB;AACzB,wBAAwB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACnJ;AACA,iBAAiB,CAAC;AAClB;AACA,SAAS;AACT,QAAQ,IAAI,CAAC,0BAA0B,GAAG,CAAC,KAAK,KAAK;AACrD,YAAY,IAAI,EAAE,EAAE,EAAE;AACtB,YAAY,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,KAAK,CAAC;AAChE,YAAY,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,YAAY,EAAE;AAC/I;AACA,gBAAgB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG;AAC9C,gBAAgB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM;AAC1E,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClF,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;AAClE;AACA,gBAAgB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE;AAC7C,oBAAoB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;AAC5K,oBAAoB,oBAAoB,EAAE,IAAI,GAAG,EAAE;AACnD,oBAAoB,mBAAmB,EAAE,WAAW;AACpD,oBAAoB,SAAS,EAAE,IAAI,IAAI,EAAE;AACzC,iBAAiB,CAAC;AAClB;AACA,gBAAgB,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;AAC3F;AACA,gBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAC9D,gBAAgB,IAAI,SAAS,EAAE;AAC/B,oBAAoB,SAAS,CAAC,KAAK,GAAG,WAAW;AACjD,oBAAoB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;AAC3D;AACA;AACA,SAAS;AACT,QAAQ,IAAI,CAAC,oBAAoB,GAAG,CAAC,KAAK,KAAK;AAC/C,YAAY,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;AAC/C,YAAY,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9E,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC;AACxE;AACA,gBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACrE,gBAAgB,IAAI,SAAS,EAAE;AAC/B,oBAAoB,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC;AACjF,oBAAoB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;AAClE;AACA,gBAAgB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAClD,oBAAoB,MAAM,EAAE,KAAK,CAAC,QAAQ;AAC1C,oBAAoB,KAAK,EAAE,UAAU;AACrC,oBAAoB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AACzC,iBAAiB,CAAC;AAClB,gBAAgB,IAAI,CAAC,6BAA6B,EAAE;AACpD;AACA,SAAS;AACT,QAAQ,IAAI,CAAC,oBAAoB,GAAG,CAAC,KAAK,KAAK;AAC/C,YAAY,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;AAC/C,YAAY,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9E,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC;AACxE;AACA,gBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACrE,gBAAgB,IAAI,SAAS,EAAE;AAC/B,oBAAoB,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC;AACjF;AACA,oBAAoB,IAAI,SAAS,CAAC,KAAK,EAAE;AACzC,wBAAwB,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;AACtD,wBAAwB,SAAS,CAAC,KAAK,GAAG,SAAS;AACnD;AACA,oBAAoB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;AAClE;AACA,gBAAgB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAClD,oBAAoB,MAAM,EAAE,KAAK,CAAC,QAAQ;AAC1C,oBAAoB,KAAK,EAAE,UAAU;AACrC,oBAAoB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AACzC,iBAAiB,CAAC;AAClB;AACA,SAAS;AACT,QAAQ,IAAI,CAAC,kBAAkB,GAAG,CAAC,KAAK,KAAK;AAC7C,YAAY,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;AAC7C,YAAY,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9E,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;AACtE;AACA,gBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACrE,gBAAgB,IAAI,SAAS,EAAE;AAC/B,oBAAoB,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;AAC/E,oBAAoB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;AAClE;AACA,gBAAgB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAClD,oBAAoB,MAAM,EAAE,KAAK,CAAC,QAAQ;AAC1C,oBAAoB,KAAK,EAAE,QAAQ;AACnC,oBAAoB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AACzC,iBAAiB,CAAC;AAClB,gBAAgB,IAAI,CAAC,6BAA6B,EAAE;AACpD;AACA,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;AACnC;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1B,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;AACtG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,0BAA0B,CAAC;AAC/H,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;AACrG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,0BAA0B,CAAC;AAC9H;AACA,IAAI,uBAAuB,GAAG;AAC9B,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC;AACA,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC;AAClH,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC;AAClH,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC9G;AACA,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACjH,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACjH,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC7G;AACA,IAAI,wBAAwB,GAAG;AAC/B;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,SAAS;AACrC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW;AAC7B,YAAY;AACZ,QAAQ,IAAI,CAAC,yBAAyB,GAAG,CAAC,KAAK,KAAK;AACpD,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;AACtD,gBAAgB,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACzE,gBAAgB,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAClD,oBAAoB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;AAC7F,oBAAoB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;AAC7F;AACA;AACA,SAAS;AACT,QAAQ,IAAI,CAAC,uBAAuB,GAAG,CAAC,KAAK,KAAK;AAClD,YAAY,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1B,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;AACtD,gBAAgB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACtE,gBAAgB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACtE;AACA,gBAAgB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;AAChE,gBAAgB,IAAI,OAAO,EAAE;AAC7B,oBAAoB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;AACvE,oBAAoB,IAAI,WAAW,EAAE;AACrC,wBAAwB,WAAW,EAAE;AACrC,wBAAwB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1D;AACA,oBAAoB,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS;AACpD,oBAAoB,IAAI,MAAM,EAAE;AAChC,wBAAwB,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC9D,4BAA4B,KAAK,CAAC,IAAI,EAAE;AACxC,yBAAyB,CAAC;AAC1B;AACA,oBAAoB,OAAO,CAAC,SAAS,GAAG,IAAI;AAC5C,oBAAoB,OAAO,CAAC,MAAM,EAAE;AACpC;AACA;AACA,gBAAgB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;AAChE,gBAAgB,IAAI,OAAO,EAAE;AAC7B,oBAAoB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;AACvE,oBAAoB,IAAI,WAAW,EAAE;AACrC,wBAAwB,WAAW,EAAE;AACrC,wBAAwB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1D;AACA,oBAAoB,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS;AACpD,oBAAoB,IAAI,MAAM,EAAE;AAChC,wBAAwB,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC9D,4BAA4B,KAAK,CAAC,IAAI,EAAE;AACxC,yBAAyB,CAAC;AAC1B;AACA,oBAAoB,OAAO,CAAC,SAAS,GAAG,IAAI;AAC5C,oBAAoB,OAAO,CAAC,MAAM,EAAE;AACpC;AACA;AACA;AACA,YAAY,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE;AAC/F;AACA,gBAAgB,MAAM,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;AACpG;AACA,gBAAgB,IAAI,qBAAqB,IAAI,CAAC,EAAE;AAChD,oBAAoB,OAAO,CAAC,GAAG,CAAC,CAAC,yCAAyC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACnG;AACA,oBAAoB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC5C;AACA,oBAAoB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG;AACxD;AACA,oBAAoB,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;AACjH,oBAAoB,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE;AAC/F,wBAAwB,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;AACtD;AACA;AACA,oBAAoB,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;AAClG;AACA,oBAAoB,IAAI,CAAC,WAAW,GAAG,SAAS;AAChD;AACA;AACA,oBAAoB,IAAI,CAAC,WAAW,EAAE;AACtC,oBAAoB,OAAO,CAAC,GAAG,CAAC,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAC,CAAC;AAClF;AACA,oBAAoB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AACtD,wBAAwB,MAAM,EAAE,OAAO;AACvC,wBAAwB,KAAK,EAAE,MAAM;AACrC,wBAAwB,MAAM,EAAE,kBAAkB;AAClD,qBAAqB,CAAC;AACtB;AACA;AACA,SAAS;AACT,QAAQ,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAAC,yBAAyB,CAAC;AAChF,QAAQ,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,uBAAuB,CAAC;AAC5E;AACA,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY;AAChE,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACrE,YAAY,IAAI,QAAQ,EAAE;AAC1B,gBAAgB,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK;AACtD,oBAAoB,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1C,wBAAwB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC;AAC3F,wBAAwB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC;AAC3F;AACA,iBAAiB,CAAC;AAClB;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE;AACxD,QAAQ,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;AACnD,QAAQ,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;AAC1C,YAAY,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC3D,YAAY,OAAO,CAAC,EAAE,GAAG,EAAE;AAC3B,YAAY,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM;AACxC,YAAY,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC5C,YAAY,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM;AAC9C,YAAY,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC;AAC1C,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC;AAC9F,YAAY,IAAI,MAAM;AACtB,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;AAClD;AACA;AACA,IAAI,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE;AACxD,QAAQ,IAAI,WAAW,CAAC,kBAAkB;AAC1C,YAAY;AACZ,QAAQ,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;AACnD,QAAQ,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;AAC1C,YAAY,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC3D,YAAY,OAAO,CAAC,EAAE,GAAG,EAAE;AAC3B,YAAY,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC;AAC1C,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC;AAChF,YAAY,IAAI,MAAM;AACtB,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;AAClD;AACA;AACA,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC9B,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AACtD,QAAQ,IAAI,CAAC,SAAS;AACtB,YAAY;AACZ;AACA,QAAQ,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AAC9B,QAAQ,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,IAAI;AACrF;AACA,QAAQ,IAAI,cAAc,IAAI,EAAE,EAAE;AAClC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,qBAAqB,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;AACxF;AACA,YAAY,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,KAAK,UAAU,CAAC;AAC/H,YAAY,IAAI,CAAC,WAAW,EAAE;AAC9B,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,qBAAqB,EAAE,OAAO,CAAC,sCAAsC,CAAC,CAAC;AACpG;AACA,gBAAgB,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACtD,oBAAoB,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AAC7E,wBAAwB,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;AACpF,wBAAwB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC/E,wBAAwB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAC1D,4BAA4B,MAAM,EAAE,OAAO;AAC3C,4BAA4B,KAAK,EAAE,QAAQ;AAC3C,4BAA4B,MAAM,EAAE,MAAM,CAAC,OAAO;AAClD,yBAAyB,CAAC;AAC1B;AACA,iBAAiB,CAAC;AAClB;AACA,gBAAgB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,OAAO,EAAE;AAC1E,oBAAoB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC5C;AACA;AACA,gBAAgB,IAAI,SAAS,CAAC,KAAK,EAAE;AACrC,oBAAoB,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;AAClD,oBAAoB,SAAS,CAAC,KAAK,GAAG,SAAS;AAC/C;AACA;AACA,gBAAgB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;AAC/C;AACA,gBAAgB,IAAI,CAAC,WAAW,EAAE;AAClC;AACA,gBAAgB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAClD,oBAAoB,MAAM,EAAE,OAAO;AACnC,oBAAoB,KAAK,EAAE,OAAO;AAClC,oBAAoB,MAAM,EAAE,SAAS;AACrC,iBAAiB,CAAC;AAClB;AACA;AACA;AACA,IAAI,6BAA6B,GAAG;AACpC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW;AAC7B,YAAY;AACZ,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG;AAC5C,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;AACvE,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,8CAA8C,EAAE,OAAO,CAAC,CAAC,CAAC;AACnF,YAAY;AACZ;AACA,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,6BAA6B,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACxE;AACA,QAAQ,IAAI,qBAAqB,GAAG,CAAC;AACrC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;AACxD,YAAY,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,QAAQ,EAAE;AAClE,gBAAgB,qBAAqB,EAAE;AACvC;AACA,SAAS,CAAC;AACV,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,wBAAwB,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACrG,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AACnE,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,IAAI,iBAAiB;AAChF,QAAQ,MAAM,mBAAmB,GAAG,YAAY;AAChD,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,QAAQ,CAAC;AAChI;AACA,QAAQ,IAAI,YAAY,IAAI,mBAAmB,EAAE;AACjD,YAAY,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC;AAC5E;AACA,YAAY,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACpC;AACA,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1D,YAAY,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE;AACvF,gBAAgB,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;AAC9C;AACA;AACA,YAAY,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;AAC3C;AACA,YAAY,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AAC7C;AACA,YAAY,IAAI,CAAC,WAAW,EAAE;AAC9B;AACA,YAAY,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAC9C,gBAAgB,MAAM,EAAE,OAAO;AAC/B,gBAAgB,KAAK,EAAE,OAAO;AAC9B,gBAAgB,MAAM,EAAE,wBAAwB;AAChD,aAAa,CAAC;AACd;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,EAAE;AACd;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAChD,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,yBAAyB,CAAC;AACzF,gBAAgB,IAAI,CAAC,yBAAyB,GAAG,SAAS;AAC1D;AACA,YAAY,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC9C,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,uBAAuB,CAAC;AACrF,gBAAgB,IAAI,CAAC,uBAAuB,GAAG,SAAS;AACxD;AACA,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,qBAAqB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,WAAW,EAAE;AACnG;AACA,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACrE,YAAY,IAAI,QAAQ,EAAE;AAC1B;AACA,gBAAgB,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACxE,gBAAgB,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACjD,oBAAoB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE;AACvC,oBAAoB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7D,oBAAoB,IAAI,MAAM,EAAE;AAChC,wBAAwB,MAAM,EAAE;AAChC,wBAAwB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;AACrD;AACA;AACA,oBAAoB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS;AAClD,oBAAoB,IAAI,MAAM,EAAE;AAChC,wBAAwB,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC9D,4BAA4B,KAAK,CAAC,IAAI,EAAE;AACxC,4BAA4B,KAAK,CAAC,OAAO,GAAG,KAAK;AACjD,yBAAyB,CAAC;AAC1B,wBAAwB,KAAK,CAAC,SAAS,GAAG,IAAI;AAC9C;AACA,oBAAoB,KAAK,CAAC,MAAM,EAAE;AAClC,iBAAiB,CAAC;AAClB;AACA,gBAAgB,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACxE,gBAAgB,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACjD,oBAAoB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE;AACvC,oBAAoB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7D,oBAAoB,IAAI,MAAM,EAAE;AAChC,wBAAwB,MAAM,EAAE;AAChC,wBAAwB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;AACrD;AACA;AACA,oBAAoB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS;AAClD,oBAAoB,IAAI,MAAM,EAAE;AAChC,wBAAwB,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC9D,4BAA4B,KAAK,CAAC,IAAI,EAAE;AACxC,4BAA4B,KAAK,CAAC,OAAO,GAAG,KAAK;AACjD,yBAAyB,CAAC;AAC1B,wBAAwB,KAAK,CAAC,SAAS,GAAG,IAAI;AAC9C;AACA,oBAAoB,KAAK,CAAC,MAAM,EAAE;AAClC,iBAAiB,CAAC;AAClB;AACA,gBAAgB,OAAO,QAAQ,CAAC,UAAU,EAAE;AAC5C,oBAAoB,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC7D;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAClC,QAAQ,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAClC;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,SAAS;AACpC,QAAQ,IAAI,CAAC,YAAY,GAAG,SAAS;AACrC;AACA,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,MAAM,GAAGC,6BAAiB,CAAC,mBAAmB,CAAC;AAC5D,YAAY,MAAM,EAAE,OAAO,CAAC,MAAM;AAClC,YAAY,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;AACrF,YAAY,KAAK,EAAE,OAAO,CAAC,KAAK;AAChC,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU;AAC5C,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAChC;AACA,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;AACjD,YAAY,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACrD;AACA;AACA,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,qBAAqB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,WAAW,EAAE;AAC/F,QAAQ,IAAI,CAAC,qBAAqB,GAAG,SAAS;AAC9C,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AAC1C,QAAQ,IAAI,CAAC,MAAM,GAAG,SAAS;AAC/B,QAAQ,IAAI,CAAC,WAAW,GAAG,SAAS;AACpC,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAChC;AACA,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;AACjD,YAAY,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AAC1E;AACA,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;AACrF,QAAQ,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9E,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;AAC3G,YAAY,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AACtE;AACA,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AACzE;AACA;AACA,QAAQ,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC;AAC9D,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,kCAAkC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;AAC/B,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;AAC1B,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG;AACxC,YAAY,MAAM,IAAI,CAAC,IAAI,EAAE;AAC7B;AACA,QAAQ,MAAM,IAAI,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAChC;AACA,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAY,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC;AAC3D,YAAY,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;AAC7C;AACA,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACtC,QAAQ,IAAI,CAAC,WAAW,GAAG,SAAS;AACpC,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAChC;AACA,IAAI,MAAM,oBAAoB,CAAC,OAAO,EAAE;AACxC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAY,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC;AAC3D,YAAY,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;AAC7C;AACA,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE;AAC7B,YAAY,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE;AACtD;AACA,aAAa;AACb,YAAY,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE;AACvD;AACA,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAChC;AACA,IAAI,MAAM,gBAAgB,CAAC,OAAO,EAAE;AACpC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAY,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC;AAC3D,YAAY,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;AAC7C;AACA,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE;AAC7B,YAAY,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE;AAClD;AACA,aAAa;AACb,YAAY,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE;AACnD;AACA,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAChC;AACA,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChD,YAAY,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;AACrF,YAAY,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;AACzD;AACA,QAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC;AACxD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AACnF,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;AAC/B,QAAQ,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC;AACzC,QAAQ,MAAM,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAQ,MAAM,IAAI,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC;AACxC,QAAQ,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAED,wBAAY,CAAC,MAAM,EAAE,CAAC;AAC1F,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAChC;AACA,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChD,YAAY,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;AACrF,YAAY,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;AACzD;AACA,QAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC;AACxD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AACnF,QAAQ,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC;AACzC,QAAQ,MAAM,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAQ,IAAI,CAAC,YAAY,GAAG,SAAS;AACrC,QAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC;AAC1C,QAAQ,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAEA,wBAAY,CAAC,IAAI,EAAE,CAAC;AACxF,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAChC;AACA,IAAI,MAAM,eAAe,GAAG;AAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAY,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC;AAC3D,YAAY,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;AAC7C;AACA,QAAQ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO;AAC7D,QAAQ,OAAO,EAAE,OAAO,EAAE;AAC1B;AACA,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAY,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;AAC7C;AACA,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY;AAChE,QAAQ,IAAI,KAAK;AACjB,QAAQ,QAAQ,YAAY;AAC5B,YAAY,KAAKA,wBAAY,CAAC,IAAI;AAClC,gBAAgB,KAAK,GAAG,MAAM;AAC9B,gBAAgB;AAChB,YAAY,KAAKA,wBAAY,CAAC,OAAO;AACrC,gBAAgB,KAAK,GAAG,SAAS;AACjC,gBAAgB;AAChB,YAAY,KAAKA,wBAAY,CAAC,OAAO;AACrC,gBAAgB,KAAK,GAAG,SAAS;AACjC,gBAAgB;AAChB,YAAY,KAAKA,wBAAY,CAAC,YAAY;AAC1C,gBAAgB,KAAK,GAAG,cAAc;AACtC,gBAAgB;AAChB,YAAY,KAAKA,wBAAY,CAAC,MAAM;AACpC,gBAAgB,KAAK,GAAG,QAAQ;AAChC,gBAAgB;AAChB,YAAY,KAAKA,wBAAY,CAAC,IAAI;AAClC,gBAAgB,KAAK,GAAG,MAAM;AAC9B,gBAAgB;AAChB,YAAY;AACZ,gBAAgB,KAAK,GAAG,SAAS;AACjC;AACA,QAAQ,OAAO;AACf,YAAY,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;AACvC,YAAY,KAAK;AACjB,SAAS;AACT;AACA;;;;;;;;;"}