esap-aiui-react 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1380 -0
- package/assets/architecture-diagram.png +0 -0
- package/dist/AIUIProvider.d.ts +58 -0
- package/dist/AIUIProvider.d.ts.map +1 -0
- package/dist/auuichat.d.ts +57 -0
- package/dist/auuichat.d.ts.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +91 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +68 -0
|
Binary file
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
export interface AIUIConfig {
|
|
4
|
+
applicationId: string;
|
|
5
|
+
serverUrl: string;
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
pages: MinimalPageConfig[];
|
|
8
|
+
safetyRules?: SafetyRules;
|
|
9
|
+
privacy?: PrivacyConfig;
|
|
10
|
+
onNavigate?: (route: string) => void | Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export interface MinimalPageConfig {
|
|
13
|
+
route: string;
|
|
14
|
+
title?: string;
|
|
15
|
+
safeActions?: string[];
|
|
16
|
+
dangerousActions?: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface SafetyRules {
|
|
19
|
+
requireConfirmation?: string[];
|
|
20
|
+
blockedSelectors?: string[];
|
|
21
|
+
allowedDomains?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface PrivacyConfig {
|
|
24
|
+
redactPatterns?: string[];
|
|
25
|
+
exposePasswords?: boolean;
|
|
26
|
+
exposeCreditCards?: boolean;
|
|
27
|
+
}
|
|
28
|
+
interface AIUIContextValue {
|
|
29
|
+
config: AIUIConfig;
|
|
30
|
+
isConnected: boolean;
|
|
31
|
+
isListening: boolean;
|
|
32
|
+
currentPage: string | null;
|
|
33
|
+
connect: () => void;
|
|
34
|
+
disconnect: () => void;
|
|
35
|
+
startListening: () => Promise<void>;
|
|
36
|
+
stopListening: () => void;
|
|
37
|
+
connectChat: () => void;
|
|
38
|
+
sendChatMessage: (message: string) => Promise<void>;
|
|
39
|
+
chatMessages: ChatMessage[];
|
|
40
|
+
isChatConnected: boolean;
|
|
41
|
+
executeAction: (action: string, params: any) => Promise<any>;
|
|
42
|
+
getComponentValue: (selector: string) => any;
|
|
43
|
+
registerComponent: (componentId: string, element: HTMLElement) => void;
|
|
44
|
+
unregisterComponent: (componentId: string) => void;
|
|
45
|
+
}
|
|
46
|
+
export interface ChatMessage {
|
|
47
|
+
role: 'user' | 'assistant';
|
|
48
|
+
content: string;
|
|
49
|
+
timestamp: string;
|
|
50
|
+
}
|
|
51
|
+
export declare const useAIUI: () => AIUIContextValue;
|
|
52
|
+
export interface AIUIProviderProps {
|
|
53
|
+
config: AIUIConfig;
|
|
54
|
+
children: ReactNode;
|
|
55
|
+
}
|
|
56
|
+
export declare const AIUIProvider: React.FC<AIUIProviderProps>;
|
|
57
|
+
export default AIUIProvider;
|
|
58
|
+
//# sourceMappingURL=AIUIProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIUIProvider.d.ts","sourceRoot":"","sources":["../src/AIUIProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,MAAM,WAAW,UAAU;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IACxB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,gBAAgB;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IAEzB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7D,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7C,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACvE,mBAAmB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAID,eAAO,MAAM,OAAO,QAAO,gBAM1B,CAAC;AAu3DF,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA4SpD,CAAC;AA6BF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
export interface AIUIConfig {
|
|
4
|
+
applicationId: string;
|
|
5
|
+
serverUrl: string;
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
pages: MinimalPageConfig[];
|
|
8
|
+
safetyRules?: SafetyRules;
|
|
9
|
+
privacy?: PrivacyConfig;
|
|
10
|
+
onNavigate?: (route: string) => void | Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export interface MinimalPageConfig {
|
|
13
|
+
route: string;
|
|
14
|
+
title?: string;
|
|
15
|
+
safeActions?: string[];
|
|
16
|
+
dangerousActions?: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface SafetyRules {
|
|
19
|
+
requireConfirmation?: string[];
|
|
20
|
+
blockedSelectors?: string[];
|
|
21
|
+
allowedDomains?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface PrivacyConfig {
|
|
24
|
+
redactPatterns?: string[];
|
|
25
|
+
exposePasswords?: boolean;
|
|
26
|
+
exposeCreditCards?: boolean;
|
|
27
|
+
}
|
|
28
|
+
interface AIUIContextValue {
|
|
29
|
+
config: AIUIConfig;
|
|
30
|
+
isConnected: boolean;
|
|
31
|
+
isListening: boolean;
|
|
32
|
+
currentPage: string | null;
|
|
33
|
+
connect: () => void;
|
|
34
|
+
disconnect: () => void;
|
|
35
|
+
startListening: () => Promise<void>;
|
|
36
|
+
stopListening: () => void;
|
|
37
|
+
sendChatMessage: (message: string) => Promise<void>;
|
|
38
|
+
chatMessages: ChatMessage[];
|
|
39
|
+
isChatConnected: boolean;
|
|
40
|
+
executeAction: (action: string, params: any) => Promise<any>;
|
|
41
|
+
getComponentValue: (selector: string) => any;
|
|
42
|
+
registerComponent: (componentId: string, element: HTMLElement) => void;
|
|
43
|
+
unregisterComponent: (componentId: string) => void;
|
|
44
|
+
}
|
|
45
|
+
export interface ChatMessage {
|
|
46
|
+
role: 'user' | 'assistant';
|
|
47
|
+
content: string;
|
|
48
|
+
timestamp: string;
|
|
49
|
+
}
|
|
50
|
+
export declare const useAIUI: () => AIUIContextValue;
|
|
51
|
+
export interface AIUIProviderProps {
|
|
52
|
+
config: AIUIConfig;
|
|
53
|
+
children: ReactNode;
|
|
54
|
+
}
|
|
55
|
+
export declare const AIUIProvider: React.FC<AIUIProviderProps>;
|
|
56
|
+
export default AIUIProvider;
|
|
57
|
+
//# sourceMappingURL=auuichat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auuichat.d.ts","sourceRoot":"","sources":["../src/auuichat.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,MAAM,WAAW,UAAU;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IACxB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,gBAAgB;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IAEzB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7D,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7C,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACvE,mBAAmB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAID,eAAO,MAAM,OAAO,QAAO,gBAM1B,CAAC;AAu3DF,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA6RpD,CAAC;AA6BF,eAAe,YAAY,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AIUIProvider, useAIUI } from './AIUIProvider';
|
|
2
|
+
export type { AIUIConfig, MinimalPageConfig, SafetyRules, PrivacyConfig, AIUIProviderProps } from './AIUIProvider';
|
|
3
|
+
export type { ActionType, ActionParams, ActionResult, SetValueParams, ClickParams, ToggleParams, NavigateParams, GetValueParams, ContextUpdate, PageContext, DiscoveredElementState, ViewportInfo, MCPMessage, ActionMessage, ContextUpdateMessage, ConfigMessage, ConnectedMessage, DisconnectedMessage, ErrorMessage, AIUIHookReturn } from './types';
|
|
4
|
+
export declare const VERSION = "1.0.0";
|
|
5
|
+
export { AIUIProvider as default } from './AIUIProvider';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGvD,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AAGjB,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import*as e from"react";import{createContext as t,useContext as o,useState as n,useRef as i,useCallback as s,useEffect as r}from"react";const c=t(null),l=()=>{const e=o(c);if(!e)throw new Error("useAIUI must be used within AIUIProvider");return e};class a{constructor(){this.audioContext=null,this.playerWorklet=null,this.micContext=null,this.micStream=null,this.micWorklet=null,this.onAudioData=null}async initPlayback(){if(this.audioContext)return;const e=window.AudioContext||window.webkitAudioContext;this.audioContext=new e({latencyHint:"interactive",sampleRate:48e3}),await this.audioContext.audioWorklet.addModule("/player-processor.js"),this.playerWorklet=new AudioWorkletNode(this.audioContext,"player-processor"),this.playerWorklet.connect(this.audioContext.destination),await this.audioContext.resume()}async startMicrophone(e){this.onAudioData=e,this.micStream=await navigator.mediaDevices.getUserMedia({audio:{noiseSuppression:!0,echoCancellation:!0}});const t=window.AudioContext||window.webkitAudioContext;this.micContext=new t({sampleRate:16e3}),await this.micContext.audioWorklet.addModule("/worklet-processor.js"),this.micWorklet=new AudioWorkletNode(this.micContext,"mic-processor"),this.micWorklet.port.onmessage=e=>{this.onAudioData&&this.onAudioData(e.data)};const o=this.micContext.createMediaStreamSource(this.micStream),n=this.micContext.createGain();n.gain.value=0,o.connect(this.micWorklet),this.micWorklet.connect(n),n.connect(this.micContext.destination)}stopMicrophone(){this.micStream&&(this.micStream.getTracks().forEach(e=>e.stop()),this.micStream=null),this.micContext&&(this.micContext.close(),this.micContext=null),this.micWorklet=null,this.onAudioData=null}playAudio(e){if(!this.playerWorklet||!this.audioContext)return;const t=new Int16Array(e),o=new Float32Array(t.length);for(let e=0;e<t.length;e++)o[e]=t[e]/32768;const n=this.audioContext.sampleRate;let i=o;if(24e3!==n){const e=n/24e3,t=new Float32Array(o.length*e);for(let n=0;n<o.length;n++){const i=n*e;for(let s=0;s<e;s++)t[i+s]=o[n]}i=t}this.playerWorklet.port.postMessage(i,[i.buffer])}cleanup(){this.stopMicrophone(),this.audioContext&&(this.audioContext.close(),this.audioContext=null),this.playerWorklet=null}}class u{constructor(e,t){this.observers=[],this.lastContext=null,this.updateDebounce=null,this.discoveredElements=new Map,this.lastDiscoveredSelectors=new Set,this.initialContextSent=!1,this.connectionReady=!1,this.config=e,this.onContextChange=t}start(){console.log("[HybridObserver] π Starting event-driven observer..."),this.observeRouteChanges(),this.observeMajorDomChanges(),console.log("[HybridObserver] β
Observer started (waiting for connection)")}triggerInitialDiscovery(){this.initialContextSent||(console.log("[HybridObserver] π― Connection ready, triggering adaptive initial discovery..."),this.initialContextSent=!0,this.connectionReady=!0,this.performAdaptiveDiscovery())}performAdaptiveDiscovery(){const e=[{delay:100,name:"immediate"},{delay:500,name:"early"},{delay:1200,name:"late"}];let t=0,o=!1;e.forEach((n,i)=>{setTimeout(()=>{console.log(`[HybridObserver] π Discovery attempt #${i+1} (${n.name}) at ${n.delay}ms`);const s=this.discoverInteractiveElements().size;console.log(`[HybridObserver] π Found ${s} elements (previous: ${t})`);const r=0===i,c=s>t,l=i===e.length-1;r||c||l?(c&&(console.log("[HybridObserver] β
New elements discovered: +"+(s-t)),o=!0),this.discoverAndNotify(r?"initial_load":"delayed_discovery")):console.log("[HybridObserver] βοΈ No new elements, skipping update"),t=s,l&&(console.log(`[HybridObserver] π Discovery complete. Total elements: ${s}`),o&&console.log("[HybridObserver] β
Significant changes detected across attempts"))},n.delay)})}stop(){this.observers.forEach(e=>e.disconnect()),this.observers=[],this.updateDebounce&&clearTimeout(this.updateDebounce)}observeRouteChanges(){window.addEventListener("popstate",()=>{this.discoverAndNotify("navigation")});const e=history.pushState.bind(history),t=history.replaceState.bind(history);history.pushState=(t,o,n)=>{e(t,o,n),this.discoverAndNotify("navigation")},history.replaceState=(e,o,n)=>{t(e,o,n),this.discoverAndNotify("navigation")}}observeMajorDomChanges(){let e=!1;const t=new MutationObserver(t=>{let o=!1,n=!1;for(const e of t){if("attributes"===e.type&&"aria-label"===e.attributeName){const t=e.target.getAttribute("aria-label");t&&(t.includes("Update")||t.includes("View")||t.includes("Edit"))&&(n=!0)}if(e.addedNodes.length>0||e.removedNodes.length>0)for(const t of Array.from(e.addedNodes))if(t instanceof HTMLElement){("TR"===t.tagName||"TBODY"===t.tagName||null!==t.closest("tbody")||null!==t.querySelector("tr"))&&(n=!0),this.isSignificantElement(t)&&(o=!0)}}if(o||n){this.updateDebounce&&clearTimeout(this.updateDebounce);const t=n?600:300;this.updateDebounce=setTimeout(()=>{this.discoverAndNotify("dom_change"),n&&!e&&(e=!0,setTimeout(()=>{this.discoverAndNotify("dom_change_delayed"),e=!1},800))},t)}});t.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["aria-label"]}),this.observers.push(t)}isSignificantElement(e){const t=e.tagName.toLowerCase(),o=e.getAttribute("role"),n=e.className.toLowerCase();if("dialog"===t||"dialog"===o||"modal"===o)return!0;if("menu"===o||"menubar"===o)return!0;if("form"===t)return!0;if(n.includes("modal")||n.includes("dialog"))return!0;if(n.includes("overlay")||n.includes("popup"))return!0;if(n.includes("menu"))return!0;return e.querySelectorAll("button, input, select, textarea").length>3}discoverAndNotify(e){const t=this.discoverInteractiveElements(),o=Array.from(t.values()),n=new Set(o.map(e=>e.selector));console.log(`[HybridObserver] β
Found ${o.length} interactive elements`);const i={route:window.location.pathname,title:document.title};let s=null;if("navigation"===e||"initial_load"===e||0===this.lastDiscoveredSelectors.size)this.lastDiscoveredSelectors=n,s={type:"context_update",trigger:e,page:i,elements:o.map(e=>({selector:e.selector,semantic:e.semantic,type:e.type,actions:e.actions,attributes:this.filterSensitiveAttributes(e.attributes)}))};else{const t=o.filter(e=>!this.lastDiscoveredSelectors.has(e.selector)),r=Array.from(this.lastDiscoveredSelectors).filter(e=>!n.has(e));0===r.length&&t.length>0?(t.forEach(e=>this.lastDiscoveredSelectors.add(e.selector)),s={type:"context_append",trigger:e,page:i,elements:t.map(e=>({selector:e.selector,semantic:e.semantic,type:e.type,actions:e.actions,attributes:this.filterSensitiveAttributes(e.attributes)}))}):(r.length>0||t.length>0)&&(this.lastDiscoveredSelectors=n,s={type:"context_update",trigger:e,page:i,elements:o.map(e=>({selector:e.selector,semantic:e.semantic,type:e.type,actions:e.actions,attributes:this.filterSensitiveAttributes(e.attributes)}))})}s&&(s.timestamp=(new Date).toISOString(),s.viewport={width:window.innerWidth,height:window.innerHeight,scrollX:window.scrollX,scrollY:window.scrollY},this.onContextChange(s,e))}hasContextChanged(e){if(!this.lastContext)return!0;if(e.elements.length!==this.lastContext.elements.length)return!0;if(e.page?.route!==this.lastContext.page?.route)return!0;const t=new Set(e.elements.map(e=>e.selector)),o=new Set(this.lastContext.elements.map(e=>e.selector));if(t.size!==o.size)return!0;for(const e of t)if(!o.has(e))return!0;return!1}discoverInteractiveElements(){const e=new Map;return["button",'input[type="text"]','input[type="email"]','input[type="password"]','input[type="search"]','input[type="tel"]','input[type="url"]','input[type="number"]','input[type="checkbox"]','input[type="radio"]',"textarea","select","a[href]",'[role="button"]','[role="menuitem"]','li[role="menuitem"]',"[onclick]",'input[role="combobox"][data-select-options]',"input[aria-autocomplete][data-select-options]","input[data-select-field]"].forEach(t=>{document.querySelectorAll(t).forEach((o,n)=>{if(o instanceof HTMLElement&&this.isVisible(o)&&!this.isBlocked(o)){const i=this.extractElementInfo(o,t,n);i&&e.set(i.selector,i)}})}),this.discoveredElements=e,e}isVisible(e){const t=window.getComputedStyle(e);return"none"!==t.display&&"hidden"!==t.visibility&&"0"!==t.opacity&&null!==e.offsetParent}isBlocked(e){return(this.config.safetyRules?.blockedSelectors||[]).some(t=>e.matches(t))}extractElementInfo(e,t,o){const n=e.tagName.toLowerCase();let i=t;if(e.id)i=`#${e.id}`;else if(e.className){const t=e.className.split(" ").filter(e=>e.trim()).slice(0,2).join(".");t&&(i=`${n}.${t}`)}const s=`${i}:nth-of-type(${o+1})`,r=this.buildSemanticDescription(e);let c="other",l=[];if("button"===n||"button"===e.getAttribute("role"))c="button",l=["click"];else if("menuitem"===e.getAttribute("role"))c="button",l=["click"];else if("input"===n){const t=e.type,o=e.hasAttribute("data-select-options"),n="combobox"===e.getAttribute("role"),i=e.hasAttribute("aria-autocomplete");o&&(n||i)?(c="select",l=["select_from_dropdown","set_value","get_value"],console.log(`[Discovery] β
Found dropdown input: "${r}"`)):"checkbox"===t?(c="checkbox",l=["toggle"]):(c="input",l=["set_value","get_value"])}else"textarea"===n?(c="textarea",l=["set_value","get_value"]):"select"===n?(c="select",l=["set_value","get_value","select_from_dropdown"]):"a"===n&&(c="link",l=["click"]);const a={tag:n,id:e.id||null,className:e.className||null,name:e.getAttribute("name")||null,placeholder:e.getAttribute("placeholder")||null,ariaLabel:e.getAttribute("aria-label")||null,title:e.getAttribute("title")||null,type:e.getAttribute("type")||null},u=e.getAttribute("data-select-options"),d=e.getAttribute("data-select-field");if(u){const e=u.split("|||").filter(e=>e.trim());a.selectOptions=e,a.selectField=d,console.log(`[Discovery] Found select field "${d}" with ${e.length} options`),e.length>0&&(e.slice(0,5).join(", "),e.length>5&&e.length)}return{selector:s,semantic:r,type:c,actions:l,attributes:a,domElement:e}}buildSemanticDescription(e){const t=[],o=e.getAttribute("aria-label");if(o)return o;const n=e.textContent?.trim();n&&n.length<50&&t.push(n);const i=e.getAttribute("placeholder");i&&t.push(`placeholder: ${i}`);const s=e.getAttribute("title");s&&t.push(`title: ${s}`);const r=e.getAttribute("name");r&&t.push(`name: ${r}`);const c=e.getAttribute("type"),l=e.tagName.toLowerCase();c?t.push(`${c} ${l}`):t.push(l);const a=this.findNearbyLabel(e);a&&t.unshift(`"${a}"`);const u=e.getAttribute("data-select-options");if(u){const e=u.split("|||").filter(e=>e.trim());if(e.length>0){const o=e.slice(0,3).join(", "),n=e.length>3?` (+${e.length-3} more)`:"";t.push(`[Options: ${o}${n}]`)}}return t.join(" Β· ")||"unknown element"}findNearbyLabel(e){let t=e.parentElement;for(;t;){if("label"===t.tagName.toLowerCase())return t.textContent?.trim()||null;if(t=t.parentElement,t===document.body)break}if(e.id){const t=document.querySelector(`label[for="${e.id}"]`);if(t)return t.textContent?.trim()||null}return null}generateContext(e){const t=window.location.pathname,o=this.config.pages.find(e=>e.route===t);return{timestamp:(new Date).toISOString(),page:o?{route:o.route,title:o.title||t}:{route:t,title:document.title},elements:Array.from(e.values()).map(e=>({selector:e.selector,semantic:e.semantic,type:e.type,actions:e.actions,attributes:this.filterSensitiveAttributes(e.attributes)})),viewport:{width:window.innerWidth,height:window.innerHeight,scrollX:window.scrollX,scrollY:window.scrollY}}}filterSensitiveAttributes(e){const t={...e},o=this.config.privacy||{};o.exposePasswords||"password"!==t.type||(t.value="[REDACTED]");const n=o.redactPatterns||[];for(const e in t){const o=t[e];if("string"==typeof o)for(const i of n){if(new RegExp(i,"i").test(o)){t[e]="[REDACTED]";break}}}return t}findElementBySemanticQuery(e){console.log(`[findElement] π Searching for: "${e}"`),console.log(`[findElement] π¦ Total elements: ${this.discoveredElements.size}`);const t=e.match(/^(.+?)\s*#(\d+)$/i);let o=e,n=null;t&&(o=t[1].trim(),n=parseInt(t[2],10),console.log(`[findElement] π― Index notation: "${o}" index ${n}`));const i=e.match(/^(first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth)\s+(.+)$/i);if(i&&!n){const e={first:1,second:2,third:3,fourth:4,fifth:5,sixth:6,seventh:7,eighth:8,ninth:9,tenth:10};o=i[2].trim(),n=e[i[1].toLowerCase()],console.log(`[findElement] π― Ordinal notation: "${o}" index ${n}`)}if(this.discoveredElements.size>0){console.log("[findElement] Available elements:");let e=0;for(const[t,o]of this.discoveredElements)console.log(` ${++e}. "${o.semantic}" (type: ${o.type})`)}const s=o.toLowerCase(),r=this.normalizeString(o),c=r.split(/\s+/).filter(e=>e.length>1),l=this.extractFieldNames(s,c);console.log("[findElement] π― Extracted field names:",l),console.log("[findElement] π STAGE 1: Trying exact attribute match...");for(const e of l){const t=this.findByExactAttribute(e);if(t)return console.log(`[findElement] β
STAGE 1 SUCCESS: Found exact attribute match for "${e}"`),t}console.log("[findElement] β STAGE 1: No exact attribute match"),console.log("[findElement] π STAGE 2: Trying exact semantic match...");const a=this.findByExactSemantic(s,r);if(a)return console.log("[findElement] β
STAGE 2 SUCCESS: Found exact semantic match"),a;console.log("[findElement] β STAGE 2: No exact semantic match"),console.log("[findElement] π STAGE 3: Trying partial match with disambiguation...");const u=this.findPartialMatches(s,c,l);if(1===u.length)return console.log("[findElement] β
STAGE 3 SUCCESS: Found single partial match"),u[0];if(u.length>1){console.log(`[findElement] π STAGE 3: Found ${u.length} partial matches, disambiguating...`);const e=this.disambiguateMatches(u,s,l,n);if(e)return console.log("[findElement] β
STAGE 3 SUCCESS: Disambiguation successful"),e;console.log("[findElement] β οΈ STAGE 3: Multiple matches, cannot disambiguate")}console.log("[findElement] π STAGE 4: Trying fuzzy matching...");const d=this.findFuzzyMatches(c,s);if(d.length>0){if(console.log(`[findElement] β
STAGE 4: Found ${d.length} fuzzy matches`),1===d.length)return d[0].element;const e=this.selectBestFuzzyMatch(d,s,n);if(e)return e}return console.warn(`[findElement] β ALL STAGES FAILED: No match found for "${e}"`),null}normalizeString(e){return e.replace(/[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}\u{1F900}-\u{1F9FF}\u{1F1E0}-\u{1F1FF}]/gu,"").replace(/[^\w\s]/g," ").replace(/\s+/g," ").trim().toLowerCase()}extractFieldNames(e,t){const o=new Set,n=["username","user_name","email","password","phone","address","full_name","fullname","first_name","last_name","name","location","city","country","zip","postal","state","confirm_password","confirmpassword"];for(const t of n)(e.includes(t)||e.includes(t.replace("_","")))&&(o.add(t),o.add(t.replace("_","")));const i=t[0];if(i&&i.length>2&&o.add(i),t.length>=2){const e=t.slice(0,2).join("_");o.add(e),o.add(t.slice(0,2).join(""))}return Array.from(o)}findByExactAttribute(e){for(const[t,o]of this.discoveredElements){const t=o.attributes||{},n=(t.name||"").toLowerCase(),i=(t.id||"").toLowerCase();if(n===e||i===e)return console.log(`[findElement] π― Exact attribute match: name="${n}", id="${i}"`),o;if(n.replace(/[-_]/g,"")===e.replace(/[-_]/g,""))return console.log(`[findElement] π― Normalized attribute match: "${n}" ~ "${e}"`),o}return null}findByExactSemantic(e,t){for(const[o,n]of this.discoveredElements){const o=n.semantic.toLowerCase(),i=this.normalizeString(n.semantic);if(o===e||i===t)return console.log(`[findElement] π― Exact semantic match: "${n.semantic}"`),n}return null}findPartialMatches(e,t,o){const n=[];for(const[t,i]of this.discoveredElements){const t=i.attributes||{},s=(t.name||"").toLowerCase(),r=(t.id||"").toLowerCase(),c=i.semantic.toLowerCase();for(const e of o)if(s.includes(e)||r.includes(e)){n.push(i),console.log(`[findElement] π Partial attribute match: "${e}" in "${s||r}"`);break}!n.includes(i)&&c.includes(e)&&(n.push(i),console.log(`[findElement] π Partial semantic match: "${e}" in "${i.semantic}"`))}return n}disambiguateMatches(e,t,o,n){if(console.log(`[findElement] π Disambiguating ${e.length} matches...`),null!==n&&n>0&&n<=e.length)return console.log(`[findElement] β
Using specified index: ${n}`),e[n-1];const i=e.map(e=>{let n=0;const i=[],s=e.attributes||{},r=(s.name||"").toLowerCase(),c=(s.id||"").toLowerCase();for(const e of o)r===e?(n+=1e3,i.push(`exact_name:${e}`)):r.includes(e)&&(n+=500,i.push(`name_contains:${e}`)),c===e?(n+=800,i.push(`exact_id:${e}`)):c.includes(e)&&(n+=400,i.push(`id_contains:${e}`));return e.semantic.length<50&&(n+=100,i.push("short_semantic")),(t.includes("input")&&"input"===e.type||t.includes("button")&&"button"===e.type)&&(n+=50,i.push("type_match")),{element:e,score:n,reasons:i}});if(i.sort((e,t)=>t.score-e.score),console.log("[findElement] π Disambiguation scores:"),i.forEach((e,t)=>{console.log(` ${t+1}. "${e.element.semantic}" - Score: ${e.score} (${e.reasons.join(", ")})`)}),i.length>1&&i[0].score-i[1].score>200)return console.log("[findElement] β
Clear winner with score difference: "+(i[0].score-i[1].score)),i[0].element;const s=i.filter(e=>e.score===i[0].score);if(1===s.length)return s[0].element;for(const e of o){const t=s.find(t=>(t.element.attributes?.ariaLabel||"").toLowerCase().startsWith(e));if(t)return console.log("[findElement] β
Disambiguated by aria-label prefix"),t.element}const r=s.find(e=>"input"===e.element.type||"textarea"===e.element.type);return r&&t.includes("input")?(console.log("[findElement] β
Disambiguated by preferring input type"),r.element):(console.log("[findElement] β οΈ Cannot disambiguate, returning first match"),i[0].element)}findFuzzyMatches(e,t){const o=[];for(const[t,n]of this.discoveredElements){const t=this.normalizeString(n.semantic).split(/\s+/).filter(e=>e.length>2),i=e.filter(e=>t.some(t=>t.includes(e)||e.includes(t))).length/e.length;if(i>=.4){const e=1e3*i;o.push({element:n,score:e})}}return o.sort((e,t)=>t.score-e.score),o}selectBestFuzzyMatch(e,t,o){return console.log("[findElement] π Fuzzy matches:"),e.slice(0,5).forEach((e,t)=>{console.log(` ${t+1}. "${e.element.semantic}" - Score: ${e.score}`)}),null!==o&&o>0&&o<=e.length?e[o-1].element:e[0].element}}class d{constructor(e,t){this.observer=e,this.config=t}async execute(e,t){console.log("%c[ActionExecutor] β‘ EXECUTE CALLED","background: #222; color: #bada55; font-size: 14px; font-weight: bold;"),console.log(`[ActionExecutor] π Action: "${e}"`),console.log("[ActionExecutor] π Params:",t);try{let o;switch(e){case"set_value":console.log("[ActionExecutor] π§ Calling setValue..."),o=await this.setValue(t.semantic,t.value);break;case"select_from_dropdown":const n=t.options||(t.value?[t.value]:[]);if(0===n.length)throw new Error("No 'options' or 'value' provided for selection");console.log("[ActionExecutor] π― Calling selectFromDropdown..."),o=await this.selectFromDropdown(t.semantic,n);break;case"click":console.log("[ActionExecutor] π±οΈ Calling click..."),o=await this.click(t.semantic);break;case"toggle":console.log("[ActionExecutor] π Calling toggle..."),o=await this.toggle(t.semantic);break;case"navigate":console.log("[ActionExecutor] π Calling navigate..."),o=await this.navigate(t.route);break;default:throw new Error(`Unknown action: ${e}`)}return console.log("%c[ActionExecutor] β
SUCCESS","background: #222; color: #00ff00; font-size: 14px; font-weight: bold;"),console.log("[ActionExecutor] Result:",o),o}catch(e){return console.error("%c[ActionExecutor] β ERROR","background: #222; color: #ff0000; font-size: 14px; font-weight: bold;"),console.error("[ActionExecutor] Error details:",e),{success:!1,error:e.message}}}async setValue(e,t){const o=this.observer.findElementBySemanticQuery(e);if(!o)throw new Error(`Element not found: ${e}`);const n=o.domElement;if(!document.contains(n))throw new Error(`Element no longer in DOM: ${e}`);if(n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement){const o=Object.getOwnPropertyDescriptor(n.constructor.prototype,"value")?.set;return o?o.call(n,t):n.value=t,n.dispatchEvent(new Event("input",{bubbles:!0,cancelable:!0})),n.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!0})),console.log(`[ActionExecutor] β
Set "${e}" = "${t}"`),{success:!0,semantic:e,value:t}}throw new Error(`Element "${e}" does not support set_value`)}async click(e){const t=this.observer.findElementBySemanticQuery(e);if(!t)throw new Error(`Element not found: ${e}`);console.log(`[ActionExecutor] π Found element: ${t.selector}`);const o=t.domElement;if(!document.contains(o))throw new Error(`Element no longer in DOM: ${e}`);console.log("[ActionExecutor] π― Element retrieved:",o.tagName,o.getAttribute("aria-label"));try{o.scrollIntoView({behavior:"smooth",block:"center"}),await new Promise(e=>setTimeout(e,100));try{return o.click(),console.log(`[ActionExecutor] β
Native click executed on "${e}"`),{success:!0,semantic:e}}catch(e){console.warn("[ActionExecutor] β οΈ Native click failed, trying dispatch method:",e)}const t=new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window,button:0,buttons:1,composed:!0});if(!o.dispatchEvent(t))throw new Error("Click event was prevented");return console.log(`[ActionExecutor] β
Dispatch click executed on "${e}"`),{success:!0,semantic:e}}catch(t){throw console.error("[ActionExecutor] β Click failed:",t),new Error(`Failed to click "${e}": ${t}`)}}async toggle(e){const t=this.observer.findElementBySemanticQuery(e);if(!t)throw new Error(`Element not found: ${e}`);const o=t.domElement;if(!document.contains(o))throw new Error(`Element no longer in DOM: ${e}`);if(o instanceof HTMLInputElement&&"checkbox"===o.type)return o.checked=!o.checked,o.dispatchEvent(new Event("change",{bubbles:!0})),console.log(`[ActionExecutor] β
Toggled "${e}" = ${o.checked}`),{success:!0,semantic:e,checked:o.checked};throw new Error(`Element "${e}" does not support toggle`)}async selectFromDropdown(e,t){console.log(`[ActionExecutor] π― Selecting from dropdown: "${e}", options:`,t);const o=this.observer.findElementBySemanticQuery(e);if(!o)throw new Error(`Element not found: ${e}`);const n=o.domElement;if(!document.contains(n))throw new Error(`Element no longer in DOM: ${e}`);if(n instanceof HTMLSelectElement){console.log("[ActionExecutor] π― Detected NATIVE <select> element");const o=[];for(const e of t){let t=e,i=e;if(e.includes(":")){const o=e.split(":");i=o[0].trim(),t=o[1]?.trim()||""}const s=Array.from(n.options).find(e=>{const o=e.value,n=e.textContent?.trim()||"";return o===t||o===t.toString()||n.toLowerCase()===i.toLowerCase()});if(!s){console.warn(`[ActionExecutor] β οΈ Option not found: "${e}"`);continue}const r=Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype,"value")?.set;r?r.call(n,s.value):n.value=s.value,n.dispatchEvent(new Event("input",{bubbles:!0})),n.dispatchEvent(new Event("change",{bubbles:!0})),o.push(e),n.multiple&&await new Promise(e=>setTimeout(e,100))}if(0===o.length)throw new Error(`Failed to select any options from: ${t.join(", ")}`);return{success:!0,semantic:e,selected:o,requested:t,failed:t.filter(e=>!o.includes(e))}}if(!(n instanceof HTMLInputElement))throw new Error(`Element is not an input or select: ${e}`);const i=n;let s=i.closest("[data-select-field]");if(s||(s=i.closest(".MuiFormControl-root")),s||(s=i.closest('div[class*="MuiSelect"]')),s||(s=i.closest('div[class*="select"]')),s||(s=i.closest('div[role="group"]')),!s)throw new Error(`Dropdown wrapper not found for: ${e}`);let r=s;if(!r.classList.contains("MuiFormControl-root")){const e=r.closest(".MuiFormControl-root");e&&(r=e,console.log("[ActionExecutor] π Expanded search scope to closest MuiFormControl"))}const c=s.getAttribute("data-select-options")||i.getAttribute("data-select-options");if(c){const e=c.split("|||").filter(e=>e.trim());console.log(`[ActionExecutor] π Available options (${e.length}):`,e)}const l="combobox"===i.getAttribute("role")||i.hasAttribute("aria-autocomplete")||null!==s.querySelector(".MuiAutocomplete-root"),a=null!==s.querySelector('[class*="indicatorContainer"]')||null!==s.querySelector('[class*="control"]'),u=null!==r.querySelector('svg[class*="MuiSelect-icon"]')||null!==r.querySelector('[role="button"][aria-haspopup="listbox"]')||null!==r.querySelector('[role="button"][aria-haspopup="true"]')||"listbox"===i.getAttribute("aria-haspopup");if(console.log("[ActionExecutor] π Dropdown type detected: "+(l?"MUI Autocomplete":a?"React-Select":u?"MUI Select":"Unknown")),l){console.log("[ActionExecutor] π― Using MUI Autocomplete strategy");const o=[];for(const e of t){i.focus(),i.dispatchEvent(new Event("focus",{bubbles:!0})),await new Promise(e=>setTimeout(e,100)),i.click(),await new Promise(e=>setTimeout(e,300));const t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value")?.set;t?t.call(i,e):i.value=e,i.dispatchEvent(new Event("input",{bubbles:!0})),i.dispatchEvent(new Event("change",{bubbles:!0})),await new Promise(e=>setTimeout(e,400));const n=['[role="option"]',".MuiAutocomplete-option",'[role="listbox"] li','li[id*="option"]',"[data-option-index]"];let s=null;for(const t of n){const o=Array.from(document.querySelectorAll(t));for(const t of o)if((t.textContent?.trim()||"").toLowerCase()===e.toLowerCase()){s=t;break}if(s)break}s?(s.scrollIntoView({block:"nearest"}),await new Promise(e=>setTimeout(e,100)),s.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window,button:0})),await new Promise(e=>setTimeout(e,50)),s.click(),await new Promise(e=>setTimeout(e,50)),s.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0,cancelable:!0,view:window,button:0})),o.push(e),await new Promise(e=>setTimeout(e,300))):t&&t.call(i,"")}if(i.blur(),0===o.length)throw new Error(`Failed to select options (Autocomplete): ${t.join(", ")}`);return{success:!0,semantic:e,selected:o,requested:t,failed:t.filter(e=>!o.includes(e))}}if(a){console.log("[ActionExecutor] π― Using React-Select strategy"),console.log("[ActionExecutor] π― Opening dropdown menu...");const o=s.querySelector('[class*="indicatorContainer"]');o&&(o.click(),await new Promise(e=>setTimeout(e,300))),i.focus(),i.dispatchEvent(new Event("focus",{bubbles:!0})),i.dispatchEvent(new Event("input",{bubbles:!0,cancelable:!0})),await new Promise(e=>setTimeout(e,300));const n=s.querySelector('[class*="control"]');n&&(n.click(),await new Promise(e=>setTimeout(e,300))),i.dispatchEvent(new KeyboardEvent("keydown",{key:"ArrowDown",code:"ArrowDown",keyCode:40,bubbles:!0,cancelable:!0})),await new Promise(e=>setTimeout(e,500));const r=[];for(const e of t){let t=Array.from(document.querySelectorAll('[class*="option"]:not([class*="Input"]), [role="option"], div[id*="option"]'));if(0===t.length){const e=document.querySelector('[class*="MenuPortal"]');e&&(t=Array.from(e.querySelectorAll('[class*="option"]')))}if(0===t.length){const e=s.querySelector('[class*="MenuList"]');e&&(t=Array.from(e.querySelectorAll('div[id*="option"]')))}for(const o of t)if((o.textContent?.trim()||"").toLowerCase()===e.toLowerCase()){o.scrollIntoView({block:"nearest"}),await new Promise(e=>setTimeout(e,100)),o.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0})),o.click(),o.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0})),r.push(e),await new Promise(e=>setTimeout(e,300));break}}if(i.blur(),0===r.length)throw new Error(`Failed to select options (React-Select): ${t.join(", ")}`);return{success:!0,semantic:e,selected:r,requested:t,failed:t.filter(e=>!r.includes(e))}}if(u){console.log("[ActionExecutor] π― Using MUI Select strategy");const o=[];for(const n of t){const t=r.querySelector('[role="button"][aria-haspopup="listbox"]')||r.querySelector('[role="button"][aria-haspopup="true"]')||r.querySelector('div[role="button"]')||r.querySelector(".MuiSelect-select");if(!t)throw new Error(`Cannot find MUI Select trigger for: ${e}`);t.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window,buttons:1})),t.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0,cancelable:!0,view:window,buttons:1})),t.click();let i=null;for(let e=0;e<10&&(await new Promise(e=>setTimeout(e,100)),i=document.querySelector('[role="listbox"]')||document.querySelector('.MuiMenu-paper [role="listbox"]')||document.querySelector('.MuiPopover-paper [role="listbox"]'),!i);e++);if(!i)throw new Error(`MUI Select menu did not open for: ${e}`);const s=Array.from(i.querySelectorAll('[role="option"], li[data-value]')).find(e=>(e.textContent?.trim()||"").toLowerCase()===n.toLowerCase());if(!s){const e=document.querySelector(".MuiBackdrop-root");e?e.click():document.body.click();continue}s.scrollIntoView({block:"nearest"}),await new Promise(e=>setTimeout(e,100)),s.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window,button:0})),await new Promise(e=>setTimeout(e,50)),s.click(),await new Promise(e=>setTimeout(e,50)),s.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0,cancelable:!0,view:window,button:0})),o.push(n),await new Promise(e=>setTimeout(e,300))}if(0===o.length)throw new Error(`Failed to select options (MUI Select): ${t.join(", ")}`);return{success:!0,semantic:e,selected:o,requested:t,failed:t.filter(e=>!o.includes(e))}}throw new Error(`Could not determine dropdown type for: ${e}. Types checked: Native, MUI Autocomplete, React-Select, MUI Select.`)}async navigate(e){console.log(`[ActionExecutor] π Navigating to ${e}`);try{return this.config.onNavigate?(console.log("[ActionExecutor] Using custom onNavigate function"),await this.config.onNavigate(e),console.log("[ActionExecutor] β
Custom navigation executed"),{success:!0,route:e}):(console.log("[ActionExecutor] Using fallback navigation (pushState)"),window.history.pushState({},"",e),window.dispatchEvent(new PopStateEvent("popstate",{state:{}})),console.log("[ActionExecutor] β
Navigation complete"),{success:!0,route:e})}catch(e){return console.error("[ActionExecutor] β Navigation failed:",e),{success:!1,error:e.message}}}}class h{constructor(e,t,o){this.contextWs=null,this.audioWs=null,this.chatWs=null,this.contextSendCounter=0,this.config=e,this.onMessage=t,this.audioManager=o}connect(){this.connectContextChannel()}connectContextChannel(){const e=new URL(this.config.serverUrl.replace("http","ws")+"/context");this.config.apiKey&&e.searchParams.set("apiKey",this.config.apiKey),e.searchParams.set("applicationId",this.config.applicationId),console.log(`[MCP Context] π Connecting to: ${e.toString()}`),this.contextWs=new WebSocket(e.toString()),this.contextWs.onopen=()=>{console.log("[MCP Context] β
Connected"),this.sendConfig(),setTimeout(()=>{this.onMessage({type:"connection_established"})},100)},this.contextWs.onmessage=e=>{try{const t=JSON.parse(e.data);console.log("[MCP Context] π© Raw message received:",t),"context_ready"===t.type?(console.log("[MCP Context] β
Context channel ready"),this.onMessage(t)):"action"===t.type?(console.log("[MCP Context] π¬ ACTION MESSAGE RECEIVED FROM SERVER!"),this.onMessage(t)):(console.log("[MCP Context] π¨ Forwarding message to handler:",t.type),this.onMessage(t))}catch(e){console.error("[MCP Context] β Invalid JSON:",e)}},this.contextWs.onerror=e=>{console.error("[MCP Context] β WebSocket error:",e)},this.contextWs.onclose=()=>{console.log("[MCP Context] π Disconnected"),setTimeout(()=>this.connectContextChannel(),3e3)}}connectAudioChannel(){const e=new URL(this.config.serverUrl.replace("http","ws")+"/audio");this.config.apiKey&&e.searchParams.set("apiKey",this.config.apiKey),e.searchParams.set("applicationId",this.config.applicationId),console.log(`[MCP Audio] π Connecting to: ${e.toString()}`),this.audioWs=new WebSocket(e.toString()),this.audioWs.binaryType="arraybuffer",this.audioWs.onopen=()=>{console.log("[MCP Audio] β
Connected"),this.onMessage({type:"audio_connected"})},this.audioWs.onmessage=e=>{e.data instanceof ArrayBuffer&&this.audioManager.playAudio(e.data)},this.audioWs.onerror=e=>{console.error("[MCP Audio] β Error:",e)},this.audioWs.onclose=()=>{console.log("[MCP Audio] π Disconnected"),this.onMessage({type:"audio_disconnected"}),setTimeout(()=>{this.contextWs&&this.contextWs.readyState===WebSocket.OPEN&&this.connectAudioChannel()},3e3)}}connectChatChannel(){const e=new URL(this.config.serverUrl.replace("http","ws")+"/chat");this.config.apiKey&&e.searchParams.set("apiKey",this.config.apiKey),e.searchParams.set("applicationId",this.config.applicationId),console.log(`[MCP Chat] π Connecting to: ${e.toString()}`),this.chatWs=new WebSocket(e.toString()),this.chatWs.onopen=()=>{console.log("[MCP Chat] β
Connected")},this.chatWs.onmessage=e=>{try{const t=JSON.parse(e.data);console.log("[MCP Chat] π© Message received:",t),"chat_ready"===t.type?(console.log("[MCP Chat] β
Chat ready"),this.onMessage({type:"chat_connected"})):"message"===t.type?this.onMessage({type:"chat_message",role:"assistant",content:t.content,timestamp:t.timestamp}):"typing"===t.type?this.onMessage({type:"chat_typing",typing:t.typing}):"error"===t.type&&(console.error("[MCP Chat] β Error:",t.error),this.onMessage({type:"chat_error",error:t.error}))}catch(e){console.error("[MCP Chat] β Invalid JSON:",e)}},this.chatWs.onerror=e=>{console.error("[MCP Chat] β WebSocket error:",e)},this.chatWs.onclose=()=>{console.log("[MCP Chat] π Disconnected"),this.onMessage({type:"chat_disconnected"}),setTimeout(()=>{this.contextWs&&this.contextWs.readyState===WebSocket.OPEN&&this.connectChatChannel()},3e3)}}disconnect(){this.audioWs&&(this.audioWs.close(),this.audioWs=null),this.chatWs&&(this.chatWs.close(),this.chatWs=null),this.contextWs&&(this.contextWs.close(),this.contextWs=null)}sendContext(e,t){this.contextWs&&this.contextWs.readyState===WebSocket.OPEN&&(this.contextSendCounter++,console.log(`[MCP Context] π€ Sending context #${this.contextSendCounter}: trigger=${t}, elements=${e.elements.length}`),this.contextWs.send(JSON.stringify({type:"context_update",context:e,trigger:t})),console.log("[MCP Context] β
Context sent"))}sendAudio(e){this.audioWs&&this.audioWs.readyState===WebSocket.OPEN&&this.audioWs.send(e)}sendChatMessage(e){this.chatWs&&this.chatWs.readyState===WebSocket.OPEN?(console.log(`[MCP Chat] π€ Sending message: ${e}`),this.chatWs.send(JSON.stringify({type:"message",content:e}))):console.warn("[MCP Chat] β οΈ Chat WebSocket not connected")}sendConfig(){this.contextWs&&this.contextWs.readyState===WebSocket.OPEN&&(console.log("[MCP Context] π€ Sending minimal config..."),this.contextWs.send(JSON.stringify({type:"config",config:this.config})),console.log("[MCP Context] β
Config sent"))}}const m=({config:t,children:o})=>{const[l,m]=n(!1),[p,f]=n(!1),[w,b]=n(null),[y,E]=n(!1),[v,C]=n(!1),[x,A]=n([]),S=i(new a),I=i(null),M=i(null),P=i(null),k=i(new Map),$=s((e,t)=>{k.current.set(e,t)},[]),T=s(e=>{k.current.delete(e)},[]);r(()=>{if(!y)return console.log("%c[AIUIProvider] π INITIALIZATION STARTING","background: #222; color: #00ffff; font-size: 16px; font-weight: bold;"),console.log("[AIUIProvider] π Config:",{pages:t.pages.length,serverUrl:t.serverUrl,applicationId:t.applicationId}),console.log("[AIUIProvider] 1οΈβ£ Initializing HybridStateObserver..."),I.current=new u(t,W),I.current.start(),console.log("[AIUIProvider] β
HybridStateObserver ready"),console.log("[AIUIProvider] 2οΈβ£ Initializing ActionExecutor..."),M.current=new d(I.current,t),console.log("[AIUIProvider] β
ActionExecutor ready"),console.log("[AIUIProvider] 3οΈβ£ Initializing MCP Connection..."),P.current=new h(t,D,S.current),P.current.connect(),console.log("[AIUIProvider] β
MCP Connection initiated"),console.log("%c[AIUIProvider] β
INITIALIZATION COMPLETE","background: #222; color: #00ff00; font-size: 16px; font-weight: bold;"),console.log("[AIUIProvider] π― Ready to receive action commands from server"),()=>{console.log("[AIUIProvider] π§Ή Cleaning up..."),I.current?.stop(),P.current?.disconnect(),S.current.cleanup()};console.log("[AIUIProvider] βΈοΈ Skipping initialization (manually disconnected)")},[t,y]);const W=(e,t)=>{console.log(`[AIUIProvider] π Context changed (trigger: ${t}):`,{page:e.page?.route,elements:e.elements.length}),e.page&&b(e.page.route),P.current?.sendContext(e,t)},D=async e=>{if(console.log("[AIUIProvider] π© MCP message received:",e.type),"connection_established"===e.type)return console.log("[AIUIProvider] π Connection established, triggering initial discovery"),void I.current?.triggerInitialDiscovery();if("context_ready"===e.type)return console.log("[AIUIProvider] β
Context ready"),void m(!0);if("chat_connected"===e.type)return console.log("[AIUIProvider] π¬ Chat connected"),void C(!0);if("chat_disconnected"===e.type)return console.log("[AIUIProvider] β οΈ Chat disconnected"),void C(!1);if("chat_message"===e.type)return console.log("[AIUIProvider] π¬ Received chat message from AI"),void A(t=>[...t,{role:e.role,content:e.content,timestamp:e.timestamp||(new Date).toISOString()}]);if("chat_typing"!==e.type)if("action"===e.type){console.log("[AIUIProvider] π¬ ACTION MESSAGE RECEIVED!");try{const t=await(M.current?.execute(e.action,e.params));console.log("[AIUIProvider] β
Action executed successfully"),t?.success&&I.current&&setTimeout(()=>{const e=I.current.discoverInteractiveElements(),t=I.current.generateContext(e);P.current?.sendContext(t,"post_action")},300)}catch(e){console.error("[AIUIProvider] β Action execution error:",e)}}else"audio_connected"===e.type?(console.log("[AIUIProvider] β
Audio connection established"),m(!0)):"audio_disconnected"===e.type&&(console.log("[AIUIProvider] β οΈ Audio connection lost"),m(!1));else console.log("[AIUIProvider] β¨οΈ AI is typing:",e.typing)},U=()=>{console.log("[AIUIProvider] π Stopping microphone..."),S.current.stopMicrophone(),f(!1)},N=s(()=>{console.log("[AIUIProvider] π Manual connect triggered"),E(!1),I.current||(I.current=new u(t,W),I.current.start()),M.current||(M.current=new d(I.current,t)),P.current&&l||(P.current=new h(t,D,S.current),P.current.connect())},[t,l]),L=s(()=>{console.log("[AIUIProvider] π Manual disconnect triggered"),p&&U(),P.current?.disconnect(),P.current=null,I.current?.stop(),m(!1),E(!0),console.log("[AIUIProvider] β
Disconnected")},[p]),_=s(async e=>{if(!P.current)throw new Error("MCP connection not initialized");A(t=>[...t,{role:"user",content:e,timestamp:(new Date).toISOString()}]),v||(P.current.connectChatChannel(),await new Promise(e=>setTimeout(e,500))),P.current.sendChatMessage(e)},[v]),F=s(()=>{P.current?v||P.current.connectChatChannel():console.warn("[AIUIProvider] β οΈ MCP connection not initialized")},[v]),O={config:t,isConnected:l,isListening:p,currentPage:w,connect:N,disconnect:L,startListening:async()=>{P.current&&(console.log("[AIUIProvider] π€ Starting microphone..."),P.current.connectAudioChannel(),await new Promise(e=>setTimeout(e,300)),await S.current.initPlayback(),await S.current.startMicrophone(e=>{P.current?.sendAudio(e)}),f(!0),console.log("[AIUIProvider] β
Microphone started"))},stopListening:U,connectChat:F,sendChatMessage:_,chatMessages:x,isChatConnected:v,executeAction:async(e,t)=>{if(!M.current)throw new Error("ActionExecutor not initialized");return await M.current.execute(e,t)},getComponentValue:e=>{const t=document.querySelector(e);return t?t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement?t.value:t.textContent:null},registerComponent:$,unregisterComponent:T},z="undefined"!=typeof process&&process.env&&"development"===process.env.NODE_ENV;return e.createElement(c.Provider,{value:O},o,z&&e.createElement(g,{isConnected:l,isListening:p,currentPage:w}))},g=({isConnected:t,isListening:o,currentPage:n})=>e.createElement("div",{style:{position:"fixed",bottom:"10px",right:"10px",background:"rgba(0,0,0,0.9)",color:"white",padding:"12px",borderRadius:"8px",fontSize:"11px",zIndex:99999,fontFamily:"monospace"}},e.createElement("div",null," AI UI Control (Hybrid)"),e.createElement("div",null,"MCP: ",t?"π’ Connected":"π΄ Disconnected"),e.createElement("div",null,"Mic: ",o?"π€ Listening":"π Muted"),e.createElement("div",null,"Page: ",n||"Unknown")),p="1.0.0";export{m as AIUIProvider,p as VERSION,m as default,l as useAIUI};
|
|
2
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/AIUIProvider.tsx","../src/index.ts"],"sourcesContent":[null,null],"names":["AIUIContext","createContext","useAIUI","context","useContext","Error","AudioManager","constructor","this","audioContext","playerWorklet","micContext","micStream","micWorklet","onAudioData","initPlayback","AudioContextClass","window","AudioContext","webkitAudioContext","latencyHint","sampleRate","audioWorklet","addModule","AudioWorkletNode","connect","destination","resume","startMicrophone","onData","navigator","mediaDevices","getUserMedia","audio","noiseSuppression","echoCancellation","port","onmessage","e","data","source","createMediaStreamSource","mute","createGain","gain","value","stopMicrophone","getTracks","forEach","track","stop","close","playAudio","audioData","int16","Int16Array","float32","Float32Array","length","i","outputSampleRate","output","ratio","upsampled","baseIdx","j","postMessage","buffer","cleanup","HybridStateObserver","config","onContextChange","observers","lastContext","updateDebounce","discoveredElements","Map","lastDiscoveredSelectors","Set","initialContextSent","connectionReady","start","console","log","observeRouteChanges","observeMajorDomChanges","triggerInitialDiscovery","performAdaptiveDiscovery","discoveryAttempts","delay","name","lastElementCount","significantChangeDetected","attempt","index","setTimeout","currentCount","discoverInteractiveElements","size","isFirstAttempt","foundNewElements","isLastAttempt","discoverAndNotify","obs","disconnect","clearTimeout","addEventListener","originalPushState","history","pushState","bind","originalReplaceState","replaceState","unused","url","tableRowsPending","observer","MutationObserver","mutations","significantChange","tableRowsDetected","mutation","type","attributeName","label","target","getAttribute","includes","addedNodes","removedNodes","node","Array","from","HTMLElement","tagName","closest","querySelector","isSignificantElement","observe","document","body","childList","subtree","attributes","attributeFilter","push","element","tag","toLowerCase","role","className","querySelectorAll","trigger","discovered","allElements","values","allSelectors","map","el","selector","pageInfo","route","location","pathname","title","packet","page","elements","semantic","actions","filterSensitiveAttributes","newElements","filter","has","removedSelectors","sel","add","timestamp","Date","toISOString","viewport","width","innerWidth","height","innerHeight","scrollX","scrollY","hasContextChanged","newContext","newSelectors","oldSelectors","isVisible","isBlocked","extractElementInfo","set","style","getComputedStyle","display","visibility","opacity","offsetParent","safetyRules","blockedSelectors","some","matches","baseSelector","id","classes","split","c","trim","slice","join","selectorWithIndex","buildSemanticDescription","inputType","hasSelectOptions","hasAttribute","isCombobox","hasAriaAutocomplete","placeholder","ariaLabel","selectOptionsRaw","selectField","options","o","selectOptions","domElement","parts","text","textContent","findNearbyLabel","unshift","preview","more","parent","parentElement","generateContext","currentPath","currentPage","pages","find","p","attrs","filtered","privacy","exposePasswords","redactPatterns","key","pattern","RegExp","test","findElementBySemanticQuery","query","indexMatch","match","cleanQuery","targetIndex","parseInt","ordinalMatch","ordinalMap","first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","count","_","queryLower","queryNormalized","normalizeString","queryWords","w","potentialFieldNames","extractFieldNames","fieldName","exactMatch","findByExactAttribute","exactSemantic","findByExactSemantic","partialMatches","findPartialMatches","disambiguated","disambiguateMatches","fuzzyMatches","findFuzzyMatches","best","selectBestFuzzyMatch","warn","str","replace","fieldNames","commonFields","field","firstWord","underscoreVersion","attrName","attrId","semanticLower","semanticNormalized","scored","score","reasons","sort","a","b","idx","topScorers","s","ariaMatch","startsWith","inputMatch","semanticWords","matchRatio","qw","ew","ActionExecutor","execute","action","params","result","setValue","optionsToSelect","selectFromDropdown","click","toggle","navigate","error","success","message","contains","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","nativeValueSetter","Object","getOwnPropertyDescriptor","prototype","call","dispatchEvent","Event","bubbles","cancelable","scrollIntoView","behavior","block","Promise","resolve","nativeError","clickEvent","MouseEvent","view","button","buttons","composed","checked","selectedOptions","requestedOption","targetValue","targetLabel","matchingOption","opt","optValue","optText","toString","multiple","selected","requested","failed","selectInput","selectWrapper","searchScope","classList","parentControl","availableOptionsRaw","availableOptions","isMuiAutocomplete","isReactSelect","isMuiSelect","optionLabel","focus","nativeInputValueSetter","optionSelectors","optionElement","allOptions","blur","dropdownIndicator","control","KeyboardEvent","code","keyCode","optionElements","menuPortal","menuList","optEl","triggerButton","menuElement","foundOption","item","backdrop","onNavigate","PopStateEvent","state","DualMCPConnection","onMessage","audioManager","contextWs","audioWs","chatWs","contextSendCounter","connectContextChannel","URL","serverUrl","apiKey","searchParams","applicationId","WebSocket","onopen","sendConfig","event","JSON","parse","onerror","onclose","connectAudioChannel","binaryType","ArrayBuffer","readyState","OPEN","connectChatChannel","content","typing","sendContext","send","stringify","sendAudio","sendChatMessage","AIUIProvider","children","isConnected","setIsConnected","useState","isListening","setIsListening","setCurrentPage","isManuallyDisconnected","setIsManuallyDisconnected","isChatConnected","setIsChatConnected","chatMessages","setChatMessages","audioManagerRef","useRef","stateObserverRef","actionExecutorRef","mcpConnectionRef","registeredComponentsRef","registerComponent","useCallback","componentId","current","unregisterComponent","delete","useEffect","handleContextChange","handleMCPMessage","async","prev","stopListening","connectChat","contextValue","startListening","executeAction","getComponentValue","isDevelopment","process","env","NODE_ENV","React","Provider","createElement","DevOverlay","position","bottom","right","background","color","padding","borderRadius","fontSize","zIndex","fontFamily","VERSION"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");function t(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(o){if("default"!==o){var n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:function(){return e[o]}})}}),t.default=e,Object.freeze(t)}var o=t(e);const n=e.createContext(null);class i{constructor(){this.audioContext=null,this.playerWorklet=null,this.micContext=null,this.micStream=null,this.micWorklet=null,this.onAudioData=null}async initPlayback(){if(this.audioContext)return;const e=window.AudioContext||window.webkitAudioContext;this.audioContext=new e({latencyHint:"interactive",sampleRate:48e3}),await this.audioContext.audioWorklet.addModule("/player-processor.js"),this.playerWorklet=new AudioWorkletNode(this.audioContext,"player-processor"),this.playerWorklet.connect(this.audioContext.destination),await this.audioContext.resume()}async startMicrophone(e){this.onAudioData=e,this.micStream=await navigator.mediaDevices.getUserMedia({audio:{noiseSuppression:!0,echoCancellation:!0}});const t=window.AudioContext||window.webkitAudioContext;this.micContext=new t({sampleRate:16e3}),await this.micContext.audioWorklet.addModule("/worklet-processor.js"),this.micWorklet=new AudioWorkletNode(this.micContext,"mic-processor"),this.micWorklet.port.onmessage=e=>{this.onAudioData&&this.onAudioData(e.data)};const o=this.micContext.createMediaStreamSource(this.micStream),n=this.micContext.createGain();n.gain.value=0,o.connect(this.micWorklet),this.micWorklet.connect(n),n.connect(this.micContext.destination)}stopMicrophone(){this.micStream&&(this.micStream.getTracks().forEach(e=>e.stop()),this.micStream=null),this.micContext&&(this.micContext.close(),this.micContext=null),this.micWorklet=null,this.onAudioData=null}playAudio(e){if(!this.playerWorklet||!this.audioContext)return;const t=new Int16Array(e),o=new Float32Array(t.length);for(let e=0;e<t.length;e++)o[e]=t[e]/32768;const n=this.audioContext.sampleRate;let i=o;if(24e3!==n){const e=n/24e3,t=new Float32Array(o.length*e);for(let n=0;n<o.length;n++){const i=n*e;for(let s=0;s<e;s++)t[i+s]=o[n]}i=t}this.playerWorklet.port.postMessage(i,[i.buffer])}cleanup(){this.stopMicrophone(),this.audioContext&&(this.audioContext.close(),this.audioContext=null),this.playerWorklet=null}}class s{constructor(e,t){this.observers=[],this.lastContext=null,this.updateDebounce=null,this.discoveredElements=new Map,this.lastDiscoveredSelectors=new Set,this.initialContextSent=!1,this.connectionReady=!1,this.config=e,this.onContextChange=t}start(){console.log("[HybridObserver] π Starting event-driven observer..."),this.observeRouteChanges(),this.observeMajorDomChanges(),console.log("[HybridObserver] β
Observer started (waiting for connection)")}triggerInitialDiscovery(){this.initialContextSent||(console.log("[HybridObserver] π― Connection ready, triggering adaptive initial discovery..."),this.initialContextSent=!0,this.connectionReady=!0,this.performAdaptiveDiscovery())}performAdaptiveDiscovery(){const e=[{delay:100,name:"immediate"},{delay:500,name:"early"},{delay:1200,name:"late"}];let t=0,o=!1;e.forEach((n,i)=>{setTimeout(()=>{console.log(`[HybridObserver] π Discovery attempt #${i+1} (${n.name}) at ${n.delay}ms`);const s=this.discoverInteractiveElements().size;console.log(`[HybridObserver] π Found ${s} elements (previous: ${t})`);const r=0===i,c=s>t,l=i===e.length-1;r||c||l?(c&&(console.log("[HybridObserver] β
New elements discovered: +"+(s-t)),o=!0),this.discoverAndNotify(r?"initial_load":"delayed_discovery")):console.log("[HybridObserver] βοΈ No new elements, skipping update"),t=s,l&&(console.log(`[HybridObserver] π Discovery complete. Total elements: ${s}`),o&&console.log("[HybridObserver] β
Significant changes detected across attempts"))},n.delay)})}stop(){this.observers.forEach(e=>e.disconnect()),this.observers=[],this.updateDebounce&&clearTimeout(this.updateDebounce)}observeRouteChanges(){window.addEventListener("popstate",()=>{this.discoverAndNotify("navigation")});const e=history.pushState.bind(history),t=history.replaceState.bind(history);history.pushState=(t,o,n)=>{e(t,o,n),this.discoverAndNotify("navigation")},history.replaceState=(e,o,n)=>{t(e,o,n),this.discoverAndNotify("navigation")}}observeMajorDomChanges(){let e=!1;const t=new MutationObserver(t=>{let o=!1,n=!1;for(const e of t){if("attributes"===e.type&&"aria-label"===e.attributeName){const t=e.target.getAttribute("aria-label");t&&(t.includes("Update")||t.includes("View")||t.includes("Edit"))&&(n=!0)}if(e.addedNodes.length>0||e.removedNodes.length>0)for(const t of Array.from(e.addedNodes))if(t instanceof HTMLElement){("TR"===t.tagName||"TBODY"===t.tagName||null!==t.closest("tbody")||null!==t.querySelector("tr"))&&(n=!0),this.isSignificantElement(t)&&(o=!0)}}if(o||n){this.updateDebounce&&clearTimeout(this.updateDebounce);const t=n?600:300;this.updateDebounce=setTimeout(()=>{this.discoverAndNotify("dom_change"),n&&!e&&(e=!0,setTimeout(()=>{this.discoverAndNotify("dom_change_delayed"),e=!1},800))},t)}});t.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["aria-label"]}),this.observers.push(t)}isSignificantElement(e){const t=e.tagName.toLowerCase(),o=e.getAttribute("role"),n=e.className.toLowerCase();if("dialog"===t||"dialog"===o||"modal"===o)return!0;if("menu"===o||"menubar"===o)return!0;if("form"===t)return!0;if(n.includes("modal")||n.includes("dialog"))return!0;if(n.includes("overlay")||n.includes("popup"))return!0;if(n.includes("menu"))return!0;return e.querySelectorAll("button, input, select, textarea").length>3}discoverAndNotify(e){const t=this.discoverInteractiveElements(),o=Array.from(t.values()),n=new Set(o.map(e=>e.selector));console.log(`[HybridObserver] β
Found ${o.length} interactive elements`);const i={route:window.location.pathname,title:document.title};let s=null;if("navigation"===e||"initial_load"===e||0===this.lastDiscoveredSelectors.size)this.lastDiscoveredSelectors=n,s={type:"context_update",trigger:e,page:i,elements:o.map(e=>({selector:e.selector,semantic:e.semantic,type:e.type,actions:e.actions,attributes:this.filterSensitiveAttributes(e.attributes)}))};else{const t=o.filter(e=>!this.lastDiscoveredSelectors.has(e.selector)),r=Array.from(this.lastDiscoveredSelectors).filter(e=>!n.has(e));0===r.length&&t.length>0?(t.forEach(e=>this.lastDiscoveredSelectors.add(e.selector)),s={type:"context_append",trigger:e,page:i,elements:t.map(e=>({selector:e.selector,semantic:e.semantic,type:e.type,actions:e.actions,attributes:this.filterSensitiveAttributes(e.attributes)}))}):(r.length>0||t.length>0)&&(this.lastDiscoveredSelectors=n,s={type:"context_update",trigger:e,page:i,elements:o.map(e=>({selector:e.selector,semantic:e.semantic,type:e.type,actions:e.actions,attributes:this.filterSensitiveAttributes(e.attributes)}))})}s&&(s.timestamp=(new Date).toISOString(),s.viewport={width:window.innerWidth,height:window.innerHeight,scrollX:window.scrollX,scrollY:window.scrollY},this.onContextChange(s,e))}hasContextChanged(e){if(!this.lastContext)return!0;if(e.elements.length!==this.lastContext.elements.length)return!0;if(e.page?.route!==this.lastContext.page?.route)return!0;const t=new Set(e.elements.map(e=>e.selector)),o=new Set(this.lastContext.elements.map(e=>e.selector));if(t.size!==o.size)return!0;for(const e of t)if(!o.has(e))return!0;return!1}discoverInteractiveElements(){const e=new Map;return["button",'input[type="text"]','input[type="email"]','input[type="password"]','input[type="search"]','input[type="tel"]','input[type="url"]','input[type="number"]','input[type="checkbox"]','input[type="radio"]',"textarea","select","a[href]",'[role="button"]','[role="menuitem"]','li[role="menuitem"]',"[onclick]",'input[role="combobox"][data-select-options]',"input[aria-autocomplete][data-select-options]","input[data-select-field]"].forEach(t=>{document.querySelectorAll(t).forEach((o,n)=>{if(o instanceof HTMLElement&&this.isVisible(o)&&!this.isBlocked(o)){const i=this.extractElementInfo(o,t,n);i&&e.set(i.selector,i)}})}),this.discoveredElements=e,e}isVisible(e){const t=window.getComputedStyle(e);return"none"!==t.display&&"hidden"!==t.visibility&&"0"!==t.opacity&&null!==e.offsetParent}isBlocked(e){return(this.config.safetyRules?.blockedSelectors||[]).some(t=>e.matches(t))}extractElementInfo(e,t,o){const n=e.tagName.toLowerCase();let i=t;if(e.id)i=`#${e.id}`;else if(e.className){const t=e.className.split(" ").filter(e=>e.trim()).slice(0,2).join(".");t&&(i=`${n}.${t}`)}const s=`${i}:nth-of-type(${o+1})`,r=this.buildSemanticDescription(e);let c="other",l=[];if("button"===n||"button"===e.getAttribute("role"))c="button",l=["click"];else if("menuitem"===e.getAttribute("role"))c="button",l=["click"];else if("input"===n){const t=e.type,o=e.hasAttribute("data-select-options"),n="combobox"===e.getAttribute("role"),i=e.hasAttribute("aria-autocomplete");o&&(n||i)?(c="select",l=["select_from_dropdown","set_value","get_value"],console.log(`[Discovery] β
Found dropdown input: "${r}"`)):"checkbox"===t?(c="checkbox",l=["toggle"]):(c="input",l=["set_value","get_value"])}else"textarea"===n?(c="textarea",l=["set_value","get_value"]):"select"===n?(c="select",l=["set_value","get_value","select_from_dropdown"]):"a"===n&&(c="link",l=["click"]);const a={tag:n,id:e.id||null,className:e.className||null,name:e.getAttribute("name")||null,placeholder:e.getAttribute("placeholder")||null,ariaLabel:e.getAttribute("aria-label")||null,title:e.getAttribute("title")||null,type:e.getAttribute("type")||null},u=e.getAttribute("data-select-options"),d=e.getAttribute("data-select-field");if(u){const e=u.split("|||").filter(e=>e.trim());a.selectOptions=e,a.selectField=d,console.log(`[Discovery] Found select field "${d}" with ${e.length} options`),e.length>0&&(e.slice(0,5).join(", "),e.length>5&&e.length)}return{selector:s,semantic:r,type:c,actions:l,attributes:a,domElement:e}}buildSemanticDescription(e){const t=[],o=e.getAttribute("aria-label");if(o)return o;const n=e.textContent?.trim();n&&n.length<50&&t.push(n);const i=e.getAttribute("placeholder");i&&t.push(`placeholder: ${i}`);const s=e.getAttribute("title");s&&t.push(`title: ${s}`);const r=e.getAttribute("name");r&&t.push(`name: ${r}`);const c=e.getAttribute("type"),l=e.tagName.toLowerCase();c?t.push(`${c} ${l}`):t.push(l);const a=this.findNearbyLabel(e);a&&t.unshift(`"${a}"`);const u=e.getAttribute("data-select-options");if(u){const e=u.split("|||").filter(e=>e.trim());if(e.length>0){const o=e.slice(0,3).join(", "),n=e.length>3?` (+${e.length-3} more)`:"";t.push(`[Options: ${o}${n}]`)}}return t.join(" Β· ")||"unknown element"}findNearbyLabel(e){let t=e.parentElement;for(;t;){if("label"===t.tagName.toLowerCase())return t.textContent?.trim()||null;if(t=t.parentElement,t===document.body)break}if(e.id){const t=document.querySelector(`label[for="${e.id}"]`);if(t)return t.textContent?.trim()||null}return null}generateContext(e){const t=window.location.pathname,o=this.config.pages.find(e=>e.route===t);return{timestamp:(new Date).toISOString(),page:o?{route:o.route,title:o.title||t}:{route:t,title:document.title},elements:Array.from(e.values()).map(e=>({selector:e.selector,semantic:e.semantic,type:e.type,actions:e.actions,attributes:this.filterSensitiveAttributes(e.attributes)})),viewport:{width:window.innerWidth,height:window.innerHeight,scrollX:window.scrollX,scrollY:window.scrollY}}}filterSensitiveAttributes(e){const t={...e},o=this.config.privacy||{};o.exposePasswords||"password"!==t.type||(t.value="[REDACTED]");const n=o.redactPatterns||[];for(const e in t){const o=t[e];if("string"==typeof o)for(const i of n){if(new RegExp(i,"i").test(o)){t[e]="[REDACTED]";break}}}return t}findElementBySemanticQuery(e){console.log(`[findElement] π Searching for: "${e}"`),console.log(`[findElement] π¦ Total elements: ${this.discoveredElements.size}`);const t=e.match(/^(.+?)\s*#(\d+)$/i);let o=e,n=null;t&&(o=t[1].trim(),n=parseInt(t[2],10),console.log(`[findElement] π― Index notation: "${o}" index ${n}`));const i=e.match(/^(first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth)\s+(.+)$/i);if(i&&!n){const e={first:1,second:2,third:3,fourth:4,fifth:5,sixth:6,seventh:7,eighth:8,ninth:9,tenth:10};o=i[2].trim(),n=e[i[1].toLowerCase()],console.log(`[findElement] π― Ordinal notation: "${o}" index ${n}`)}if(this.discoveredElements.size>0){console.log("[findElement] Available elements:");let e=0;for(const[t,o]of this.discoveredElements)console.log(` ${++e}. "${o.semantic}" (type: ${o.type})`)}const s=o.toLowerCase(),r=this.normalizeString(o),c=r.split(/\s+/).filter(e=>e.length>1),l=this.extractFieldNames(s,c);console.log("[findElement] π― Extracted field names:",l),console.log("[findElement] π STAGE 1: Trying exact attribute match...");for(const e of l){const t=this.findByExactAttribute(e);if(t)return console.log(`[findElement] β
STAGE 1 SUCCESS: Found exact attribute match for "${e}"`),t}console.log("[findElement] β STAGE 1: No exact attribute match"),console.log("[findElement] π STAGE 2: Trying exact semantic match...");const a=this.findByExactSemantic(s,r);if(a)return console.log("[findElement] β
STAGE 2 SUCCESS: Found exact semantic match"),a;console.log("[findElement] β STAGE 2: No exact semantic match"),console.log("[findElement] π STAGE 3: Trying partial match with disambiguation...");const u=this.findPartialMatches(s,c,l);if(1===u.length)return console.log("[findElement] β
STAGE 3 SUCCESS: Found single partial match"),u[0];if(u.length>1){console.log(`[findElement] π STAGE 3: Found ${u.length} partial matches, disambiguating...`);const e=this.disambiguateMatches(u,s,l,n);if(e)return console.log("[findElement] β
STAGE 3 SUCCESS: Disambiguation successful"),e;console.log("[findElement] β οΈ STAGE 3: Multiple matches, cannot disambiguate")}console.log("[findElement] π STAGE 4: Trying fuzzy matching...");const d=this.findFuzzyMatches(c,s);if(d.length>0){if(console.log(`[findElement] β
STAGE 4: Found ${d.length} fuzzy matches`),1===d.length)return d[0].element;const e=this.selectBestFuzzyMatch(d,s,n);if(e)return e}return console.warn(`[findElement] β ALL STAGES FAILED: No match found for "${e}"`),null}normalizeString(e){return e.replace(/[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}\u{1F900}-\u{1F9FF}\u{1F1E0}-\u{1F1FF}]/gu,"").replace(/[^\w\s]/g," ").replace(/\s+/g," ").trim().toLowerCase()}extractFieldNames(e,t){const o=new Set,n=["username","user_name","email","password","phone","address","full_name","fullname","first_name","last_name","name","location","city","country","zip","postal","state","confirm_password","confirmpassword"];for(const t of n)(e.includes(t)||e.includes(t.replace("_","")))&&(o.add(t),o.add(t.replace("_","")));const i=t[0];if(i&&i.length>2&&o.add(i),t.length>=2){const e=t.slice(0,2).join("_");o.add(e),o.add(t.slice(0,2).join(""))}return Array.from(o)}findByExactAttribute(e){for(const[t,o]of this.discoveredElements){const t=o.attributes||{},n=(t.name||"").toLowerCase(),i=(t.id||"").toLowerCase();if(n===e||i===e)return console.log(`[findElement] π― Exact attribute match: name="${n}", id="${i}"`),o;if(n.replace(/[-_]/g,"")===e.replace(/[-_]/g,""))return console.log(`[findElement] π― Normalized attribute match: "${n}" ~ "${e}"`),o}return null}findByExactSemantic(e,t){for(const[o,n]of this.discoveredElements){const o=n.semantic.toLowerCase(),i=this.normalizeString(n.semantic);if(o===e||i===t)return console.log(`[findElement] π― Exact semantic match: "${n.semantic}"`),n}return null}findPartialMatches(e,t,o){const n=[];for(const[t,i]of this.discoveredElements){const t=i.attributes||{},s=(t.name||"").toLowerCase(),r=(t.id||"").toLowerCase(),c=i.semantic.toLowerCase();for(const e of o)if(s.includes(e)||r.includes(e)){n.push(i),console.log(`[findElement] π Partial attribute match: "${e}" in "${s||r}"`);break}!n.includes(i)&&c.includes(e)&&(n.push(i),console.log(`[findElement] π Partial semantic match: "${e}" in "${i.semantic}"`))}return n}disambiguateMatches(e,t,o,n){if(console.log(`[findElement] π Disambiguating ${e.length} matches...`),null!==n&&n>0&&n<=e.length)return console.log(`[findElement] β
Using specified index: ${n}`),e[n-1];const i=e.map(e=>{let n=0;const i=[],s=e.attributes||{},r=(s.name||"").toLowerCase(),c=(s.id||"").toLowerCase();for(const e of o)r===e?(n+=1e3,i.push(`exact_name:${e}`)):r.includes(e)&&(n+=500,i.push(`name_contains:${e}`)),c===e?(n+=800,i.push(`exact_id:${e}`)):c.includes(e)&&(n+=400,i.push(`id_contains:${e}`));return e.semantic.length<50&&(n+=100,i.push("short_semantic")),(t.includes("input")&&"input"===e.type||t.includes("button")&&"button"===e.type)&&(n+=50,i.push("type_match")),{element:e,score:n,reasons:i}});if(i.sort((e,t)=>t.score-e.score),console.log("[findElement] π Disambiguation scores:"),i.forEach((e,t)=>{console.log(` ${t+1}. "${e.element.semantic}" - Score: ${e.score} (${e.reasons.join(", ")})`)}),i.length>1&&i[0].score-i[1].score>200)return console.log("[findElement] β
Clear winner with score difference: "+(i[0].score-i[1].score)),i[0].element;const s=i.filter(e=>e.score===i[0].score);if(1===s.length)return s[0].element;for(const e of o){const t=s.find(t=>(t.element.attributes?.ariaLabel||"").toLowerCase().startsWith(e));if(t)return console.log("[findElement] β
Disambiguated by aria-label prefix"),t.element}const r=s.find(e=>"input"===e.element.type||"textarea"===e.element.type);return r&&t.includes("input")?(console.log("[findElement] β
Disambiguated by preferring input type"),r.element):(console.log("[findElement] β οΈ Cannot disambiguate, returning first match"),i[0].element)}findFuzzyMatches(e,t){const o=[];for(const[t,n]of this.discoveredElements){const t=this.normalizeString(n.semantic).split(/\s+/).filter(e=>e.length>2),i=e.filter(e=>t.some(t=>t.includes(e)||e.includes(t))).length/e.length;if(i>=.4){const e=1e3*i;o.push({element:n,score:e})}}return o.sort((e,t)=>t.score-e.score),o}selectBestFuzzyMatch(e,t,o){return console.log("[findElement] π Fuzzy matches:"),e.slice(0,5).forEach((e,t)=>{console.log(` ${t+1}. "${e.element.semantic}" - Score: ${e.score}`)}),null!==o&&o>0&&o<=e.length?e[o-1].element:e[0].element}}class r{constructor(e,t){this.observer=e,this.config=t}async execute(e,t){console.log("%c[ActionExecutor] β‘ EXECUTE CALLED","background: #222; color: #bada55; font-size: 14px; font-weight: bold;"),console.log(`[ActionExecutor] π Action: "${e}"`),console.log("[ActionExecutor] π Params:",t);try{let o;switch(e){case"set_value":console.log("[ActionExecutor] π§ Calling setValue..."),o=await this.setValue(t.semantic,t.value);break;case"select_from_dropdown":const n=t.options||(t.value?[t.value]:[]);if(0===n.length)throw new Error("No 'options' or 'value' provided for selection");console.log("[ActionExecutor] π― Calling selectFromDropdown..."),o=await this.selectFromDropdown(t.semantic,n);break;case"click":console.log("[ActionExecutor] π±οΈ Calling click..."),o=await this.click(t.semantic);break;case"toggle":console.log("[ActionExecutor] π Calling toggle..."),o=await this.toggle(t.semantic);break;case"navigate":console.log("[ActionExecutor] π Calling navigate..."),o=await this.navigate(t.route);break;default:throw new Error(`Unknown action: ${e}`)}return console.log("%c[ActionExecutor] β
SUCCESS","background: #222; color: #00ff00; font-size: 14px; font-weight: bold;"),console.log("[ActionExecutor] Result:",o),o}catch(e){return console.error("%c[ActionExecutor] β ERROR","background: #222; color: #ff0000; font-size: 14px; font-weight: bold;"),console.error("[ActionExecutor] Error details:",e),{success:!1,error:e.message}}}async setValue(e,t){const o=this.observer.findElementBySemanticQuery(e);if(!o)throw new Error(`Element not found: ${e}`);const n=o.domElement;if(!document.contains(n))throw new Error(`Element no longer in DOM: ${e}`);if(n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement){const o=Object.getOwnPropertyDescriptor(n.constructor.prototype,"value")?.set;return o?o.call(n,t):n.value=t,n.dispatchEvent(new Event("input",{bubbles:!0,cancelable:!0})),n.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!0})),console.log(`[ActionExecutor] β
Set "${e}" = "${t}"`),{success:!0,semantic:e,value:t}}throw new Error(`Element "${e}" does not support set_value`)}async click(e){const t=this.observer.findElementBySemanticQuery(e);if(!t)throw new Error(`Element not found: ${e}`);console.log(`[ActionExecutor] π Found element: ${t.selector}`);const o=t.domElement;if(!document.contains(o))throw new Error(`Element no longer in DOM: ${e}`);console.log("[ActionExecutor] π― Element retrieved:",o.tagName,o.getAttribute("aria-label"));try{o.scrollIntoView({behavior:"smooth",block:"center"}),await new Promise(e=>setTimeout(e,100));try{return o.click(),console.log(`[ActionExecutor] β
Native click executed on "${e}"`),{success:!0,semantic:e}}catch(e){console.warn("[ActionExecutor] β οΈ Native click failed, trying dispatch method:",e)}const t=new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window,button:0,buttons:1,composed:!0});if(!o.dispatchEvent(t))throw new Error("Click event was prevented");return console.log(`[ActionExecutor] β
Dispatch click executed on "${e}"`),{success:!0,semantic:e}}catch(t){throw console.error("[ActionExecutor] β Click failed:",t),new Error(`Failed to click "${e}": ${t}`)}}async toggle(e){const t=this.observer.findElementBySemanticQuery(e);if(!t)throw new Error(`Element not found: ${e}`);const o=t.domElement;if(!document.contains(o))throw new Error(`Element no longer in DOM: ${e}`);if(o instanceof HTMLInputElement&&"checkbox"===o.type)return o.checked=!o.checked,o.dispatchEvent(new Event("change",{bubbles:!0})),console.log(`[ActionExecutor] β
Toggled "${e}" = ${o.checked}`),{success:!0,semantic:e,checked:o.checked};throw new Error(`Element "${e}" does not support toggle`)}async selectFromDropdown(e,t){console.log(`[ActionExecutor] π― Selecting from dropdown: "${e}", options:`,t);const o=this.observer.findElementBySemanticQuery(e);if(!o)throw new Error(`Element not found: ${e}`);const n=o.domElement;if(!document.contains(n))throw new Error(`Element no longer in DOM: ${e}`);if(n instanceof HTMLSelectElement){console.log("[ActionExecutor] π― Detected NATIVE <select> element");const o=[];for(const e of t){let t=e,i=e;if(e.includes(":")){const o=e.split(":");i=o[0].trim(),t=o[1]?.trim()||""}const s=Array.from(n.options).find(e=>{const o=e.value,n=e.textContent?.trim()||"";return o===t||o===t.toString()||n.toLowerCase()===i.toLowerCase()});if(!s){console.warn(`[ActionExecutor] β οΈ Option not found: "${e}"`);continue}const r=Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype,"value")?.set;r?r.call(n,s.value):n.value=s.value,n.dispatchEvent(new Event("input",{bubbles:!0})),n.dispatchEvent(new Event("change",{bubbles:!0})),o.push(e),n.multiple&&await new Promise(e=>setTimeout(e,100))}if(0===o.length)throw new Error(`Failed to select any options from: ${t.join(", ")}`);return{success:!0,semantic:e,selected:o,requested:t,failed:t.filter(e=>!o.includes(e))}}if(!(n instanceof HTMLInputElement))throw new Error(`Element is not an input or select: ${e}`);const i=n;let s=i.closest("[data-select-field]");if(s||(s=i.closest(".MuiFormControl-root")),s||(s=i.closest('div[class*="MuiSelect"]')),s||(s=i.closest('div[class*="select"]')),s||(s=i.closest('div[role="group"]')),!s)throw new Error(`Dropdown wrapper not found for: ${e}`);let r=s;if(!r.classList.contains("MuiFormControl-root")){const e=r.closest(".MuiFormControl-root");e&&(r=e,console.log("[ActionExecutor] π Expanded search scope to closest MuiFormControl"))}const c=s.getAttribute("data-select-options")||i.getAttribute("data-select-options");if(c){const e=c.split("|||").filter(e=>e.trim());console.log(`[ActionExecutor] π Available options (${e.length}):`,e)}const l="combobox"===i.getAttribute("role")||i.hasAttribute("aria-autocomplete")||null!==s.querySelector(".MuiAutocomplete-root"),a=null!==s.querySelector('[class*="indicatorContainer"]')||null!==s.querySelector('[class*="control"]'),u=null!==r.querySelector('svg[class*="MuiSelect-icon"]')||null!==r.querySelector('[role="button"][aria-haspopup="listbox"]')||null!==r.querySelector('[role="button"][aria-haspopup="true"]')||"listbox"===i.getAttribute("aria-haspopup");if(console.log("[ActionExecutor] π Dropdown type detected: "+(l?"MUI Autocomplete":a?"React-Select":u?"MUI Select":"Unknown")),l){console.log("[ActionExecutor] π― Using MUI Autocomplete strategy");const o=[];for(const e of t){i.focus(),i.dispatchEvent(new Event("focus",{bubbles:!0})),await new Promise(e=>setTimeout(e,100)),i.click(),await new Promise(e=>setTimeout(e,300));const t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value")?.set;t?t.call(i,e):i.value=e,i.dispatchEvent(new Event("input",{bubbles:!0})),i.dispatchEvent(new Event("change",{bubbles:!0})),await new Promise(e=>setTimeout(e,400));const n=['[role="option"]',".MuiAutocomplete-option",'[role="listbox"] li','li[id*="option"]',"[data-option-index]"];let s=null;for(const t of n){const o=Array.from(document.querySelectorAll(t));for(const t of o)if((t.textContent?.trim()||"").toLowerCase()===e.toLowerCase()){s=t;break}if(s)break}s?(s.scrollIntoView({block:"nearest"}),await new Promise(e=>setTimeout(e,100)),s.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window,button:0})),await new Promise(e=>setTimeout(e,50)),s.click(),await new Promise(e=>setTimeout(e,50)),s.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0,cancelable:!0,view:window,button:0})),o.push(e),await new Promise(e=>setTimeout(e,300))):t&&t.call(i,"")}if(i.blur(),0===o.length)throw new Error(`Failed to select options (Autocomplete): ${t.join(", ")}`);return{success:!0,semantic:e,selected:o,requested:t,failed:t.filter(e=>!o.includes(e))}}if(a){console.log("[ActionExecutor] π― Using React-Select strategy"),console.log("[ActionExecutor] π― Opening dropdown menu...");const o=s.querySelector('[class*="indicatorContainer"]');o&&(o.click(),await new Promise(e=>setTimeout(e,300))),i.focus(),i.dispatchEvent(new Event("focus",{bubbles:!0})),i.dispatchEvent(new Event("input",{bubbles:!0,cancelable:!0})),await new Promise(e=>setTimeout(e,300));const n=s.querySelector('[class*="control"]');n&&(n.click(),await new Promise(e=>setTimeout(e,300))),i.dispatchEvent(new KeyboardEvent("keydown",{key:"ArrowDown",code:"ArrowDown",keyCode:40,bubbles:!0,cancelable:!0})),await new Promise(e=>setTimeout(e,500));const r=[];for(const e of t){let t=Array.from(document.querySelectorAll('[class*="option"]:not([class*="Input"]), [role="option"], div[id*="option"]'));if(0===t.length){const e=document.querySelector('[class*="MenuPortal"]');e&&(t=Array.from(e.querySelectorAll('[class*="option"]')))}if(0===t.length){const e=s.querySelector('[class*="MenuList"]');e&&(t=Array.from(e.querySelectorAll('div[id*="option"]')))}for(const o of t)if((o.textContent?.trim()||"").toLowerCase()===e.toLowerCase()){o.scrollIntoView({block:"nearest"}),await new Promise(e=>setTimeout(e,100)),o.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0})),o.click(),o.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0})),r.push(e),await new Promise(e=>setTimeout(e,300));break}}if(i.blur(),0===r.length)throw new Error(`Failed to select options (React-Select): ${t.join(", ")}`);return{success:!0,semantic:e,selected:r,requested:t,failed:t.filter(e=>!r.includes(e))}}if(u){console.log("[ActionExecutor] π― Using MUI Select strategy");const o=[];for(const n of t){const t=r.querySelector('[role="button"][aria-haspopup="listbox"]')||r.querySelector('[role="button"][aria-haspopup="true"]')||r.querySelector('div[role="button"]')||r.querySelector(".MuiSelect-select");if(!t)throw new Error(`Cannot find MUI Select trigger for: ${e}`);t.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window,buttons:1})),t.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0,cancelable:!0,view:window,buttons:1})),t.click();let i=null;for(let e=0;e<10&&(await new Promise(e=>setTimeout(e,100)),i=document.querySelector('[role="listbox"]')||document.querySelector('.MuiMenu-paper [role="listbox"]')||document.querySelector('.MuiPopover-paper [role="listbox"]'),!i);e++);if(!i)throw new Error(`MUI Select menu did not open for: ${e}`);const s=Array.from(i.querySelectorAll('[role="option"], li[data-value]')).find(e=>(e.textContent?.trim()||"").toLowerCase()===n.toLowerCase());if(!s){const e=document.querySelector(".MuiBackdrop-root");e?e.click():document.body.click();continue}s.scrollIntoView({block:"nearest"}),await new Promise(e=>setTimeout(e,100)),s.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window,button:0})),await new Promise(e=>setTimeout(e,50)),s.click(),await new Promise(e=>setTimeout(e,50)),s.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0,cancelable:!0,view:window,button:0})),o.push(n),await new Promise(e=>setTimeout(e,300))}if(0===o.length)throw new Error(`Failed to select options (MUI Select): ${t.join(", ")}`);return{success:!0,semantic:e,selected:o,requested:t,failed:t.filter(e=>!o.includes(e))}}throw new Error(`Could not determine dropdown type for: ${e}. Types checked: Native, MUI Autocomplete, React-Select, MUI Select.`)}async navigate(e){console.log(`[ActionExecutor] π Navigating to ${e}`);try{return this.config.onNavigate?(console.log("[ActionExecutor] Using custom onNavigate function"),await this.config.onNavigate(e),console.log("[ActionExecutor] β
Custom navigation executed"),{success:!0,route:e}):(console.log("[ActionExecutor] Using fallback navigation (pushState)"),window.history.pushState({},"",e),window.dispatchEvent(new PopStateEvent("popstate",{state:{}})),console.log("[ActionExecutor] β
Navigation complete"),{success:!0,route:e})}catch(e){return console.error("[ActionExecutor] β Navigation failed:",e),{success:!1,error:e.message}}}}class c{constructor(e,t,o){this.contextWs=null,this.audioWs=null,this.chatWs=null,this.contextSendCounter=0,this.config=e,this.onMessage=t,this.audioManager=o}connect(){this.connectContextChannel()}connectContextChannel(){const e=new URL(this.config.serverUrl.replace("http","ws")+"/context");this.config.apiKey&&e.searchParams.set("apiKey",this.config.apiKey),e.searchParams.set("applicationId",this.config.applicationId),console.log(`[MCP Context] π Connecting to: ${e.toString()}`),this.contextWs=new WebSocket(e.toString()),this.contextWs.onopen=()=>{console.log("[MCP Context] β
Connected"),this.sendConfig(),setTimeout(()=>{this.onMessage({type:"connection_established"})},100)},this.contextWs.onmessage=e=>{try{const t=JSON.parse(e.data);console.log("[MCP Context] π© Raw message received:",t),"context_ready"===t.type?(console.log("[MCP Context] β
Context channel ready"),this.onMessage(t)):"action"===t.type?(console.log("[MCP Context] π¬ ACTION MESSAGE RECEIVED FROM SERVER!"),this.onMessage(t)):(console.log("[MCP Context] π¨ Forwarding message to handler:",t.type),this.onMessage(t))}catch(e){console.error("[MCP Context] β Invalid JSON:",e)}},this.contextWs.onerror=e=>{console.error("[MCP Context] β WebSocket error:",e)},this.contextWs.onclose=()=>{console.log("[MCP Context] π Disconnected"),setTimeout(()=>this.connectContextChannel(),3e3)}}connectAudioChannel(){const e=new URL(this.config.serverUrl.replace("http","ws")+"/audio");this.config.apiKey&&e.searchParams.set("apiKey",this.config.apiKey),e.searchParams.set("applicationId",this.config.applicationId),console.log(`[MCP Audio] π Connecting to: ${e.toString()}`),this.audioWs=new WebSocket(e.toString()),this.audioWs.binaryType="arraybuffer",this.audioWs.onopen=()=>{console.log("[MCP Audio] β
Connected"),this.onMessage({type:"audio_connected"})},this.audioWs.onmessage=e=>{e.data instanceof ArrayBuffer&&this.audioManager.playAudio(e.data)},this.audioWs.onerror=e=>{console.error("[MCP Audio] β Error:",e)},this.audioWs.onclose=()=>{console.log("[MCP Audio] π Disconnected"),this.onMessage({type:"audio_disconnected"}),setTimeout(()=>{this.contextWs&&this.contextWs.readyState===WebSocket.OPEN&&this.connectAudioChannel()},3e3)}}connectChatChannel(){const e=new URL(this.config.serverUrl.replace("http","ws")+"/chat");this.config.apiKey&&e.searchParams.set("apiKey",this.config.apiKey),e.searchParams.set("applicationId",this.config.applicationId),console.log(`[MCP Chat] π Connecting to: ${e.toString()}`),this.chatWs=new WebSocket(e.toString()),this.chatWs.onopen=()=>{console.log("[MCP Chat] β
Connected")},this.chatWs.onmessage=e=>{try{const t=JSON.parse(e.data);console.log("[MCP Chat] π© Message received:",t),"chat_ready"===t.type?(console.log("[MCP Chat] β
Chat ready"),this.onMessage({type:"chat_connected"})):"message"===t.type?this.onMessage({type:"chat_message",role:"assistant",content:t.content,timestamp:t.timestamp}):"typing"===t.type?this.onMessage({type:"chat_typing",typing:t.typing}):"error"===t.type&&(console.error("[MCP Chat] β Error:",t.error),this.onMessage({type:"chat_error",error:t.error}))}catch(e){console.error("[MCP Chat] β Invalid JSON:",e)}},this.chatWs.onerror=e=>{console.error("[MCP Chat] β WebSocket error:",e)},this.chatWs.onclose=()=>{console.log("[MCP Chat] π Disconnected"),this.onMessage({type:"chat_disconnected"}),setTimeout(()=>{this.contextWs&&this.contextWs.readyState===WebSocket.OPEN&&this.connectChatChannel()},3e3)}}disconnect(){this.audioWs&&(this.audioWs.close(),this.audioWs=null),this.chatWs&&(this.chatWs.close(),this.chatWs=null),this.contextWs&&(this.contextWs.close(),this.contextWs=null)}sendContext(e,t){this.contextWs&&this.contextWs.readyState===WebSocket.OPEN&&(this.contextSendCounter++,console.log(`[MCP Context] π€ Sending context #${this.contextSendCounter}: trigger=${t}, elements=${e.elements.length}`),this.contextWs.send(JSON.stringify({type:"context_update",context:e,trigger:t})),console.log("[MCP Context] β
Context sent"))}sendAudio(e){this.audioWs&&this.audioWs.readyState===WebSocket.OPEN&&this.audioWs.send(e)}sendChatMessage(e){this.chatWs&&this.chatWs.readyState===WebSocket.OPEN?(console.log(`[MCP Chat] π€ Sending message: ${e}`),this.chatWs.send(JSON.stringify({type:"message",content:e}))):console.warn("[MCP Chat] β οΈ Chat WebSocket not connected")}sendConfig(){this.contextWs&&this.contextWs.readyState===WebSocket.OPEN&&(console.log("[MCP Context] π€ Sending minimal config..."),this.contextWs.send(JSON.stringify({type:"config",config:this.config})),console.log("[MCP Context] β
Config sent"))}}const l=({config:t,children:l})=>{const[u,d]=e.useState(!1),[h,m]=e.useState(!1),[g,p]=e.useState(null),[f,b]=e.useState(!1),[w,y]=e.useState(!1),[E,v]=e.useState([]),C=e.useRef(new i),x=e.useRef(null),A=e.useRef(null),S=e.useRef(null),I=e.useRef(new Map),M=e.useCallback((e,t)=>{I.current.set(e,t)},[]),P=e.useCallback(e=>{I.current.delete(e)},[]);e.useEffect(()=>{if(!f)return console.log("%c[AIUIProvider] π INITIALIZATION STARTING","background: #222; color: #00ffff; font-size: 16px; font-weight: bold;"),console.log("[AIUIProvider] π Config:",{pages:t.pages.length,serverUrl:t.serverUrl,applicationId:t.applicationId}),console.log("[AIUIProvider] 1οΈβ£ Initializing HybridStateObserver..."),x.current=new s(t,k),x.current.start(),console.log("[AIUIProvider] β
HybridStateObserver ready"),console.log("[AIUIProvider] 2οΈβ£ Initializing ActionExecutor..."),A.current=new r(x.current,t),console.log("[AIUIProvider] β
ActionExecutor ready"),console.log("[AIUIProvider] 3οΈβ£ Initializing MCP Connection..."),S.current=new c(t,$,C.current),S.current.connect(),console.log("[AIUIProvider] β
MCP Connection initiated"),console.log("%c[AIUIProvider] β
INITIALIZATION COMPLETE","background: #222; color: #00ff00; font-size: 16px; font-weight: bold;"),console.log("[AIUIProvider] π― Ready to receive action commands from server"),()=>{console.log("[AIUIProvider] π§Ή Cleaning up..."),x.current?.stop(),S.current?.disconnect(),C.current.cleanup()};console.log("[AIUIProvider] βΈοΈ Skipping initialization (manually disconnected)")},[t,f]);const k=(e,t)=>{console.log(`[AIUIProvider] π Context changed (trigger: ${t}):`,{page:e.page?.route,elements:e.elements.length}),e.page&&p(e.page.route),S.current?.sendContext(e,t)},$=async e=>{if(console.log("[AIUIProvider] π© MCP message received:",e.type),"connection_established"===e.type)return console.log("[AIUIProvider] π Connection established, triggering initial discovery"),void x.current?.triggerInitialDiscovery();if("context_ready"===e.type)return console.log("[AIUIProvider] β
Context ready"),void d(!0);if("chat_connected"===e.type)return console.log("[AIUIProvider] π¬ Chat connected"),void y(!0);if("chat_disconnected"===e.type)return console.log("[AIUIProvider] β οΈ Chat disconnected"),void y(!1);if("chat_message"===e.type)return console.log("[AIUIProvider] π¬ Received chat message from AI"),void v(t=>[...t,{role:e.role,content:e.content,timestamp:e.timestamp||(new Date).toISOString()}]);if("chat_typing"!==e.type)if("action"===e.type){console.log("[AIUIProvider] π¬ ACTION MESSAGE RECEIVED!");try{const t=await(A.current?.execute(e.action,e.params));console.log("[AIUIProvider] β
Action executed successfully"),t?.success&&x.current&&setTimeout(()=>{const e=x.current.discoverInteractiveElements(),t=x.current.generateContext(e);S.current?.sendContext(t,"post_action")},300)}catch(e){console.error("[AIUIProvider] β Action execution error:",e)}}else"audio_connected"===e.type?(console.log("[AIUIProvider] β
Audio connection established"),d(!0)):"audio_disconnected"===e.type&&(console.log("[AIUIProvider] β οΈ Audio connection lost"),d(!1));else console.log("[AIUIProvider] β¨οΈ AI is typing:",e.typing)},T=()=>{console.log("[AIUIProvider] π Stopping microphone..."),C.current.stopMicrophone(),m(!1)},W=e.useCallback(()=>{console.log("[AIUIProvider] π Manual connect triggered"),b(!1),x.current||(x.current=new s(t,k),x.current.start()),A.current||(A.current=new r(x.current,t)),S.current&&u||(S.current=new c(t,$,C.current),S.current.connect())},[t,u]),D=e.useCallback(()=>{console.log("[AIUIProvider] π Manual disconnect triggered"),h&&T(),S.current?.disconnect(),S.current=null,x.current?.stop(),d(!1),b(!0),console.log("[AIUIProvider] β
Disconnected")},[h]),U=e.useCallback(async e=>{if(!S.current)throw new Error("MCP connection not initialized");v(t=>[...t,{role:"user",content:e,timestamp:(new Date).toISOString()}]),w||(S.current.connectChatChannel(),await new Promise(e=>setTimeout(e,500))),S.current.sendChatMessage(e)},[w]),N=e.useCallback(()=>{S.current?w||S.current.connectChatChannel():console.warn("[AIUIProvider] β οΈ MCP connection not initialized")},[w]),_={config:t,isConnected:u,isListening:h,currentPage:g,connect:W,disconnect:D,startListening:async()=>{S.current&&(console.log("[AIUIProvider] π€ Starting microphone..."),S.current.connectAudioChannel(),await new Promise(e=>setTimeout(e,300)),await C.current.initPlayback(),await C.current.startMicrophone(e=>{S.current?.sendAudio(e)}),m(!0),console.log("[AIUIProvider] β
Microphone started"))},stopListening:T,connectChat:N,sendChatMessage:U,chatMessages:E,isChatConnected:w,executeAction:async(e,t)=>{if(!A.current)throw new Error("ActionExecutor not initialized");return await A.current.execute(e,t)},getComponentValue:e=>{const t=document.querySelector(e);return t?t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement?t.value:t.textContent:null},registerComponent:M,unregisterComponent:P},O="undefined"!=typeof process&&process.env&&"development"===process.env.NODE_ENV;return o.createElement(n.Provider,{value:_},l,O&&o.createElement(a,{isConnected:u,isListening:h,currentPage:g}))},a=({isConnected:e,isListening:t,currentPage:n})=>o.createElement("div",{style:{position:"fixed",bottom:"10px",right:"10px",background:"rgba(0,0,0,0.9)",color:"white",padding:"12px",borderRadius:"8px",fontSize:"11px",zIndex:99999,fontFamily:"monospace"}},o.createElement("div",null," AI UI Control (Hybrid)"),o.createElement("div",null,"MCP: ",e?"π’ Connected":"π΄ Disconnected"),o.createElement("div",null,"Mic: ",t?"π€ Listening":"π Muted"),o.createElement("div",null,"Page: ",n||"Unknown"));exports.AIUIProvider=l,exports.VERSION="1.0.0",exports.default=l,exports.useAIUI=()=>{const t=e.useContext(n);if(!t)throw new Error("useAIUI must be used within AIUIProvider");return t};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/AIUIProvider.tsx","../src/index.ts"],"sourcesContent":[null,null],"names":["AIUIContext","createContext","AudioManager","constructor","this","audioContext","playerWorklet","micContext","micStream","micWorklet","onAudioData","initPlayback","AudioContextClass","window","AudioContext","webkitAudioContext","latencyHint","sampleRate","audioWorklet","addModule","AudioWorkletNode","connect","destination","resume","startMicrophone","onData","navigator","mediaDevices","getUserMedia","audio","noiseSuppression","echoCancellation","port","onmessage","e","data","source","createMediaStreamSource","mute","createGain","gain","value","stopMicrophone","getTracks","forEach","track","stop","close","playAudio","audioData","int16","Int16Array","float32","Float32Array","length","i","outputSampleRate","output","ratio","upsampled","baseIdx","j","postMessage","buffer","cleanup","HybridStateObserver","config","onContextChange","observers","lastContext","updateDebounce","discoveredElements","Map","lastDiscoveredSelectors","Set","initialContextSent","connectionReady","start","console","log","observeRouteChanges","observeMajorDomChanges","triggerInitialDiscovery","performAdaptiveDiscovery","discoveryAttempts","delay","name","lastElementCount","significantChangeDetected","attempt","index","setTimeout","currentCount","discoverInteractiveElements","size","isFirstAttempt","foundNewElements","isLastAttempt","discoverAndNotify","obs","disconnect","clearTimeout","addEventListener","originalPushState","history","pushState","bind","originalReplaceState","replaceState","unused","url","tableRowsPending","observer","MutationObserver","mutations","significantChange","tableRowsDetected","mutation","type","attributeName","label","target","getAttribute","includes","addedNodes","removedNodes","node","Array","from","HTMLElement","tagName","closest","querySelector","isSignificantElement","observe","document","body","childList","subtree","attributes","attributeFilter","push","element","tag","toLowerCase","role","className","querySelectorAll","trigger","discovered","allElements","values","allSelectors","map","el","selector","pageInfo","route","location","pathname","title","packet","page","elements","semantic","actions","filterSensitiveAttributes","newElements","filter","has","removedSelectors","sel","add","timestamp","Date","toISOString","viewport","width","innerWidth","height","innerHeight","scrollX","scrollY","hasContextChanged","newContext","newSelectors","oldSelectors","isVisible","isBlocked","extractElementInfo","set","style","getComputedStyle","display","visibility","opacity","offsetParent","safetyRules","blockedSelectors","some","matches","baseSelector","id","classes","split","c","trim","slice","join","selectorWithIndex","buildSemanticDescription","inputType","hasSelectOptions","hasAttribute","isCombobox","hasAriaAutocomplete","placeholder","ariaLabel","selectOptionsRaw","selectField","options","o","selectOptions","domElement","parts","text","textContent","findNearbyLabel","unshift","preview","more","parent","parentElement","generateContext","currentPath","currentPage","pages","find","p","attrs","filtered","privacy","exposePasswords","redactPatterns","key","pattern","RegExp","test","findElementBySemanticQuery","query","indexMatch","match","cleanQuery","targetIndex","parseInt","ordinalMatch","ordinalMap","first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","count","_","queryLower","queryNormalized","normalizeString","queryWords","w","potentialFieldNames","extractFieldNames","fieldName","exactMatch","findByExactAttribute","exactSemantic","findByExactSemantic","partialMatches","findPartialMatches","disambiguated","disambiguateMatches","fuzzyMatches","findFuzzyMatches","best","selectBestFuzzyMatch","warn","str","replace","fieldNames","commonFields","field","firstWord","underscoreVersion","attrName","attrId","semanticLower","semanticNormalized","scored","score","reasons","sort","a","b","idx","topScorers","s","ariaMatch","startsWith","inputMatch","semanticWords","matchRatio","qw","ew","ActionExecutor","execute","action","params","result","setValue","optionsToSelect","Error","selectFromDropdown","click","toggle","navigate","error","success","message","contains","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","nativeValueSetter","Object","getOwnPropertyDescriptor","prototype","call","dispatchEvent","Event","bubbles","cancelable","scrollIntoView","behavior","block","Promise","resolve","nativeError","clickEvent","MouseEvent","view","button","buttons","composed","checked","selectedOptions","requestedOption","targetValue","targetLabel","matchingOption","opt","optValue","optText","toString","multiple","selected","requested","failed","selectInput","selectWrapper","searchScope","classList","parentControl","availableOptionsRaw","availableOptions","isMuiAutocomplete","isReactSelect","isMuiSelect","optionLabel","focus","nativeInputValueSetter","optionSelectors","optionElement","allOptions","blur","dropdownIndicator","control","KeyboardEvent","code","keyCode","optionElements","menuPortal","menuList","optEl","triggerButton","menuElement","foundOption","item","backdrop","onNavigate","PopStateEvent","state","DualMCPConnection","onMessage","audioManager","contextWs","audioWs","chatWs","contextSendCounter","connectContextChannel","URL","serverUrl","apiKey","searchParams","applicationId","WebSocket","onopen","sendConfig","event","JSON","parse","onerror","onclose","connectAudioChannel","binaryType","ArrayBuffer","readyState","OPEN","connectChatChannel","content","typing","sendContext","context","send","stringify","sendAudio","sendChatMessage","AIUIProvider","children","isConnected","setIsConnected","useState","isListening","setIsListening","setCurrentPage","isManuallyDisconnected","setIsManuallyDisconnected","isChatConnected","setIsChatConnected","chatMessages","setChatMessages","audioManagerRef","useRef","stateObserverRef","actionExecutorRef","mcpConnectionRef","registeredComponentsRef","registerComponent","useCallback","componentId","current","unregisterComponent","delete","useEffect","handleContextChange","handleMCPMessage","async","prev","stopListening","connectChat","contextValue","startListening","executeAction","getComponentValue","isDevelopment","process","env","NODE_ENV","React","Provider","createElement","DevOverlay","position","bottom","right","background","color","padding","borderRadius","fontSize","zIndex","fontFamily","useContext"],"mappings":"uWAKA,MA8DMA,EAAcC,EAAAA,cAAuC,MAY3D,MAAMC,EAAN,WAAAC,GACYC,KAAAC,aAAoC,KACpCD,KAAAE,cAAyC,KACzCF,KAAAG,WAAkC,KAClCH,KAAAI,UAAgC,KAChCJ,KAAAK,WAAsC,KACtCL,KAAAM,YAAoD,IAkGhE,CAhGI,kBAAMC,GACF,GAAIP,KAAKC,aAAc,OAEvB,MAAMO,EAAoBC,OAAOC,cAAiBD,OAAeE,mBACjEX,KAAKC,aAAe,IAAIO,EAAkB,CACtCI,YAAa,cACbC,WAAY,aAGVb,KAAKC,aAAaa,aAAaC,UA3FpB,wBA4FjBf,KAAKE,cAAgB,IAAIc,iBAAiBhB,KAAKC,aAAc,oBAC7DD,KAAKE,cAAce,QAAQjB,KAAKC,aAAaiB,mBAEvClB,KAAKC,aAAakB,QAC5B,CAEA,qBAAMC,CAAgBC,GAClBrB,KAAKM,YAAce,EAEnBrB,KAAKI,gBAAkBkB,UAAUC,aAAaC,aAAa,CACvDC,MAAO,CACHC,kBAAkB,EAClBC,kBAAkB,KAI1B,MAAMnB,EAAoBC,OAAOC,cAAiBD,OAAeE,mBACjEX,KAAKG,WAAa,IAAIK,EAAkB,CAAEK,WAAY,aAEhDb,KAAKG,WAAWW,aAAaC,UA9GrB,yBA+Gdf,KAAKK,WAAa,IAAIW,iBAAiBhB,KAAKG,WAAY,iBAExDH,KAAKK,WAAWuB,KAAKC,UAAaC,IAC1B9B,KAAKM,aACLN,KAAKM,YAAYwB,EAAEC,OAI3B,MAAMC,EAAShC,KAAKG,WAAW8B,wBAAwBjC,KAAKI,WACtD8B,EAAOlC,KAAKG,WAAWgC,aAC7BD,EAAKE,KAAKC,MAAQ,EAElBL,EAAOf,QAAQjB,KAAKK,YACpBL,KAAKK,WAAWY,QAAQiB,GACxBA,EAAKjB,QAAQjB,KAAKG,WAAWe,YACjC,CAEA,cAAAoB,GACQtC,KAAKI,YACLJ,KAAKI,UAAUmC,YAAYC,QAAQC,GAASA,EAAMC,QAClD1C,KAAKI,UAAY,MAEjBJ,KAAKG,aACLH,KAAKG,WAAWwC,QAChB3C,KAAKG,WAAa,MAEtBH,KAAKK,WAAa,KAClBL,KAAKM,YAAc,IACvB,CAEA,SAAAsC,CAAUC,GACN,IAAK7C,KAAKE,gBAAkBF,KAAKC,aAAc,OAE/C,MAAM6C,EAAQ,IAAIC,WAAWF,GACvBG,EAAU,IAAIC,aAAaH,EAAMI,QACvC,IAAK,IAAIC,EAAI,EAAGA,EAAIL,EAAMI,OAAQC,IAC9BH,EAAQG,GAAKL,EAAMK,GAAK,MAG5B,MAAMC,EAAmBpD,KAAKC,aAAaY,WAG3C,IAAIwC,EAASL,EACb,GAHwB,OAGAI,EAAkB,CACtC,MAAME,EAAQF,EAJM,KAKdG,EAAY,IAAIN,aAAaD,EAAQE,OAASI,GACpD,IAAK,IAAIH,EAAI,EAAGA,EAAIH,EAAQE,OAAQC,IAAK,CACrC,MAAMK,EAAUL,EAAIG,EACpB,IAAK,IAAIG,EAAI,EAAGA,EAAIH,EAAOG,IACvBF,EAAUC,EAAUC,GAAKT,EAAQG,EAEzC,CACAE,EAASE,CACb,CAEAvD,KAAKE,cAAc0B,KAAK8B,YAAYL,EAAQ,CAACA,EAAOM,QACxD,CAEA,OAAAC,GACI5D,KAAKsC,iBACDtC,KAAKC,eACLD,KAAKC,aAAa0C,QAClB3C,KAAKC,aAAe,MAExBD,KAAKE,cAAgB,IACzB,EAiBJ,MAAM2D,EAWF,WAAA9D,CAAY+D,EAAoBC,GARxB/D,KAAAgE,UAAgC,GAChChE,KAAAiE,YAAmB,KACnBjE,KAAAkE,eAAwC,KACxClE,KAAAmE,mBAAqD,IAAIC,IACzDpE,KAAAqE,wBAAuC,IAAIC,IAC3CtE,KAAAuE,oBAA8B,EAC9BvE,KAAAwE,iBAA2B,EAG/BxE,KAAK8D,OAASA,EACd9D,KAAK+D,gBAAkBA,CAC3B,CAGA,KAAAU,GACIC,QAAQC,IAAI,yDAGZ3E,KAAK4E,sBACL5E,KAAK6E,yBAELH,QAAQC,IAAI,+DAEhB,CAGA,uBAAAG,GACS9E,KAAKuE,qBACNG,QAAQC,IAAI,kFACZ3E,KAAKuE,oBAAqB,EAC1BvE,KAAKwE,iBAAkB,EAIvBxE,KAAK+E,2BAEb,CAEQ,wBAAAA,GACJ,MAAMC,EAAoB,CACtB,CAAEC,MAAO,IAAKC,KAAM,aACpB,CAAED,MAAO,IAAKC,KAAM,SACpB,CAAED,MAAO,KAAMC,KAAM,SAGzB,IAAIC,EAAmB,EACnBC,GAA4B,EAEhCJ,EAAkBxC,QAAQ,CAAC6C,EAASC,KAChCC,WAAW,KACPb,QAAQC,IAAI,0CAA0CW,EAAQ,MAAMD,EAAQH,YAAYG,EAAQJ,WAGhG,MACMO,EADaxF,KAAKyF,8BACQC,KAEhChB,QAAQC,IAAI,6BAA6Ba,yBAAoCL,MAG7E,MAAMQ,EAA2B,IAAVL,EACjBM,EAAmBJ,EAAeL,EAClCU,EAAgBP,IAAUN,EAAkB9B,OAAS,EAMvDyC,GAAkBC,GAAoBC,GAClCD,IACAlB,QAAQC,IAAI,iDAAgDa,EAAeL,IAC3EC,GAA4B,GAGhCpF,KAAK8F,kBAAkBH,EAAiB,eAAiB,sBAEzDjB,QAAQC,IAAI,wDAGhBQ,EAAmBK,EAGfK,IACAnB,QAAQC,IAAI,2DAA2Da,KACnEJ,GACAV,QAAQC,IAAI,qEAGrBU,EAAQJ,QAEnB,CAEA,IAAAvC,GACI1C,KAAKgE,UAAUxB,QAAQuD,GAAOA,EAAIC,cAClChG,KAAKgE,UAAY,GACbhE,KAAKkE,gBACL+B,aAAajG,KAAKkE,eAE1B,CAEQ,mBAAAU,GAGJnE,OAAOyF,iBAAiB,WAAY,KAEhClG,KAAK8F,kBAAkB,gBAG3B,MAAMK,EAAoBC,QAAQC,UAAUC,KAAKF,SAC3CG,EAAuBH,QAAQI,aAAaF,KAAKF,SAEvDA,QAAQC,UAAY,CAACtE,EAAW0E,EAAgBC,KAC5CP,EAAkBpE,EAAM0E,EAAQC,GAEhC1G,KAAK8F,kBAAkB,eAG3BM,QAAQI,aAAe,CAACzE,EAAW0E,EAAgBC,KAC/CH,EAAqBxE,EAAM0E,EAAQC,GAEnC1G,KAAK8F,kBAAkB,cAE/B,CAEQ,sBAAAjB,GACJ,IAAI8B,GAAmB,EAEvB,MAAMC,EAAW,IAAIC,iBAAkBC,IACnC,IAAIC,GAAoB,EACpBC,GAAoB,EAExB,IAAK,MAAMC,KAAYH,EAAW,CAE9B,GAAsB,eAAlBG,EAASC,MAAoD,eAA3BD,EAASE,cAAgC,CAC3E,MACMC,EADSH,EAASI,OACHC,aAAa,cAC9BF,IAAUA,EAAMG,SAAS,WAAaH,EAAMG,SAAS,SAAWH,EAAMG,SAAS,WAE/EP,GAAoB,EAE5B,CAEA,GAAIC,EAASO,WAAWtE,OAAS,GAAK+D,EAASQ,aAAavE,OAAS,EACjE,IAAK,MAAMwE,KAAQC,MAAMC,KAAKX,EAASO,YACnC,GAAIE,aAAgBG,YAAa,EAEO,OAAjBH,EAAKI,SACH,UAAjBJ,EAAKI,SACqB,OAA1BJ,EAAKK,QAAQ,UACgB,OAA7BL,EAAKM,cAAc,SAInBhB,GAAoB,GAGpBhH,KAAKiI,qBAAqBP,KAE1BX,GAAoB,EAE5B,CAGZ,CAEA,GAAIA,GAAqBC,EAAmB,CACpChH,KAAKkE,gBACL+B,aAAajG,KAAKkE,gBAItB,MAAMe,EAAQ+B,EAAoB,IAAM,IAExChH,KAAKkE,eAAiBqB,WAAW,KAE7BvF,KAAK8F,kBAAkB,cAGnBkB,IAAsBL,IACtBA,GAAmB,EACnBpB,WAAW,KAEPvF,KAAK8F,kBAAkB,sBACvBa,GAAmB,GACpB,OAER1B,EACP,IAIJ2B,EAASsB,QAAQC,SAASC,KAAM,CAC5BC,WAAW,EACXC,SAAS,EACTC,YAAY,EACZC,gBAAiB,CAAC,gBAGtBxI,KAAKgE,UAAUyE,KAAK7B,EACxB,CAEQ,oBAAAqB,CAAqBS,GACzB,MAAMC,EAAMD,EAAQZ,QAAQc,cACtBC,EAAOH,EAAQpB,aAAa,QAC5BwB,EAAYJ,EAAQI,UAAUF,cAEpC,GAAY,WAARD,GAA6B,WAATE,GAA8B,UAATA,EAAkB,OAAO,EACtE,GAAa,SAATA,GAA4B,YAATA,EAAoB,OAAO,EAClD,GAAY,SAARF,EAAgB,OAAO,EAC3B,GAAIG,EAAUvB,SAAS,UAAYuB,EAAUvB,SAAS,UAAW,OAAO,EACxE,GAAIuB,EAAUvB,SAAS,YAAcuB,EAAUvB,SAAS,SAAU,OAAO,EACzE,GAAIuB,EAAUvB,SAAS,QAAS,OAAO,EAGvC,OADgBmB,EAAQK,iBAAiB,mCAC7B7F,OAAS,CAGzB,CAGQ,iBAAA4C,CAAkBkD,GAGtB,MAAMC,EAAajJ,KAAKyF,8BAClByD,EAAcvB,MAAMC,KAAKqB,EAAWE,UACpCC,EAAe,IAAI9E,IAAI4E,EAAYG,IAAIC,GAAMA,EAAGC,WAEtD7E,QAAQC,IAAI,4BAA4BuE,EAAYhG,+BAEpD,MAAMsG,EAAW,CACbC,MAAOhJ,OAAOiJ,SAASC,SACvBC,MAAOzB,SAASyB,OAGpB,IAAIC,EAAc,KAIlB,GAAgB,eAAZb,GAAwC,iBAAZA,GAAoE,IAAtChJ,KAAKqE,wBAAwBqB,KAGvF1F,KAAKqE,wBAA0B+E,EAE/BS,EAAS,CACL3C,KAAM,iBACN8B,UACAc,KAAMN,EACNO,SAAUb,EAAYG,IAAIC,IAAE,CACxBC,SAAUD,EAAGC,SACbS,SAAUV,EAAGU,SACb9C,KAAMoC,EAAGpC,KACT+C,QAASX,EAAGW,QACZ1B,WAAYvI,KAAKkK,0BAA0BZ,EAAGf,oBAMrD,CACD,MAAM4B,EAAcjB,EAAYkB,OAAOd,IAAOtJ,KAAKqE,wBAAwBgG,IAAIf,EAAGC,WAC5Ee,EAAmB3C,MAAMC,KAAK5H,KAAKqE,yBAAyB+F,OAAOG,IAAQnB,EAAaiB,IAAIE,IAIlE,IAA5BD,EAAiBpH,QAAgBiH,EAAYjH,OAAS,GAItDiH,EAAY3H,QAAQ8G,GAAMtJ,KAAKqE,wBAAwBmG,IAAIlB,EAAGC,WAE9DM,EAAS,CACL3C,KAAM,iBACN8B,UACAc,KAAMN,EACNO,SAAUI,EAAYd,IAAIC,IAAE,CACxBC,SAAUD,EAAGC,SACbS,SAAUV,EAAGU,SACb9C,KAAMoC,EAAGpC,KACT+C,QAASX,EAAGW,QACZ1B,WAAYvI,KAAKkK,0BAA0BZ,EAAGf,kBAMjD+B,EAAiBpH,OAAS,GAAKiH,EAAYjH,OAAS,KAGzDlD,KAAKqE,wBAA0B+E,EAE/BS,EAAS,CACL3C,KAAM,iBACN8B,UACAc,KAAMN,EACNO,SAAUb,EAAYG,IAAIC,IAAE,CACxBC,SAAUD,EAAGC,SACbS,SAAUV,EAAGU,SACb9C,KAAMoC,EAAGpC,KACT+C,QAASX,EAAGW,QACZ1B,WAAYvI,KAAKkK,0BAA0BZ,EAAGf,gBAI9D,CAGIsB,IACAA,EAAOY,WAAY,IAAIC,MAAOC,cAC9Bd,EAAOe,SAAW,CACdC,MAAOpK,OAAOqK,WACdC,OAAQtK,OAAOuK,YACfC,QAASxK,OAAOwK,QAChBC,QAASzK,OAAOyK,SAGpBlL,KAAK+D,gBAAgB8F,EAAQb,GAIrC,CAEQ,iBAAAmC,CAAkBC,GACtB,IAAKpL,KAAKiE,YAAa,OAAO,EAE9B,GAAImH,EAAWrB,SAAS7G,SAAWlD,KAAKiE,YAAY8F,SAAS7G,OAAQ,OAAO,EAC5E,GAAIkI,EAAWtB,MAAML,QAAUzJ,KAAKiE,YAAY6F,MAAML,MAAO,OAAO,EAEpE,MAAM4B,EAAe,IAAI/G,IAAI8G,EAAWrB,SAASV,IAAKvH,GAAWA,EAAEyH,WAC7D+B,EAAe,IAAIhH,IAAItE,KAAKiE,YAAY8F,SAASV,IAAKvH,GAAWA,EAAEyH,WAEzE,GAAI8B,EAAa3F,OAAS4F,EAAa5F,KAAM,OAAO,EAEpD,IAAK,MAAM6E,KAAOc,EACd,IAAKC,EAAajB,IAAIE,GAAM,OAAO,EAGvC,OAAO,CACX,CAEQ,2BAAA9E,GACJ,MAAMsE,EAAW,IAAI3F,IAuCrB,MArCkB,CACd,SACA,qBACA,sBACA,yBACA,uBACA,oBACA,oBACA,uBACA,yBACA,sBACA,WACA,SACA,UACA,kBACA,oBACA,sBACA,YAEA,8CACA,gDACA,4BAGM5B,QAAQ+G,IACApB,SAASY,iBAAiBQ,GAClC/G,QAAQ,CAAC8G,EAAIhE,KACf,GAAIgE,aAAczB,aAAe7H,KAAKuL,UAAUjC,KAAQtJ,KAAKwL,UAAUlC,GAAK,CACxE,MAAML,EAAajJ,KAAKyL,mBAAmBnC,EAAmBC,EAAUjE,GACpE2D,GACAc,EAAS2B,IAAIzC,EAAWM,SAAUN,EAE1C,MAIRjJ,KAAKmE,mBAAqB4F,EACnBA,CACX,CAEQ,SAAAwB,CAAUjC,GACd,MAAMqC,EAAQlL,OAAOmL,iBAAiBtC,GACtC,MAAyB,SAAlBqC,EAAME,SACY,WAArBF,EAAMG,YACY,MAAlBH,EAAMI,SACc,OAApBzC,EAAG0C,YACX,CAEQ,SAAAR,CAAUlC,GAEd,OADyBtJ,KAAK8D,OAAOmI,aAAaC,kBAAoB,IAC9CC,KAAK5C,GAAYD,EAAG8C,QAAQ7C,GACxD,CAGQ,kBAAAkC,CAAmBnC,EAAiB+C,EAAsB/G,GAC9D,MAAMqD,EAAMW,EAAGxB,QAAQc,cAEvB,IAAIW,EAAW8C,EACf,GAAI/C,EAAGgD,GACH/C,EAAW,IAAID,EAAGgD,UACf,GAAIhD,EAAGR,UAAW,CACrB,MAAMyD,EAAUjD,EAAGR,UAAU0D,MAAM,KAAKpC,OAAOqC,GAAKA,EAAEC,QAAQC,MAAM,EAAG,GAAGC,KAAK,KAC3EL,IACAhD,EAAW,GAAGZ,KAAO4D,IAE7B,CAEA,MAAMM,EAAoB,GAAGtD,iBAAwBjE,EAAQ,KACvD0E,EAAWhK,KAAK8M,yBAAyBxD,GAE/C,IAAIpC,EAAkC,QAClC+C,EAAoB,GAExB,GAAY,WAARtB,GAAgD,WAA5BW,EAAGhC,aAAa,QACpCJ,EAAO,SACP+C,EAAU,CAAC,cACR,GAAgC,aAA5BX,EAAGhC,aAAa,QACvBJ,EAAO,SACP+C,EAAU,CAAC,cACR,GAAY,UAARtB,EAAiB,CACxB,MAAMoE,EAAazD,EAAwBpC,KAGrC8F,EAAmB1D,EAAG2D,aAAa,uBACnCC,EAAyC,aAA5B5D,EAAGhC,aAAa,QAC7B6F,EAAsB7D,EAAG2D,aAAa,qBAExCD,IAAqBE,GAAcC,IAEnCjG,EAAO,SACP+C,EAAU,CAAC,uBAAwB,YAAa,aAChDvF,QAAQC,IAAI,wCAAwCqF,OAC/B,aAAd+C,GACP7F,EAAO,WACP+C,EAAU,CAAC,YAEX/C,EAAO,QACP+C,EAAU,CAAC,YAAa,aAEhC,KAAmB,aAARtB,GACPzB,EAAO,WACP+C,EAAU,CAAC,YAAa,cACT,WAARtB,GACPzB,EAAO,SACP+C,EAAU,CAAC,YAAa,YAAa,yBACtB,MAARtB,IACPzB,EAAO,OACP+C,EAAU,CAAC,UAGf,MAAM1B,EAAkC,CACpCI,MACA2D,GAAIhD,EAAGgD,IAAM,KACbxD,UAAWQ,EAAGR,WAAa,KAC3B5D,KAAMoE,EAAGhC,aAAa,SAAW,KACjC8F,YAAa9D,EAAGhC,aAAa,gBAAkB,KAC/C+F,UAAW/D,EAAGhC,aAAa,eAAiB,KAC5CsC,MAAON,EAAGhC,aAAa,UAAY,KACnCJ,KAAMoC,EAAGhC,aAAa,SAAW,MAI/BgG,EAAmBhE,EAAGhC,aAAa,uBACnCiG,EAAcjE,EAAGhC,aAAa,qBAEpC,GAAIgG,EAAkB,CAClB,MAAME,EAAUF,EAAiBd,MAAM,OAAOpC,OAAOqD,GAAKA,EAAEf,QAC5DnE,EAAWmF,cAAgBF,EAC3BjF,EAAWgF,YAAcA,EAEzB7I,QAAQC,IAAI,mCAAmC4I,WAAqBC,EAAQtK,kBAGxEsK,EAAQtK,OAAS,IACDsK,EAAQb,MAAM,EAAG,GAAGC,KAAK,MAC5BY,EAAQtK,OAAS,GAAUsK,EAAQtK,OAGxD,CAEA,MAAO,CACHqG,SAAUsD,EACV7C,WACA9C,OACA+C,UACA1B,aACAoF,WAAYrE,EAEpB,CAEQ,wBAAAwD,CAAyBxD,GAC7B,MAAMsE,EAAkB,GAGlBP,EAAY/D,EAAGhC,aAAa,cAClC,GAAI+F,EACA,OAAOA,EAIX,MAAMQ,EAAOvE,EAAGwE,aAAapB,OACzBmB,GAAQA,EAAK3K,OAAS,IACtB0K,EAAMnF,KAAKoF,GAIf,MAAMT,EAAc9D,EAAGhC,aAAa,eAChC8F,GACAQ,EAAMnF,KAAK,gBAAgB2E,KAI/B,MAAMxD,EAAQN,EAAGhC,aAAa,SAC1BsC,GACAgE,EAAMnF,KAAK,UAAUmB,KAIzB,MAAM1E,EAAOoE,EAAGhC,aAAa,QACzBpC,GACA0I,EAAMnF,KAAK,SAASvD,KAIxB,MAAMgC,EAAOoC,EAAGhC,aAAa,QACvBqB,EAAMW,EAAGxB,QAAQc,cACnB1B,EACA0G,EAAMnF,KAAK,GAAGvB,KAAQyB,KAEtBiF,EAAMnF,KAAKE,GAIf,MAAMvB,EAAQpH,KAAK+N,gBAAgBzE,GAC/BlC,GACAwG,EAAMI,QAAQ,IAAI5G,MAItB,MAAMsG,EAAgBpE,EAAGhC,aAAa,uBACtC,GAAIoG,EAAe,CACf,MAAMF,EAAUE,EAAclB,MAAM,OAAOpC,OAAOqD,GAAKA,EAAEf,QACzD,GAAIc,EAAQtK,OAAS,EAAG,CACpB,MAAM+K,EAAUT,EAAQb,MAAM,EAAG,GAAGC,KAAK,MACnCsB,EAAOV,EAAQtK,OAAS,EAAI,MAAMsK,EAAQtK,OAAS,UAAY,GACrE0K,EAAMnF,KAAK,aAAawF,IAAUC,KACtC,CACJ,CAGA,OAAON,EAAMhB,KAAK,QAAU,iBAChC,CACQ,eAAAmB,CAAgBzE,GACpB,IAAI6E,EAAS7E,EAAG8E,cAChB,KAAOD,GAAQ,CACX,GAAqC,UAAjCA,EAAOrG,QAAQc,cACf,OAAOuF,EAAOL,aAAapB,QAAU,KAGzC,GADAyB,EAASA,EAAOC,cACZD,IAAWhG,SAASC,KAAM,KAClC,CAEA,GAAIkB,EAAGgD,GAAI,CACP,MAAMlF,EAAQe,SAASH,cAAc,cAAcsB,EAAGgD,QACtD,GAAIlF,EACA,OAAOA,EAAM0G,aAAapB,QAAU,IAE5C,CAEA,OAAO,IACX,CAEQ,eAAA2B,CAAgBpF,GACpB,MAAMqF,EAAc7N,OAAOiJ,SAASC,SAC9B4E,EAAcvO,KAAK8D,OAAO0K,MAAMC,KAAKC,GAAKA,EAAEjF,QAAU6E,GAE5D,MAAO,CACH7D,WAAW,IAAIC,MAAOC,cACtBb,KAAMyE,EAAc,CAChB9E,MAAO8E,EAAY9E,MACnBG,MAAO2E,EAAY3E,OAAS0E,GAC5B,CACA7E,MAAO6E,EACP1E,MAAOzB,SAASyB,OAEpBG,SAAUpC,MAAMC,KAAKqB,EAAWE,UAAUE,IAAIC,IAAE,CAC5CC,SAAUD,EAAGC,SACbS,SAAUV,EAAGU,SACb9C,KAAMoC,EAAGpC,KACT+C,QAASX,EAAGW,QACZ1B,WAAYvI,KAAKkK,0BAA0BZ,EAAGf,eAElDqC,SAAU,CACNC,MAAOpK,OAAOqK,WACdC,OAAQtK,OAAOuK,YACfC,QAASxK,OAAOwK,QAChBC,QAASzK,OAAOyK,SAG5B,CAEQ,yBAAAhB,CAA0ByE,GAC9B,MAAMC,EAAW,IAAKD,GAChBE,EAAU7O,KAAK8D,OAAO+K,SAAW,CAAA,EAElCA,EAAQC,iBAAqC,aAAlBF,EAAS1H,OACrC0H,EAASvM,MAAQ,cAGrB,MAAM0M,EAAiBF,EAAQE,gBAAkB,GACjD,IAAK,MAAMC,KAAOJ,EAAU,CACxB,MAAMvM,EAAQuM,EAASI,GACvB,GAAqB,iBAAV3M,EACP,IAAK,MAAM4M,KAAWF,EAAgB,CAElC,GADc,IAAIG,OAAOD,EAAS,KACxBE,KAAK9M,GAAQ,CACnBuM,EAASI,GAAO,aAChB,KACJ,CACJ,CAER,CAEA,OAAOJ,CACX,CAGA,0BAAAQ,CAA2BC,GACvB3K,QAAQC,IAAI,oCAAoC0K,MAChD3K,QAAQC,IAAI,oCAAoC3E,KAAKmE,mBAAmBuB,QAGxE,MAAM4J,EAAaD,EAAME,MAAM,qBAC/B,IAAIC,EAAaH,EACbI,EAA6B,KAE7BH,IACAE,EAAaF,EAAW,GAAG5C,OAC3B+C,EAAcC,SAASJ,EAAW,GAAI,IACtC5K,QAAQC,IAAI,qCAAqC6K,YAAqBC,MAI1E,MAAME,EAAeN,EAAME,MAAM,gFACjC,GAAII,IAAiBF,EAAa,CAC9B,MAAMG,EAAqC,CACvCC,MAAS,EAAGC,OAAU,EAAGC,MAAS,EAAGC,OAAU,EAAGC,MAAS,EAC3DC,MAAS,EAAGC,QAAW,EAAGC,OAAU,EAAGC,MAAS,EAAGC,MAAS,IAEhEd,EAAaG,EAAa,GAAGjD,OAC7B+C,EAAcG,EAAWD,EAAa,GAAG/G,eACzClE,QAAQC,IAAI,uCAAuC6K,YAAqBC,IAC5E,CAEA,GAAIzP,KAAKmE,mBAAmBuB,KAAO,EAAG,CAClChB,QAAQC,IAAI,qCACZ,IAAI4L,EAAQ,EACZ,IAAK,MAAOC,EAAG9H,KAAY1I,KAAKmE,mBAC5BO,QAAQC,IAAI,OAAO4L,OAAW7H,EAAQsB,oBAAoBtB,EAAQxB,QAE1E,CAGA,MAAMuJ,EAAajB,EAAW5G,cACxB8H,EAAkB1Q,KAAK2Q,gBAAgBnB,GACvCoB,EAAaF,EAAgBlE,MAAM,OAAOpC,OAAOyG,GAAKA,EAAE3N,OAAS,GAGjE4N,EAAsB9Q,KAAK+Q,kBAAkBN,EAAYG,GAC/DlM,QAAQC,IAAI,0CAA2CmM,GAKvDpM,QAAQC,IAAI,6DAEZ,IAAK,MAAMqM,KAAaF,EAAqB,CACzC,MAAMG,EAAajR,KAAKkR,qBAAqBF,GAC7C,GAAIC,EAEA,OADAvM,QAAQC,IAAI,qEAAqEqM,MAC1EC,CAEf,CAEAvM,QAAQC,IAAI,qDAKZD,QAAQC,IAAI,4DAEZ,MAAMwM,EAAgBnR,KAAKoR,oBAAoBX,EAAYC,GAC3D,GAAIS,EAEA,OADAzM,QAAQC,IAAI,+DACLwM,EAGXzM,QAAQC,IAAI,oDAKZD,QAAQC,IAAI,yEAEZ,MAAM0M,EAAiBrR,KAAKsR,mBAAmBb,EAAYG,EAAYE,GAEvE,GAA8B,IAA1BO,EAAenO,OAEf,OADAwB,QAAQC,IAAI,+DACL0M,EAAe,GAG1B,GAAIA,EAAenO,OAAS,EAAG,CAC3BwB,QAAQC,IAAI,mCAAmC0M,EAAenO,6CAG9D,MAAMqO,EAAgBvR,KAAKwR,oBAAoBH,EAAgBZ,EAAYK,EAAqBrB,GAChG,GAAI8B,EAEA,OADA7M,QAAQC,IAAI,8DACL4M,EAGX7M,QAAQC,IAAI,kEAChB,CAKAD,QAAQC,IAAI,sDAEZ,MAAM8M,EAAezR,KAAK0R,iBAAiBd,EAAYH,GAEvD,GAAIgB,EAAavO,OAAS,EAAG,CAGzB,GAFAwB,QAAQC,IAAI,kCAAkC8M,EAAavO,wBAE/B,IAAxBuO,EAAavO,OACb,OAAOuO,EAAa,GAAG/I,QAI3B,MAAMiJ,EAAO3R,KAAK4R,qBAAqBH,EAAchB,EAAYhB,GACjE,GAAIkC,EACA,OAAOA,CAEf,CAGA,OADAjN,QAAQmN,KAAK,0DAA0DxC,MAChE,IACX,CAKQ,eAAAsB,CAAgBmB,GACpB,OAAOA,EACFC,QAAQ,wIAAyI,IACjJA,QAAQ,WAAY,KACpBA,QAAQ,OAAQ,KAChBrF,OACA9D,aACT,CAKQ,iBAAAmI,CAAkBN,EAAoBG,GAC1C,MAAMoB,EAAa,IAAI1N,IAEjB2N,EAAe,CACjB,WAAY,YAAa,QAAS,WAAY,QAAS,UACvD,YAAa,WAAY,aAAc,YAAa,OACpD,WAAY,OAAQ,UAAW,MAAO,SAAU,QAChD,mBAAoB,mBAGxB,IAAK,MAAMC,KAASD,GACZxB,EAAWlJ,SAAS2K,IAAUzB,EAAWlJ,SAAS2K,EAAMH,QAAQ,IAAK,QACrEC,EAAWxH,IAAI0H,GACfF,EAAWxH,IAAI0H,EAAMH,QAAQ,IAAK,MAI1C,MAAMI,EAAYvB,EAAW,GAK7B,GAJIuB,GAAaA,EAAUjP,OAAS,GAChC8O,EAAWxH,IAAI2H,GAGfvB,EAAW1N,QAAU,EAAG,CACxB,MAAMkP,EAAoBxB,EAAWjE,MAAM,EAAG,GAAGC,KAAK,KACtDoF,EAAWxH,IAAI4H,GACfJ,EAAWxH,IAAIoG,EAAWjE,MAAM,EAAG,GAAGC,KAAK,IAC/C,CAEA,OAAOjF,MAAMC,KAAKoK,EACtB,CAKQ,oBAAAd,CAAqBF,GACzB,IAAK,MAAOR,EAAG9H,KAAY1I,KAAKmE,mBAAoB,CAChD,MAAMwK,EAAQjG,EAAQH,YAAc,CAAA,EAC9B8J,GAAY1D,EAAMzJ,MAAQ,IAAI0D,cAC9B0J,GAAU3D,EAAMrC,IAAM,IAAI1D,cAEhC,GAAIyJ,IAAarB,GAAasB,IAAWtB,EAErC,OADAtM,QAAQC,IAAI,iDAAiD0N,WAAkBC,MACxE5J,EAMX,GAHuB2J,EAASN,QAAQ,QAAS,MACzBf,EAAUe,QAAQ,QAAS,IAI/C,OADArN,QAAQC,IAAI,iDAAiD0N,SAAgBrB,MACtEtI,CAEf,CAEA,OAAO,IACX,CAKQ,mBAAA0I,CAAoBX,EAAoBC,GAC5C,IAAK,MAAOF,EAAG9H,KAAY1I,KAAKmE,mBAAoB,CAChD,MAAMoO,EAAgB7J,EAAQsB,SAASpB,cACjC4J,EAAqBxS,KAAK2Q,gBAAgBjI,EAAQsB,UAExD,GAAIuI,IAAkB9B,GAAc+B,IAAuB9B,EAEvD,OADAhM,QAAQC,IAAI,2CAA2C+D,EAAQsB,aACxDtB,CAEf,CAEA,OAAO,IACX,CAKQ,kBAAA4I,CAAmBb,EAAoBG,EAAsBE,GACjE,MAAM1E,EAA+B,GAErC,IAAK,MAAOoE,EAAG9H,KAAY1I,KAAKmE,mBAAoB,CAChD,MAAMwK,EAAQjG,EAAQH,YAAc,CAAA,EAC9B8J,GAAY1D,EAAMzJ,MAAQ,IAAI0D,cAC9B0J,GAAU3D,EAAMrC,IAAM,IAAI1D,cAC1B2J,EAAgB7J,EAAQsB,SAASpB,cAEvC,IAAK,MAAMoI,KAAaF,EACpB,GAAIuB,EAAS9K,SAASyJ,IAAcsB,EAAO/K,SAASyJ,GAAY,CAC5D5E,EAAQ3D,KAAKC,GACbhE,QAAQC,IAAI,8CAA8CqM,UAAkBqB,GAAYC,MACxF,KACJ,EAGClG,EAAQ7E,SAASmB,IAAY6J,EAAchL,SAASkJ,KACrDrE,EAAQ3D,KAAKC,GACbhE,QAAQC,IAAI,6CAA6C8L,UAAmB/H,EAAQsB,aAE5F,CAEA,OAAOoC,CACX,CAKQ,mBAAAoF,CACJpF,EACAqE,EACAK,EACArB,GAIA,GAFA/K,QAAQC,IAAI,mCAAmCyH,EAAQlJ,qBAEnC,OAAhBuM,GAAwBA,EAAc,GAAKA,GAAerD,EAAQlJ,OAElE,OADAwB,QAAQC,IAAI,0CAA0C8K,KAC/CrD,EAAQqD,EAAc,GASjC,MAAMgD,EAAwBrG,EAAQ/C,IAAIX,IACtC,IAAIgK,EAAQ,EACZ,MAAMC,EAAoB,GACpBhE,EAAQjG,EAAQH,YAAc,CAAA,EAC9B8J,GAAY1D,EAAMzJ,MAAQ,IAAI0D,cAC9B0J,GAAU3D,EAAMrC,IAAM,IAAI1D,cAEhC,IAAK,MAAMoI,KAAaF,EAChBuB,IAAarB,GACb0B,GAAS,IACTC,EAAQlK,KAAK,cAAcuI,MACpBqB,EAAS9K,SAASyJ,KACzB0B,GAAS,IACTC,EAAQlK,KAAK,iBAAiBuI,MAG9BsB,IAAWtB,GACX0B,GAAS,IACTC,EAAQlK,KAAK,YAAYuI,MAClBsB,EAAO/K,SAASyJ,KACvB0B,GAAS,IACTC,EAAQlK,KAAK,eAAeuI,MAiBpC,OAbItI,EAAQsB,SAAS9G,OAAS,KAC1BwP,GAAS,IACTC,EAAQlK,KAAK,oBAGbgI,EAAWlJ,SAAS,UAA6B,UAAjBmB,EAAQxB,MAGjCuJ,EAAWlJ,SAAS,WAA8B,WAAjBmB,EAAQxB,QAFhDwL,GAAS,GACTC,EAAQlK,KAAK,eAMV,CAAEC,UAASgK,QAAOC,aAU7B,GAPAF,EAAOG,KAAK,CAACC,EAAGC,IAAMA,EAAEJ,MAAQG,EAAEH,OAElChO,QAAQC,IAAI,2CACZ8N,EAAOjQ,QAAQ,CAAC+M,EAAOwD,KACnBrO,QAAQC,IAAI,KAAKoO,EAAM,OAAOxD,EAAM7G,QAAQsB,sBAAsBuF,EAAMmD,UAAUnD,EAAMoD,QAAQ/F,KAAK,YAGrG6F,EAAOvP,OAAS,GAAKuP,EAAO,GAAGC,MAAQD,EAAO,GAAGC,MAAQ,IAEzD,OADAhO,QAAQC,IAAI,wDAAuD8N,EAAO,GAAGC,MAAQD,EAAO,GAAGC,QACxFD,EAAO,GAAG/J,QAGrB,MAAMsK,EAAaP,EAAOrI,OAAO6I,GAAKA,EAAEP,QAAUD,EAAO,GAAGC,OAC5D,GAA0B,IAAtBM,EAAW9P,OACX,OAAO8P,EAAW,GAAGtK,QAGzB,IAAK,MAAMsI,KAAaF,EAAqB,CACzC,MAAMoC,EAAYF,EAAWvE,KAAKwE,IACXA,EAAEvK,QAAQH,YAAY8E,WAAa,IAAIzE,cACzCuK,WAAWnC,IAGhC,GAAIkC,EAEA,OADAxO,QAAQC,IAAI,sDACLuO,EAAUxK,OAEzB,CAEA,MAAM0K,EAAaJ,EAAWvE,KAAKwE,GAAwB,UAAnBA,EAAEvK,QAAQxB,MAAuC,aAAnB+L,EAAEvK,QAAQxB,MAChF,OAAIkM,GAAc3C,EAAWlJ,SAAS,UAClC7C,QAAQC,IAAI,0DACLyO,EAAW1K,UAGtBhE,QAAQC,IAAI,+DACL8N,EAAO,GAAG/J,QACrB,CAKQ,gBAAAgJ,CAAiBd,EAAsBH,GAC3C,MAAMrE,EAAgE,GAEtE,IAAK,MAAOoE,EAAG9H,KAAY1I,KAAKmE,mBAAoB,CAChD,MACMkP,EADqBrT,KAAK2Q,gBAAgBjI,EAAQsB,UACfwC,MAAM,OAAOpC,OAAOyG,GAAKA,EAAE3N,OAAS,GAMvEoQ,EAJgB1C,EAAWxG,OAAOmJ,GACpCF,EAAclH,KAAKqH,GAAMA,EAAGjM,SAASgM,IAAOA,EAAGhM,SAASiM,KAG3BtQ,OAAS0N,EAAW1N,OAErD,GAAIoQ,GAAc,GAAK,CACnB,MAAMZ,EAAqB,IAAbY,EACdlH,EAAQ3D,KAAK,CAAEC,UAASgK,SAC5B,CACJ,CAGA,OADAtG,EAAQwG,KAAK,CAACC,EAAGC,IAAMA,EAAEJ,MAAQG,EAAEH,OAC5BtG,CACX,CAKQ,oBAAAwF,CACJxF,EACAqE,EACAhB,GAOA,OALA/K,QAAQC,IAAI,mCACZyH,EAAQO,MAAM,EAAG,GAAGnK,QAAQ,CAAC+M,EAAOwD,KAChCrO,QAAQC,IAAI,KAAKoO,EAAM,OAAOxD,EAAM7G,QAAQsB,sBAAsBuF,EAAMmD,WAGxD,OAAhBjD,GAAwBA,EAAc,GAAKA,GAAerD,EAAQlJ,OAC3DkJ,EAAQqD,EAAc,GAAG/G,QAG7B0D,EAAQ,GAAG1D,OACtB,EAGJ,MAAM+K,EAIF,WAAA1T,CAAY6G,EAA+B9C,GACvC9D,KAAK4G,SAAWA,EAChB5G,KAAK8D,OAASA,CAClB,CAEA,aAAM4P,CAAQC,EAAgBC,GAC1BlP,QAAQC,IAAI,sCAAuC,yEACnDD,QAAQC,IAAI,gCAAgCgP,MAC5CjP,QAAQC,IAAI,8BAA+BiP,GAE3C,IACI,IAAIC,EACJ,OAAQF,GACJ,IAAK,YACDjP,QAAQC,IAAI,2CACZkP,QAAe7T,KAAK8T,SAASF,EAAO5J,SAAU4J,EAAOvR,OACrD,MACJ,IAAK,uBACD,MAAM0R,EAAkBH,EAAOpG,UAAYoG,EAAOvR,MAAQ,CAACuR,EAAOvR,OAAS,IAC3E,GAA+B,IAA3B0R,EAAgB7Q,OAChB,MAAM,IAAI8Q,MAAM,kDAEpBtP,QAAQC,IAAI,qDACZkP,QAAe7T,KAAKiU,mBAAmBL,EAAO5J,SAAU+J,GACxD,MACJ,IAAK,QACDrP,QAAQC,IAAI,yCACZkP,QAAe7T,KAAKkU,MAAMN,EAAO5J,UACjC,MACJ,IAAK,SACDtF,QAAQC,IAAI,yCACZkP,QAAe7T,KAAKmU,OAAOP,EAAO5J,UAClC,MACJ,IAAK,WACDtF,QAAQC,IAAI,2CACZkP,QAAe7T,KAAKoU,SAASR,EAAOnK,OACpC,MACJ,QACI,MAAM,IAAIuK,MAAM,mBAAmBL,KAK3C,OAFAjP,QAAQC,IAAI,+BAAgC,yEAC5CD,QAAQC,IAAI,2BAA4BkP,GACjCA,CAEX,CAAE,MAAOQ,GAGL,OAFA3P,QAAQ2P,MAAM,6BAA8B,yEAC5C3P,QAAQ2P,MAAM,kCAAmCA,GAC1C,CAAEC,SAAS,EAAOD,MAAOA,EAAME,QAC1C,CACJ,CAIQ,cAAMT,CAAS9J,EAAkB3H,GACrC,MAAM4G,EAAajJ,KAAK4G,SAASwI,2BAA2BpF,GAC5D,IAAKf,EACD,MAAM,IAAI+K,MAAM,sBAAsBhK,KAG1C,MAAMtB,EAAUO,EAAW0E,WAE3B,IAAKxF,SAASqM,SAAS9L,GACnB,MAAM,IAAIsL,MAAM,6BAA6BhK,KAGjD,GAAItB,aAAmB+L,kBAAoB/L,aAAmBgM,qBAAuBhM,aAAmBiM,kBAAmB,CAIvH,MAAMC,EAAoBC,OAAOC,yBAAyBpM,EAAQ3I,YAAYgV,UAAW,UAAUrJ,IAcnG,OAbIkJ,EACAA,EAAkBI,KAAKtM,EAASrG,GAGhCqG,EAAQrG,MAAQA,EAKpBqG,EAAQuM,cAAc,IAAIC,MAAM,QAAS,CAAEC,SAAS,EAAMC,YAAY,KACtE1M,EAAQuM,cAAc,IAAIC,MAAM,SAAU,CAAEC,SAAS,EAAMC,YAAY,KAEvE1Q,QAAQC,IAAI,2BAA2BqF,SAAgB3H,MAChD,CAAEiS,SAAS,EAAMtK,WAAU3H,QACtC,CAEA,MAAM,IAAI2R,MAAM,YAAYhK,gCAChC,CAEQ,WAAMkK,CAAMlK,GAGhB,MAAMf,EAAajJ,KAAK4G,SAASwI,2BAA2BpF,GAC5D,IAAKf,EACD,MAAM,IAAI+K,MAAM,sBAAsBhK,KAG1CtF,QAAQC,IAAI,sCAAsCsE,EAAWM,YAE7D,MAAMb,EAAUO,EAAW0E,WAE3B,IAAKxF,SAASqM,SAAS9L,GACnB,MAAM,IAAIsL,MAAM,6BAA6BhK,KAGjDtF,QAAQC,IAAI,yCAA0C+D,EAAQZ,QAASY,EAAQpB,aAAa,eAE5F,IACIoB,EAAQ2M,eAAe,CAAEC,SAAU,SAAUC,MAAO,iBAC9C,IAAIC,QAAQC,GAAWlQ,WAAWkQ,EAAS,MAEjD,IAGI,OAFA/M,EAAQwL,QACRxP,QAAQC,IAAI,gDAAgDqF,MACrD,CAAEsK,SAAS,EAAMtK,WAC5B,CAAE,MAAO0L,GACLhR,QAAQmN,KAAK,mEAAoE6D,EACrF,CAEA,MAAMC,EAAa,IAAIC,WAAW,QAAS,CACvCT,SAAS,EACTC,YAAY,EACZS,KAAMpV,OACNqV,OAAQ,EACRC,QAAS,EACTC,UAAU,IAKd,IAFmBtN,EAAQuM,cAAcU,GAGrC,MAAM,IAAI3B,MAAM,6BAIpB,OADAtP,QAAQC,IAAI,kDAAkDqF,MACvD,CAAEsK,SAAS,EAAMtK,WAE5B,CAAE,MAAOlI,GAEL,MADA4C,QAAQ2P,MAAM,mCAAoCvS,GAC5C,IAAIkS,MAAM,oBAAoBhK,OAAclI,IACtD,CACJ,CAEQ,YAAMqS,CAAOnK,GACjB,MAAMf,EAAajJ,KAAK4G,SAASwI,2BAA2BpF,GAC5D,IAAKf,EACD,MAAM,IAAI+K,MAAM,sBAAsBhK,KAG1C,MAAMtB,EAAUO,EAAW0E,WAE3B,IAAKxF,SAASqM,SAAS9L,GACnB,MAAM,IAAIsL,MAAM,6BAA6BhK,KAGjD,GAAItB,aAAmB+L,kBAAqC,aAAjB/L,EAAQxB,KAI/C,OAHAwB,EAAQuN,SAAWvN,EAAQuN,QAC3BvN,EAAQuM,cAAc,IAAIC,MAAM,SAAU,CAAEC,SAAS,KACrDzQ,QAAQC,IAAI,+BAA+BqF,QAAetB,EAAQuN,WAC3D,CAAE3B,SAAS,EAAMtK,WAAUiM,QAASvN,EAAQuN,SAGvD,MAAM,IAAIjC,MAAM,YAAYhK,6BAChC,CAQQ,wBAAMiK,CAAmBjK,EAAkBwD,GAC/C9I,QAAQC,IAAI,iDAAiDqF,eAAuBwD,GAEpF,MAAMvE,EAAajJ,KAAK4G,SAASwI,2BAA2BpF,GAC5D,IAAKf,EACD,MAAM,IAAI+K,MAAM,sBAAsBhK,KAG1C,MAAMtB,EAAUO,EAAW0E,WAE3B,IAAKxF,SAASqM,SAAS9L,GACnB,MAAM,IAAIsL,MAAM,6BAA6BhK,KAMjD,GAAItB,aAAmBiM,kBAAmB,CACtCjQ,QAAQC,IAAI,wDACZ,MAAMuR,EAA4B,GAElC,IAAK,MAAMC,KAAmB3I,EAAS,CACnC,IAAI4I,EAAcD,EACdE,EAAcF,EAElB,GAAIA,EAAgB5O,SAAS,KAAM,CAC/B,MAAMqG,EAAQuI,EAAgB3J,MAAM,KACpC6J,EAAczI,EAAM,GAAGlB,OACvB0J,EAAcxI,EAAM,IAAIlB,QAAU,EACtC,CAEA,MACM4J,EADiB3O,MAAMC,KAAKc,EAAQ8E,SACJiB,KAAK8H,IACvC,MAAMC,EAAWD,EAAIlU,MACfoU,EAAUF,EAAIzI,aAAapB,QAAU,GAC3C,OAAO8J,IAAaJ,GAChBI,IAAaJ,EAAYM,YACzBD,EAAQ7N,gBAAkByN,EAAYzN,gBAG9C,IAAK0N,EAAgB,CACjB5R,QAAQmN,KAAK,0CAA0CsE,MACvD,QACJ,CAEA,MAAMvB,EAAoBC,OAAOC,yBAAyBH,kBAAkBI,UAAW,UAAUrJ,IAC7FkJ,EACAA,EAAkBI,KAAKtM,EAAS4N,EAAejU,OAE/CqG,EAAQrG,MAAQiU,EAAejU,MAGnCqG,EAAQuM,cAAc,IAAIC,MAAM,QAAS,CAAEC,SAAS,KACpDzM,EAAQuM,cAAc,IAAIC,MAAM,SAAU,CAAEC,SAAS,KAErDe,EAAgBzN,KAAK0N,GACjBzN,EAAQiO,gBAAgB,IAAInB,QAAQC,GAAWlQ,WAAWkQ,EAAS,KAC3E,CAEA,GAA+B,IAA3BS,EAAgBhT,OAAc,MAAM,IAAI8Q,MAAM,sCAAsCxG,EAAQZ,KAAK,SAErG,MAAO,CAAE0H,SAAS,EAAMtK,WAAU4M,SAAUV,EAAiBW,UAAWrJ,EAASsJ,OAAQtJ,EAAQpD,OAAOqD,IAAMyI,EAAgB3O,SAASkG,IAC3I,CAKA,KAAM/E,aAAmB+L,kBACrB,MAAM,IAAIT,MAAM,sCAAsChK,KAG1D,MAAM+M,EAAcrO,EAGpB,IAAIsO,EAAgBD,EAAYhP,QAAQ,uBAOxC,GALKiP,IAAeA,EAAgBD,EAAYhP,QAAQ,yBACnDiP,IAAeA,EAAgBD,EAAYhP,QAAQ,4BACnDiP,IAAeA,EAAgBD,EAAYhP,QAAQ,yBACnDiP,IAAeA,EAAgBD,EAAYhP,QAAQ,uBAEnDiP,EACD,MAAM,IAAIhD,MAAM,mCAAmChK,KAIvD,IAAIiN,EAAcD,EAClB,IAAKC,EAAYC,UAAU1C,SAAS,uBAAwB,CACxD,MAAM2C,EAAgBF,EAAYlP,QAAQ,wBACtCoP,IACAF,EAAcE,EACdzS,QAAQC,IAAI,uEAEpB,CAGA,MAAMyS,EAAsBJ,EAAc1P,aAAa,wBAA0ByP,EAAYzP,aAAa,uBAC1G,GAAI8P,EAAqB,CACrB,MAAMC,EAAmBD,EAAoB5K,MAAM,OAAOpC,OAAOqD,GAAKA,EAAEf,QACxEhI,QAAQC,IAAI,0CAA0C0S,EAAiBnU,WAAYmU,EACvF,CAOA,MAAMC,EAAyD,aAArCP,EAAYzP,aAAa,SAC/CyP,EAAY9J,aAAa,sBACgC,OAAzD+J,EAAchP,cAAc,yBAG1BuP,EAAiF,OAAjEP,EAAchP,cAAc,kCACQ,OAAtDgP,EAAchP,cAAc,sBAG1BwP,EAA4E,OAA9DP,EAAYjP,cAAc,iCACgC,OAA1EiP,EAAYjP,cAAc,6CAC6C,OAAvEiP,EAAYjP,cAAc,0CACoB,YAA9C+O,EAAYzP,aAAa,iBAU7B,GARA5C,QAAQC,IAAI,gDAA+C2S,EAAoB,mBAC3EC,EAAgB,eACZC,EAAc,aAAe,YAMjCF,EAAmB,CACnB5S,QAAQC,IAAI,uDACZ,MAAMuR,EAA4B,GAElC,IAAK,MAAMuB,KAAejK,EAAS,CAE/BuJ,EAAYW,QACZX,EAAY9B,cAAc,IAAIC,MAAM,QAAS,CAAEC,SAAS,WAClD,IAAIK,QAAQC,GAAWlQ,WAAWkQ,EAAS,MACjDsB,EAAY7C,cACN,IAAIsB,QAAQC,GAAWlQ,WAAWkQ,EAAS,MAGjD,MAAMkC,EAAyB9C,OAAOC,yBAAyBrU,OAAOgU,iBAAiBM,UAAW,UAAUrJ,IACxGiM,EACAA,EAAuB3C,KAAK+B,EAAaU,GAEzCV,EAAY1U,MAAQoV,EAGxBV,EAAY9B,cAAc,IAAIC,MAAM,QAAS,CAAEC,SAAS,KACxD4B,EAAY9B,cAAc,IAAIC,MAAM,SAAU,CAAEC,SAAS,WACnD,IAAIK,QAAQC,GAAWlQ,WAAWkQ,EAAS,MAGjD,MAAMmC,EAAkB,CACpB,kBACA,0BACA,sBACA,mBACA,uBAGJ,IAAIC,EAAgC,KACpC,IAAK,MAAMtO,KAAYqO,EAAiB,CACpC,MAAME,EAAanQ,MAAMC,KAAKO,SAASY,iBAAiBQ,IACxD,IAAK,MAAMgN,KAAOuB,EACd,IAAKvB,EAAIzI,aAAapB,QAAU,IAAI9D,gBAAkB6O,EAAY7O,cAAe,CAC7EiP,EAAgBtB,EAChB,KACJ,CAEJ,GAAIsB,EAAe,KACvB,CAEKA,GAMJA,EAA8BxC,eAAe,CAAEE,MAAO,kBACjD,IAAIC,QAAQC,GAAWlQ,WAAWkQ,EAAS,MACjDoC,EAAc5C,cAAc,IAAIW,WAAW,YAAa,CAAET,SAAS,EAAMC,YAAY,EAAMS,KAAMpV,OAAQqV,OAAQ,WAC3G,IAAIN,QAAQC,GAAWlQ,WAAWkQ,EAAS,KAChDoC,EAA8B3D,cACzB,IAAIsB,QAAQC,GAAWlQ,WAAWkQ,EAAS,KACjDoC,EAAc5C,cAAc,IAAIW,WAAW,UAAW,CAAET,SAAS,EAAMC,YAAY,EAAMS,KAAMpV,OAAQqV,OAAQ,KAE/GI,EAAgBzN,KAAKgP,SACf,IAAIjC,QAAQC,GAAWlQ,WAAWkQ,EAAS,OAdzCkC,GAAwBA,EAAuB3C,KAAK+B,EAAa,GAe7E,CAGA,GADAA,EAAYgB,OACmB,IAA3B7B,EAAgBhT,OAAc,MAAM,IAAI8Q,MAAM,4CAA4CxG,EAAQZ,KAAK,SAC3G,MAAO,CAAE0H,SAAS,EAAMtK,WAAU4M,SAAUV,EAAiBW,UAAWrJ,EAASsJ,OAAQtJ,EAAQpD,OAAOqD,IAAMyI,EAAgB3O,SAASkG,IAC3I,CAKA,GAAI8J,EAAe,CACf7S,QAAQC,IAAI,mDACZD,QAAQC,IAAI,gDAGZ,MAAMqT,EAAoBhB,EAAchP,cAAc,iCAClDgQ,IACCA,EAAkC9D,cAC7B,IAAIsB,QAAQC,GAAWlQ,WAAWkQ,EAAS,OAIrDsB,EAAYW,QACZX,EAAY9B,cAAc,IAAIC,MAAM,QAAS,CAAEC,SAAS,KACxD4B,EAAY9B,cAAc,IAAIC,MAAM,QAAS,CAAEC,SAAS,EAAMC,YAAY,WACpE,IAAII,QAAQC,GAAWlQ,WAAWkQ,EAAS,MAGjD,MAAMwC,EAAUjB,EAAchP,cAAc,sBACxCiQ,IACCA,EAAwB/D,cACnB,IAAIsB,QAAQC,GAAWlQ,WAAWkQ,EAAS,OAIrDsB,EAAY9B,cAAc,IAAIiD,cAAc,UAAW,CAAElJ,IAAK,YAAamJ,KAAM,YAAaC,QAAS,GAAIjD,SAAS,EAAMC,YAAY,WAChI,IAAII,QAAQC,GAAWlQ,WAAWkQ,EAAS,MAEjD,MAAMS,EAA4B,GAClC,IAAK,MAAMuB,KAAejK,EAAS,CAE/B,IAAI6K,EAAiB1Q,MAAMC,KAAKO,SAASY,iBAAiB,gFAG1D,GAA8B,IAA1BsP,EAAenV,OAAc,CAC7B,MAAMoV,EAAanQ,SAASH,cAAc,yBACtCsQ,IAAYD,EAAiB1Q,MAAMC,KAAK0Q,EAAWvP,iBAAiB,sBAC5E,CAGA,GAA8B,IAA1BsP,EAAenV,OAAc,CAC7B,MAAMqV,EAAWvB,EAAchP,cAAc,uBACzCuQ,IAAUF,EAAiB1Q,MAAMC,KAAK2Q,EAASxP,iBAAiB,sBACxE,CAGA,IAAK,MAAMyP,KAASH,EAChB,IAAKG,EAAM1K,aAAapB,QAAU,IAAI9D,gBAAkB6O,EAAY7O,cAAe,CAC9E4P,EAAsBnD,eAAe,CAAEE,MAAO,kBACzC,IAAIC,QAAQC,GAAWlQ,WAAWkQ,EAAS,MAEjD+C,EAAMvD,cAAc,IAAIW,WAAW,YAAa,CAAET,SAAS,KAC1DqD,EAAsBtE,QACvBsE,EAAMvD,cAAc,IAAIW,WAAW,UAAW,CAAET,SAAS,KAEzDe,EAAgBzN,KAAKgP,SAEf,IAAIjC,QAAQC,GAAWlQ,WAAWkQ,EAAS,MACjD,KACJ,CAER,CAGA,GADAsB,EAAYgB,OACmB,IAA3B7B,EAAgBhT,OAAc,MAAM,IAAI8Q,MAAM,4CAA4CxG,EAAQZ,KAAK,SAC3G,MAAO,CAAE0H,SAAS,EAAMtK,WAAU4M,SAAUV,EAAiBW,UAAWrJ,EAASsJ,OAAQtJ,EAAQpD,OAAOqD,IAAMyI,EAAgB3O,SAASkG,IAC3I,CAKA,GAAI+J,EAAa,CACb9S,QAAQC,IAAI,iDACZ,MAAMuR,EAA4B,GAElC,IAAK,MAAMuB,KAAejK,EAAS,CAE/B,MAAMiL,EAAgBxB,EAAYjP,cAAc,6CAC5CiP,EAAYjP,cAAc,0CAC1BiP,EAAYjP,cAAc,uBAC1BiP,EAAYjP,cAAc,qBAE9B,IAAKyQ,EAAe,MAAM,IAAIzE,MAAM,uCAAuChK,KAG3EyO,EAAcxD,cAAc,IAAIW,WAAW,YAAa,CAAET,SAAS,EAAMC,YAAY,EAAMS,KAAMpV,OAAQsV,QAAS,KAClH0C,EAAcxD,cAAc,IAAIW,WAAW,UAAW,CAAET,SAAS,EAAMC,YAAY,EAAMS,KAAMpV,OAAQsV,QAAS,KAC/G0C,EAA8BvE,QAG/B,IAAIwE,EAA8B,KAClC,IAAK,IAAIvV,EAAI,EAAGA,EAAI,WACV,IAAIqS,QAAQC,GAAWlQ,WAAWkQ,EAAS,MACjDiD,EAAcvQ,SAASH,cAAc,qBACjCG,SAASH,cAAc,oCACvBG,SAASH,cAAc,uCACvB0Q,GALgBvV,KAQxB,IAAKuV,EAAa,MAAM,IAAI1E,MAAM,qCAAqChK,KAGvE,MACM2O,EADYhR,MAAMC,KAAK8Q,EAAY3P,iBAAiB,oCAC5B0F,KAAKmK,IAC9BA,EAAK9K,aAAapB,QAAU,IAAI9D,gBAAkB6O,EAAY7O,eAGnE,IAAK+P,EAAa,CAEd,MAAME,EAAW1Q,SAASH,cAAc,qBACpC6Q,EAAWA,EAAyB3E,QAAc/L,SAASC,KAAK8L,QACpE,QACJ,CAGCyE,EAA4BtD,eAAe,CAAEE,MAAO,kBAC/C,IAAIC,QAAQC,GAAWlQ,WAAWkQ,EAAS,MACjDkD,EAAY1D,cAAc,IAAIW,WAAW,YAAa,CAAET,SAAS,EAAMC,YAAY,EAAMS,KAAMpV,OAAQqV,OAAQ,WACzG,IAAIN,QAAQC,GAAWlQ,WAAWkQ,EAAS,KAChDkD,EAA4BzE,cACvB,IAAIsB,QAAQC,GAAWlQ,WAAWkQ,EAAS,KACjDkD,EAAY1D,cAAc,IAAIW,WAAW,UAAW,CAAET,SAAS,EAAMC,YAAY,EAAMS,KAAMpV,OAAQqV,OAAQ,KAE7GI,EAAgBzN,KAAKgP,SACf,IAAIjC,QAAQC,GAAWlQ,WAAWkQ,EAAS,KACrD,CAEA,GAA+B,IAA3BS,EAAgBhT,OAAc,MAAM,IAAI8Q,MAAM,0CAA0CxG,EAAQZ,KAAK,SACzG,MAAO,CAAE0H,SAAS,EAAMtK,WAAU4M,SAAUV,EAAiBW,UAAWrJ,EAASsJ,OAAQtJ,EAAQpD,OAAOqD,IAAMyI,EAAgB3O,SAASkG,IAC3I,CAKA,MAAM,IAAIuG,MAAM,0CAA0ChK,wEAC9D,CACQ,cAAMoK,CAAS3K,GACnB/E,QAAQC,IAAI,qCAAqC8E,KAEjD,IACI,OAAIzJ,KAAK8D,OAAOgV,YACZpU,QAAQC,IAAI,2DACN3E,KAAK8D,OAAOgV,WAAWrP,GAC7B/E,QAAQC,IAAI,iDACL,CAAE2P,SAAS,EAAM7K,WAG5B/E,QAAQC,IAAI,0DACZlE,OAAO2F,QAAQC,UAAU,CAAA,EAAI,GAAIoD,GACjChJ,OAAOwU,cAAc,IAAI8D,cAAc,WAAY,CAAEC,MAAO,CAAA,KAE5DtU,QAAQC,IAAI,0CACL,CAAE2P,SAAS,EAAM7K,SAE5B,CAAE,MAAO4K,GAEL,OADA3P,QAAQ2P,MAAM,wCAAyCA,GAChD,CAAEC,SAAS,EAAOD,MAAOA,EAAME,QAC1C,CACJ,EAOJ,MAAM0E,EASF,WAAAlZ,CAAY+D,EAAoBoV,EAAgCC,GARxDnZ,KAAAoZ,UAA8B,KAC9BpZ,KAAAqZ,QAA4B,KAC5BrZ,KAAAsZ,OAA2B,KAI3BtZ,KAAAuZ,mBAA6B,EAGjCvZ,KAAK8D,OAASA,EACd9D,KAAKkZ,UAAYA,EACjBlZ,KAAKmZ,aAAeA,CACxB,CAEA,OAAAlY,GACIjB,KAAKwZ,uBACT,CAEQ,qBAAAA,GACJ,MAAM9S,EAAM,IAAI+S,IAAIzZ,KAAK8D,OAAO4V,UAAU3H,QAAQ,OAAQ,MAAQ,YAC9D/R,KAAK8D,OAAO6V,QACZjT,EAAIkT,aAAalO,IAAI,SAAU1L,KAAK8D,OAAO6V,QAE/CjT,EAAIkT,aAAalO,IAAI,gBAAiB1L,KAAK8D,OAAO+V,eAElDnV,QAAQC,IAAI,mCAAmC+B,EAAIgQ,cAEnD1W,KAAKoZ,UAAY,IAAIU,UAAUpT,EAAIgQ,YAEnC1W,KAAKoZ,UAAUW,OAAS,KACpBrV,QAAQC,IAAI,6BACZ3E,KAAKga,aAELzU,WAAW,KACPvF,KAAKkZ,UAAU,CAAEhS,KAAM,4BACxB,MAGPlH,KAAKoZ,UAAUvX,UAAaoY,IACxB,IACI,MAAMlY,EAAOmY,KAAKC,MAAMF,EAAMlY,MAC9B2C,QAAQC,IAAI,yCAA0C5C,GAEpC,kBAAdA,EAAKmF,MACLxC,QAAQC,IAAI,yCACZ3E,KAAKkZ,UAAUnX,IACM,WAAdA,EAAKmF,MACZxC,QAAQC,IAAI,yDACZ3E,KAAKkZ,UAAUnX,KAEf2C,QAAQC,IAAI,kDAAmD5C,EAAKmF,MACpElH,KAAKkZ,UAAUnX,GAEvB,CAAE,MAAOD,GACL4C,QAAQ2P,MAAM,gCAAiCvS,EACnD,GAGJ9B,KAAKoZ,UAAUgB,QAAW/F,IACtB3P,QAAQ2P,MAAM,mCAAoCA,IAGtDrU,KAAKoZ,UAAUiB,QAAU,KACrB3V,QAAQC,IAAI,iCACZY,WAAW,IAAMvF,KAAKwZ,wBAAyB,KAEvD,CAEA,mBAAAc,GACI,MAAM5T,EAAM,IAAI+S,IAAIzZ,KAAK8D,OAAO4V,UAAU3H,QAAQ,OAAQ,MAAQ,UAC9D/R,KAAK8D,OAAO6V,QACZjT,EAAIkT,aAAalO,IAAI,SAAU1L,KAAK8D,OAAO6V,QAE/CjT,EAAIkT,aAAalO,IAAI,gBAAiB1L,KAAK8D,OAAO+V,eAElDnV,QAAQC,IAAI,iCAAiC+B,EAAIgQ,cAEjD1W,KAAKqZ,QAAU,IAAIS,UAAUpT,EAAIgQ,YACjC1W,KAAKqZ,QAAQkB,WAAa,cAE1Bva,KAAKqZ,QAAQU,OAAS,KAClBrV,QAAQC,IAAI,2BACZ3E,KAAKkZ,UAAU,CAAEhS,KAAM,qBAG3BlH,KAAKqZ,QAAQxX,UAAaoY,IAClBA,EAAMlY,gBAAgByY,aACtBxa,KAAKmZ,aAAavW,UAAUqX,EAAMlY,OAI1C/B,KAAKqZ,QAAQe,QAAW/F,IACpB3P,QAAQ2P,MAAM,uBAAwBA,IAG1CrU,KAAKqZ,QAAQgB,QAAU,KACnB3V,QAAQC,IAAI,+BACZ3E,KAAKkZ,UAAU,CAAEhS,KAAM,uBACvB3B,WAAW,KACHvF,KAAKoZ,WAAapZ,KAAKoZ,UAAUqB,aAAeX,UAAUY,MAC1D1a,KAAKsa,uBAEV,KAEX,CAGA,kBAAAK,GACI,MAAMjU,EAAM,IAAI+S,IAAIzZ,KAAK8D,OAAO4V,UAAU3H,QAAQ,OAAQ,MAAQ,SAC9D/R,KAAK8D,OAAO6V,QACZjT,EAAIkT,aAAalO,IAAI,SAAU1L,KAAK8D,OAAO6V,QAE/CjT,EAAIkT,aAAalO,IAAI,gBAAiB1L,KAAK8D,OAAO+V,eAElDnV,QAAQC,IAAI,gCAAgC+B,EAAIgQ,cAEhD1W,KAAKsZ,OAAS,IAAIQ,UAAUpT,EAAIgQ,YAEhC1W,KAAKsZ,OAAOS,OAAS,KACjBrV,QAAQC,IAAI,2BAGhB3E,KAAKsZ,OAAOzX,UAAaoY,IACrB,IACI,MAAMlY,EAAOmY,KAAKC,MAAMF,EAAMlY,MAC9B2C,QAAQC,IAAI,kCAAmC5C,GAE7B,eAAdA,EAAKmF,MACLxC,QAAQC,IAAI,2BACZ3E,KAAKkZ,UAAU,CAAEhS,KAAM,oBACF,YAAdnF,EAAKmF,KACZlH,KAAKkZ,UAAU,CACXhS,KAAM,eACN2B,KAAM,YACN+R,QAAS7Y,EAAK6Y,QACdnQ,UAAW1I,EAAK0I,YAEC,WAAd1I,EAAKmF,KACZlH,KAAKkZ,UAAU,CAAEhS,KAAM,cAAe2T,OAAQ9Y,EAAK8Y,SAC9B,UAAd9Y,EAAKmF,OACZxC,QAAQ2P,MAAM,sBAAuBtS,EAAKsS,OAC1CrU,KAAKkZ,UAAU,CAAEhS,KAAM,aAAcmN,MAAOtS,EAAKsS,QAEzD,CAAE,MAAOvS,GACL4C,QAAQ2P,MAAM,6BAA8BvS,EAChD,GAGJ9B,KAAKsZ,OAAOc,QAAW/F,IACnB3P,QAAQ2P,MAAM,gCAAiCA,IAGnDrU,KAAKsZ,OAAOe,QAAU,KAClB3V,QAAQC,IAAI,8BACZ3E,KAAKkZ,UAAU,CAAEhS,KAAM,sBACvB3B,WAAW,KACHvF,KAAKoZ,WAAapZ,KAAKoZ,UAAUqB,aAAeX,UAAUY,MAC1D1a,KAAK2a,sBAEV,KAEX,CAEA,UAAA3U,GACQhG,KAAKqZ,UACLrZ,KAAKqZ,QAAQ1W,QACb3C,KAAKqZ,QAAU,MAEfrZ,KAAKsZ,SACLtZ,KAAKsZ,OAAO3W,QACZ3C,KAAKsZ,OAAS,MAEdtZ,KAAKoZ,YACLpZ,KAAKoZ,UAAUzW,QACf3C,KAAKoZ,UAAY,KAEzB,CAEA,WAAA0B,CAAYC,EAAc/R,GAClBhJ,KAAKoZ,WAAapZ,KAAKoZ,UAAUqB,aAAeX,UAAUY,OAC1D1a,KAAKuZ,qBACL7U,QAAQC,IAAI,qCAAqC3E,KAAKuZ,+BAA+BvQ,eAAqB+R,EAAQhR,SAAS7G,UAE3HlD,KAAKoZ,UAAU4B,KAAKd,KAAKe,UAAU,CAC/B/T,KAAM,iBACN6T,UACA/R,aAGJtE,QAAQC,IAAI,gCAEpB,CAEA,SAAAuW,CAAUrY,GACF7C,KAAKqZ,SAAWrZ,KAAKqZ,QAAQoB,aAAeX,UAAUY,MACtD1a,KAAKqZ,QAAQ2B,KAAKnY,EAE1B,CAGA,eAAAsY,CAAgB5G,GACRvU,KAAKsZ,QAAUtZ,KAAKsZ,OAAOmB,aAAeX,UAAUY,MACpDhW,QAAQC,IAAI,kCAAkC4P,KAC9CvU,KAAKsZ,OAAO0B,KAAKd,KAAKe,UAAU,CAC5B/T,KAAM,UACN0T,QAASrG,MAGb7P,QAAQmN,KAAK,6CAErB,CAEQ,UAAAmI,GACAha,KAAKoZ,WAAapZ,KAAKoZ,UAAUqB,aAAeX,UAAUY,OAC1DhW,QAAQC,IAAI,8CACZ3E,KAAKoZ,UAAU4B,KAAKd,KAAKe,UAAU,CAC/B/T,KAAM,SACNpD,OAAQ9D,KAAK8D,UAEjBY,QAAQC,IAAI,+BAEpB,EASG,MAAMyW,EAA4C,EAAGtX,SAAQuX,eAChE,MAAOC,EAAaC,GAAkBC,EAAAA,UAAS,IACxCC,EAAaC,GAAkBF,EAAAA,UAAS,IACxCjN,EAAaoN,GAAkBH,EAAAA,SAAwB,OACvDI,EAAwBC,GAA6BL,EAAAA,UAAS,IAE9DM,EAAiBC,GAAsBP,EAAAA,UAAS,IAChDQ,EAAcC,GAAmBT,EAAAA,SAAwB,IAE1DU,EAAkBC,EAAAA,OAAqB,IAAIrc,GAC3Csc,EAAmBD,EAAAA,OAAmC,MACtDE,EAAoBF,EAAAA,OAA8B,MAClDG,EAAmBH,EAAAA,OAAiC,MACpDI,EAA0BJ,EAAAA,OAAiC,IAAI/X,KAE/DoY,EAAoBC,EAAAA,YAAY,CAACC,EAAqBhU,KACxD6T,EAAwBI,QAAQjR,IAAIgR,EAAahU,IAClD,IAEGkU,EAAsBH,cAAaC,IACrCH,EAAwBI,QAAQE,OAAOH,IACxC,IAEHI,EAAAA,UAAU,KAEN,IAAIlB,EAmCJ,OA9BAlX,QAAQC,IAAI,8CAA+C,yEAC3DD,QAAQC,IAAI,4BAA6B,CACrC6J,MAAO1K,EAAO0K,MAAMtL,OACpBwW,UAAW5V,EAAO4V,UAClBG,cAAe/V,EAAO+V,gBAG1BnV,QAAQC,IAAI,0DACZyX,EAAiBO,QAAU,IAAI9Y,EAC3BC,EACAiZ,GAEJX,EAAiBO,QAAQlY,QACzBC,QAAQC,IAAI,8CAEZD,QAAQC,IAAI,qDACZ0X,EAAkBM,QAAU,IAAIlJ,EAAe2I,EAAiBO,QAAS7Y,GACzEY,QAAQC,IAAI,yCACZD,QAAQC,IAAI,qDACZ2X,EAAiBK,QAAU,IAAI1D,EAC3BnV,EACAkZ,EACAd,EAAgBS,SAEpBL,EAAiBK,QAAQ1b,UACzByD,QAAQC,IAAI,6CAEZD,QAAQC,IAAI,6CAA8C,yEAC1DD,QAAQC,IAAI,kEAEL,KACHD,QAAQC,IAAI,oCACZyX,EAAiBO,SAASja,OAC1B4Z,EAAiBK,SAAS3W,aAC1BkW,EAAgBS,QAAQ/Y,WAtCxBc,QAAQC,IAAI,sEAwCjB,CAACb,EAAQ8X,IAEZ,MAAMmB,EAAsB,CAAChC,EAAc/R,KACvCtE,QAAQC,IAAI,+CAA+CqE,MAAa,CACpEc,KAAMiR,EAAQjR,MAAML,MACpBM,SAAUgR,EAAQhR,SAAS7G,SAG3B6X,EAAQjR,MACR6R,EAAeZ,EAAQjR,KAAKL,OAGhC6S,EAAiBK,SAAS7B,YAAYC,EAAS/R,IAE7CgU,EAAmBC,MAAOlb,IAG5B,GAFA2C,QAAQC,IAAI,0CAA2C5C,EAAKmF,MAE1C,2BAAdnF,EAAKmF,KAGL,OAFAxC,QAAQC,IAAI,+EACZyX,EAAiBO,SAAS7X,0BAI9B,GAAkB,kBAAd/C,EAAKmF,KAGL,OAFAxC,QAAQC,IAAI,uCACZ4W,GAAe,GAKnB,GAAkB,mBAAdxZ,EAAKmF,KAGL,OAFAxC,QAAQC,IAAI,yCACZoX,GAAmB,GAIvB,GAAkB,sBAAdha,EAAKmF,KAGL,OAFAxC,QAAQC,IAAI,4CACZoX,GAAmB,GAIvB,GAAkB,iBAAdha,EAAKmF,KAOL,OANAxC,QAAQC,IAAI,wDACZsX,EAAgBiB,GAAQ,IAAIA,EAAM,CAC9BrU,KAAM9G,EAAK8G,KACX+R,QAAS7Y,EAAK6Y,QACdnQ,UAAW1I,EAAK0I,YAAa,IAAIC,MAAOC,iBAKhD,GAAkB,gBAAd5I,EAAKmF,KAKT,GAAkB,WAAdnF,EAAKmF,KAAmB,CACxBxC,QAAQC,IAAI,8CAEZ,IACI,MAAMkP,QAAewI,EAAkBM,SAASjJ,QAAQ3R,EAAK4R,OAAQ5R,EAAK6R,SAC1ElP,QAAQC,IAAI,iDAERkP,GAAQS,SAAW8H,EAAiBO,SACpCpX,WAAW,KACP,MAAM0D,EAAcmT,EAAiBO,QAAgBlX,8BAC/CsV,EAAWqB,EAAiBO,QAAgBtO,gBAAgBpF,GAClEqT,EAAiBK,SAAS7B,YAAYC,EAAS,gBAChD,IAEX,CAAE,MAAO1G,GACL3P,QAAQ2P,MAAM,2CAA4CA,EAC9D,CACJ,KAAyB,oBAAdtS,EAAKmF,MACZxC,QAAQC,IAAI,iDACZ4W,GAAe,IACM,uBAAdxZ,EAAKmF,OACZxC,QAAQC,IAAI,2CACZ4W,GAAe,SA1Bf7W,QAAQC,IAAI,kCAAmC5C,EAAK8Y,SA+CtDsC,EAAgB,KAClBzY,QAAQC,IAAI,4CACZuX,EAAgBS,QAAQra,iBACxBoZ,GAAe,IAsBbza,EAAUwb,EAAAA,YAAY,KACxB/X,QAAQC,IAAI,8CACZkX,GAA0B,GAErBO,EAAiBO,UAClBP,EAAiBO,QAAU,IAAI9Y,EAAoBC,EAAQiZ,GAC3DX,EAAiBO,QAAQlY,SAGxB4X,EAAkBM,UACnBN,EAAkBM,QAAU,IAAIlJ,EAAe2I,EAAiBO,QAAS7Y,IAGxEwY,EAAiBK,SAAYrB,IAC9BgB,EAAiBK,QAAU,IAAI1D,EAC3BnV,EACAkZ,EACAd,EAAgBS,SAEpBL,EAAiBK,QAAQ1b,YAE9B,CAAC6C,EAAQwX,IAGNtV,EAAayW,EAAAA,YAAY,KAC3B/X,QAAQC,IAAI,iDAER8W,GACA0B,IAGJb,EAAiBK,SAAS3W,aAC1BsW,EAAiBK,QAAU,KAE3BP,EAAiBO,SAASja,OAE1B6Y,GAAe,GACfM,GAA0B,GAE1BnX,QAAQC,IAAI,kCACb,CAAC8W,IAEEN,EAAkBsB,cAAYQ,MAAO1I,IACvC,IAAK+H,EAAiBK,QAClB,MAAM,IAAI3I,MAAM,kCAIpBiI,EAAgBiB,GAAQ,IAAIA,EAAM,CAC9BrU,KAAM,OACN+R,QAASrG,EACT9J,WAAW,IAAIC,MAAOC,iBAIrBmR,IACDQ,EAAiBK,QAAQhC,2BAEnB,IAAInF,QAAQC,GAAWlQ,WAAWkQ,EAAS,OAIrD6G,EAAiBK,QAAQxB,gBAAgB5G,IAC1C,CAACuH,IAEEsB,EAAcX,EAAAA,YAAY,KACvBH,EAAiBK,QAIjBb,GACDQ,EAAiBK,QAAQhC,qBAJzBjW,QAAQmN,KAAK,qDAMlB,CAACiK,IACEuB,EAAiC,CACnCvZ,SACAwX,cACAG,cACAlN,cACAtN,UACA+E,aACAsX,eA3HmBL,UACdX,EAAiBK,UACtBjY,QAAQC,IAAI,4CAGZ2X,EAAiBK,QAAQrC,4BACnB,IAAI9E,QAAQC,GAAWlQ,WAAWkQ,EAAS,YAE3CyG,EAAgBS,QAAQpc,qBACxB2b,EAAgBS,QAAQvb,gBAAiByB,IAC3CyZ,EAAiBK,SAASzB,UAAUrY,KAGxC6Y,GAAe,GACfhX,QAAQC,IAAI,yCA8GZwY,gBAEAC,cACAjC,kBACAa,eACAF,kBAEAyB,cA5GkBN,MAAOtJ,EAAgBC,KACzC,IAAKyI,EAAkBM,QACnB,MAAM,IAAI3I,MAAM,kCAEpB,aAAaqI,EAAkBM,QAAQjJ,QAAQC,EAAQC,IAyGvD4J,kBAtGuBjU,IACvB,MAAMb,EAAUP,SAASH,cAAcuB,GACvC,OAAKb,EAEDA,aAAmB+L,kBAAoB/L,aAAmBgM,oBACnDhM,EAAQrG,MAGZqG,EAAQoF,YANM,MAqGrB0O,oBACAI,uBAGEa,EAAmC,oBAAZC,SAA2BA,QAAQC,KAAgC,gBAAzBD,QAAQC,IAAIC,SAEnF,OACIC,gBAACje,EAAYke,SAAQ,CAACzb,MAAOgb,GACxBhC,EACAoC,GACGI,EAAAE,cAACC,GACG1C,YAAaA,EACbG,YAAaA,EACblN,YAAaA,MAQ3ByP,EAID,EAAG1C,cAAaG,cAAalN,iBAE1BsP,EAAAE,cAAA,MAAA,CAAKpS,MAAO,CACRsS,SAAU,QACVC,OAAQ,OACRC,MAAO,OACPC,WAAY,kBACZC,MAAO,QACPC,QAAS,OACTC,aAAc,MACdC,SAAU,OACVC,OAAQ,MACRC,WAAY,cAEZb,EAAAE,cAAA,MAAA,KAAA,2BACAF,EAAAE,cAAA,MAAA,aAAWzC,EAAc,eAAiB,mBAC1CuC,EAAAE,cAAA,MAAA,aAAWtC,EAAc,eAAiB,YAC1CoC,EAAAE,cAAA,MAAA,cAAYxP,GAAe,mDCnuEhB,0CD6BA,KACnB,MAAMwM,EAAU4D,EAAAA,WAAW/e,GAC3B,IAAKmb,EACD,MAAM,IAAI/G,MAAM,4CAEpB,OAAO+G"}
|