@probolabs/playwright 1.5.0-rc.2 → 1.5.0-rc.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../probo-shared/dist/ElementTag.js","../../probo-shared/dist/Interaction.js","../../probo-shared/dist/PlaywrightAction.js","../../probo-shared/dist/element-utils.js","../../probo-shared/dist/MessageType.js","../../probo-shared/dist/utils.js","../../../node_modules/retry/lib/retry_operation.js","../../../node_modules/retry/lib/retry.js","../../../node_modules/retry/index.js","../../../node_modules/is-network-error/index.js","../../probo-shared/node_modules/p-retry/index.js","../../probo-shared/dist/api-client.js","../../probo-shared/dist/AIModel.js","../../probo-shared/dist/PlaywrightTimeoutConfig.js","../../probo-shared/dist/RecorderSettings.js","../../probo-shared/dist/codegen.js","../src/interpolation.ts","../src/probo-logger.ts","../src/actions.ts","../src/highlight.ts","../src/otp.ts","../src/nav-tracker.ts","../../../node_modules/otpauth/dist/otpauth.esm.js","../src/replay-utils.ts","../src/codegen-api.ts","../src/test-suite-runner.ts","../src/index.ts"],"sourcesContent":["/**\n * Element tag constants for different types of interactive elements\n */\nexport const ElementTag = {\n CLICKABLE: \"CLICKABLE\",\n FILLABLE: \"FILLABLE\",\n SELECTABLE: \"SELECTABLE\",\n NON_INTERACTIVE_ELEMENT: 'NON_INTERACTIVE_ELEMENT',\n};\n//# sourceMappingURL=ElementTag.js.map","export var ApplyAIStatus;\n(function (ApplyAIStatus) {\n ApplyAIStatus[\"PREPARE_START\"] = \"PREPARE_START\";\n ApplyAIStatus[\"PREPARE_SUCCESS\"] = \"PREPARE_SUCCESS\";\n ApplyAIStatus[\"PREPARE_ERROR\"] = \"PREPARE_ERROR\";\n ApplyAIStatus[\"SEND_START\"] = \"SEND_START\";\n ApplyAIStatus[\"SEND_SUCCESS\"] = \"SEND_SUCCESS\";\n ApplyAIStatus[\"SEND_ERROR\"] = \"SEND_ERROR\";\n ApplyAIStatus[\"APPLY_AI_ERROR\"] = \"APPLY_AI_ERROR\";\n ApplyAIStatus[\"APPLY_AI_CANCELLED\"] = \"APPLY_AI_CANCELLED\";\n ApplyAIStatus[\"SUMMARY_COMPLETED\"] = \"SUMMARY_COMPLETED\";\n ApplyAIStatus[\"SUMMARY_ERROR\"] = \"SUMMARY_ERROR\";\n})(ApplyAIStatus || (ApplyAIStatus = {}));\nexport var ReplayStatus;\n(function (ReplayStatus) {\n ReplayStatus[\"REPLAY_START\"] = \"REPLAY_START\";\n ReplayStatus[\"REPLAY_SUCCESS\"] = \"REPLAY_SUCCESS\";\n ReplayStatus[\"REPLAY_ERROR\"] = \"REPLAY_ERROR\";\n ReplayStatus[\"REPLAY_CANCELLED\"] = \"REPLAY_CANCELLED\";\n})(ReplayStatus || (ReplayStatus = {}));\n//# sourceMappingURL=Interaction.js.map","// Action constants\nexport var PlaywrightAction;\n(function (PlaywrightAction) {\n PlaywrightAction[\"VISIT_BASE_URL\"] = \"VISIT_BASE_URL\";\n PlaywrightAction[\"VISIT_URL\"] = \"VISIT_URL\";\n PlaywrightAction[\"CLICK\"] = \"CLICK\";\n PlaywrightAction[\"FILL_IN\"] = \"FILL_IN\";\n PlaywrightAction[\"SELECT_DROPDOWN\"] = \"SELECT_DROPDOWN\";\n PlaywrightAction[\"SELECT_MULTIPLE_DROPDOWN\"] = \"SELECT_MULTIPLE_DROPDOWN\";\n PlaywrightAction[\"CHECK_CHECKBOX\"] = \"CHECK_CHECKBOX\";\n PlaywrightAction[\"SELECT_RADIO\"] = \"SELECT_RADIO\";\n PlaywrightAction[\"TOGGLE_SWITCH\"] = \"TOGGLE_SWITCH\";\n PlaywrightAction[\"SET_SLIDER\"] = \"SET_SLIDER\";\n PlaywrightAction[\"TYPE_KEYS\"] = \"TYPE_KEYS\";\n PlaywrightAction[\"HOVER\"] = \"HOVER\";\n PlaywrightAction[\"ASSERT_EXACT_VALUE\"] = \"ASSERT_EXACT_VALUE\";\n PlaywrightAction[\"ASSERT_CONTAINS_VALUE\"] = \"ASSERT_CONTAINS_VALUE\";\n PlaywrightAction[\"ASSERT_URL\"] = \"ASSERT_URL\";\n PlaywrightAction[\"SCROLL_TO_ELEMENT\"] = \"SCROLL_TO_ELEMENT\";\n PlaywrightAction[\"EXTRACT_VALUE\"] = \"EXTRACT_VALUE\";\n PlaywrightAction[\"ASK_AI\"] = \"ASK_AI\";\n PlaywrightAction[\"EXECUTE_SCRIPT\"] = \"EXECUTE_SCRIPT\";\n PlaywrightAction[\"UPLOAD_FILES\"] = \"UPLOAD_FILES\";\n PlaywrightAction[\"WAIT_FOR\"] = \"WAIT_FOR\";\n PlaywrightAction[\"WAIT_FOR_OTP\"] = \"WAIT_FOR_OTP\";\n PlaywrightAction[\"GEN_TOTP\"] = \"GEN_TOTP\";\n // Sequence marker actions (not real interactions, used only for grouping)\n PlaywrightAction[\"SEQUENCE_START\"] = \"SEQUENCE_START\";\n PlaywrightAction[\"SEQUENCE_END\"] = \"SEQUENCE_END\";\n})(PlaywrightAction || (PlaywrightAction = {}));\n//# sourceMappingURL=PlaywrightAction.js.map","import { ElementTag } from \"./ElementTag.js\";\nimport { PlaywrightAction } from \"./PlaywrightAction.js\";\n/**\n * Resolves an action type to the corresponding ElementTag\n *\n * @param action The action type (CLICK, FILL_IN, SELECT_DROPDOWN)\n * @returns The corresponding ElementTag\n */\nexport function resolveElementTag(action) {\n switch (action) {\n case PlaywrightAction.CLICK:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE];\n case PlaywrightAction.FILL_IN:\n return [ElementTag.FILLABLE];\n case PlaywrightAction.SELECT_DROPDOWN:\n return [ElementTag.SELECTABLE];\n case PlaywrightAction.HOVER:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE, ElementTag.NON_INTERACTIVE_ELEMENT];\n case PlaywrightAction.ASSERT_EXACT_VALUE:\n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\n case PlaywrightAction.EXTRACT_VALUE:\n case PlaywrightAction.WAIT_FOR:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE, ElementTag.NON_INTERACTIVE_ELEMENT];\n case PlaywrightAction.WAIT_FOR_OTP:\n case PlaywrightAction.GEN_TOTP:\n return [ElementTag.FILLABLE];\n default:\n console.error(`Unknown action: ${action}`);\n throw new Error(`Unknown action: ${action}`);\n }\n}\nexport function getElementText(element) {\n var _a;\n return element.textContent || element.innerText || element.value || ((_a = element.querySelector('input')) === null || _a === void 0 ? void 0 : _a.value) || '';\n}\n/**\n * Checks if any string in the array matches the given regular expression pattern.\n *\n * @param array - Array of strings to test.\n * @param pattern - Regular expression to test against each string.\n * @returns true if at least one string matches the pattern, false otherwise.\n */\nfunction testArray(array, pattern) {\n return array.some(item => pattern.test(item));\n}\n/**\n * Determines if an element is fillable (can accept text input)\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is fillable\n */\nexport function isFillableElement(element) {\n var _a;\n if (!element)\n return false;\n // Check if it's an input element\n if (element.tagName === 'INPUT') {\n const inputType = (_a = element.type) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n const isOTPInput = element.getAttribute('data-input-otp') === 'true' ||\n element.getAttribute('autocomplete') === 'one-time-code';\n // if it's an OTP input, don't consider it fillable as it's handled by OTP logic\n if (isOTPInput)\n return false;\n // Include text, password, email, number, tel, url, search, date, datetime-local, month, week, time\n const fillableTypes = [\n 'text', 'password', 'email', 'number', 'tel', 'url', 'search',\n 'date', 'datetime-local', 'month', 'week', 'time'\n ];\n return fillableTypes.includes(inputType);\n }\n // Check if it's a textarea\n if (element.tagName === 'TEXTAREA') {\n return true;\n }\n // Check if it's a contenteditable element\n if (element.getAttribute('contenteditable') === 'true') {\n return true;\n }\n return false;\n}\n/**\n * Determines if an element is a selectable dropdown element\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is a select element\n */\nexport function isSelectableElement(element) {\n return element && element.tagName === 'SELECT';\n}\n/**\n * Determines if an element is a non-interactive element (not clickable, fillable, or selectable)\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is non-interactive\n */\nexport function isSliderElement(element) {\n if (!element)\n return false;\n // check for <input type=\"range\">\n if (element.tagName === 'INPUT' && element.getAttribute('type') === 'range')\n return true;\n // check for role and additional attributes\n const sliderAttributes = ['aria-valuenow', 'aria-valuemin', 'aria-valuemax'];\n if (element.getAttribute('role') === 'slider' || sliderAttributes.some(attr => element.hasAttribute(attr)))\n return true;\n // check for class names\n const classNames = Array.from(element.classList);\n const sliderClassPattern = /^MuiSlider|mat-slider|mdl-slider|ui-slider|carousel/;\n if (testArray(classNames, sliderClassPattern))\n return true;\n return false;\n}\n/**\n * Determines if an element is an <input type=\"file\"> element.\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is an input file element\n */\nexport function isInputFileElement(element) {\n return element && element.tagName === 'INPUT' && element.getAttribute('type') === 'file';\n}\n/**\n * Determines if an element is clickable\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is fillable\n */\nexport function isClickableElement(element) {\n if (!element)\n return false;\n let depth = 0;\n while (depth < 5 && element && element.nodeType === Node.ELEMENT_NODE) {\n if (isClickableElementHelper(element) === IsClickable.YES)\n return true;\n if (isClickableElementHelper(element) === IsClickable.NO)\n return false;\n // if maybe, continue searching up to 5 levels up the DOM tree\n element = element.parentNode;\n depth++;\n }\n return false;\n}\n// clickable element detection result\nvar IsClickable;\n(function (IsClickable) {\n IsClickable[\"YES\"] = \"YES\";\n IsClickable[\"NO\"] = \"NO\";\n IsClickable[\"MAYBE\"] = \"MAYBE\";\n})(IsClickable || (IsClickable = {}));\nfunction isClickableElementHelper(element) {\n var _a, _b;\n if (!element)\n return IsClickable.NO;\n //check for tag name\n const tagName = element.tagName.toLowerCase();\n const clickableTags = [\n 'a', 'button',\n ];\n if (clickableTags.includes(tagName))\n return IsClickable.YES;\n //check for clickable <input>\n const inputType = (_a = element.type) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n const clickableTypes = [\n 'button', 'submit', 'reset', 'checkbox', 'radio',\n ];\n const ariaAutocompleteValues = [\n 'list', 'both',\n ];\n if (tagName === 'input') {\n if (clickableTypes.includes(inputType) || ariaAutocompleteValues.includes((_b = element.getAttribute('aria-autocomplete')) !== null && _b !== void 0 ? _b : ''))\n return IsClickable.YES;\n if (['date', 'number', 'range'].includes(inputType))\n return IsClickable.NO; //don't record the click as a change event will be generated for elements that generate an input change event\n }\n // check for cursor type\n const style = window.getComputedStyle(element);\n if (style.cursor === 'pointer')\n return IsClickable.YES;\n // check for attributes\n const clickableRoles = [\n 'button', 'combobox', 'listbox', 'dropdown', 'option', 'menu', 'menuitem',\n 'navigation', 'checkbox', 'switch', 'toggle', 'slider', 'textbox', 'listitem',\n 'presentation',\n ];\n const ariaPopupValues = [\n 'true', 'listbox', 'menu',\n ];\n if (element.hasAttribute('onclick') ||\n clickableRoles.includes(element.getAttribute('role') || '') ||\n ariaPopupValues.includes(element.getAttribute('aria-haspopup') || ''))\n return IsClickable.YES;\n // check for tabindex (means element is focusable and therefore clickable)\n if (parseInt(element.getAttribute('tabindex') || '-1') >= 0)\n return IsClickable.YES;\n // extract class names\n const classNames = Array.from(element.classList);\n // check for checkbox/radio-like class name - TODO: check if can be removed\n const checkboxPattern = /checkbox|switch|toggle|slider/i;\n if (testArray(classNames, checkboxPattern))\n return IsClickable.YES;\n // check for Material UI class names\n const muiClickableClassPattern = /MuiButton|MuiIconButton|MuiChip|MuiMenuItem|MuiListItem|MuiInputBase|MuiOutlinedInput|MuiSelect|MuiAutocomplete|MuiToggleButton|MuiBackdrop-root|MuiBackdrop-invisible/;\n if (testArray(classNames, muiClickableClassPattern))\n return IsClickable.YES;\n // check for SalesForce class names\n const sfClassPattern = /slds-button|slds-dropdown|slds-combobox|slds-picklist|slds-tabs|slds-pill|slds-action|slds-row-action|slds-context-bar|slds-input|slds-rich-text-area|slds-radio|slds-checkbox|slds-toggle|slds-link|slds-accordion|slds-tree/;\n if (testArray(classNames, sfClassPattern))\n return IsClickable.YES;\n // check for chart dots\n const chartClickableClassPattern = /recharts-dot/;\n if (testArray(classNames, chartClickableClassPattern))\n return IsClickable.YES;\n // check for React component classes\n const reactClickableClassPattern = /react-select|ant-select|rc-select|react-dropdown|react-autocomplete|react-datepicker|react-modal|react-tooltip|react-popover|react-menu|react-tabs|react-accordion|react-collapse|react-toggle|react-switch|react-checkbox|react-radio|react-button|react-link|react-card|react-list-item|react-menu-item|react-option|react-tab|react-panel|react-drawer|react-sidebar|react-nav|react-breadcrumb|react-pagination|react-stepper|react-wizard|react-carousel|react-slider|react-range|react-progress|react-badge|react-chip|react-tag|react-avatar|react-icon|react-fab|react-speed-dial|react-floating|react-sticky|react-affix|react-backdrop|react-overlay|react-portal|react-transition|react-animate|react-spring|react-framer|react-gesture|react-drag|react-drop|react-sortable|react-resizable|react-split|react-grid|react-table|react-datagrid|react-tree|react-treeview|react-file|react-upload|react-cropper|react-image|react-gallery|react-lightbox|react-player|react-video|react-audio|react-chart|react-graph|react-diagram|react-flow|react-d3|react-plotly|react-vega|react-vis|react-nivo|react-recharts|react-victory|react-echarts|react-highcharts|react-google-charts|react-fusioncharts|react-apexcharts|react-chartjs|react-chartkick|react-sparklines|react-trend|react-smooth|react-animated|react-lottie|react-spring|react-framer-motion|react-pose|react-motion|react-transition-group|react-router|react-navigation/i;\n if (testArray(classNames, reactClickableClassPattern))\n return IsClickable.YES;\n //check for cloudinary class names\n const cloudinaryClickableClassPattern = /cld-combobox|cld-upload-button|cld-controls|cld-player|cld-tab|cld-menu-item|cld-close|cld-play|cld-pause|cld-fullscreen|cld-browse|cld-cancel|cld-retry/;\n if (testArray(classNames, cloudinaryClickableClassPattern))\n return IsClickable.YES;\n return IsClickable.MAYBE;\n}\nexport function isTextInputElement(element) {\n return (element.tagName === 'INPUT' && element.getAttribute('type') !== 'checkbox' && element.getAttribute('type') !== 'radio') ||\n element.tagName === 'TEXTAREA' ||\n element.getAttribute('contenteditable') === 'true' ||\n element.getAttribute('role') === 'textbox';\n}\nexport function getParentNode(element) {\n if (!element || element.nodeType !== Node.ELEMENT_NODE)\n return null;\n let parent = null;\n // SF is using slots and shadow DOM heavily\n // However, there might be slots in the light DOM which shouldn't be traversed\n if (element.assignedSlot && element.getRootNode() instanceof ShadowRoot)\n parent = element.assignedSlot;\n else\n parent = element.parentNode;\n // Check if we're at a shadow root\n if (parent && parent.nodeType !== Node.ELEMENT_NODE && parent.getRootNode() instanceof ShadowRoot)\n parent = parent.getRootNode().host;\n return parent;\n}\nexport function getElementDepth(element) {\n let depth = 0;\n let currentElement = element;\n while ((currentElement === null || currentElement === void 0 ? void 0 : currentElement.nodeType) === Node.ELEMENT_NODE) {\n depth++;\n currentElement = getParentNode(currentElement);\n }\n return depth;\n}\n//# sourceMappingURL=element-utils.js.map","// WebSocketsMessageType enum for WebSocket and event message types shared across the app\nexport var WebSocketsMessageType;\n(function (WebSocketsMessageType) {\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_START\"] = \"INTERACTION_APPLY_AI_PREPARE_START\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_SUCCESS\"] = \"INTERACTION_APPLY_AI_PREPARE_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_ERROR\"] = \"INTERACTION_APPLY_AI_PREPARE_ERROR\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_START\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_START\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_SUCCESS\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_ERROR\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_ERROR\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_START\"] = \"INTERACTION_REPLAY_START\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_SUCCESS\"] = \"INTERACTION_REPLAY_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_ERROR\"] = \"INTERACTION_REPLAY_ERROR\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_CANCELLED\"] = \"INTERACTION_REPLAY_CANCELLED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_CANCELLED\"] = \"INTERACTION_APPLY_AI_CANCELLED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_ERROR\"] = \"INTERACTION_APPLY_AI_ERROR\";\n WebSocketsMessageType[\"INTERACTION_STEP_CREATED\"] = \"INTERACTION_STEP_CREATED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SUMMARY_COMPLETED\"] = \"INTERACTION_APPLY_AI_SUMMARY_COMPLETED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SUMMARY_ERROR\"] = \"INTERACTION_APPLY_AI_SUMMARY_ERROR\";\n WebSocketsMessageType[\"OTP_RETRIEVED\"] = \"OTP_RETRIEVED\";\n WebSocketsMessageType[\"TEST_SUITE_RUN_START\"] = \"TEST_SUITE_RUN_START\";\n WebSocketsMessageType[\"TEST_SUITE_RUN_LOG\"] = \"TEST_SUITE_RUN_LOG\";\n WebSocketsMessageType[\"TEST_SUITE_RUN_COMPLETE\"] = \"TEST_SUITE_RUN_COMPLETE\";\n WebSocketsMessageType[\"TEST_SUITE_RUN_ERROR\"] = \"TEST_SUITE_RUN_ERROR\";\n WebSocketsMessageType[\"TEST_SUITE_RUN_REPORTER_EVENT\"] = \"TEST_SUITE_RUN_REPORTER_EVENT\";\n})(WebSocketsMessageType || (WebSocketsMessageType = {}));\n//# sourceMappingURL=MessageType.js.map","import { PlaywrightAction } from './PlaywrightAction.js';\n/**\n * Logging levels for Probo\n */\nexport var ProboLogLevel;\n(function (ProboLogLevel) {\n ProboLogLevel[\"DEBUG\"] = \"DEBUG\";\n ProboLogLevel[\"INFO\"] = \"INFO\";\n ProboLogLevel[\"LOG\"] = \"LOG\";\n ProboLogLevel[\"WARN\"] = \"WARN\";\n ProboLogLevel[\"ERROR\"] = \"ERROR\";\n})(ProboLogLevel || (ProboLogLevel = {}));\nconst logLevelOrder = {\n [ProboLogLevel.DEBUG]: 0,\n [ProboLogLevel.INFO]: 1,\n [ProboLogLevel.LOG]: 2,\n [ProboLogLevel.WARN]: 3,\n [ProboLogLevel.ERROR]: 4,\n};\nexport class ProboLogger {\n constructor(prefix, level = ProboLogLevel.INFO) {\n this.prefix = prefix;\n this.level = level;\n }\n setLogLevel(level) {\n console.log(`[${this.prefix}] Setting log level to: ${level} (was: ${this.level})`);\n this.level = level;\n }\n shouldLog(level) {\n return logLevelOrder[level] >= logLevelOrder[this.level];\n }\n preamble(level) {\n const now = new Date();\n const hours = String(now.getHours()).padStart(2, '0');\n const minutes = String(now.getMinutes()).padStart(2, '0');\n const seconds = String(now.getSeconds()).padStart(2, '0');\n const milliseconds = String(now.getMilliseconds()).padStart(3, '0');\n return `[${hours}:${minutes}:${seconds}.${milliseconds}] [${this.prefix}] [${level}]`;\n }\n debug(...args) { if (this.shouldLog(ProboLogLevel.DEBUG))\n console.debug(this.preamble(ProboLogLevel.DEBUG), ...args); }\n info(...args) { if (this.shouldLog(ProboLogLevel.INFO))\n console.info(this.preamble(ProboLogLevel.INFO), ...args); }\n log(...args) { if (this.shouldLog(ProboLogLevel.LOG))\n console.log(this.preamble(ProboLogLevel.LOG), ...args); }\n warn(...args) { if (this.shouldLog(ProboLogLevel.WARN))\n console.warn(this.preamble(ProboLogLevel.WARN), ...args); }\n error(...args) { if (this.shouldLog(ProboLogLevel.ERROR))\n console.error(this.preamble(ProboLogLevel.ERROR), ...args); }\n}\nconst fetchLogger = new ProboLogger('fetch');\nfunction formatFetchErrorDetails(error, depth = 0) {\n if (!error || depth > 2) {\n return String(error);\n }\n if (error instanceof Error) {\n const err = error;\n const details = {\n name: err.name,\n message: err.message\n };\n for (const key of ['code', 'errno', 'syscall', 'hostname', 'address', 'port', 'type']) {\n if (err[key] !== undefined) {\n details[key] = err[key];\n }\n }\n if (err.cause !== undefined) {\n details.cause = formatFetchErrorDetails(err.cause, depth + 1);\n }\n return details;\n }\n if (typeof error === 'object') {\n const err = error;\n const details = {};\n for (const key of ['name', 'message', 'code', 'errno', 'syscall', 'hostname', 'address', 'port', 'type']) {\n if (err[key] !== undefined) {\n details[key] = err[key];\n }\n }\n if (err.cause !== undefined) {\n details.cause = formatFetchErrorDetails(err.cause, depth + 1);\n }\n return Object.keys(details).length > 0 ? details : String(error);\n }\n return String(error);\n}\nfunction getFetchUrl(input) {\n if (typeof input === 'string')\n return input;\n if (input instanceof URL)\n return input.toString();\n if (typeof input === 'object' && input && 'url' in input) {\n const url = input.url;\n if (typeof url === 'string')\n return url;\n }\n return 'unknown-url';\n}\nfunction getFetchMethod(input, init) {\n if (init === null || init === void 0 ? void 0 : init.method)\n return init.method;\n if (typeof input === 'object' && input && 'method' in input) {\n const method = input.method;\n if (typeof method === 'string')\n return method;\n }\n return 'GET';\n}\nexport async function fetchWithLogging(input, init, context) {\n try {\n return await fetch(input, init);\n }\n catch (error) {\n const url = getFetchUrl(input);\n const method = getFetchMethod(input, init);\n const meta = {\n source: context === null || context === void 0 ? void 0 : context.source,\n operation: context === null || context === void 0 ? void 0 : context.operation,\n method,\n url,\n details: formatFetchErrorDetails(error)\n };\n fetchLogger.error('Fetch failed', meta);\n throw error;\n }\n}\n// Element cleaner logging\n// const elementLogger = new ProboLogger('element-cleaner');\n/**\n * Cleans and returns a minimal element info structure.\n */\n//TODO: is this needed?\n/* export function cleanupElementInfo(elementInfo: ElementInfo): CleanElementInfo {\n elementLogger.debug(\n `Cleaning up element info for ${elementInfo.tag} at index ${elementInfo.index}`\n );\n const depth = elementInfo.depth ?? elementInfo.getDepth();\n const cleanEl = {\n index: elementInfo.index,\n tag: elementInfo.tag,\n type: elementInfo.type,\n text: elementInfo.text,\n html: elementInfo.html,\n xpath: elementInfo.xpath,\n css_selector: elementInfo.css_selector,\n iframe_selector: elementInfo.iframe_selector,\n bounding_box: elementInfo.bounding_box,\n depth\n };\n elementLogger.debug(`Cleaned element: ${JSON.stringify(cleanEl)}`);\n return cleanEl;\n} */\n/**\n * Cleans highlighted elements in an instruction payload.\n */\n/* export function cleanupInstructionElements(instruction: any): any {\n if (!instruction?.result?.highlighted_elements) {\n elementLogger.debug('No highlighted elements to clean');\n return instruction;\n }\n elementLogger.debug(\n `Cleaning ${instruction.result.highlighted_elements.length} highlighted elements`\n );\n const cleaned = {\n ...instruction,\n result: {\n ...instruction.result,\n highlighted_elements: instruction.result.highlighted_elements.map(\n (el: ElementInfo) => cleanupElementInfo(el)\n )\n }\n };\n elementLogger.debug('Instruction cleaning completed');\n return cleaned;\n} */\n// Determine whether an interaction can return a value\nexport const hasReturnValue = (i) => {\n return [\n PlaywrightAction.EXTRACT_VALUE,\n PlaywrightAction.ASK_AI,\n PlaywrightAction.EXECUTE_SCRIPT\n ].includes(i.action);\n};\nexport const getReturnValueParameterName = (i) => {\n switch (i.action) {\n case PlaywrightAction.EXTRACT_VALUE:\n case PlaywrightAction.EXECUTE_SCRIPT:\n return i.parameterName;\n case PlaywrightAction.ASK_AI:\n return i.parameterName.replace(/^assert_/, '');\n default:\n console.error(`Action ${i.action} has no return value`);\n return '';\n }\n};\n// Determine whether an interaction can be parameterized\nexport const isParameterizable = (i) => {\n const parameterizableActions = [\n PlaywrightAction.FILL_IN,\n PlaywrightAction.SELECT_DROPDOWN,\n PlaywrightAction.SET_SLIDER,\n PlaywrightAction.ASSERT_CONTAINS_VALUE,\n PlaywrightAction.ASSERT_EXACT_VALUE,\n PlaywrightAction.VISIT_URL,\n PlaywrightAction.ASSERT_URL,\n PlaywrightAction.UPLOAD_FILES,\n PlaywrightAction.WAIT_FOR,\n PlaywrightAction.GEN_TOTP,\n PlaywrightAction.WAIT_FOR_OTP\n ];\n return parameterizableActions.includes(i.action) || (i.action === PlaywrightAction.ASK_AI && i.argument);\n};\n// Determine whether an interaction is AI-related\nexport const isAI = (i) => {\n var _a, _b, _c, _d, _e, _f;\n return !['TYPE_KEYS', 'VISIT_URL', 'EXECUTE_SCRIPT'].includes(i.action) &&\n (i.action === PlaywrightAction.ASK_AI ||\n (((_b = (_a = i.serverResponse) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b.prompt) && (((_d = (_c = i.serverResponse) === null || _c === void 0 ? void 0 : _c.result) === null || _d === void 0 ? void 0 : _d.error) === \"\" || !((_f = (_e = i.serverResponse) === null || _e === void 0 ? void 0 : _e.result) === null || _f === void 0 ? void 0 : _f.error))));\n};\n// Determine whether an interaction is fortified (doesn't need AI processing)\nexport const isFortifiedInteraction = (i) => {\n return [\n PlaywrightAction.VISIT_URL,\n PlaywrightAction.ASSERT_URL,\n PlaywrightAction.TYPE_KEYS,\n PlaywrightAction.EXECUTE_SCRIPT,\n PlaywrightAction.ASK_AI\n ].includes(i.action);\n};\n/**\n * Check if an interaction is a sequence marker (SEQUENCE_START or SEQUENCE_END)\n * @param action - The PlaywrightAction to check\n * @returns true if the action is a sequence marker\n */\nexport function isSequenceMarker(action) {\n return action === PlaywrightAction.SEQUENCE_START || action === PlaywrightAction.SEQUENCE_END;\n}\nexport function singleQuoteString(str) {\n if (!str)\n return '';\n return `'${str.replace(/'/g, \"\\\\'\")}'`;\n}\nexport function doubleQuoteString(str) {\n if (!str)\n return '';\n return `\"${str.replace(/\"/g, '\\\\\"')}\"`;\n}\n/**\n * Extract unique process.env variable names from a parameter table.\n * Looks for ${process.env.VAR_NAME} patterns in string values.\n */\nexport function extractEnvVarsFromParameterTable(parameterTable) {\n if (!Array.isArray(parameterTable) || parameterTable.length === 0) {\n return [];\n }\n const envVars = new Set();\n const pattern = /\\$\\{process\\.env\\.([a-zA-Z_][a-zA-Z0-9_]*)\\}/g;\n parameterTable.forEach((row) => {\n Object.values(row).forEach((value) => {\n if (typeof value !== 'string')\n return;\n let match;\n while ((match = pattern.exec(value)) !== null) {\n envVars.add(match[1]);\n }\n });\n });\n return Array.from(envVars).sort();\n}\n/**\n * Converts a string to a filesystem-safe slug.\n * Used for filenames/package names (not URL parsing).\n */\nexport function slugify(text) {\n if (!text)\n return 'scenario';\n return text\n .toLowerCase()\n .trim()\n .replace(/[^a-zA-Z0-9-_]/g, '-') // Replace non-alphanumeric chars with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with single hyphen\n .replace(/^-|-$/g, '') // Remove leading/trailing hyphens\n .substring(0, 100); // Limit length to 100 chars\n}\n// Normalize a parameter name to a legal JS identifier\nexport function normalizeParameterName(name) {\n // 0. Remove leading/trailing spaces\n // 1. Replace invalid characters with underscores\n // 2. collapse multiple underscores\n // 3. Remove trailing underscores\n // 4. If starts with a digit, prepend '_'\n // 5. Convert to lowercase\n name = name.trim();\n name = name.replace(/[^a-zA-Z0-9_$]/g, '_');\n name = name.replace(/_+/g, '_');\n name = name.replace(/_+$/, ''); // Remove trailing underscores\n if (/^[0-9]/.test(name)) {\n name = '_' + name;\n }\n name = name.toLowerCase();\n // Ensure we never return an empty string or just underscores\n if (!name || name === '_' || /^_+$/.test(name)) {\n name = 'param_' + Date.now();\n }\n return name;\n}\nexport function matchRegex(str, regex) {\n //parse the regex string\n const match = regex.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (!match) // normal string\n return str.includes(regex);\n else { // regex string\n const pattern = match[1].replace(/\\\\/g, '\\\\');\n const flags = match[2];\n console.log(`Matching ${str} against ${pattern} with flags ${flags}`);\n return new RegExp(pattern, flags).test(str);\n }\n}\n/**\n * Truncates a URL by replacing query parameters (everything after ?) with three dots.\n * @param url The URL to truncate\n * @returns The truncated URL with three dots replacing query parameters\n */\nexport function truncateUrl(url) {\n if (!url)\n return '';\n const questionMarkIndex = url.indexOf('?');\n if (questionMarkIndex === -1) {\n // No query parameters found, return the original URL\n return url;\n }\n const baseUrl = url.substring(0, questionMarkIndex);\n return `${baseUrl}...`;\n}\n/**\n * Sets up browser console logging on a Playwright page.\n * This function removes all existing console listeners and optionally adds a new one.\n * @param page The Playwright page instance\n * @param enableConsoleLogs Whether to enable console logging\n * @param logger Optional logger instance to use for output (defaults to console.log)\n */\nexport const setupBrowserConsoleLogs = (page, enableConsoleLogs, logger = null) => {\n // Always remove all existing console listeners first\n page.removeAllListeners('console');\n // Always add a listener, but filter output based on enableConsoleLogs\n const listener = (msg) => {\n if (enableConsoleLogs) {\n const type = msg.type();\n const text = msg.text();\n if (logger) {\n logger.log(`[Browser-${type}]: ${text}`);\n }\n else {\n console.log(`[Browser-${type}]: ${text}`);\n }\n }\n // If disabled, do nothing (silently ignore the console message)\n };\n page.on('console', listener);\n};\n/**\n * Safely interpolates template literals in a string using the provided context.\n * Similar to JavaScript template literals, but executed safely at runtime.\n * Recursively interpolates until no more template literals remain.\n *\n * This function only interpolates the argument string itself, not the entire context.\n * When a template literal resolves to another string containing template literals,\n * it recursively interpolates that result.\n *\n * @param str The string containing template literal syntax (e.g., \"Hello ${name}\")\n * @param context The context object containing variables for interpolation\n * @param maxDepth Maximum recursion depth to prevent infinite loops (default: 10)\n * @returns The interpolated string, or the original string if no interpolation is needed\n */\nexport function interpolateTemplate(str, context, maxDepth = 10) {\n if (typeof str !== 'string' || !str.includes('${')) {\n return str;\n }\n if (maxDepth <= 0) {\n console.warn('⚠️ Maximum interpolation depth reached, returning partially interpolated string');\n return str;\n }\n try {\n // Escape backticks in the template to prevent template literal injection\n const escapedTemplate = str.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`');\n // Create a safe template execution function\n // Assign all context properties to variables so they're accessible in the template\n // This works for both simple values and nested objects like process.env\n const contextKeys = Object.keys(context);\n const assignments = contextKeys.map(key => `const ${key} = ctx.${key};`).join('\\n');\n const functionBody = `\n const ctx = arguments[0];\n ${assignments}\n return \\`${escapedTemplate}\\`;\n `;\n const compiled = new Function(functionBody);\n const rendered = compiled(context);\n // If the result still contains template literals, recursively interpolate\n if (rendered.includes('${') && rendered !== str) {\n return interpolateTemplate(rendered, context, maxDepth - 1);\n }\n return rendered;\n }\n catch (e) {\n const error = e instanceof Error ? e : new Error(String(e));\n console.error('⚠️ Template evaluation failed:', error);\n throw error;\n }\n}\nexport class Mutex {\n constructor() {\n this._locked = false;\n this._waiters = [];\n }\n lock() {\n return new Promise((resolve) => {\n const unlock = () => {\n if (this._waiters.length > 0) {\n const nextResolve = this._waiters.shift();\n if (nextResolve) {\n nextResolve(unlock);\n }\n }\n else {\n this._locked = false;\n }\n };\n if (this._locked) {\n this._waiters.push(resolve);\n }\n else {\n this._locked = true;\n resolve(unlock);\n }\n });\n }\n async withLock(fn) {\n const unlock = await this.lock();\n try {\n return await fn();\n }\n finally {\n unlock();\n }\n }\n}\n//# sourceMappingURL=utils.js.map","function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n","module.exports = require('./lib/retry');","const objectToString = Object.prototype.toString;\n\nconst isError = value => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n\t' A network error occurred.', // Bun (WebKit)\n\t'Network connection lost', // Cloudflare Workers (fetch)\n]);\n\nexport default function isNetworkError(error) {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\tconst {message, stack} = error;\n\n\t// Safari 17+ has generic message but no stack for network errors\n\tif (message === 'Load failed') {\n\t\treturn stack === undefined\n\t\t\t// Sentry adds its own stack trace to the fetch error, so also check for that\n\t\t\t|| '__sentry_captured__' in error;\n\t}\n\n\t// Deno network errors start with specific text\n\tif (message.startsWith('error sending request for url')) {\n\t\treturn true;\n\t}\n\n\t// Standard network error messages\n\treturn errorMessages.has(message);\n}\n","import retry from 'retry';\nimport isNetworkError from 'is-network-error';\n\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nexport default async function pRetry(input, options) {\n\treturn new Promise((resolve, reject) => {\n\t\toptions = {...options};\n\t\toptions.onFailedAttempt ??= () => {};\n\t\toptions.shouldRetry ??= () => true;\n\t\toptions.retries ??= 10;\n\n\t\tconst operation = retry.operation(options);\n\n\t\tconst abortHandler = () => {\n\t\t\toperation.stop();\n\t\t\treject(options.signal?.reason);\n\t\t};\n\n\t\tif (options.signal && !options.signal.aborted) {\n\t\t\toptions.signal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tconst cleanUp = () => {\n\t\t\toptions.signal?.removeEventListener('abort', abortHandler);\n\t\t\toperation.stop();\n\t\t};\n\n\t\toperation.attempt(async attemptNumber => {\n\t\t\ttry {\n\t\t\t\tconst result = await input(attemptNumber);\n\t\t\t\tcleanUp();\n\t\t\t\tresolve(result);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t\t\tthrow new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof AbortError) {\n\t\t\t\t\t\tthrow error.originalError;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof TypeError && !isNetworkError(error)) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\t\tif (!(await options.shouldRetry(error))) {\n\t\t\t\t\t\toperation.stop();\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\n\t\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\t\tthrow operation.mainError();\n\t\t\t\t\t}\n\t\t\t\t} catch (finalError) {\n\t\t\t\t\tdecorateErrorWithCounts(finalError, attemptNumber, options);\n\t\t\t\t\tcleanUp();\n\t\t\t\t\treject(finalError);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n","import pRetry from 'p-retry';\nimport { ProboLogger } from './utils.js';\nexport const apiLogger = new ProboLogger('apiclient');\nexport class ApiError extends Error {\n constructor(status, message, data) {\n super(message);\n this.status = status;\n this.data = data;\n this.name = 'ApiError';\n // Remove stack trace for cleaner error messages\n this.stack = undefined;\n }\n toString() {\n return `${this.message} (Status: ${this.status})`;\n }\n}\nexport class ApiClient {\n constructor(apiUrl, token, maxRetries = 3, initialBackoff = 1000) {\n this.apiUrl = apiUrl;\n this.token = token;\n this.maxRetries = maxRetries;\n this.initialBackoff = initialBackoff;\n }\n /**\n * Determines if an error should be retried.\n * Only retries on timeout and network errors, not on client/server errors.\n */\n isRetryableError(error) {\n var _a, _b, _c, _d, _e;\n // Network/connection errors should be retried\n if ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('fetch failed'))\n return true;\n if ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('network'))\n return true;\n if ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('ETIMEDOUT'))\n return true;\n if ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('ECONNRESET'))\n return true;\n if ((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('ECONNREFUSED'))\n return true;\n if (error.code === 'ETIMEDOUT')\n return true;\n if (error.code === 'ECONNRESET')\n return true;\n if (error.code === 'ECONNREFUSED')\n return true;\n // If it's an ApiError, check the status code\n if (error instanceof ApiError) {\n // Retry on timeout-related status codes\n if (error.status === 408)\n return true; // Request Timeout\n if (error.status === 502)\n return true; // Bad Gateway (temporary)\n if (error.status === 503)\n return true; // Service Unavailable (temporary)\n if (error.status === 504)\n return true; // Gateway Timeout\n if (error.status === 0)\n return true; // Network error\n // Don't retry on client errors (4xx) or server errors (5xx)\n // These indicate problems that won't be fixed by retrying\n return false;\n }\n // For unknown errors, don't retry to avoid masking issues\n return false;\n }\n isNetworkFailure(error) {\n var _a, _b;\n if (!error)\n return false;\n if (error instanceof ApiError && error.status === 0)\n return true;\n if ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('fetch failed'))\n return true;\n const errorCode = error.code || ((_b = error === null || error === void 0 ? void 0 : error.cause) === null || _b === void 0 ? void 0 : _b.code);\n if (['ETIMEDOUT', 'ECONNRESET', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN', 'ECONNABORTED'].includes(errorCode)) {\n return true;\n }\n if (error.cause && this.isNetworkFailure(error.cause)) {\n return true;\n }\n return false;\n }\n formatNetworkErrorDetails(error, depth = 0) {\n if (!error || depth > 2) {\n return { message: String(error) };\n }\n const details = {\n name: error === null || error === void 0 ? void 0 : error.name,\n message: error === null || error === void 0 ? void 0 : error.message\n };\n for (const key of ['code', 'errno', 'syscall', 'hostname', 'address', 'port', 'type']) {\n if ((error === null || error === void 0 ? void 0 : error[key]) !== undefined) {\n details[key] = error[key];\n }\n }\n if (error === null || error === void 0 ? void 0 : error.cause) {\n details.cause = this.formatNetworkErrorDetails(error.cause, depth + 1);\n }\n return details;\n }\n logNetworkFailure(operationName, error, context) {\n if (!this.isNetworkFailure(error)) {\n return;\n }\n apiLogger.error(`[${operationName}] Network failure`, {\n apiUrl: this.apiUrl,\n attempt: context === null || context === void 0 ? void 0 : context.attempt,\n retriesLeft: context === null || context === void 0 ? void 0 : context.retriesLeft,\n details: this.formatNetworkErrorDetails(error)\n });\n }\n /**\n * Generic helper to wrap API requests with retry logic and consistent error handling.\n */\n async requestWithRetry(operationName, operation) {\n return pRetry(operation, {\n retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n shouldRetry: (error) => {\n const shouldRetry = this.isRetryableError(error);\n if (!shouldRetry) {\n if (this.isNetworkFailure(error)) {\n this.logNetworkFailure(operationName, error);\n }\n else {\n apiLogger.error(`${operationName} failed with non-retryable error: ${error.message || error}`);\n }\n }\n return shouldRetry;\n },\n onFailedAttempt: error => {\n this.logNetworkFailure(operationName, error, {\n attempt: error.attemptNumber,\n retriesLeft: error.retriesLeft\n });\n apiLogger.warn(`${operationName} failed (retryable), attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}. Error: ${error.message}`);\n }\n });\n }\n async handleResponse(response) {\n var _a;\n try {\n const data = await response.json();\n const error = `${(data === null || data === void 0 ? void 0 : data.error) || 'Unknown error'}`;\n apiLogger.debug(`API response: ${JSON.stringify(data)}`);\n if (!response.ok) {\n switch (response.status) {\n case 401:\n throw new ApiError(401, `Unauthorized - Invalid or missing authentication token: ${error}`);\n case 403:\n throw new ApiError(403, `Forbidden - You do not have permission to perform this action: ${error}`);\n case 400:\n throw new ApiError(400, `Bad Request: ${error}`);\n case 404:\n throw new ApiError(404, `Not Found: ${error}`);\n case 500:\n throw new ApiError(500, `Internal Server Error: ${error}`);\n default:\n throw new ApiError(response.status, `API Error: ${error}`);\n }\n }\n return data;\n }\n catch (error) {\n // Only throw the original error if it's not a network error\n if (!((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('fetch failed'))) {\n throw error;\n }\n throw new ApiError(0, 'Network error: fetch failed');\n }\n }\n getHeaders() {\n const headers = {\n 'Content-Type': 'application/json',\n };\n // Always include token in headers now that we have a default\n headers['Authorization'] = `Token ${this.token}`;\n return headers;\n }\n async createStep(options) {\n apiLogger.debug('creating step ', options.stepPrompt);\n return this.requestWithRetry('createStep', async () => {\n const response = await fetch(`${this.apiUrl}/step-runners/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n step_id: options.stepIdFromServer,\n scenario_name: options.scenarioName,\n step_prompt: options.stepPrompt,\n argument: options.argument,\n initial_screenshot: options.initial_screenshot_url,\n initial_html_content: options.initial_html_content,\n use_cache: options.use_cache,\n url: options.url,\n action: options.action,\n vanilla_prompt: options.vanilla_prompt,\n is_vanilla_prompt_robust: options.is_vanilla_prompt_robust,\n target_element_name: options.target_element_name,\n position: options.position\n }),\n });\n const data = await this.handleResponse(response);\n return data.step.id;\n });\n }\n async patchStep(stepId, fields) {\n // Use PATCH /steps/:id/ endpoint with partial=true\n apiLogger.debug(`patching step #${stepId} with fields:`, Object.keys(fields));\n return this.requestWithRetry('patchStep', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/`, {\n method: 'PATCH',\n headers: this.getHeaders(),\n body: JSON.stringify(fields)\n });\n const data = await this.handleResponse(response);\n return;\n });\n }\n /* async resolveNextInstruction(stepId: string, instruction: Instruction | null, aiModel?: string) {\n apiLogger.debug(`resolving next instruction: ${instruction}`);\n return this.requestWithRetry('resolveNextInstruction', async () => {\n apiLogger.debug(`API client: Resolving next instruction for step ${stepId}`);\n \n const cleanInstruction = cleanupInstructionElements(instruction);\n \n const response = await fetch(`${this.apiUrl}/step-runners/${stepId}/run/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n executed_instruction: cleanInstruction,\n ai_model: aiModel\n }),\n });\n \n const data = await this.handleResponse(response);\n return data.instruction;\n });\n } */\n async uploadScreenshot(screenshot_bytes) {\n return this.requestWithRetry('uploadScreenshot', async () => {\n const response = await fetch(`${this.apiUrl}/upload-screenshots/`, {\n method: 'POST',\n headers: {\n 'Authorization': `Token ${this.token}`\n },\n body: screenshot_bytes,\n });\n const data = await this.handleResponse(response);\n return data.screenshot_url;\n });\n }\n async findStepById(stepId) {\n apiLogger.debug(`Finding step by id: ${stepId}`);\n return this.requestWithRetry('findStepById', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/`, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n const data = await this.handleResponse(response);\n return data.step;\n });\n }\n async findStepByPrompt(prompt, scenarioName, url = '') {\n apiLogger.debug(`Finding step by prompt: ${prompt} and scenario: ${scenarioName}`);\n return this.requestWithRetry('findStepByPrompt', async () => {\n const response = await fetch(`${this.apiUrl}/step-runners/find-step-by-prompt/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n prompt: prompt,\n scenario_name: scenarioName,\n url: url\n }),\n });\n try {\n const data = await this.handleResponse(response);\n return {\n step: data.step,\n total_count: data.total_count\n };\n }\n catch (error) {\n // If we get a 404, the step doesn't exist\n if (error instanceof ApiError && error.status === 404) {\n return null;\n }\n // For any other error, rethrow\n throw error;\n }\n });\n }\n async resetStep(stepId) {\n return this.requestWithRetry('resetStep', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/reset/`, {\n method: 'POST',\n headers: this.getHeaders(),\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async interactionToStep(scenarioId, interaction, position = -1) {\n // Use POST /interaction-to-step/ endpoint\n // Backend will create new step or update existing one based on interaction_id\n apiLogger.debug(`converting interaction #${interaction.interactionId} to step`);\n return this.requestWithRetry('interactionToStep', async () => {\n var _a, _b, _c, _d;\n const response = await fetch(`${this.apiUrl}/interaction-to-step/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n scenario_id: scenarioId,\n position,\n interaction_id: interaction.interactionId,\n action: interaction.action,\n argument: interaction.argument,\n element_css_selector: ((_a = interaction.elementInfo) === null || _a === void 0 ? void 0 : _a.css_selector) || '',\n iframe_selector: ((_b = interaction.elementInfo) === null || _b === void 0 ? void 0 : _b.iframe_selector) || '',\n smart_selector: ((_c = interaction.elementInfo) === null || _c === void 0 ? void 0 : _c.smart_selector) || null,\n smart_iframe_selector: ((_d = interaction.elementInfo) === null || _d === void 0 ? void 0 : _d.smart_iframe_selector) || null,\n prompt: interaction.nativeDescription,\n vanilla_prompt: interaction.nativeDescription,\n is_vanilla_prompt_robust: interaction.isNativeDescriptionElaborate || false,\n target_element_name: interaction.nativeName,\n target_element_info: interaction.elementInfo,\n url: interaction.url,\n is_secret: interaction.isSecret || false,\n })\n });\n const data = await this.handleResponse(response);\n return [data.result.step_id, data.result.matched_step, data.scenario_id];\n });\n }\n async actionToPrompt(action2promptInput, aiModel) {\n // Use POST /action-to-prompt/ endpoint\n apiLogger.debug(`running action2prompt for step #${action2promptInput.step_id}`);\n return this.requestWithRetry('actionToPrompt', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${action2promptInput.step_id}/action_to_prompt/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({ ...action2promptInput, 'model': aiModel })\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async summarizeScenario(scenarioId, aiModel) {\n return this.requestWithRetry('summarizeScenario', async () => {\n const response = await fetch(`${this.apiUrl}/api/scenarios/${scenarioId}/summary`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({ 'model': aiModel })\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async askAI(question, scenarioName, screenshot, aiModel) {\n apiLogger.debug(`Asking AI question: \"${question}\", scenarioName: ${scenarioName}`);\n apiLogger.debug(`headers: ${JSON.stringify(this.getHeaders())}`);\n return this.requestWithRetry('askAI', async () => {\n const response = await fetch(`${this.apiUrl}/api/ask-ai/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n question: question,\n scenario_name: scenarioName,\n screenshot: screenshot,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async screenshotReasoning(stepId, prompt, aiModel) {\n apiLogger.debug(`Performing screenshot reasoning for step: ${stepId}`);\n return this.requestWithRetry('screenshotReasoning', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/screenshot_reasoning/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n prompt: prompt,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data.action;\n });\n }\n async findBestCandidateElement(stepId, candidatesScreenshotUrl, candidateElements, aiModel) {\n apiLogger.debug(`Finding best candidate element for step: ${stepId}`);\n return this.requestWithRetry('findBestCandidateElement', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/find_best_candidate_element/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n screenshot_url: candidatesScreenshotUrl,\n candidate_elements: candidateElements,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data.index;\n });\n }\n async getProjects() {\n return this.requestWithRetry('getProjects', async () => {\n const response = await fetch(`${this.apiUrl}/projects/`, {\n method: 'GET',\n headers: this.getHeaders()\n });\n return this.handleResponse(response);\n });\n }\n} /* ApiClient */\n//# sourceMappingURL=api-client.js.map","/**\n * Available AI models for LLM operations\n */\nexport var AIModel;\n(function (AIModel) {\n AIModel[\"AZURE_GPT4\"] = \"azure-gpt4\";\n AIModel[\"AZURE_GPT4_MINI\"] = \"azure-gpt4-mini\";\n AIModel[\"GEMINI_1_5_FLASH\"] = \"gemini-1.5-flash\";\n AIModel[\"GEMINI_2_5_FLASH\"] = \"gemini-2.5-flash\";\n AIModel[\"GPT4\"] = \"gpt4\";\n AIModel[\"GPT4_MINI\"] = \"gpt4-mini\";\n AIModel[\"CLAUDE_3_5\"] = \"claude-3.5\";\n AIModel[\"CLAUDE_SONNET_4_5\"] = \"claude-sonnet-4.5\";\n AIModel[\"CLAUDE_HAIKU_4_5\"] = \"claude-haiku-4.5\";\n AIModel[\"CLAUDE_OPUS_4_1\"] = \"claude-opus-4.1\";\n AIModel[\"GROK_2\"] = \"grok-2\";\n AIModel[\"LLAMA_4_SCOUT\"] = \"llama-4-scout\";\n AIModel[\"DEEPSEEK_V3\"] = \"deepseek-v3\";\n})(AIModel || (AIModel = {}));\n//# sourceMappingURL=AIModel.js.map","export const DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG = {\n highlightTimeout: 300,\n playwrightActionTimeout: 5000,\n playwrightNavigationTimeout: 10000,\n playwrightLocatorTimeout: 2000,\n // mutation observer\n mutationsTimeout: 500,\n mutationsInitTimeout: 1000,\n // wait for navigation\n waitForNavigationInitialTimeout: 2000,\n waitForNavigationNavigationTimeout: 7000,\n waitForNavigationGlobalTimeout: 15000,\n // wait for stability\n waitForStabilityQuietTimeout: 2000,\n waitForStabilityInitialDelay: 100,\n waitForStabilityGlobalTimeout: 15000,\n waitForStabilityVerbose: false,\n scriptTimeout: 120000, // 2 minutes\n};\n//# sourceMappingURL=PlaywrightTimeoutConfig.js.map","import { DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG } from './PlaywrightTimeoutConfig.js';\nexport const DEFAULT_RECORDER_SETTINGS = {\n // API Configuration\n apiKey: '',\n apiEndPoint: 'https://api.probolabs.ai',\n frontendUrl: 'https://app.probolabs.ai',\n baseUrl: undefined,\n // Scenario Configuration\n scenarioName: 'new recording',\n scenarioId: undefined,\n aiModel: 'azure-gpt4-mini',\n activeParamSet: 0,\n // Browser Configuration\n resetBrowserBeforeReplay: true,\n enableSmartSelectors: true, // Smart selectors always enabled\n // Script Configuration\n scriptTimeout: DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.scriptTimeout,\n // Logging Configuration\n enableConsoleLogs: true,\n debugLevel: 'DEBUG',\n // Timeout Configuration (spread from PlaywrightTimeoutConfig)\n ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n};\n//# sourceMappingURL=RecorderSettings.js.map","// --- Code generation utilities for Probo Labs Playwright scripts ---\nimport { isParameterizable, isAI, singleQuoteString, PlaywrightAction, getReturnValueParameterName, hasReturnValue, AIModel } from \"./index.js\";\n/**\n * Extracts environment variable names from parameter table rows\n * by parsing ${process.env.VAR_NAME} patterns from parameter values\n *\n * @param rows - Array of parameter table rows (Record<string, string>)\n * @returns Set of unique environment variable names (in uppercase)\n */\nexport function extractRequiredEnvVars(rows) {\n const envVars = new Set();\n // Return empty set if rows are not provided or empty\n if (!rows || !Array.isArray(rows) || rows.length === 0) {\n return envVars;\n }\n // Regex to match both escaped and unescaped process.env patterns\n // Matches: ${process.env.VAR_NAME} or \\${process.env.VAR_NAME}\n // Pattern: optional backslash (\\\\), then ${ (escaped as \\$\\{), then process.env., then variable name\n const envVarPattern = /\\\\?\\$\\{process\\.env\\.([a-zA-Z_][a-zA-Z0-9_]*)\\}/g;\n // Scan all parameter values in all rows for env var patterns\n rows.forEach((row) => {\n if (row && typeof row === 'object') {\n Object.values(row).forEach((value) => {\n if (typeof value === 'string') {\n let match;\n while ((match = envVarPattern.exec(value)) !== null) {\n const varName = match[1].toUpperCase(); // Ensure uppercase for consistency\n envVars.add(varName);\n }\n // Reset regex lastIndex for next iteration\n envVarPattern.lastIndex = 0;\n }\n });\n }\n });\n return envVars;\n}\n/**\n * Extracts the list of required environment variable names from parameter table rows\n * @param rows - Array of parameter table rows (Record<string, string>)\n * @returns Array of required environment variable names (sorted)\n */\nexport function getRequiredEnvVars(rows) {\n const envVars = extractRequiredEnvVars(rows);\n return Array.from(envVars).sort();\n}\n/**\n * Generates Playwright native code for a given interaction.\n *\n * @param interaction - The interaction object containing action, element info, and other metadata.\n * @returns A string of Playwright code that performs the specified interaction.\n */\nfunction interactionToNativeCode(interaction) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n const selector = ((_a = interaction.elementInfo) === null || _a === void 0 ? void 0 : _a.css_selector) || '';\n const iframe = ((_b = interaction.elementInfo) === null || _b === void 0 ? void 0 : _b.iframe_selector) || '';\n const smartSelector = ((_c = interaction.elementInfo) === null || _c === void 0 ? void 0 : _c.smart_selector) || null;\n const smartIFrameSelector = ((_d = interaction.elementInfo) === null || _d === void 0 ? void 0 : _d.smart_iframe_selector) || null;\n const argument = isParameterizable(interaction) ? `param.${interaction.parameterName}` : singleQuoteString(interaction.argument);\n // Escape the nativeDescription for use in test.step() string literal\n const escapedStepName = interaction.nativeDescription.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n const comment = `\n // ${interaction.nativeDescription}${interaction.annotation ? `\\n // annotation: ${interaction.annotation}` : ''}`;\n switch (interaction.action) {\n case PlaywrightAction.CLICK:\n case PlaywrightAction.CHECK_CHECKBOX:\n case PlaywrightAction.SELECT_RADIO:\n case PlaywrightAction.FILL_IN:\n case PlaywrightAction.TYPE_KEYS:\n case PlaywrightAction.SET_SLIDER:\n case PlaywrightAction.SELECT_DROPDOWN:\n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\n case PlaywrightAction.ASSERT_EXACT_VALUE:\n case PlaywrightAction.HOVER:\n case PlaywrightAction.SCROLL_TO_ELEMENT:\n case PlaywrightAction.UPLOAD_FILES:\n case PlaywrightAction.VISIT_URL:\n case PlaywrightAction.VISIT_BASE_URL:\n case PlaywrightAction.ASSERT_URL:\n case PlaywrightAction.WAIT_FOR:\n case PlaywrightAction.WAIT_FOR_OTP:\n case PlaywrightAction.GEN_TOTP:\n const args = [\n `action: PlaywrightAction.${interaction.action}`,\n ...(argument ? [`argument: ${argument}`] : []),\n ...(iframe ? [`iframeSelector: '${iframe}'`] : []),\n ...(selector ? [`elementSelector: '${selector}'`] : []),\n ...(smartSelector ? [`smartSelector: ${JSON.stringify(smartSelector)}`] : []),\n ...(smartIFrameSelector ? [`smartIFrameSelector: ${JSON.stringify(smartIFrameSelector)}`] : []),\n ...(interaction.annotation ? [`annotation: '${interaction.annotation}'`] : []),\n ...(((_e = interaction.waitForConfig) === null || _e === void 0 ? void 0 : _e.pollingInterval) ? [`pollingInterval: ${(_f = interaction.waitForConfig) === null || _f === void 0 ? void 0 : _f.pollingInterval}`] : []),\n ...(((_g = interaction.waitForConfig) === null || _g === void 0 ? void 0 : _g.timeout) ? [`timeout: ${(_h = interaction.waitForConfig) === null || _h === void 0 ? void 0 : _h.timeout}`] : []),\n // Always include totpConfig for GEN_TOTP actions, using defaults if not present in interaction\n ...(interaction.action === PlaywrightAction.GEN_TOTP ? [`totpConfig: { digits: ${((_j = interaction.totpConfig) === null || _j === void 0 ? void 0 : _j.digits) || 6}, algorithm: '${((_k = interaction.totpConfig) === null || _k === void 0 ? void 0 : _k.algorithm) || 'SHA1'}' }`] : [])\n ];\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n await ppw.runStep({\n ${args.join(',\\n ')}\n });\n });`;\n case PlaywrightAction.EXTRACT_VALUE:\n const extractVarName = getReturnValueParameterName(interaction);\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n const ${extractVarName} = await ppw.runStep({\n iframeSelector: '${iframe}',\n elementSelector: '${selector}',\n smartSelector: ${JSON.stringify(smartSelector)},\n smartIFrameSelector: ${JSON.stringify(smartIFrameSelector)},\n action: '${interaction.action}', \n annotation: '${(_l = interaction.annotation) !== null && _l !== void 0 ? _l : \"\"}',\n });\n param['${extractVarName}'] = ${extractVarName};\n });`;\n case PlaywrightAction.EXECUTE_SCRIPT:\n return generateExecuteScriptCode(interaction, comment, escapedStepName);\n default:\n return `// Unhandled action: ${interaction.action}!!!`;\n }\n}\nfunction interactionToProboLib(interaction) {\n var _a, _b, _c;\n const escapedPrompt = (_c = (_b = (_a = interaction.serverResponse) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b.prompt) === null || _c === void 0 ? void 0 : _c.replace(/'/g, \"\\\\'\");\n const argument = isParameterizable(interaction) ? `param.${interaction.parameterName}` : `'${interaction.argument}'`;\n // Escape the nativeDescription for use in test.step() string literal\n const escapedStepName = interaction.nativeDescription.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n const comment = `\n // ${interaction.nativeDescription}${interaction.annotation ? `\\n // annotation: ${interaction.annotation}` : ''}`;\n if (interaction.action === PlaywrightAction.EXTRACT_VALUE) {\n const extractVarName = getReturnValueParameterName(interaction);\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n const ${extractVarName} = await probo.runStep(page, '${escapedPrompt}', null, { stepId: ${interaction.stepId} });\n param['${extractVarName}'] = ${extractVarName};\n });`;\n }\n else if (interaction.action === PlaywrightAction.ASSERT_CONTAINS_VALUE ||\n interaction.action === PlaywrightAction.ASSERT_EXACT_VALUE) {\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n await probo.runStep(page, '${escapedPrompt}', ${argument}, { stepId: ${interaction.stepId} });\n });`;\n }\n else if (interaction.action === PlaywrightAction.VISIT_URL) {\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n await probo.runStep(page, '${interaction.nativeDescription}', ${argument}, { stepId: ${interaction.stepId} });\n });`;\n }\n else if (interaction.action === PlaywrightAction.ASK_AI) {\n const escapedQuestion = interaction.nativeDescription.replace(/'/g, \"\\\\'\");\n const aiVarName = getReturnValueParameterName(interaction);\n // const assertion = interaction.argument ? ` \n const askAIOptions = interaction.stepId ? `{ stepId: ${interaction.stepId} }` : '{}';\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n const ${aiVarName} = await probo.askAI(page, '${escapedQuestion}', ${askAIOptions}${argument ? `, ${argument}` : ''});\n param['${aiVarName}'] = ${aiVarName};\n });`;\n }\n else if (interaction.action === PlaywrightAction.EXECUTE_SCRIPT) {\n return generateExecuteScriptCode(interaction, comment, escapedStepName);\n }\n else {\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n ${argument ? `await probo.runStep(page, '${escapedPrompt}', ${argument}, { stepId: ${interaction.stepId} });` : `await probo.runStep(page, '${escapedPrompt}', null, { stepId: ${interaction.stepId} });`}\n });`;\n }\n}\nfunction generateExecuteScriptCode(interaction, comment, escapedStepName) {\n let scriptCode = Array.isArray(interaction.argument) ? interaction.argument[0] : interaction.argument;\n const scriptVarName = getReturnValueParameterName(interaction);\n // Replace returnValue(x) with 'const param = x;'\n scriptCode = scriptCode.replace(/returnValue\\((.*)\\);?/, `${scriptVarName} = $1;`);\n // Trim trailing whitespace\n scriptCode = scriptCode.trimEnd();\n // If scriptCode doesn't end with a semicolon add one\n if (!/\\s*;\\s*$/.test(scriptCode))\n scriptCode = scriptCode + ';';\n // Indent the code (extra indent for test.step wrapper)\n const indentedCode = scriptCode.split('\\n').map((line, idx) => idx === 0 ? line : ` ${line}`).join('\\n');\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n let ${scriptVarName} = null;\n try {\n ${indentedCode}\n } catch (error) {\n console.error('❌ Workspace script execution failed:', error.message);\n throw error;\n }\n param['${scriptVarName}'] = ${scriptVarName};\n });`;\n}\nfunction scriptTemplate(options, settings, viewPort) {\n var _a, _b, _c, _d;\n const areActionsParameterized = options.rows.length > 0;\n const hasAiInteractions = options.interactions.some((interaction) => isAI(interaction));\n const hasScriptInteractions = options.interactions.some((interaction) => interaction.action === PlaywrightAction.EXECUTE_SCRIPT);\n // const uniquelyParameterizedInteractions = uniquifyInteractionParameters(options.interactions);\n const steps = options.interactions.map((interaction) => {\n if (isAI(interaction))\n return interactionToProboLib(interaction);\n return interactionToNativeCode(interaction);\n }).join('\\n');\n // Get list of all extracted value parameter names to filter them out from the parameter table\n const extractedValueNames = new Set();\n options.interactions.forEach((interaction) => {\n if (hasReturnValue(interaction)) {\n const retName = getReturnValueParameterName(interaction);\n if (retName) {\n extractedValueNames.add(retName);\n }\n }\n });\n // Escape apostrophes and backslashes for single-quoted strings\n const escapeForSingleQuotes = (value) => {\n if (!value || typeof value !== 'string')\n return ''; //check for null, undefined, or non-string values\n //escape backslashes and single quotes\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n };\n // Lookup value from settings \n const aiModelKey = Object.keys(AIModel).find(key => AIModel[key] === settings.aiModel);\n // Check if any interactions have the isSecret flag set\n const hasSecrets = options.interactions.some(interaction => interaction.isSecret === true);\n // Extract required environment variable names from parameter table rows\n const requiredEnvVars = extractRequiredEnvVars(options.rows);\n const requiredEnvVarsArray = Array.from(requiredEnvVars).sort();\n // generate the parameter table (exclude extracted values as they are declared as const in the steps)\n const parameterTable = areActionsParameterized ? `\n const parameterTable: Record<string, any>[] = [\n ${options.rows.map((row) => {\n // Filter out extracted value columns from the parameter table\n const filteredRow = Object.fromEntries(Object.entries(row).filter(([key]) => !extractedValueNames.has(key)));\n return `{ ${Object.entries(filteredRow).map(([key, value]) => `${key}: '${escapeForSingleQuotes(value)}'`).join(', ')} }`;\n }).join(',\\n ')}\n ];\n ` : '';\n const proboConstructor = hasAiInteractions ? `\n const probo = new Probo({\n scenarioName: '${options.scenarioName}',\n enableSmartSelectors: ${settings.enableSmartSelectors},\n debugLevel: ProboLogLevel.${settings.debugLevel},\n aiModel: AIModel.${aiModelKey},\n timeoutConfig: {\n waitForStabilityQuietTimeout: ${(_a = settings.waitForStabilityQuietTimeout) !== null && _a !== void 0 ? _a : 2000},\n waitForStabilityInitialDelay: ${(_b = settings.waitForStabilityInitialDelay) !== null && _b !== void 0 ? _b : 500},\n waitForStabilityGlobalTimeout: ${(_c = settings.waitForStabilityGlobalTimeout) !== null && _c !== void 0 ? _c : 15000},\n waitForStabilityVerbose: ${(_d = settings.waitForStabilityVerbose) !== null && _d !== void 0 ? _d : false}\n }\n });` : '';\n return `\n /*\n * Probo Labs Playwright Script\n * Scenario: ${options.scenarioName}\n * Auto generated on ${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}\n * \n * HOW TO INTEGRATE THIS SCRIPT INTO YOUR EXISTING PROJECT:\n * 1. Install dependencies: npm install @playwright/test @probolabs/playwright@latest${hasSecrets ? ' dotenv' : ''}\n * 2. copy and paste the code below into your test file${hasSecrets ? '\\n * 3. Ensure a .env file exists in your project root (or ~/.probium/.env) or set environment variables manually' : ''}\n */\n \n // launch chromium with pre-installed extensions\n import { test, expect} from '@probolabs/playwright/fixtures';\n import { ProboPlaywright, Probo, PlaywrightAction, ProboLogLevel, AIModel } from '@probolabs/playwright';${hasScriptInteractions ? `\n import { execSync } from 'child_process';\n import * as fs from 'fs';\n import * as path from 'path';\n import * as os from 'os';` : ''}${hasSecrets && !hasScriptInteractions ? `\n import * as path from 'path';\n import * as os from 'os';\n import * as fs from 'fs';` : ''}\n \n${hasSecrets ? `import { config } from 'dotenv';\n // Load secrets: first try local .env (project root), then fallback to ~/.probium/.env\n const localEnvPath = path.join(process.cwd(), '.env');\n const homeEnvPath = path.join(os.homedir(), '.probium', '.env');\n \n if (fs.existsSync(localEnvPath)) {\n config({ path: localEnvPath });\n console.log('✅ Loaded env vars from project .env:', localEnvPath);\n } else if (fs.existsSync(homeEnvPath)) {\n config({ path: homeEnvPath });\n console.log('✅ Loaded env vars from home .env:', homeEnvPath);\n } else {\n console.warn('⚠️ .env not found at', localEnvPath, 'or', homeEnvPath, '- ensure environment variables are set before running tests');\n }\n \n // Validate that all required secrets are set\n const requiredSecrets: string[] = ${JSON.stringify(requiredEnvVarsArray)};\n const missingSecrets = requiredSecrets.filter(varName => !process.env[varName] || process.env[varName].trim() === '');\n if (missingSecrets.length > 0) {\n throw new Error(\\`Missing required environment variables: \\${missingSecrets.join(', ')}. Please set them in your .env file or as environment variables.\\`);\n }\n console.log(\\`✅ All required secrets are set: \\${requiredSecrets.join(', ')}\\`);\n ` : ''}\n \n ${parameterTable} \n ${proboConstructor}\n const ppw = new ProboPlaywright({\n enableSmartSelectors: ${settings.enableSmartSelectors},\n debugLevel: ProboLogLevel.${settings.debugLevel},\n timeoutConfig: {\n waitForStabilityQuietTimeout: ${settings.waitForStabilityQuietTimeout},\n waitForStabilityInitialDelay: ${settings.waitForStabilityInitialDelay},\n waitForStabilityGlobalTimeout: ${settings.waitForStabilityGlobalTimeout},\n waitForStabilityVerbose: ${settings.waitForStabilityVerbose},\n highlightTimeout: ${settings.highlightTimeout},\n playwrightActionTimeout: ${settings.playwrightActionTimeout},\n playwrightNavigationTimeout: ${settings.playwrightNavigationTimeout},\n playwrightLocatorTimeout: ${settings.playwrightLocatorTimeout}\n }\n });\n\n test.describe('${options.scenarioName}', () => {\n test.beforeEach(async ({ page }) => {\n // set the ProboPlaywright instance to the current page\n ppw.setPage(page); \n // set the viewport dimensions to be identical to their values during recording\n await page.setViewportSize({ width: ${viewPort.width}, height: ${viewPort.height} });\n });\n\n for (const param of parameterTable) {\n test(param.testName, async ({ page }) => {\n ${hasAiInteractions ? `probo.setParams(param);` : ''}\n ppw.setParams(param);\n ${steps}\n });\n }\n });\n `;\n}\n/**\n * Generates Playwright code for a scenario\n * @param options - Code generation options (scenarioName, interactions, rows)\n * @param settings - Recorder settings (timeouts, AI model, etc.)\n * @param viewPort - Viewport dimensions {width, height}\n * @returns Generated Playwright test code as a string\n */\nexport function generateCode(options, settings, viewPort) {\n return scriptTemplate(options, settings, viewPort);\n}\n// Custom function to create a URL-friendly slug\nexport const createUrlSlug = (url) => {\n try {\n const urlObj = new URL(url);\n // Extract hostname and path\n const hostname = urlObj.hostname;\n const path = urlObj.pathname;\n // Create a more readable name\n let name = hostname;\n // Add path segments if they exist and are meaningful\n if (path && path !== '/') {\n // Remove leading slash and split by slashes\n const pathSegments = path.substring(1).split('/').filter(segment => segment);\n // Add meaningful path segments to the name\n if (pathSegments.length > 0) {\n // Take up to 2 path segments to keep the name reasonable\n const relevantSegments = pathSegments.slice(0, 2);\n name += '-' + relevantSegments.join('-');\n }\n }\n // Replace any remaining special characters with hyphens\n return name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-') // Replace non-alphanumeric chars with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with a single hyphen\n .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens\n }\n catch (error) {\n // If URL parsing fails, create a simple slug\n // proboLog('❌ Error parsing URL:', error); // Don't log here, just fallback\n return url\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '');\n }\n};\n/**\n * Default @playwright/test version for generated test suites.\n * Aligns with @probolabs/playwright peer dependency (^1.54.0).\n */\nexport const DEFAULT_PLAYWRIGHT_TEST_VERSION = '^1.57.0';\n/**\n * Generate package.json content for a Playwright test project\n */\nexport function generatePackageJson(options) {\n const { name, hasSecrets = false, testScript = 'npx playwright test', playwrightTestVersion = DEFAULT_PLAYWRIGHT_TEST_VERSION } = options;\n return `{\n \"name\": \"${name}\",\n \"version\": \"1.0.0\",\n \"description\": \"Probo Labs Playwright Script\",\n \"type\": \"module\",\n \"scripts\": {\n \"test\": \"${testScript}\"\n },\n \"dependencies\": {\n \"@playwright/test\": \"${playwrightTestVersion}\",\n \"@probolabs/playwright\": \"latest\"${hasSecrets ? ',\\n \"dotenv\": \"latest\"' : ''}\n }\n}`;\n}\n/**\n * Generate playwright.config.ts content\n */\nexport function generatePlaywrightConfig(includeReporter = true, runId) {\n const reporters = [\n ['list'],\n ['html', { open: 'never' }],\n ];\n // Configure run-specific output directories if runId is provided\n if (runId !== undefined) {\n reporters[1] = ['html', { open: 'never', outputFolder: `playwright-report/run-${runId}` }];\n }\n if (includeReporter) {\n reporters.push(['./probo-reporter.ts']);\n }\n // Configure outputDir for run-specific test results if runId is provided\n const outputDirConfig = runId !== undefined ? `\\n outputDir: 'test-results/run-${runId}',` : '';\n return `import { defineConfig } from '@playwright/test';\n\nexport default defineConfig({\n testDir: 'tests',\n testMatch: /.*\\\\.(ts|js)$/,\n timeout: 600000,${outputDirConfig}\n // Keep Playwright's default console output, plus HTML report${includeReporter ? ', plus Probo live progress reporter' : ''}.\n reporter: ${JSON.stringify(reporters)},\n use: {\n ignoreHTTPSErrors: true,\n actionTimeout: 30000,\n navigationTimeout: 30000,\n video: 'off',\n screenshot: 'on',\n trace: 'on',\n },\n retries: 0,\n});\n`;\n}\n/**\n * Generate a Playwright reporter that emits structured events to stdout.\n *\n * The recorder app runner can parse these lines and broadcast them to the UI.\n */\nexport function generateProboReporter() {\n // NOTE: Keep this file dependency-free; it runs inside the generated test suite project.\n // It prints one JSON payload per line, prefixed for easy extraction from stdout.\n return `import type { Reporter, FullConfig, Suite, TestCase, TestResult, TestStep } from '@playwright/test/reporter';\n\nconst PREFIX = '__PROBO_REPORTER_EVENT__';\n\ntype ProboReporterEvent =\n | {\n v: 1;\n ts: number;\n eventType: 'runBegin';\n config: { workers: number; retries: number; projects: string[] };\n }\n | {\n v: 1;\n ts: number;\n eventType: 'runEnd';\n status: 'passed' | 'failed' | 'timedout' | 'interrupted';\n }\n | {\n v: 1;\n ts: number;\n eventType: 'testBegin';\n test: ProboTestRef;\n }\n | {\n v: 1;\n ts: number;\n eventType: 'testEnd';\n test: ProboTestRef;\n result: {\n status: 'passed' | 'failed' | 'timedout' | 'skipped' | 'interrupted';\n expectedStatus: 'passed' | 'failed' | 'timedout' | 'skipped';\n duration: number;\n errors: string[];\n };\n }\n | {\n v: 1;\n ts: number;\n eventType: 'stepBegin';\n test: ProboTestRef;\n step: ProboStepRef & { title: string; category?: string; depth: number };\n }\n | {\n v: 1;\n ts: number;\n eventType: 'stepEnd';\n test: ProboTestRef;\n step: ProboStepRef & { duration?: number; error?: string | null };\n };\n\ntype ProboLocation = { file?: string; line?: number; column?: number };\ntype ProboTestRef = {\n id?: string;\n title: string;\n titlePath: string[];\n location?: ProboLocation;\n};\ntype ProboStepRef = {\n id: number;\n location?: ProboLocation;\n};\n\nfunction safeLocation(loc: any): ProboLocation | undefined {\n if (!loc || typeof loc !== 'object') return undefined;\n const file = typeof loc.file === 'string' ? loc.file : undefined;\n const line = typeof loc.line === 'number' ? loc.line : undefined;\n const column = typeof loc.column === 'number' ? loc.column : undefined;\n return file || line || column ? { file, line, column } : undefined;\n}\n\nfunction safeTitlePath(test: TestCase): string[] {\n try {\n // titlePath() exists on TestCase and includes describe blocks.\n return test.titlePath();\n } catch {\n return [test.title];\n }\n}\n\nfunction testRef(test: TestCase): ProboTestRef {\n return {\n // @ts-expect-error: Playwright has test.id at runtime; keep optional for forward/back compat.\n id: (test as any).id,\n title: test.title,\n titlePath: safeTitlePath(test),\n location: safeLocation((test as any).location),\n };\n}\n\nfunction serializeErrors(result: TestResult): string[] {\n const errors: any[] = (result as any).errors || [];\n if (!Array.isArray(errors)) return [];\n return errors\n .map((e) => {\n if (!e) return null;\n if (typeof e === 'string') return e;\n if (typeof e.message === 'string') return e.message;\n if (typeof e.value === 'string') return e.value;\n try {\n return JSON.stringify(e);\n } catch {\n return String(e);\n }\n })\n .filter(Boolean) as string[];\n}\n\nfunction emit(event: ProboReporterEvent) {\n try {\n process.stdout.write(PREFIX + JSON.stringify(event) + '\\\\n');\n } catch {\n // Ignore reporter failures; never break the run.\n }\n}\n\n/**\n * Check if a step should be included in the output.\n * Filters out hooks, fixtures, and internal Playwright operations.\n */\nfunction shouldIncludeStep(step: TestStep): boolean {\n const category = (step as any).category;\n const title = step.title?.toLowerCase() || '';\n \n // Filter out hooks (beforeAll, beforeEach, afterAll, afterEach)\n if (category === 'hook') {\n return false;\n }\n \n // Filter out fixtures\n if (category === 'fixture') {\n return false;\n }\n \n // Filter out internal waiting/timeout operations\n if (title.includes('waiting for') || \n title.includes('wait for') ||\n title.includes('timeout') ||\n title.includes('attaching') ||\n title.startsWith('attach')) {\n return false;\n }\n \n // Include user-defined steps and assertions only (exclude pw:api like click, evaluate, etc.)\n return category === 'test.step' || \n category === 'expect' ||\n !category; // Include steps without category (likely user actions)\n}\n\nexport default class ProboReporter implements Reporter {\n private stepIds = new WeakMap<TestStep, number>();\n private stepDepths = new WeakMap<TestStep, number>();\n private nextStepId = 1;\n\n onBegin(config: FullConfig, suite: Suite) {\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'runBegin',\n config: {\n workers: config.workers,\n retries: config.retries,\n projects: (config.projects || []).map((p) => p.name || 'project'),\n },\n });\n }\n\n onEnd(result: any) {\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'runEnd',\n status: result?.status || 'failed',\n });\n }\n\n onTestBegin(test: TestCase, result: TestResult) {\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'testBegin',\n test: testRef(test),\n });\n }\n\n onTestEnd(test: TestCase, result: TestResult) {\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'testEnd',\n test: testRef(test),\n result: {\n status: result.status,\n expectedStatus: result.expectedStatus,\n duration: result.duration,\n errors: serializeErrors(result),\n },\n });\n }\n\n onStepBegin(test: TestCase, result: TestResult, step: TestStep) {\n // Filter out hooks, fixtures, and internal operations\n if (!shouldIncludeStep(step)) {\n return;\n }\n\n const id = this.stepIds.get(step) ?? this.nextStepId++;\n this.stepIds.set(step, id);\n\n const depth = this.stepDepths.get(step) ?? (step.parent ? (this.stepDepths.get(step.parent) ?? 0) + 1 : 0);\n this.stepDepths.set(step, depth);\n\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'stepBegin',\n test: testRef(test),\n step: {\n id,\n title: step.title,\n category: (step as any).category,\n depth,\n location: safeLocation((step as any).location),\n },\n });\n }\n\n onStepEnd(test: TestCase, result: TestResult, step: TestStep) {\n // Filter out hooks, fixtures, and internal operations\n if (!shouldIncludeStep(step)) {\n return;\n }\n\n const id = this.stepIds.get(step) ?? this.nextStepId++;\n this.stepIds.set(step, id);\n\n const err = (step as any).error;\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'stepEnd',\n test: testRef(test),\n step: {\n id,\n duration: (step as any).duration,\n error: err ? (typeof err.message === 'string' ? err.message : String(err)) : null,\n location: safeLocation((step as any).location),\n },\n });\n }\n}\n`;\n}\n//# sourceMappingURL=codegen.js.map","/**\n * Node.js/Playwright-specific interpolation utilities.\n * These functions add process to the context for ${process.env.X} templates,\n * so they belong in probo-playwright (Node-only) rather than probo-shared (browser-compatible).\n */\nimport { interpolateTemplate } from '@probolabs/probo-shared';\n\n/**\n * Builds the standard interpolation context for template literals.\n * Merges params with additional context and includes process (when available)\n * so that ${process.env.VAR_NAME} templates resolve correctly.\n *\n * @param params The primary context (e.g., parameter table row)\n * @param additionalContext Optional extra context (e.g., extractedValues)\n * @returns Context object suitable for interpolateTemplate\n */\nexport function buildInterpolationContext(\n params: Record<string, any>,\n additionalContext?: Record<string, any>\n): Record<string, any> {\n return {\n ...params,\n ...(additionalContext || {}),\n ...(typeof process !== 'undefined' && { process }),\n };\n}\n\n/**\n * Interpolates a string with params and optional additional context.\n * Convenience wrapper that builds the standard context (including process for ${process.env.X})\n * and calls interpolateTemplate.\n *\n * @param str The string containing template literal syntax (e.g., \"${process.env.TOTP_SECRET}\")\n * @param params The primary context (e.g., parameter table row)\n * @param additionalContext Optional extra context (e.g., extractedValues)\n * @returns The interpolated string\n */\nexport function interpolateWithParams(\n str: string,\n params: Record<string, any>,\n additionalContext?: Record<string, any>\n): string {\n const context = buildInterpolationContext(params, additionalContext);\n return interpolateTemplate(str, context);\n}\n","import { ProboLogger } from \"@probolabs/probo-shared\";\n\n// Default logger instance\nexport const proboLogger = new ProboLogger('proboLib');\n","import { Page, Frame, Locator } from 'playwright';\nimport { DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, PlaywrightAction, matchRegex } from '@probolabs/probo-shared';\nimport { proboLogger } from './probo-logger';\n\nexport const SPECIAL_KEYS = [\n 'Enter', 'Tab', 'Escape', 'Backspace', 'Delete',\n 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n 'Home', 'End', 'PageUp', 'PageDown',\n 'Insert', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12',\n 'Shift', 'Control', 'Alt', 'Meta',\n 'CapsLock', 'NumLock', 'ScrollLock',\n 'Pause', 'PrintScreen', 'ContextMenu',\n 'AudioVolumeUp', 'AudioVolumeDown', 'AudioVolumeMute',\n 'MediaTrackNext', 'MediaTrackPrevious', 'MediaStop', 'MediaPlayPause',\n 'BrowserBack', 'BrowserForward', 'BrowserRefresh', 'BrowserFavorites'\n] as const;\n\n/**\n * Handle potential navigation exactly like Python's handle_potential_navigation\n */\nexport async function handlePotentialNavigation_deprecated(\n page: Page,\n locator: Locator | null = null,\n value: string | null = null,\n options: {\n initialTimeout?: number;\n navigationTimeout?: number;\n globalTimeout?: number;\n } = {}\n): Promise<boolean> {\n const {\n initialTimeout,\n navigationTimeout,\n globalTimeout,\n } = options;\n \n const finalInitialTimeout = initialTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationInitialTimeout!;\n const finalNavigationTimeout = navigationTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationNavigationTimeout!;\n const finalGlobalTimeout = globalTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationGlobalTimeout!;\n\n const startTime = Date.now();\n let navigationCount = 0;\n let lastNavTime: number | null = null;\n\n const onFrameNav = (frame: Frame) => {\n if (frame === page.mainFrame()) {\n navigationCount++;\n lastNavTime = Date.now();\n proboLogger.debug(\n `DEBUG_NAV[${((Date.now() - startTime) / 1000).toFixed(3)}s]: navigation detected (count=${navigationCount})`\n );\n }\n };\n\n proboLogger.debug(`DEBUG_NAV[0.000s]: Starting navigation detection`);\n page.on(\"framenavigated\", onFrameNav);\n\n try {\n if (locator) {\n proboLogger.debug(`DEBUG_NAV: Executing click(${value})`);\n await clickAtPosition(page, locator, value as ClickPosition | null);\n }\n\n // wait for any initial nav to fire\n await page.waitForTimeout(finalInitialTimeout);\n proboLogger.debug(\n `DEBUG_NAV[${((Date.now() - startTime) / 1000).toFixed(3)}s]: After initial wait, count=${navigationCount}`\n );\n\n if (navigationCount > 0) {\n // loop until either per-nav or global timeout\n while (true) {\n const now = Date.now();\n if (\n lastNavTime !== null &&\n now - lastNavTime > finalNavigationTimeout\n ) {\n proboLogger.debug(\n `DEBUG_NAV[${((now - startTime) / 1000).toFixed(3)}s]: per‐navigation timeout reached`\n );\n break;\n }\n if (now - startTime > finalGlobalTimeout) {\n proboLogger.debug(\n `DEBUG_NAV[${((now - startTime) / 1000).toFixed(3)}s]: overall timeout reached`\n );\n break;\n }\n await page.waitForTimeout(500);\n }\n\n // now wait for load + idle\n proboLogger.debug(`DEBUG_NAV: waiting for load state`);\n await page.waitForLoadState(\"load\", { timeout: finalGlobalTimeout });\n\n proboLogger.debug(`DEBUG_NAV: waiting for networkidle`);\n try {\n // shorter idle‐wait so we don't hang the full globalTimeout here\n await page.waitForLoadState(\"networkidle\", {\n timeout: finalNavigationTimeout,\n });\n } catch {\n proboLogger.debug(\n `DEBUG_NAV: networkidle not reached in ${finalNavigationTimeout}ms, proceeding anyway`\n );\n }\n\n await scrollToBottomRight(page);\n proboLogger.debug(`DEBUG_NAV: done`);\n return true;\n }\n\n proboLogger.debug(`DEBUG_NAV: no navigation detected`);\n return false;\n } finally {\n page.removeListener(\"framenavigated\", onFrameNav);\n proboLogger.debug(`DEBUG_NAV: listener removed`);\n }\n}\n\n\n/**\n * Scroll entire page to bottom-right, triggering lazy-loaded content\n */\nexport async function scrollToBottomRight(page: Page): Promise<void> {\n const startTime = performance.now();\n proboLogger.debug(`Starting scroll to bottom-right`);\n\n let lastHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n let lastWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n\n let smoothingSteps = 0;\n while (true) { \n const initY = await page.evaluate(() => window.scrollY);\n const initX = await page.evaluate(() => window.scrollX);\n const clientHeight = await page.evaluate(() => document.documentElement.clientHeight);\n const maxHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n const clientWidth = await page.evaluate(() => document.documentElement.clientWidth);\n const maxWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n \n let currX = initX;\n while (currX < maxWidth - clientWidth) {\n let currY = initY;\n while (currY < maxHeight - clientHeight) {\n currY += clientHeight;\n await page.evaluate(([x, y]) => window.scrollTo(x, y), [currX, currY]);\n await page.waitForTimeout(50);\n smoothingSteps++;\n }\n currX += clientWidth;\n }\n\n proboLogger.debug(\n `performed ${smoothingSteps} smoothing steps while scrolling`\n );\n\n const newHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n const newWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n if (newHeight === lastHeight && newWidth === lastWidth) break;\n proboLogger.debug(`page dimensions updated, repeating scroll`);\n lastHeight = newHeight;\n lastWidth = newWidth;\n }\n\n if (smoothingSteps > 0) {\n await page.waitForTimeout(200);\n await page.evaluate('window.scrollTo(0, 0)');\n await page.waitForTimeout(50);\n }\n proboLogger.debug(`Scroll completed in ${(performance.now() - startTime).toFixed(3)}ms`);\n}\n\n/**\n * Wait for DOM mutations to settle using MutationObserver logic\n */\nexport async function waitForMutationsToSettle(\n page: Page,\n mutationTimeout: number = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsTimeout!,\n initTimeout: number = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsInitTimeout!\n): Promise<boolean> {\n const startTime = Date.now();\n proboLogger.debug(\n `Starting mutation settlement (initTimeout=${initTimeout}, mutationTimeout=${mutationTimeout})`\n );\n\n const result = await page.evaluate(\n async ({ mutationTimeout, initTimeout }) => {\n async function blockUntilStable(\n targetNode: HTMLElement,\n options = { childList: true, subtree: true }\n ) {\n return new Promise<boolean>((resolve) => {\n let initTimerExpired = false;\n let mutationsOccurred = false;\n const observerTimers = new Set<number>();\n\n const initTimer = window.setTimeout(() => {\n initTimerExpired = true;\n if (observerTimers.size === 0) resolve(mutationsOccurred);\n }, initTimeout);\n\n const observer = new MutationObserver(() => {\n mutationsOccurred = true;\n observerTimers.forEach((t) => clearTimeout(t));\n observerTimers.clear();\n const t = window.setTimeout(() => {\n observerTimers.delete(t);\n if (initTimerExpired && observerTimers.size === 0) {\n observer.disconnect();\n resolve(mutationsOccurred);\n }\n }, mutationTimeout);\n observerTimers.add(t);\n });\n\n observer.observe(targetNode, options);\n });\n }\n return blockUntilStable(document.body as HTMLElement);\n },\n { mutationTimeout, initTimeout }\n );\n\n const total = ((Date.now() - startTime) / 1000).toFixed(2);\n proboLogger.debug(\n result\n ? `Mutations settled. Took ${total}s`\n : `No mutations observed. Took ${total}s`\n );\n\n return result;\n}\n\n\n/**\n * Get element text value: allTextContents + innerText fallback\n */\nexport async function getElementValue(\n page: Page,\n locator: Locator\n): Promise<string> {\n const texts = await locator.allTextContents();\n let allText = texts.join('').trim();\n if (!allText) {\n allText = await locator.evaluate((el: HTMLElement) => el.innerText);\n }\n if (!allText) {\n allText = await locator.inputValue();\n }\n proboLogger.debug(`getElementValue: [${allText}]`);\n return allText;\n}\n\n/**\n * Select dropdown option: native <select>, <option>, child select, or ARIA listbox\n */\nexport async function selectDropdownOption(\n page: Page,\n locator: Locator,\n value: string | string[]\n): Promise<void> { \n const tagName = await locator?.evaluate((el) => el.tagName.toLowerCase());\n const role = await locator?.getAttribute('role');\n\n if (tagName === 'option' || role === 'option') {\n proboLogger.debug('selectDropdownOption: option role detected');\n await locator?.click();\n } else if (tagName === 'select') {\n proboLogger.debug('selectDropdownOption: simple select tag detected');\n try {\n await locator?.selectOption(value as any);\n } catch {\n proboLogger.debug('selectDropdownOption: manual change event fallback');\n const handle = locator ? await locator.elementHandle() : null;\n await page.evaluate(\n ({ h, val }: { h: HTMLElement | SVGElement | null, val: string | string[] }) => {\n const el = h as HTMLSelectElement;\n if (el) {\n el.value = Array.isArray(val) ? val[0] : (val as string);\n el.dispatchEvent(new Event('change', { bubbles: true }));\n }\n },\n { h: handle, val: value }\n );\n }\n } else {\n proboLogger.debug('selectDropdownOption: custom dropdown path');\n let listbox = locator.locator('select');\n let count = await listbox.count();\n if (count > 1) throw new Error(`selectDropdownOption: ambiguous <select> count=${count}`);\n if (count === 1) {\n proboLogger.debug('selectDropdownOption: child <select> found');\n await listbox.selectOption(value as any);\n return;\n }\n await locator.click();\n let container = locator;\n count = 0;\n if (role !== 'listbox') {\n for (let i = 0; i < 7; i++) {\n listbox = container.getByRole('listbox');\n count = await listbox.count();\n if (count >= 1) break;\n proboLogger.debug(`selectDropdownOption: iteration #${i} no listbox found`);\n container = container.locator('xpath=..');\n }\n } else {\n listbox = container;\n count = await listbox.count();\n }\n if (count !== 1) throw new Error(`selectDropdownOption: found ${count} listbox locators`);\n const vals = Array.isArray(value) ? value : [value];\n for (const val of vals) {\n const option = listbox.getByRole('option').getByText(new RegExp(`^${val}$`, 'i'));\n const optCount = await option.count();\n if (optCount !== 1) throw new Error(`selectDropdownOption: ${optCount} options for '${val}'`);\n await option.click();\n }\n }\n}\n\n/**\n * Execute a given Playwright action, mirroring Python's _perform_action\n */\nexport async function executePlaywrightAction_deprecated(\n page: Page,\n action: PlaywrightAction,\n value: string|boolean,\n iframe_selector: string,\n element_css_selector: string\n): Promise<boolean|string> {\n proboLogger.info(`performing Action: ${action} Value: ${value}`);\n try {\n \n if (action === PlaywrightAction.VISIT_BASE_URL || action === PlaywrightAction.VISIT_URL) {\n await page.goto(value as string, { waitUntil: 'load' });\n await handlePotentialNavigation_deprecated(page, null); \n }\n else {\n let locator = undefined;\n if (iframe_selector)\n locator = page.frameLocator(iframe_selector).locator(element_css_selector);\n else\n locator = page.locator(element_css_selector);\n \n // Fail fast: immediately validate that the element exists\n try {\n await locator.waitFor({ state: 'attached' });\n } catch (e) {\n throw new Error(`Element not found with selector: ${element_css_selector}${iframe_selector ? ` in iframe: ${iframe_selector}` : ''}`);\n }\n switch (action) { \n case PlaywrightAction.CLICK:\n await handlePotentialNavigation_deprecated(page, locator, value as ClickPosition | null);\n break;\n\n case PlaywrightAction.FILL_IN:\n // await locator.click();\n await locator.fill(value as string);\n break;\n\n case PlaywrightAction.TYPE_KEYS:\n // Check if the value contains any special keys\n const specialKey = SPECIAL_KEYS.find(key => (value as string).includes(key));\n if (specialKey) {\n // If it's a single special key, just press it\n if (value === specialKey) {\n await locator?.press(specialKey);\n } else {\n // Handle combinations like 'Control+A' or 'Shift+ArrowRight'\n const parts = (value as string).split('+');\n if (parts.length === 2 && SPECIAL_KEYS.includes(parts[0] as any) && SPECIAL_KEYS.includes(parts[1] as any)) {\n await locator?.press(value as string);\n } else {\n // If it's a mix of special keys and text, use pressSequentially\n await locator?.pressSequentially(value as string);\n }\n }\n } else {\n // No special keys, just type normally\n await locator?.pressSequentially(value as string);\n }\n break;\n\n case PlaywrightAction.SELECT_DROPDOWN:\n await selectDropdownOption(page, locator, value as string);\n break;\n\n case PlaywrightAction.SELECT_MULTIPLE_DROPDOWN:\n let optsArr: string[];\n if ((value as string).startsWith('[')) {\n try { optsArr = JSON.parse(value as string); } catch {\n optsArr = (value as string).slice(1, -1).split(',').map(o => o.trim());\n }\n } else {\n optsArr = (value as string).split(',').map(o => o.trim());\n }\n await locator?.selectOption(optsArr as any);\n break;\n\n case PlaywrightAction.CHECK_CHECKBOX:\n await locator?.setChecked(value == true);\n break;\n\n case PlaywrightAction.SELECT_RADIO:\n case PlaywrightAction.TOGGLE_SWITCH:\n await locator?.click();\n break;\n\n case PlaywrightAction.HOVER:\n if (await locator.isVisible()) {\n await locator?.hover({ noWaitAfter: false });\n await page.waitForTimeout(100); // short delay for hover to take effect\n }\n break;\n\n case PlaywrightAction.ASSERT_EXACT_VALUE: \n const actualExact = await getElementValue(page, locator);\n proboLogger.debug(`actual value is [${actualExact}]`);\n if (actualExact !== value) {\n proboLogger.info(`Validation *FAIL* expected '${value}' but got '${actualExact}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.ASSERT_CONTAINS_VALUE: \n const actualContains = await getElementValue(page, locator);\n proboLogger.debug(`actual value is [${actualContains}]`);\n if (!matchRegex(actualContains, value as string)) {\n proboLogger.info(`Validation *FAIL* expected '${actualContains}' to match '${value}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.ASSERT_URL:\n const currUrl = page.url();\n if (currUrl !== value) {\n proboLogger.info(`Validation *FAIL* expected url '${value}' while is '${currUrl}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.SCROLL_TO_ELEMENT:\n // Restore exact scroll positions from recording\n const scrollData = JSON.parse(value as string);\n try {\n proboLogger.debug('🔄 Restoring scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft);\n await locator.evaluate((el: HTMLElement, scrollData: { scrollTop: number; scrollLeft: number }) => {\n el.scrollTop = scrollData.scrollTop;\n el.scrollLeft = scrollData.scrollLeft;\n }, { scrollTop: scrollData.scrollTop, scrollLeft: scrollData.scrollLeft }, { timeout: 2000 });\n } catch (e) {\n proboLogger.error('🔄 Failed to restore scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft, 'error:', e);\n }\n await page.waitForTimeout(500);\n break;\n\n case PlaywrightAction.EXTRACT_VALUE:\n const extractedValue = await getElementValue(page, locator);\n proboLogger.debug(`extracted value is [${extractedValue}]`);\n return extractedValue;\n\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n }\n return true;\n } catch (e) {\n proboLogger.debug(`***ERROR failed to execute action ${action}: ${e}`);\n throw e;\n }\n}\n\n/**\n * Execute a given Playwright action using native Playwright functions where possible\n */\n\n\nexport enum ClickPosition {\n LEFT = 'LEFT',\n RIGHT = 'RIGHT',\n CENTER = 'CENTER'\n}\n\n/**\n * Click on an element at a specific position\n */\nexport async function clickAtPosition(page: Page, locator: Locator, clickPosition: ClickPosition | null): Promise<void> {\n if (!clickPosition || clickPosition === ClickPosition.CENTER) {\n await locator.click({noWaitAfter: false});\n return\n }\n const boundingBox = await locator.boundingBox();\n if (boundingBox) {\n if (clickPosition === ClickPosition.LEFT) {\n // await page.mouse.click(boundingBox.x + 10, boundingBox.y + boundingBox.height/2);\n // mouse click returns immediately, use locator click instead (position relative to top left corner)\n await locator.click({noWaitAfter: false, position: {x: 10, y: boundingBox.height/2}});\n }\n else if (clickPosition === ClickPosition.RIGHT) {\n // await page.mouse.click(boundingBox.x + boundingBox.width - 10, boundingBox.y + boundingBox.height/2);\n // mouse click returns immediately, use locator click instead (position relative to top left corner)\n await locator.click({noWaitAfter: false, position: {x: boundingBox.width - 10, y: boundingBox.height/2}});\n }\n }\n}\n\n/**\n * Traverses up the DOM from the given locator to find the closest visible ancestor.\n * Returns a Locator for the first visible element found, or null if none is visible up to <html>.\n * \n * @param locator - The Playwright locator to start searching from\n * @returns Promise that resolves to a visible ancestor locator or null if none found\n */\nexport async function findClosestVisibleElement(locator: Locator): Promise<Locator | null> {\n let currentLocator = locator;\n let parentLocator: Locator;\n while (true) {\n if (await currentLocator.isVisible()) {\n return currentLocator;\n }\n // Move up to the parent element\n parentLocator = currentLocator.locator('..');\n // Check if we've reached the top of the DOM\n const tagName = await parentLocator.evaluate(el => el.tagName).catch((): string | null => null);\n if (!tagName || tagName === 'HTML' || tagName === 'BODY') {\n break;\n }\n currentLocator = parentLocator;\n }\n return null;\n}\n","import type { Page } from 'playwright';\nimport { ElementTag, SmartSelector, ProboLogLevel } from '@probolabs/probo-shared';\nimport { proboLogger } from './probo-logger';\n\n// Fix the type definition\ntype ElementTagType = typeof ElementTag[keyof typeof ElementTag];\n\n// Add type declaration for the ProboLabs global\ndeclare global {\n // Declare highlighterCode in the global scope\n var highlighterCode: string;\n \n interface Window {\n ProboLabs?: {\n highlight: {\n execute: (elementTypes: ElementTagType[]) => Promise<any>;\n unexecute: () => Promise<any>;\n };\n highlightElements: (elements: Array<{ css_selector: string, iframe_selector: string, smart_selector: SmartSelector|null, smart_iframe_selector: SmartSelector|null, index: number }>, enableSmartSelectors: boolean) => void;\n unhighlightElements: () => void;\n findElements: (elementTypes: string) => any[];\n getElementInfo: (element: Element, index: number) => any;\n ElementTag: typeof ElementTag;\n\n // --- New caching API ---\n candidates?: any[];\n actual?: any;\n matchingCandidate?: any;\n findAndCacheCandidateElements?: (elementTypes: string[]) => number;\n findAndCacheActualElement?: (iframeSelector: string|SmartSelector, elementSelector: string|SmartSelector, isHover: boolean, useSmartSelectors: boolean) => boolean;\n findAndCacheMatchingCandidate?: () => boolean;\n highlightCachedElements?: (which: 'candidates' | 'actual' | 'matching') => void;\n unhighlight?: () => void;\n reset?: () => void;\n getCandidates?: () => any[];\n getActual?: () => any;\n getMatchingCandidate?: () => any;\n setLoggerDebugLevel?: (debugLevel: ProboLogLevel) => void;\n };\n }\n}\n\nexport class Highlighter {\n constructor(private readonly enableSmartSelectors: boolean = false, private readonly enableConsoleLogs: boolean = true, private readonly debugLevel: ProboLogLevel = ProboLogLevel.INFO) {}\n\n private async ensureHighlighterScript(page: Page, maxRetries = 3) {\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n const scriptExists = await page.evaluate(\n `typeof window.ProboLabs?.highlight?.execute === 'function'`\n );\n\n if (!scriptExists) {\n proboLogger.debug('Injecting highlighter script...');\n await page.evaluate(highlighterCode);\n \n // Verify the script was injected correctly\n const verified = await page.evaluate(`\n //console.log('ProboLabs global:', window.ProboLabs);\n typeof window.ProboLabs?.highlight?.execute === 'function'\n `);\n proboLogger.debug('Script injection verified:', verified);\n await page.evaluate(`window.ProboLabs.setLoggerDebugLevel('${this.debugLevel}');`);\n }\n return; // Success - exit the function\n } catch (error) {\n if (attempt === maxRetries - 1) {\n throw error;\n }\n proboLogger.debug(`Script injection attempt ${attempt + 1} failed, retrying after delay...`);\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n }\n }\n\n public async highlightElements(page: Page, elementTags: [ElementTagType]) {\n proboLogger.debug('highlightElements called with:', elementTags);\n await this.ensureHighlighterScript(page);\n \n // Execute the highlight function and await its result\n const result = await page.evaluate(\n async (tags) => {\n //proboLogger.debug('Browser: Starting highlight execution with tag:', tag);\n if (!window.ProboLabs?.highlight?.execute) {\n console.error('Browser: ProboLabs.highlight.execute is not available!');\n return null;\n }\n const elements = await window.ProboLabs.highlight.execute(tags);\n //proboLogger.debug('Browser: Found elements:', elements);\n return elements;\n },\n elementTags\n );\n \n // proboLogger.debug(\"highlighted elements =>\");\n // for (let i = 0; i < result.length; i++) { \n // proboLogger.debug(result[i]);\n // };\n \n return result;\n }\n\n public async unhighlightElements(page: Page) {\n proboLogger.debug('unhighlightElements called');\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window?.ProboLabs?.highlight?.unexecute();\n });\n }\n\n public async highlightElement(page: Page, element_css_selector: string, iframe_selector: string, smart_selector: SmartSelector|null, smart_iframe_selector: SmartSelector|null, element_index: number) {\n await this.ensureHighlighterScript(page);\n proboLogger.debug('Highlighting element with:', { element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, enableSmartSelectors: this.enableSmartSelectors, element_index });\n \n await page.evaluate(\n ({ css_selector, iframe_selector, smart_selector, smart_iframe_selector, index }) => {\n const proboLabs = window.ProboLabs;\n if (!proboLabs) {\n proboLogger.warn('ProboLabs not initialized');\n return;\n }\n // Create ElementInfo object for the element\n const elementInfo = {\n css_selector: css_selector,\n iframe_selector: iframe_selector,\n smart_selector: smart_selector,\n smart_iframe_selector: smart_iframe_selector,\n index: index\n };\n \n // Call highlightElements directly\n proboLabs.highlightElements([elementInfo], this.enableSmartSelectors);\n },\n { \n css_selector: element_css_selector,\n iframe_selector: iframe_selector,\n smart_selector: smart_selector,\n smart_iframe_selector: smart_iframe_selector,\n index: element_index \n }\n );\n }\n\n \n // --- New Clean Caching API ---\n /**\n * Find and cache candidate elements of a given type (e.g., 'CLICKABLE').\n * Returns the number of candidates found.\n */\n public async findAndCacheCandidateElements(page: Page, elementTypes: string[]): Promise<number> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate(async (types: string[]) => {\n return await window.ProboLabs?.findAndCacheCandidateElements?.(types);\n }, elementTypes);\n return result ?? 0;\n }\n\n /**\n * Find and cache the actual interaction element by CSS and iframe selector.\n * Returns true if found, false otherwise.\n */\n public async findAndCacheActualElement(page: Page, iframeSelector: string|SmartSelector, elementSelector: string|SmartSelector, isHover: boolean = false): Promise<boolean> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate((params: { iframeSelector: string|SmartSelector, elementSelector: string|SmartSelector, isHover: boolean, useSmartSelectors: boolean }) => {\n return window.ProboLabs?.findAndCacheActualElement?.(params.iframeSelector, params.elementSelector, params.isHover, params.useSmartSelectors);\n }, { iframeSelector: iframeSelector, elementSelector: elementSelector, isHover: isHover, useSmartSelectors: this.enableSmartSelectors });\n return result ?? false;\n }\n\n /**\n * Find and cache the best matching candidate for the actual element.\n * Returns true if a match was found, false otherwise.\n */\n public async findAndCacheMatchingCandidate(page: Page): Promise<boolean> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate(() => {\n return window.ProboLabs?.findAndCacheMatchingCandidate?.();\n });\n return result ?? false;\n }\n\n /**\n * Highlight the cached candidates, actual, or matching candidate.\n * @param which 'candidates' | 'actual' | 'matching'\n */\n public async highlightCachedElements(page: Page, which: 'candidates' | 'actual' | 'matching') {\n await this.ensureHighlighterScript(page);\n await page.evaluate((w: 'candidates' | 'actual' | 'matching') => {\n window.ProboLabs?.highlightCachedElements?.(w);\n }, which);\n }\n\n /**\n * Remove all highlights.\n */\n public async unhighlightCached(page: Page) {\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window.ProboLabs?.unhighlight?.();\n });\n }\n\n /**\n * Reset/clear all cached state.\n */\n public async resetCached(page: Page) {\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window.ProboLabs?.reset?.();\n });\n }\n\n /**\n * Get serializable info for Node/Playwright (candidates, actual, matchingCandidate)\n */\n public async getCandidatesCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getCandidates?.();\n });\n }\n\n public async getActualCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getActual?.();\n });\n }\n\n public async getMatchingCandidateCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getMatchingCandidate?.();\n });\n }\n}\n\nexport { ElementTag, ElementTagType };\n","const MAILPIT_BASE_URL = (process.env.MAILPIT_BASE_URL ?? 'http://mailpit.probolabs.ai:8025').replace(/\\/$/, '');\nconst MAILPIT_DEFAULT_DOMAIN = process.env.MAILPIT_DEFAULT_DOMAIN ?? 'mailpit.probolabs.ai';\nconst MAILPIT_USERNAME = process.env.MAILPIT_USERNAME;\nconst MAILPIT_PASSWORD = process.env.MAILPIT_PASSWORD;\nconst MAILPIT_FETCH_LIMIT = Number(process.env.MAILPIT_FETCH_LIMIT ?? 50);\n\nconst MAILPIT_API_BASE = `${MAILPIT_BASE_URL}/api/v1`;\n\ntype MailpitAddress = {\n Name?: string;\n Address?: string;\n};\n\ntype MailpitMessageSummary = {\n ID: string;\n MessageID?: string;\n Created?: string;\n Date?: string;\n Subject?: string;\n Read?: boolean;\n Snippet?: string;\n From?: MailpitAddress;\n To?: MailpitAddress[];\n Cc?: MailpitAddress[] | null;\n Bcc?: MailpitAddress[] | null;\n ReplyTo?: MailpitAddress[];\n Tags?: string[];\n Size?: number;\n Attachments?: number;\n Username?: string;\n};\n\ntype MailpitMessageDetail = MailpitMessageSummary & {\n Text?: string;\n HTML?: string;\n Inline?: Array<Record<string, unknown>>;\n Attachments?: Array<Record<string, unknown>>;\n};\n\ntype MailpitMessagesResponse = {\n messages?: MailpitMessageSummary[];\n total?: number;\n count?: number;\n start?: number;\n unread?: number;\n};\n\nexport interface MailinatorMessage {\n id: string;\n subject: string;\n from: string;\n origfrom?: string;\n to: string;\n time: number;\n seconds_ago?: number;\n domain?: string;\n source?: string;\n parts?: Array<{\n headers: Record<string, string>;\n body: string;\n }>;\n textBody?: string;\n htmlBody?: string;\n}\n\n/**\n * OTP utility class for working with Mailpit API\n */\nexport class OTP {\n /**\n * Flag to control whether messages should be deleted after OTP extraction\n * Set to false for debugging purposes to keep messages in the inbox\n * @default true\n */\n static DELETE_MESSAGE_AFTER_OTP_EXTRACTION = true;\n\n /**\n * Fetches the last messages from Mailpit for a specific inbox (or all inboxes)\n * @param inbox - Optional inbox (local part or full email). When omitted all inboxes are returned.\n * @param since - Unix timestamp to fetch messages since (optional)\n * @returns Promise<MailinatorMessage[]> - Array of normalized messages\n */\n static async fetchLastMessages(inbox?: string, since?: number): Promise<MailinatorMessage[]> {\n const normalizedInbox = OTP.normalizeInbox(inbox);\n\n try {\n console.log(`[fetchLastMessages] querying Mailpit (inbox=${normalizedInbox ?? 'ALL'})`);\n\n const data = await OTP.request<MailpitMessagesResponse>('/messages', undefined, {\n limit: MAILPIT_FETCH_LIMIT,\n mailbox: normalizedInbox,\n });\n\n const messages = (data.messages ?? []).map(OTP.mapSummaryToMessage);\n\n console.log(\n `[fetchLastMessages] received ${messages.length} messages`,\n messages.map((msg) => ({\n id: msg.id,\n to: msg.to,\n time: new Date(msg.time).toISOString(),\n subject: msg.subject,\n }))\n );\n\n if (since) {\n const filtered = messages.filter((message) => message.time >= since);\n console.log(\n `[fetchLastMessages] filtered to ${filtered.length} messages after since=${new Date(since).toISOString()}`\n );\n return filtered;\n }\n\n return messages;\n } catch (error) {\n console.error('Error fetching messages from Mailpit:', error);\n throw error;\n }\n }\n\n /**\n * Fetches a specific message by ID\n * @param messageId - The message ID\n * @returns Promise<MailinatorMessage> - The message details\n */\n static async fetchMessage(messageId: string): Promise<MailinatorMessage> {\n try {\n const data = await OTP.request<MailpitMessageDetail>(`/message/${encodeURIComponent(messageId)}`);\n return OTP.mapDetailToMessage(data);\n } catch (error) {\n console.error('Error fetching message from Mailpit:', error);\n throw error;\n }\n }\n\n /**\n * Deletes a specific message by ID\n * @param messageId - The message ID to delete\n * @returns Promise<boolean> - True if deleted successfully, false otherwise\n */\n static async deleteMessage(messageId: string): Promise<boolean> {\n try {\n const response = await OTP.rawRequest('/messages', {\n method: 'DELETE',\n body: JSON.stringify({\n messageIDs: [messageId],\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n console.error(`Failed to delete message ${messageId}: ${response.status} ${response.statusText}`);\n return false;\n }\n\n console.log(`🗑️ [deleteMessage] Deleted message: ${messageId}`);\n return true;\n } catch (error) {\n console.error('Error deleting message from Mailpit:', error);\n return false;\n }\n }\n\n\n /**\n * Extracts OTP codes from message content\n * @param message - The message to extract OTP from\n * @returns string | null - The OTP code or null if not found\n */\n static extractOTPFromMessage(message: MailinatorMessage): string | null {\n // Common OTP patterns - ordered by specificity (most specific first)\n const otpPatterns = [\n // Very specific patterns for common OTP formats\n /(?:verification\\s+code|verification\\s+number|6-digit\\s+verification\\s+code)[\\s\\S]*?(\\d{6})/i,\n /(?:use\\s+the\\s+6-digit\\s+verification\\s+code\\s+below)[\\s\\S]*?(\\d{6})/i,\n /(?:code\\s+below\\s+to\\s+complete)[\\s\\S]*?(\\d{6})/i,\n /(?:verification\\s+code)[\\s\\S]*?(\\d{6})/i,\n \n // Patterns with context around the code\n /(?:OTP|code|verification code|verification):\\s*(\\d{4,8})/i,\n /(?:enter|use|input)\\s+(?:the\\s+)?(?:code|OTP|verification code):\\s*(\\d{4,8})/i,\n /(?:your\\s+)?(?:verification\\s+)?(?:code\\s+is|OTP\\s+is):\\s*(\\d{4,8})/i,\n /(?:code|OTP|pin):\\s*(\\d{4,8})/i,\n /(?:code|OTP)\\s+is\\s+(\\d{4,8})/i,\n \n // Look for codes in specific contexts (avoiding URLs and tracking IDs)\n /(?:complete\\s+your\\s+sign-in)[\\s\\S]*?(\\d{6})/i,\n /(?:valid\\s+for\\s+the\\s+next)[\\s\\S]*?(\\d{6})/i,\n \n // Fallback: 6-digit numbers (most common OTP length)\n /(?:^|\\s)(\\d{6})(?:\\s|$)/i,\n \n // Last resort: 4-8 digit numbers (but avoid very long ones that are likely tracking IDs)\n /(?:^|\\s)(\\d{4,8})(?:\\s|$)/i\n ];\n\n // Helper function to check if a number is likely an OTP (not a tracking ID, phone number, year, etc.)\n const isValidOTP = (number: string, text: string): boolean => {\n // Common OTP lengths\n if (number.length < 4 || number.length > 8) return false;\n \n // Only filter out very obvious non-OTPs\n // Avoid numbers that are all the same digit (unlikely to be OTPs)\n if (/^(\\d)\\1+$/.test(number)) return false;\n \n // Avoid very long numbers that are clearly tracking IDs (but be more lenient)\n if (number.length >= 8 && parseInt(number) > 99999999) return false;\n \n // Filter out common false positives\n // Check if this looks like a year (4 digits starting with 19 or 20)\n if (number.length === 4 && /^(19|20)\\d{2}$/.test(number)) {\n // Check if it appears in copyright context\n if (text.includes(`© GoSource ${number}`) || text.includes(`©${number}`) || text.match(new RegExp(`©[^\\\\d]*${number}`, 'i'))) {\n return false;\n }\n }\n \n return true;\n };\n\n // Helper function to extract OTP from text content\n const extractFromText = (text: string, debugContext: string = ''): string | null => {\n if (!text) return null;\n \n for (let i = 0; i < otpPatterns.length; i++) {\n const pattern = otpPatterns[i];\n const match = text.match(pattern);\n if (match && match[1] && isValidOTP(match[1], text)) {\n console.log(`[OTP] Pattern ${i} matched \"${match[1]}\" in ${debugContext}`);\n return match[1];\n } else if (match && match[1]) {\n console.log(`[OTP] Pattern ${i} matched \"${match[1]}\" but rejected by isValidOTP in ${debugContext}`);\n }\n }\n return null;\n };\n\n // Helper function to strip HTML tags\n const stripHtml = (html: string): string => {\n return html.replace(/<[^>]*>/g, '').replace(/&[^;]+;/g, ' ');\n };\n\n // 1. Try to extract from text body first (preferred)\n if (message.textBody) {\n const otp = extractFromText(message.textBody, 'textBody');\n if (otp) return otp;\n }\n\n // 2. Try to extract from HTML body (strip HTML tags first)\n if (message.htmlBody) {\n const plainText = stripHtml(message.htmlBody);\n const otp = extractFromText(plainText, 'htmlBody');\n if (otp) return otp;\n }\n\n // 3. Try to extract from message parts\n if (message.parts && message.parts.length > 0) {\n for (let i = 0; i < message.parts.length; i++) {\n const part = message.parts[i];\n if (part.body) {\n const otp = extractFromText(part.body, `part[${i}]`);\n if (otp) return otp;\n }\n }\n }\n\n // 4. Fallback: try to extract from subject\n const otp = extractFromText(message.subject, 'subject');\n if (otp) return otp;\n \n return null;\n }\n\n /**\n * Gets the text content from a message for debugging/display purposes\n * @param message - The message to extract text from\n * @returns string - The text content of the message\n */\n static getMessageTextContent(message: MailinatorMessage): string {\n // Helper function to strip HTML tags\n const stripHtml = (html: string): string => {\n return html.replace(/<[^>]*>/g, '').replace(/&[^;]+;/g, ' ');\n };\n\n // Priority order: textBody > htmlBody > parts > subject\n if (message.textBody) {\n return message.textBody;\n }\n\n if (message.htmlBody) {\n return stripHtml(message.htmlBody);\n }\n\n if (message.parts && message.parts.length > 0) {\n return message.parts.map(part => part.body || '').join('\\n');\n }\n\n return message.subject || '';\n }\n\n /**\n * Fetches messages from all inboxes in the domain\n * @param limit - Number of messages to fetch (default: 50)\n * @param sort - Sort order: 'ascending' or 'descending' (default: 'descending')\n * @param full - Whether to fetch full message content (default: false)\n * @returns Promise<MailinatorMessage[]> - Array of messages from all inboxes\n */\n static async fetchAllInboxMessages(\n limit: number = MAILPIT_FETCH_LIMIT,\n sort: 'ascending' | 'descending' = 'descending',\n full: boolean = false\n ): Promise<MailinatorMessage[]> {\n const data = await OTP.request<MailpitMessagesResponse>('/messages', undefined, {\n limit,\n sort: sort === 'ascending' ? 'asc' : 'desc',\n });\n\n const summaries = (data.messages ?? []).map(OTP.mapSummaryToMessage);\n\n console.log(\n `[fetchAllInboxMessages] received ${summaries.length} messages`,\n summaries.map((msg) => ({\n id: msg.id,\n to: msg.to,\n time: new Date(msg.time).toISOString(),\n subject: msg.subject,\n }))\n );\n\n if (!full) {\n return summaries;\n }\n\n const expanded = await Promise.all(\n summaries.map(async (summary) => {\n try {\n return await OTP.fetchMessage(summary.id);\n } catch {\n return summary;\n }\n })\n );\n\n return expanded;\n }\n\n /**\n * Waits for an OTP to arrive in the inbox and extracts it\n * @param options - Configuration options for waiting for OTP\n * @param options.inbox - The inbox name to monitor (optional - if not provided, searches all inboxes)\n * @param options.timeout - Maximum time to wait in milliseconds (default: 30000)\n * @param options.checkInterval - How often to check in milliseconds (default: 1000)\n * @param options.checkRecentMessagesSinceMs - When > 0, check messages from the last X milliseconds and return the most recent OTP (default: 0)\n * @returns Promise<string | null> - The extracted OTP code or null if timeout/no OTP found\n */\n static async waitForOTP(\n optionsOrInbox: string | {\n inbox?: string;\n timeout?: number;\n checkInterval?: number;\n checkRecentMessagesSinceMs?: number;\n } = {}\n ): Promise<string | null> {\n const options = typeof optionsOrInbox === 'string'\n ? { inbox: optionsOrInbox }\n : optionsOrInbox ?? {};\n\n const {\n inbox,\n timeout = 30000,\n checkInterval = 1000,\n checkRecentMessagesSinceMs = 0\n } = options;\n \n console.log(`[waitForOTP] inbox: ${inbox || 'all'}, timeout: ${timeout}ms, checkInterval: ${checkInterval}ms, checkRecentSince: ${checkRecentMessagesSinceMs}ms`);\n \n const startTime = Date.now();\n \n // If checkRecentMessagesSinceMs > 0, check for recent messages first\n if (checkRecentMessagesSinceMs > 0) {\n const recentMessagesCutoff = Date.now() - checkRecentMessagesSinceMs;\n const recentMessages = inbox\n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n \n const messagesFromWindow = recentMessages.filter(msg => msg.time >= recentMessagesCutoff);\n const sortedMessages = messagesFromWindow.sort((a, b) => b.time - a.time);\n \n for (const message of sortedMessages) {\n let otp = OTP.extractOTPFromMessage(message);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp}`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(message.id);\n }\n \n return otp;\n }\n \n // If no OTP found in summary, fetch full message details\n try {\n const fullMessage = await OTP.fetchMessage(message.id);\n otp = OTP.extractOTPFromMessage(fullMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp}`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(fullMessage.id);\n }\n \n return otp;\n }\n } catch (error) {\n // Silently continue to next message\n }\n }\n \n if (messagesFromWindow.length === 0) {\n console.log(`❌ [waitForOTP] No messages found in the last ${checkRecentMessagesSinceMs}ms`);\n } else {\n console.log(`❌ [waitForOTP] Checked ${messagesFromWindow.length} recent message(s) but none contained OTP`);\n }\n }\n \n // Get initial messages for monitoring new ones (from specific inbox or all inboxes)\n const initialMessages = inbox\n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n const initialMessageIds = new Set(initialMessages.map(msg => msg.id));\n \n while (Date.now() - startTime < timeout) {\n await new Promise(resolve => setTimeout(resolve, checkInterval));\n \n try {\n // Get current messages (from specific inbox or all inboxes)\n const currentMessages = inbox\n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n const newMessages = currentMessages.filter(msg => !initialMessageIds.has(msg.id));\n \n if (newMessages.length > 0) {\n // Sort new messages by time (newest first) to handle multiple messages arriving at once\n const sortedNewMessages = newMessages.sort((a, b) => b.time - a.time);\n \n // Check all new messages (not just the first one)\n for (const newMessage of sortedNewMessages) {\n // First try to extract OTP from the message summary (faster)\n let otp = OTP.extractOTPFromMessage(newMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp} in new message`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(newMessage.id);\n }\n \n return otp;\n }\n \n // If no OTP found in summary, fetch full message details\n try {\n const fullMessage = await OTP.fetchMessage(newMessage.id);\n otp = OTP.extractOTPFromMessage(fullMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp} in new message (full fetch)`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(fullMessage.id);\n }\n \n return otp;\n }\n } catch (error) {\n // Silently continue to next message\n }\n }\n \n // Add all new messages to the set so we don't reprocess them\n newMessages.forEach(msg => initialMessageIds.add(msg.id));\n }\n } catch (error) {\n // Silently continue polling\n }\n }\n \n console.log(`❌ [waitForOTP] Timeout reached (${timeout}ms) - no OTP found`);\n return null; // Timeout reached or no OTP found\n }\n\n private static normalizeInbox(inbox?: string): string | undefined {\n if (!inbox) {\n return undefined;\n }\n\n const trimmed = inbox.trim();\n if (!trimmed) {\n return undefined;\n }\n\n if (trimmed.includes('@')) {\n return trimmed;\n }\n\n return `${trimmed}@${MAILPIT_DEFAULT_DOMAIN}`;\n }\n\n private static buildHeaders(additional?: HeadersInit): HeadersInit {\n const headers = new Headers(additional ?? {});\n\n if (!headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json');\n }\n\n if (MAILPIT_USERNAME !== undefined || MAILPIT_PASSWORD !== undefined) {\n const authString = Buffer.from(`${MAILPIT_USERNAME ?? ''}:${MAILPIT_PASSWORD ?? ''}`).toString('base64');\n headers.set('Authorization', `Basic ${authString}`);\n }\n\n return headers;\n }\n\n private static async request<T>(\n path: string,\n init?: RequestInit,\n queryParams?: Record<string, string | number | boolean | undefined>\n ): Promise<T> {\n const url = new URL(`${MAILPIT_API_BASE}${path}`);\n\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value === undefined || value === null || value === '') {\n return;\n }\n url.searchParams.set(key, String(value));\n });\n }\n\n const headers = OTP.buildHeaders(init?.headers);\n\n const response = await fetch(url.toString(), {\n ...init,\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Mailpit API error: ${response.status} ${response.statusText}`);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n return (await response.json()) as T;\n }\n\n private static async rawRequest(\n path: string,\n init?: RequestInit,\n queryParams?: Record<string, string | number | boolean | undefined>\n ): Promise<Response> {\n const url = new URL(`${MAILPIT_API_BASE}${path}`);\n\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value === undefined || value === null || value === '') {\n return;\n }\n url.searchParams.set(key, String(value));\n });\n }\n\n const headers = OTP.buildHeaders(init?.headers);\n\n return fetch(url.toString(), {\n ...init,\n headers,\n });\n }\n\n private static mapSummaryToMessage(summary: MailpitMessageSummary): MailinatorMessage {\n const toAddresses = summary.To?.map((addr) => addr.Address).filter(Boolean) ?? [];\n const createdAt = summary.Created ?? summary.Date;\n const timestamp = OTP.parseTimestamp(createdAt);\n\n return {\n id: summary.ID,\n subject: summary.Subject ?? '',\n from: summary.From?.Address ?? '',\n origfrom: summary.From?.Name || summary.From?.Address,\n to: toAddresses.join(', '),\n time: timestamp,\n textBody: summary.Snippet,\n parts: [],\n };\n }\n\n private static mapDetailToMessage(detail: MailpitMessageDetail): MailinatorMessage {\n const base = OTP.mapSummaryToMessage(detail);\n return {\n ...base,\n textBody: detail.Text ?? base.textBody,\n htmlBody: detail.HTML ?? base.htmlBody,\n };\n }\n\n private static parseTimestamp(value?: string): number {\n if (!value) {\n return Date.now();\n }\n\n const parsed = Date.parse(value);\n return Number.isNaN(parsed) ? Date.now() : parsed;\n }\n}\n\n","import { Page, Frame } from 'playwright';\nimport { proboLogger } from './probo-logger';\n\nexport interface NavTrackerOptions {\n waitForStabilityQuietTimeout?: number; // Time to wait for network stability (default: 2000ms)\n waitForStabilityInitialDelay?: number; // Initial delay before monitoring starts (default: 500ms)\n waitForStabilityGlobalTimeout?: number; // Overall timeout for stabilization (default: 15000ms)\n pollMs?: number; // Polling interval (default: 100ms)\n maxInflight?: number; // Maximum inflight requests (default: 0)\n inflightGraceMs?: number; // Grace period for inflight requests (default: 4000ms)\n waitForStabilityVerbose?: boolean; // Enable verbose logging (default: false)\n}\n\ntype ResourceType =\n | 'Document' | 'Stylesheet' | 'Image' | 'Media' | 'Font' | 'Script'\n | 'TextTrack' | 'XHR' | 'Fetch' | 'EventSource' | 'WebSocket' | 'Manifest' | 'Other';\n\n/**\n * Global navigation tracker that monitors page navigation events and network activity\n * using CDP (Chrome DevTools Protocol) for comprehensive network monitoring\n * \n * This is a singleton class - only one instance can exist at a time\n */\nexport class NavTracker {\n private static instance: NavTracker | null = null;\n private page: Page;\n private navigationCount: number = 0;\n private lastNavTime: number | null = null;\n private waitForStabilityQuietTimeout: number;\n private waitForStabilityInitialDelay: number;\n private waitForStabilityGlobalTimeout: number;\n private pollMs: number;\n private maxInflight: number;\n private inflightGraceMs: number;\n private waitForStabilityVerbose: boolean;\n private isListening: boolean = false;\n private instanceId: string;\n private client: any = null;\n private inflight: Set<string> = new Set();\n private lastHardNavAt: number = 0;\n private lastSoftNavAt: number = 0;\n private lastNetworkActivityAt: number = 0;\n private totalRequestsTracked: number = 0;\n\n // Define relevant resource types and content types\n private readonly RELEVANT_RESOURCE_TYPES = [\n 'Document',\n 'Stylesheet', \n 'Image',\n 'Font',\n 'Script',\n 'XHR',\n 'Fetch'\n ];\n\n private readonly RELEVANT_CONTENT_TYPES = [\n 'text/html',\n 'text/css',\n 'application/javascript',\n 'image/',\n 'font/',\n 'application/json',\n ];\n\n // Additional patterns to filter out\n private readonly IGNORED_URL_PATTERNS = [\n // Analytics and tracking\n 'analytics',\n 'tracking',\n 'telemetry',\n 'beacon',\n 'metrics',\n // Ad-related\n 'doubleclick',\n 'adsystem',\n 'adserver',\n 'advertising',\n // Social media widgets\n 'facebook.com/plugins',\n 'platform.twitter',\n 'linkedin.com/embed',\n // Live chat and support\n 'livechat',\n 'zendesk',\n 'intercom',\n 'crisp.chat',\n 'hotjar',\n // Push notifications\n 'push-notifications',\n 'onesignal',\n 'pushwoosh',\n // Background sync/heartbeat\n 'heartbeat',\n 'ping',\n 'alive',\n // WebRTC and streaming\n 'webrtc',\n 'rtmp://',\n 'wss://',\n // Common CDNs for dynamic content\n 'cloudfront.net',\n 'fastly.net',\n ];\n\n /**\n * Private constructor - use getInstance() to get the singleton instance\n */\n private constructor(page: Page, options: NavTrackerOptions = {}) {\n this.page = page;\n this.waitForStabilityQuietTimeout = options.waitForStabilityQuietTimeout ?? 2000;\n this.waitForStabilityInitialDelay = options.waitForStabilityInitialDelay ?? 500;\n this.waitForStabilityGlobalTimeout = options.waitForStabilityGlobalTimeout ?? 15000;\n this.pollMs = options.pollMs ?? 100;\n this.maxInflight = options.maxInflight ?? 0;\n this.inflightGraceMs = options.inflightGraceMs ?? 4000;\n this.waitForStabilityVerbose = options.waitForStabilityVerbose ?? false;\n \n proboLogger.debug(`NavTracker constructor set values: quietTimeout=${this.waitForStabilityQuietTimeout}, initialDelay=${this.waitForStabilityInitialDelay}, globalTimeout=${this.waitForStabilityGlobalTimeout}, verbose=${this.waitForStabilityVerbose}`);\n this.instanceId = Math.random().toString(36).substring(2, 11);\n \n // Initialize timestamps\n const now = Date.now();\n this.lastHardNavAt = now;\n this.lastSoftNavAt = now;\n this.lastNetworkActivityAt = now;\n\n // Note: start() is called asynchronously in getInstance() to ensure proper initialization\n }\n\n /**\n * Start listening for navigation and network events using CDP (private method)\n */\n private async start(): Promise<void> {\n if (this.isListening) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: already listening, ignoring start()`);\n return;\n }\n\n try {\n // Set up CDP session\n this.client = await this.page.context().newCDPSession(this.page);\n await this.client.send('Page.enable');\n await this.client.send('Network.enable');\n await this.client.send('Runtime.enable');\n await this.client.send('Page.setLifecycleEventsEnabled', { enabled: true });\n\n // Set up navigation event handlers\n this.client.on('Page.frameNavigated', (e: any) => {\n if (!e.frame?.parentId) { // main frame has no parentId\n this.lastHardNavAt = Date.now();\n this.navigationCount++;\n this.lastNavTime = Date.now();\n \n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Hard navigation detected at ${this.lastHardNavAt}`);\n }\n }\n });\n\n this.client.on('Page.navigatedWithinDocument', (_e: any) => {\n this.lastSoftNavAt = Date.now();\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Soft navigation detected at ${this.lastSoftNavAt}`);\n }\n });\n\n // Set up network event handlers\n this.client.on('Network.requestWillBeSent', (e: any) => {\n this.onNetworkRequest(e);\n });\n\n this.client.on('Network.loadingFinished', (e: any) => {\n this.onNetworkResponse(e, 'finished');\n });\n\n this.client.on('Network.loadingFailed', (e: any) => {\n this.onNetworkResponse(e, 'failed');\n });\n\n this.isListening = true;\n proboLogger.debug(`NavTracker[${this.instanceId}]: started CDP-based monitoring`);\n } catch (error) {\n proboLogger.error(`NavTracker[${this.instanceId}]: Failed to start CDP monitoring: ${error}`);\n // Fall back to basic navigation tracking\n this.page.on(\"framenavigated\", (frame: Frame) => {\n if (frame === this.page.mainFrame()) {\n this.navigationCount++;\n this.lastNavTime = Date.now();\n this.lastHardNavAt = Date.now();\n }\n });\n this.isListening = true;\n }\n }\n\n /**\n * Stop listening for navigation and network events (private method)\n */\n private stop(): void {\n if (!this.isListening) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: not listening, ignoring stop()`);\n return;\n }\n\n try {\n if (this.client) {\n // Check if the page is still available before detaching\n if (this.page && !this.page.isClosed()) {\n this.client.detach();\n } else {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Page is closed, skipping CDP detach`);\n }\n this.client = null;\n }\n } catch (error) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Error detaching CDP client: ${error}`);\n }\n\n this.isListening = false;\n proboLogger.debug(`NavTracker[${this.instanceId}]: stopped CDP monitoring`);\n }\n\n /**\n * Handle network request events\n */\n private onNetworkRequest(e: any): void {\n const requestType = e.type as ResourceType | undefined;\n const url = e.request?.url ?? '';\n \n // Filter by resource type\n if (!this.RELEVANT_RESOURCE_TYPES.includes(requestType as any)) {\n return;\n }\n\n // Filter out streaming, websocket, and other real-time requests\n if (['WebSocket', 'EventSource', 'Media', 'Manifest', 'Other'].includes(requestType as any)) {\n return;\n }\n\n // Filter out by URL patterns\n const urlLower = url.toLowerCase();\n if (this.IGNORED_URL_PATTERNS.some(pattern => urlLower.includes(pattern))) {\n return;\n }\n\n // Filter out data URLs and blob URLs\n if (urlLower.startsWith('data:') || urlLower.startsWith('blob:')) {\n return;\n }\n\n // Filter out requests with certain headers\n const headers = e.request?.headers || {};\n if (headers['purpose'] === 'prefetch' || ['video', 'audio'].includes(headers['sec-fetch-dest'])) {\n return;\n }\n\n this.inflight.add(e.requestId);\n this.totalRequestsTracked++;\n this.lastNetworkActivityAt = Date.now();\n\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Network request started: ${requestType} - ${url}`);\n }\n }\n\n /**\n * Handle network response events\n */\n private onNetworkResponse(e: any, status: 'finished' | 'failed'): void {\n const requestId = e.requestId;\n \n if (!this.inflight.has(requestId)) {\n return;\n }\n\n this.inflight.delete(requestId);\n this.lastNetworkActivityAt = Date.now();\n\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Network request ${status} (${this.inflight.size} remaining)`);\n }\n }\n\n /**\n * Check if navigation and network activity has stabilized\n */\n private hasNavigationStabilized(): boolean {\n const now = Date.now();\n \n // Use the most recent activity timestamp\n const lastActivityAt = Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n const quietSinceMs = now - lastActivityAt;\n const inflightOk = this.inflight.size <= this.maxInflight || (now - this.lastHardNavAt) > this.inflightGraceMs;\n \n const isStabilized = quietSinceMs >= this.waitForStabilityQuietTimeout && inflightOk;\n \n if (this.waitForStabilityVerbose) {\n proboLogger.debug(\n `NavTracker[${this.instanceId}]: hasNavigationStabilized() - quietSinceMs=${quietSinceMs}ms, waitForStabilityQuietTimeout=${this.waitForStabilityQuietTimeout}ms, inflight=${this.inflight.size}, inflightOk=${inflightOk}, stabilized=${isStabilized}`\n );\n }\n \n return isStabilized;\n }\n\n /**\n * Wait for navigation and network activity to stabilize\n * Uses CDP-based monitoring for comprehensive network activity tracking\n */\n async waitForNavigationToStabilize(): Promise<void> {\n const now = Date.now();\n const lastActivityAt = Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n const timeSinceLastActivity = now - lastActivityAt;\n proboLogger.debug(`NavTracker[${this.instanceId}]: waiting for navigation and network to stabilize (quietTimeout: ${this.waitForStabilityQuietTimeout}ms, initialDelay: ${this.waitForStabilityInitialDelay}ms, globalTimeout: ${this.waitForStabilityGlobalTimeout}ms, verbose: ${this.waitForStabilityVerbose}, lastActivity: ${timeSinceLastActivity}ms ago)`);\n \n // Ensure CDP monitoring is properly initialized\n if (!this.isListening) {\n proboLogger.warn(`NavTracker[${this.instanceId}]: CDP monitoring not initialized, initializing now...`);\n await this.start();\n }\n \n const startTime = Date.now();\n const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n \n try {\n // Initial delay to catch any new network activity triggered by user actions\n if (this.waitForStabilityInitialDelay > 0) {\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: initial delay of ${this.waitForStabilityInitialDelay}ms to catch new network activity`);\n }\n await sleep(this.waitForStabilityInitialDelay);\n }\n \n // Wait a short time to catch any missed events\n await sleep(100);\n \n // Main stabilization loop\n while (true) {\n const now = Date.now();\n \n // Check for timeout\n if (now - startTime > this.waitForStabilityGlobalTimeout) {\n proboLogger.warn(`NavTracker[${this.instanceId}]: Timeout reached after ${this.waitForStabilityGlobalTimeout}ms with ${this.inflight.size} pending requests`);\n break;\n }\n \n // Check if stabilized\n if (this.hasNavigationStabilized()) {\n const quietSinceMs = now - Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n proboLogger.debug(`NavTracker[${this.instanceId}]: Page stabilized after ${quietSinceMs}ms of quiet time`);\n break;\n }\n \n // Log progress every 2 seconds in verbose mode\n if (this.waitForStabilityVerbose && now % 2000 < this.pollMs) {\n const quietSinceMs = now - Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n proboLogger.debug(`NavTracker[${this.instanceId}]: Status - quiet=${quietSinceMs}ms/${this.waitForStabilityQuietTimeout}ms, inflight=${this.inflight.size}/${this.maxInflight}`);\n }\n \n await sleep(this.pollMs);\n }\n } catch (error) {\n proboLogger.error(`NavTracker[${this.instanceId}]: Error during stabilization: ${error}`);\n }\n }\n\n\n // ============================================================================\n // SINGLETON METHODS\n // ============================================================================\n\n /**\n * Get the singleton instance of NavTracker\n * @param page The page to track (required for first creation)\n * @param options Optional configuration\n * @returns The singleton NavTracker instance\n */\n public static async getInstance(page?: Page, options?: NavTrackerOptions): Promise<NavTracker> {\n proboLogger.debug(`NavTracker.getInstance called with options:`, options);\n if (!NavTracker.instance) {\n if (!page) {\n throw new Error('NavTracker: Page is required for first instance creation');\n }\n NavTracker.instance = new NavTracker(page, options);\n await NavTracker.instance.start();\n proboLogger.debug(`NavTracker: created new singleton instance with options:`, options);\n } else {\n // Update existing instance with new options\n if (options) {\n if (options.waitForStabilityQuietTimeout !== undefined) {\n NavTracker.instance.waitForStabilityQuietTimeout = options.waitForStabilityQuietTimeout;\n }\n if (options.waitForStabilityInitialDelay !== undefined) {\n NavTracker.instance.waitForStabilityInitialDelay = options.waitForStabilityInitialDelay;\n }\n if (options.waitForStabilityGlobalTimeout !== undefined) {\n NavTracker.instance.waitForStabilityGlobalTimeout = options.waitForStabilityGlobalTimeout;\n }\n if (options.pollMs !== undefined) {\n NavTracker.instance.pollMs = options.pollMs;\n }\n if (options.maxInflight !== undefined) {\n NavTracker.instance.maxInflight = options.maxInflight;\n }\n if (options.inflightGraceMs !== undefined) {\n NavTracker.instance.inflightGraceMs = options.inflightGraceMs;\n }\n if (options.waitForStabilityVerbose !== undefined) {\n NavTracker.instance.waitForStabilityVerbose = options.waitForStabilityVerbose;\n }\n proboLogger.debug(`NavTracker: updated existing instance with new values: quietTimeout=${NavTracker.instance.waitForStabilityQuietTimeout}, initialDelay=${NavTracker.instance.waitForStabilityInitialDelay}, globalTimeout=${NavTracker.instance.waitForStabilityGlobalTimeout}, verbose=${NavTracker.instance.waitForStabilityVerbose}`);\n }\n if (options?.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker: returning existing singleton instance`);\n }\n }\n return NavTracker.instance;\n }\n\n /**\n * Reset the singleton instance (useful for testing or page changes)\n */\n public static resetInstance(): void {\n if (NavTracker.instance) {\n NavTracker.instance.stop();\n NavTracker.instance = null;\n proboLogger.debug(`NavTracker: reset singleton instance`);\n }\n }\n\n}","//! otpauth 9.4.1 | (c) Héctor Molinero Fernández | MIT | https://github.com/hectorm/otpauth\n//! noble-hashes 1.8.0 | (c) Paul Miller | MIT | https://github.com/paulmillr/noble-hashes\n/// <reference types=\"./otpauth.d.ts\" />\n// @ts-nocheck\n/**\n * Converts an integer to an Uint8Array.\n * @param {number} num Integer.\n * @returns {Uint8Array} Uint8Array.\n */ const uintDecode = (num)=>{\n const buf = new ArrayBuffer(8);\n const arr = new Uint8Array(buf);\n let acc = num;\n for(let i = 7; i >= 0; i--){\n if (acc === 0) break;\n arr[i] = acc & 255;\n acc -= arr[i];\n acc /= 256;\n }\n return arr;\n};\n\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */ /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ // We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */ function isBytes(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array';\n}\n/** Asserts something is positive integer. */ function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */ function abytes(b, ...lengths) {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length)) throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */ function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function') throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */ function aexists(instance, checkFinished = true) {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */ function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u32. */ function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */ function clean(...arrays) {\n for(let i = 0; i < arrays.length; i++){\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */ function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */ function rotr(word, shift) {\n return word << 32 - shift | word >>> shift;\n}\n/** The rotate left (circular left shift) operation for uint32 */ function rotl(word, shift) {\n return word << shift | word >>> 32 - shift >>> 0;\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */ const isLE = /* @__PURE__ */ (()=>new Uint8Array(new Uint32Array([\n 0x11223344\n ]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */ function byteSwap(word) {\n return word << 24 & 0xff000000 | word << 8 & 0xff0000 | word >>> 8 & 0xff00 | word >>> 24 & 0xff;\n}\n/** In place byte swap for Uint32Array */ function byteSwap32(arr) {\n for(let i = 0; i < arr.length; i++){\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nconst swap32IfBE = isLE ? (u)=>u : byteSwap32;\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */ function utf8ToBytes(str) {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */ function toBytes(data) {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** For runtime check if class implements interface */ class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */ function createHasher(hashCons) {\n const hashC = (msg)=>hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = ()=>hashCons();\n return hashC;\n}\n\nclass HMAC extends Hash {\n update(buf) {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n aexists(this);\n abytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n constructor(hash, _key){\n super();\n this.finished = false;\n this.destroyed = false;\n ahash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (typeof this.iHash.update !== 'function') throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for(let i = 0; i < pad.length; i++)pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for(let i = 0; i < pad.length; i++)pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */ const hmac = (hash, key, message)=>new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key)=>new HMAC(hash, key);\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */ function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number(value >> _32n & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */ function Chi(a, b, c) {\n return a & b ^ ~a & c;\n}\n/** Majority function, true if any two inputs is true. */ function Maj(a, b, c) {\n return a & b ^ a & c ^ b & c;\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */ class HashMD extends Hash {\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for(let pos = 0; pos < len;){\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for(; blockLen <= len - pos; pos += blockLen)this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for(let i = pos; i < blockLen; i++)buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for(let i = 0; i < outLen; i++)oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n constructor(blockLen, outputLen, padOffset, isLE){\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */ /** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */ const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */ const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8,\n 0x367cd507,\n 0x3070dd17,\n 0xf70e5939,\n 0xffc00b31,\n 0x68581511,\n 0x64f98fa7,\n 0xbefa4fa4\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */ const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d,\n 0xc1059ed8,\n 0x629a292a,\n 0x367cd507,\n 0x9159015a,\n 0x3070dd17,\n 0x152fecd8,\n 0xf70e5939,\n 0x67332667,\n 0xffc00b31,\n 0x8eb44a87,\n 0x68581511,\n 0xdb0c2e0d,\n 0x64f98fa7,\n 0x47b5481d,\n 0xbefa4fa4\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */ const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667,\n 0xf3bcc908,\n 0xbb67ae85,\n 0x84caa73b,\n 0x3c6ef372,\n 0xfe94f82b,\n 0xa54ff53a,\n 0x5f1d36f1,\n 0x510e527f,\n 0xade682d1,\n 0x9b05688c,\n 0x2b3e6c1f,\n 0x1f83d9ab,\n 0xfb41bd6b,\n 0x5be0cd19,\n 0x137e2179\n]);\n\n/** Initial SHA1 state */ const SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n 0xc3d2e1f0\n]);\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n/** SHA1 legacy hash class. */ class SHA1 extends HashMD {\n get() {\n const { A, B, C, D, E } = this;\n return [\n A,\n B,\n C,\n D,\n E\n ];\n }\n set(A, B, C, D, E) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n }\n process(view, offset) {\n for(let i = 0; i < 16; i++, offset += 4)SHA1_W[i] = view.getUint32(offset, false);\n for(let i = 16; i < 80; i++)SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n // Compression function main loop, 80 rounds\n let { A, B, C, D, E } = this;\n for(let i = 0; i < 80; i++){\n let F, K;\n if (i < 20) {\n F = Chi(B, C, D);\n K = 0x5a827999;\n } else if (i < 40) {\n F = B ^ C ^ D;\n K = 0x6ed9eba1;\n } else if (i < 60) {\n F = Maj(B, C, D);\n K = 0x8f1bbcdc;\n } else {\n F = B ^ C ^ D;\n K = 0xca62c1d6;\n }\n const T = rotl(A, 5) + F + E + K + SHA1_W[i] | 0;\n E = D;\n D = C;\n C = rotl(B, 30);\n B = A;\n A = T;\n }\n // Add the compressed chunk to the current hash value\n A = A + this.A | 0;\n B = B + this.B | 0;\n C = C + this.C | 0;\n D = D + this.D | 0;\n E = E + this.E | 0;\n this.set(A, B, C, D, E);\n }\n roundClean() {\n clean(SHA1_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n constructor(){\n super(64, 20, 8, false);\n this.A = SHA1_IV[0] | 0;\n this.B = SHA1_IV[1] | 0;\n this.C = SHA1_IV[2] | 0;\n this.D = SHA1_IV[3] | 0;\n this.E = SHA1_IV[4] | 0;\n }\n}\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */ const sha1 = /* @__PURE__ */ createHasher(()=>new SHA1());\n\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */ const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le) return {\n h: Number(n & U32_MASK64),\n l: Number(n >> _32n & U32_MASK64)\n };\n return {\n h: Number(n >> _32n & U32_MASK64) | 0,\n l: Number(n & U32_MASK64) | 0\n };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for(let i = 0; i < len; i++){\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [\n h,\n l\n ];\n }\n return [\n Ah,\n Al\n ];\n}\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s)=>h >>> s;\nconst shrSL = (h, l, s)=>h << 32 - s | l >>> s;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s)=>h >>> s | l << 32 - s;\nconst rotrSL = (h, l, s)=>h << 32 - s | l >>> s;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s)=>h << 64 - s | l >>> s - 32;\nconst rotrBL = (h, l, s)=>h >>> s - 32 | l << 64 - s;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s)=>h << s | l >>> 32 - s;\nconst rotlSL = (h, l, s)=>l << s | h >>> 32 - s;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s)=>l << s - 32 | h >>> 64 - s;\nconst rotlBL = (h, l, s)=>h << s - 32 | l >>> 64 - s;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return {\n h: Ah + Bh + (l / 2 ** 32 | 0) | 0,\n l: l | 0\n };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl)=>(Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch)=>Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0;\nconst add4L = (Al, Bl, Cl, Dl)=>(Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh)=>Ah + Bh + Ch + Dh + (low / 2 ** 32 | 0) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El)=>(Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh)=>Ah + Bh + Ch + Dh + Eh + (low / 2 ** 32 | 0) | 0;\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */ // prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */ const SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends HashMD {\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [\n A,\n B,\n C,\n D,\n E,\n F,\n G,\n H\n ];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for(let i = 0; i < 16; i++, offset += 4)SHA256_W[i] = view.getUint32(offset, false);\n for(let i = 16; i < 64; i++){\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ W15 >>> 3;\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ W2 >>> 10;\n SHA256_W[i] = s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16] | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for(let i = 0; i < 64; i++){\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i] | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = sigma0 + Maj(A, B, C) | 0;\n H = G;\n G = F;\n F = E;\n E = D + T1 | 0;\n D = C;\n C = B;\n B = A;\n A = T1 + T2 | 0;\n }\n // Add the compressed chunk to the current hash value\n A = A + this.A | 0;\n B = B + this.B | 0;\n C = C + this.C | 0;\n D = D + this.D | 0;\n E = E + this.E | 0;\n F = F + this.F | 0;\n G = G + this.G | 0;\n H = H + this.H | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n constructor(outputLen = 32){\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n}\nclass SHA224 extends SHA256 {\n constructor(){\n super(28);\n this.A = SHA224_IV[0] | 0;\n this.B = SHA224_IV[1] | 0;\n this.C = SHA224_IV[2] | 0;\n this.D = SHA224_IV[3] | 0;\n this.E = SHA224_IV[4] | 0;\n this.F = SHA224_IV[5] | 0;\n this.G = SHA224_IV[6] | 0;\n this.H = SHA224_IV[7] | 0;\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (()=>split([\n '0x428a2f98d728ae22',\n '0x7137449123ef65cd',\n '0xb5c0fbcfec4d3b2f',\n '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538',\n '0x59f111f1b605d019',\n '0x923f82a4af194f9b',\n '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242',\n '0x12835b0145706fbe',\n '0x243185be4ee4b28c',\n '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f',\n '0x80deb1fe3b1696b1',\n '0x9bdc06a725c71235',\n '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2',\n '0xefbe4786384f25e3',\n '0x0fc19dc68b8cd5b5',\n '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275',\n '0x4a7484aa6ea6e483',\n '0x5cb0a9dcbd41fbd4',\n '0x76f988da831153b5',\n '0x983e5152ee66dfab',\n '0xa831c66d2db43210',\n '0xb00327c898fb213f',\n '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2',\n '0xd5a79147930aa725',\n '0x06ca6351e003826f',\n '0x142929670a0e6e70',\n '0x27b70a8546d22ffc',\n '0x2e1b21385c26c926',\n '0x4d2c6dfc5ac42aed',\n '0x53380d139d95b3df',\n '0x650a73548baf63de',\n '0x766a0abb3c77b2a8',\n '0x81c2c92e47edaee6',\n '0x92722c851482353b',\n '0xa2bfe8a14cf10364',\n '0xa81a664bbc423001',\n '0xc24b8b70d0f89791',\n '0xc76c51a30654be30',\n '0xd192e819d6ef5218',\n '0xd69906245565a910',\n '0xf40e35855771202a',\n '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8',\n '0x1e376c085141ab53',\n '0x2748774cdf8eeb99',\n '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63',\n '0x4ed8aa4ae3418acb',\n '0x5b9cca4f7763e373',\n '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc',\n '0x78a5636f43172f60',\n '0x84c87814a1f0ab72',\n '0x8cc702081a6439ec',\n '0x90befffa23631e28',\n '0xa4506cebde82bde9',\n '0xbef9a3f7b2c67915',\n '0xc67178f2e372532b',\n '0xca273eceea26619c',\n '0xd186b8c721c0c207',\n '0xeada7dd6cde0eb1e',\n '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba',\n '0x0a637dc5a2c898a6',\n '0x113f9804bef90dae',\n '0x1b710b35131c471b',\n '0x28db77f523047d84',\n '0x32caab7b40c72493',\n '0x3c9ebe0a15c9bebc',\n '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6',\n '0x597f299cfc657e2a',\n '0x5fcb6fab3ad6faec',\n '0x6c44198c4a475817'\n ].map((n)=>BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (()=>K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (()=>K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nclass SHA512 extends HashMD {\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [\n Ah,\n Al,\n Bh,\n Bl,\n Ch,\n Cl,\n Dh,\n Dl,\n Eh,\n El,\n Fh,\n Fl,\n Gh,\n Gl,\n Hh,\n Hl\n ];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for(let i = 0; i < 16; i++, offset += 4){\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32(offset += 4);\n }\n for(let i = 16; i < 80; i++){\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = rotrSH(W15h, W15l, 1) ^ rotrSH(W15h, W15l, 8) ^ shrSH(W15h, W15l, 7);\n const s0l = rotrSL(W15h, W15l, 1) ^ rotrSL(W15h, W15l, 8) ^ shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = rotrSH(W2h, W2l, 19) ^ rotrBH(W2h, W2l, 61) ^ shrSH(W2h, W2l, 6);\n const s1l = rotrSL(W2h, W2l, 19) ^ rotrBL(W2h, W2l, 61) ^ shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for(let i = 0; i < 80; i++){\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = rotrSH(Eh, El, 14) ^ rotrSH(Eh, El, 18) ^ rotrBH(Eh, El, 41);\n const sigma1l = rotrSL(Eh, El, 14) ^ rotrSL(Eh, El, 18) ^ rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = Eh & Fh ^ ~Eh & Gh;\n const CHIl = El & Fl ^ ~El & Gl;\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = rotrSH(Ah, Al, 28) ^ rotrBH(Ah, Al, 34) ^ rotrBH(Ah, Al, 39);\n const sigma0l = rotrSL(Ah, Al, 28) ^ rotrBL(Ah, Al, 34) ^ rotrBL(Ah, Al, 39);\n const MAJh = Ah & Bh ^ Ah & Ch ^ Bh & Ch;\n const MAJl = Al & Bl ^ Al & Cl ^ Bl & Cl;\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = add3L(T1l, sigma0l, MAJl);\n Ah = add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n constructor(outputLen = 64){\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = SHA512_IV[0] | 0;\n this.Al = SHA512_IV[1] | 0;\n this.Bh = SHA512_IV[2] | 0;\n this.Bl = SHA512_IV[3] | 0;\n this.Ch = SHA512_IV[4] | 0;\n this.Cl = SHA512_IV[5] | 0;\n this.Dh = SHA512_IV[6] | 0;\n this.Dl = SHA512_IV[7] | 0;\n this.Eh = SHA512_IV[8] | 0;\n this.El = SHA512_IV[9] | 0;\n this.Fh = SHA512_IV[10] | 0;\n this.Fl = SHA512_IV[11] | 0;\n this.Gh = SHA512_IV[12] | 0;\n this.Gl = SHA512_IV[13] | 0;\n this.Hh = SHA512_IV[14] | 0;\n this.Hl = SHA512_IV[15] | 0;\n }\n}\nclass SHA384 extends SHA512 {\n constructor(){\n super(48);\n this.Ah = SHA384_IV[0] | 0;\n this.Al = SHA384_IV[1] | 0;\n this.Bh = SHA384_IV[2] | 0;\n this.Bl = SHA384_IV[3] | 0;\n this.Ch = SHA384_IV[4] | 0;\n this.Cl = SHA384_IV[5] | 0;\n this.Dh = SHA384_IV[6] | 0;\n this.Dl = SHA384_IV[7] | 0;\n this.Eh = SHA384_IV[8] | 0;\n this.El = SHA384_IV[9] | 0;\n this.Fh = SHA384_IV[10] | 0;\n this.Fl = SHA384_IV[11] | 0;\n this.Gh = SHA384_IV[12] | 0;\n this.Gl = SHA384_IV[13] | 0;\n this.Hh = SHA384_IV[14] | 0;\n this.Hl = SHA384_IV[15] | 0;\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */ const sha256 = /* @__PURE__ */ createHasher(()=>new SHA256());\n/** SHA2-224 hash function from RFC 4634 */ const sha224 = /* @__PURE__ */ createHasher(()=>new SHA224());\n/** SHA2-512 hash function from RFC 4634. */ const sha512 = /* @__PURE__ */ createHasher(()=>new SHA512());\n/** SHA2-384 hash function from RFC 4634. */ const sha384 = /* @__PURE__ */ createHasher(()=>new SHA384());\n\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nfor(let round = 0, R = _1n, x = 1, y = 0; round < 24; round++){\n // Pi\n [x, y] = [\n y,\n (2 * x + 3 * y) % 5\n ];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((round + 1) * (round + 2) / 2 % 64);\n // Iota\n let t = _0n;\n for(let j = 0; j < 7; j++){\n R = (R << _1n ^ (R >> _7n) * _0x71n) % _256n;\n if (R & _2n) t ^= _1n << (_1n << /* @__PURE__ */ BigInt(j)) - _1n;\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s)=>s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s);\nconst rotlL = (h, l, s)=>s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s);\n/** `keccakf1600` internal function, additionally allows to adjust round count. */ function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for(let round = 24 - rounds; round < 24; round++){\n // Theta θ\n for(let x = 0; x < 10; x++)B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for(let x = 0; x < 10; x += 2){\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for(let y = 0; y < 50; y += 10){\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for(let t = 0; t < 24; t++){\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for(let y = 0; y < 50; y += 10){\n for(let x = 0; x < 10; x++)B[x] = s[y + x];\n for(let x = 0; x < 10; x++)s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean(B);\n}\n/** Keccak sponge function. */ class Keccak extends Hash {\n clone() {\n return this._cloneInto();\n }\n keccak() {\n swap32IfBE(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { blockLen, state } = this;\n const len = data.length;\n for(let pos = 0; pos < len;){\n const take = Math.min(blockLen - this.pos, len - pos);\n for(let i = 0; i < take; i++)state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen) this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished) return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for(let pos = 0, len = out.length; pos < len;){\n if (this.posOut >= blockLen) this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished) throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n clean(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24){\n super();\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n this.enableXOF = false;\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n anumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200)) throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n}\nconst gen = (suffix, blockLen, outputLen)=>createHasher(()=>new Keccak(blockLen, suffix, outputLen));\n/** SHA3-224 hash function. */ const sha3_224 = /* @__PURE__ */ (()=>gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */ const sha3_256 = /* @__PURE__ */ (()=>gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */ const sha3_384 = /* @__PURE__ */ (()=>gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */ const sha3_512 = /* @__PURE__ */ (()=>gen(0x06, 72, 512 / 8))();\n\n/**\n * \"globalThis\" ponyfill.\n * @see [A horrifying globalThis polyfill in universal JavaScript](https://mathiasbynens.be/notes/globalthis)\n * @type {Object.<string, *>}\n */ const globalScope = (()=>{\n if (typeof globalThis === \"object\") return globalThis;\n else {\n Object.defineProperty(Object.prototype, \"__GLOBALTHIS__\", {\n get () {\n return this;\n },\n configurable: true\n });\n try {\n // @ts-expect-error\n // eslint-disable-next-line no-undef\n if (typeof __GLOBALTHIS__ !== \"undefined\") return __GLOBALTHIS__;\n } finally{\n // @ts-expect-error\n delete Object.prototype.__GLOBALTHIS__;\n }\n }\n // Still unable to determine \"globalThis\", fall back to a naive method.\n if (typeof self !== \"undefined\") return self;\n else if (typeof window !== \"undefined\") return window;\n else if (typeof global !== \"undefined\") return global;\n return undefined;\n})();\n\n/**\n * @noble/hashes hash functions.\n * @type {Object.<string, sha1|sha224|sha256|sha384|sha512|sha3_224|sha3_256|sha3_384|sha3_512>}\n */ const nobleHashes = {\n SHA1: sha1,\n SHA224: sha224,\n SHA256: sha256,\n SHA384: sha384,\n SHA512: sha512,\n \"SHA3-224\": sha3_224,\n \"SHA3-256\": sha3_256,\n \"SHA3-384\": sha3_384,\n \"SHA3-512\": sha3_512\n};\n/**\n * Canonicalizes a hash algorithm name.\n * @param {string} algorithm Hash algorithm name.\n * @returns {\"SHA1\"|\"SHA224\"|\"SHA256\"|\"SHA384\"|\"SHA512\"|\"SHA3-224\"|\"SHA3-256\"|\"SHA3-384\"|\"SHA3-512\"} Canonicalized hash algorithm name.\n */ const canonicalizeAlgorithm = (algorithm)=>{\n switch(true){\n case /^(?:SHA-?1|SSL3-SHA1)$/i.test(algorithm):\n return \"SHA1\";\n case /^SHA(?:2?-)?224$/i.test(algorithm):\n return \"SHA224\";\n case /^SHA(?:2?-)?256$/i.test(algorithm):\n return \"SHA256\";\n case /^SHA(?:2?-)?384$/i.test(algorithm):\n return \"SHA384\";\n case /^SHA(?:2?-)?512$/i.test(algorithm):\n return \"SHA512\";\n case /^SHA3-224$/i.test(algorithm):\n return \"SHA3-224\";\n case /^SHA3-256$/i.test(algorithm):\n return \"SHA3-256\";\n case /^SHA3-384$/i.test(algorithm):\n return \"SHA3-384\";\n case /^SHA3-512$/i.test(algorithm):\n return \"SHA3-512\";\n default:\n throw new TypeError(`Unknown hash algorithm: ${algorithm}`);\n }\n};\n/**\n * Calculates an HMAC digest.\n * @param {string} algorithm Algorithm.\n * @param {Uint8Array} key Key.\n * @param {Uint8Array} message Message.\n * @returns {Uint8Array} Digest.\n */ const hmacDigest = (algorithm, key, message)=>{\n if (hmac) {\n const hash = nobleHashes[algorithm] ?? nobleHashes[canonicalizeAlgorithm(algorithm)];\n return hmac(hash, key, message);\n } else {\n throw new Error(\"Missing HMAC function\");\n }\n};\n\n/**\n * RFC 4648 base32 alphabet without pad.\n * @type {string}\n */ const ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n/**\n * Converts a base32 string to an Uint8Array (RFC 4648).\n * @see [LinusU/base32-decode](https://github.com/LinusU/base32-decode)\n * @param {string} str Base32 string.\n * @returns {Uint8Array} Uint8Array.\n */ const base32Decode = (str)=>{\n // Remove spaces (although they are not allowed by the spec, some issuers add them for readability).\n str = str.replace(/ /g, \"\");\n // Canonicalize to all upper case and remove padding if it exists.\n let end = str.length;\n while(str[end - 1] === \"=\")--end;\n str = (end < str.length ? str.substring(0, end) : str).toUpperCase();\n const buf = new ArrayBuffer(str.length * 5 / 8 | 0);\n const arr = new Uint8Array(buf);\n let bits = 0;\n let value = 0;\n let index = 0;\n for(let i = 0; i < str.length; i++){\n const idx = ALPHABET.indexOf(str[i]);\n if (idx === -1) throw new TypeError(`Invalid character found: ${str[i]}`);\n value = value << 5 | idx;\n bits += 5;\n if (bits >= 8) {\n bits -= 8;\n arr[index++] = value >>> bits;\n }\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a base32 string (RFC 4648).\n * @see [LinusU/base32-encode](https://github.com/LinusU/base32-encode)\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Base32 string.\n */ const base32Encode = (arr)=>{\n let bits = 0;\n let value = 0;\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n value = value << 8 | arr[i];\n bits += 8;\n while(bits >= 5){\n str += ALPHABET[value >>> bits - 5 & 31];\n bits -= 5;\n }\n }\n if (bits > 0) {\n str += ALPHABET[value << 5 - bits & 31];\n }\n return str;\n};\n\n/**\n * Converts a hexadecimal string to an Uint8Array.\n * @param {string} str Hexadecimal string.\n * @returns {Uint8Array} Uint8Array.\n */ const hexDecode = (str)=>{\n // Remove spaces (although they are not allowed by the spec, some issuers add them for readability).\n str = str.replace(/ /g, \"\");\n const buf = new ArrayBuffer(str.length / 2);\n const arr = new Uint8Array(buf);\n for(let i = 0; i < str.length; i += 2){\n arr[i / 2] = parseInt(str.substring(i, i + 2), 16);\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a hexadecimal string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Hexadecimal string.\n */ const hexEncode = (arr)=>{\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n const hex = arr[i].toString(16);\n if (hex.length === 1) str += \"0\";\n str += hex;\n }\n return str.toUpperCase();\n};\n\n/**\n * Converts a Latin-1 string to an Uint8Array.\n * @param {string} str Latin-1 string.\n * @returns {Uint8Array} Uint8Array.\n */ const latin1Decode = (str)=>{\n const buf = new ArrayBuffer(str.length);\n const arr = new Uint8Array(buf);\n for(let i = 0; i < str.length; i++){\n arr[i] = str.charCodeAt(i) & 0xff;\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a Latin-1 string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Latin-1 string.\n */ const latin1Encode = (arr)=>{\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n str += String.fromCharCode(arr[i]);\n }\n return str;\n};\n\n/**\n * TextEncoder instance.\n * @type {TextEncoder|null}\n */ const ENCODER = globalScope.TextEncoder ? new globalScope.TextEncoder() : null;\n/**\n * TextDecoder instance.\n * @type {TextDecoder|null}\n */ const DECODER = globalScope.TextDecoder ? new globalScope.TextDecoder() : null;\n/**\n * Converts an UTF-8 string to an Uint8Array.\n * @param {string} str String.\n * @returns {Uint8Array} Uint8Array.\n */ const utf8Decode = (str)=>{\n if (!ENCODER) {\n throw new Error(\"Encoding API not available\");\n }\n return ENCODER.encode(str);\n};\n/**\n * Converts an Uint8Array to an UTF-8 string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} String.\n */ const utf8Encode = (arr)=>{\n if (!DECODER) {\n throw new Error(\"Encoding API not available\");\n }\n return DECODER.decode(arr);\n};\n\n/**\n * Returns random bytes.\n * @param {number} size Size.\n * @returns {Uint8Array} Random bytes.\n */ const randomBytes = (size)=>{\n if (globalScope.crypto?.getRandomValues) {\n return globalScope.crypto.getRandomValues(new Uint8Array(size));\n } else {\n throw new Error(\"Cryptography API not available\");\n }\n};\n\n/**\n * OTP secret key.\n */ class Secret {\n /**\n * Converts a Latin-1 string to a Secret object.\n * @param {string} str Latin-1 string.\n * @returns {Secret} Secret object.\n */ static fromLatin1(str) {\n return new Secret({\n buffer: latin1Decode(str).buffer\n });\n }\n /**\n * Converts an UTF-8 string to a Secret object.\n * @param {string} str UTF-8 string.\n * @returns {Secret} Secret object.\n */ static fromUTF8(str) {\n return new Secret({\n buffer: utf8Decode(str).buffer\n });\n }\n /**\n * Converts a base32 string to a Secret object.\n * @param {string} str Base32 string.\n * @returns {Secret} Secret object.\n */ static fromBase32(str) {\n return new Secret({\n buffer: base32Decode(str).buffer\n });\n }\n /**\n * Converts a hexadecimal string to a Secret object.\n * @param {string} str Hexadecimal string.\n * @returns {Secret} Secret object.\n */ static fromHex(str) {\n return new Secret({\n buffer: hexDecode(str).buffer\n });\n }\n /**\n * Secret key buffer.\n * @deprecated For backward compatibility, the \"bytes\" property should be used instead.\n * @type {ArrayBufferLike}\n */ get buffer() {\n return this.bytes.buffer;\n }\n /**\n * Latin-1 string representation of secret key.\n * @type {string}\n */ get latin1() {\n Object.defineProperty(this, \"latin1\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: latin1Encode(this.bytes)\n });\n return this.latin1;\n }\n /**\n * UTF-8 string representation of secret key.\n * @type {string}\n */ get utf8() {\n Object.defineProperty(this, \"utf8\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: utf8Encode(this.bytes)\n });\n return this.utf8;\n }\n /**\n * Base32 string representation of secret key.\n * @type {string}\n */ get base32() {\n Object.defineProperty(this, \"base32\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: base32Encode(this.bytes)\n });\n return this.base32;\n }\n /**\n * Hexadecimal string representation of secret key.\n * @type {string}\n */ get hex() {\n Object.defineProperty(this, \"hex\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: hexEncode(this.bytes)\n });\n return this.hex;\n }\n /**\n * Creates a secret key object.\n * @param {Object} [config] Configuration options.\n * @param {ArrayBufferLike} [config.buffer] Secret key buffer.\n * @param {number} [config.size=20] Number of random bytes to generate, ignored if 'buffer' is provided.\n */ constructor({ buffer, size = 20 } = {}){\n /**\n * Secret key.\n * @type {Uint8Array}\n * @readonly\n */ this.bytes = typeof buffer === \"undefined\" ? randomBytes(size) : new Uint8Array(buffer);\n // Prevent the \"bytes\" property from being modified.\n Object.defineProperty(this, \"bytes\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: this.bytes\n });\n }\n}\n\n/**\n * Returns true if a is equal to b, without leaking timing information that would allow an attacker to guess one of the values.\n * @param {string} a String a.\n * @param {string} b String b.\n * @returns {boolean} Equality result.\n */ const timingSafeEqual = (a, b)=>{\n {\n if (a.length !== b.length) {\n throw new TypeError(\"Input strings must have the same length\");\n }\n let i = -1;\n let out = 0;\n while(++i < a.length){\n out |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return out === 0;\n }\n};\n\n/**\n * HOTP: An HMAC-based One-time Password Algorithm.\n * @see [RFC 4226](https://datatracker.ietf.org/doc/html/rfc4226)\n */ class HOTP {\n /**\n * Default configuration.\n * @type {{\n * issuer: string,\n * label: string,\n * issuerInLabel: boolean,\n * algorithm: string,\n * digits: number,\n * counter: number\n * window: number\n * }}\n */ static get defaults() {\n return {\n issuer: \"\",\n label: \"OTPAuth\",\n issuerInLabel: true,\n algorithm: \"SHA1\",\n digits: 6,\n counter: 0,\n window: 1\n };\n }\n /**\n * Generates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Counter value.\n * @returns {string} Token.\n */ static generate({ secret, algorithm = HOTP.defaults.algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter }) {\n const digest = hmacDigest(algorithm, secret.bytes, uintDecode(counter));\n const offset = digest[digest.byteLength - 1] & 15;\n const otp = ((digest[offset] & 127) << 24 | (digest[offset + 1] & 255) << 16 | (digest[offset + 2] & 255) << 8 | digest[offset + 3] & 255) % 10 ** digits;\n return otp.toString().padStart(digits, \"0\");\n }\n /**\n * Generates an HOTP token.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.counter=this.counter++] Counter value.\n * @returns {string} Token.\n */ generate({ counter = this.counter++ } = {}) {\n return HOTP.generate({\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n counter\n });\n }\n /**\n * Validates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Counter value.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ static validate({ token, secret, algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter, window = HOTP.defaults.window }) {\n // Return early if the token length does not match the digit number.\n if (token.length !== digits) return null;\n let delta = null;\n const check = (/** @type {number} */ i)=>{\n const generatedToken = HOTP.generate({\n secret,\n algorithm,\n digits,\n counter: i\n });\n if (timingSafeEqual(token, generatedToken)) {\n delta = i - counter;\n }\n };\n check(counter);\n for(let i = 1; i <= window && delta === null; ++i){\n check(counter - i);\n if (delta !== null) break;\n check(counter + i);\n if (delta !== null) break;\n }\n return delta;\n }\n /**\n * Validates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {number} [config.counter=this.counter] Counter value.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ validate({ token, counter = this.counter, window }) {\n return HOTP.validate({\n token,\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n counter,\n window\n });\n }\n /**\n * Returns a Google Authenticator key URI.\n * @returns {string} URI.\n */ toString() {\n const e = encodeURIComponent;\n return \"otpauth://hotp/\" + `${this.issuer.length > 0 ? this.issuerInLabel ? `${e(this.issuer)}:${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?`}` + `secret=${e(this.secret.base32)}&` + `algorithm=${e(this.algorithm)}&` + `digits=${e(this.digits)}&` + `counter=${e(this.counter)}`;\n }\n /**\n * Creates an HOTP object.\n * @param {Object} [config] Configuration options.\n * @param {string} [config.issuer=''] Account provider.\n * @param {string} [config.label='OTPAuth'] Account label.\n * @param {boolean} [config.issuerInLabel=true] Include issuer prefix in label.\n * @param {Secret|string} [config.secret=Secret] Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Initial counter value.\n */ constructor({ issuer = HOTP.defaults.issuer, label = HOTP.defaults.label, issuerInLabel = HOTP.defaults.issuerInLabel, secret = new Secret(), algorithm = HOTP.defaults.algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter } = {}){\n /**\n * Account provider.\n * @type {string}\n */ this.issuer = issuer;\n /**\n * Account label.\n * @type {string}\n */ this.label = label;\n /**\n * Include issuer prefix in label.\n * @type {boolean}\n */ this.issuerInLabel = issuerInLabel;\n /**\n * Secret key.\n * @type {Secret}\n */ this.secret = typeof secret === \"string\" ? Secret.fromBase32(secret) : secret;\n /**\n * HMAC hashing algorithm.\n * @type {string}\n */ this.algorithm = canonicalizeAlgorithm(algorithm);\n /**\n * Token length.\n * @type {number}\n */ this.digits = digits;\n /**\n * Initial counter value.\n * @type {number}\n */ this.counter = counter;\n }\n}\n\n/**\n * TOTP: Time-Based One-Time Password Algorithm.\n * @see [RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238)\n */ class TOTP {\n /**\n * Default configuration.\n * @type {{\n * issuer: string,\n * label: string,\n * issuerInLabel: boolean,\n * algorithm: string,\n * digits: number,\n * period: number\n * window: number\n * }}\n */ static get defaults() {\n return {\n issuer: \"\",\n label: \"OTPAuth\",\n issuerInLabel: true,\n algorithm: \"SHA1\",\n digits: 6,\n period: 30,\n window: 1\n };\n }\n /**\n * Calculates the counter. i.e. the number of periods since timestamp 0.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} Counter.\n */ static counter({ period = TOTP.defaults.period, timestamp = Date.now() } = {}) {\n return Math.floor(timestamp / 1000 / period);\n }\n /**\n * Calculates the counter. i.e. the number of periods since timestamp 0.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} Counter.\n */ counter({ timestamp = Date.now() } = {}) {\n return TOTP.counter({\n period: this.period,\n timestamp\n });\n }\n /**\n * Calculates the remaining time in milliseconds until the next token is generated.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} counter.\n */ static remaining({ period = TOTP.defaults.period, timestamp = Date.now() } = {}) {\n return period * 1000 - timestamp % (period * 1000);\n }\n /**\n * Calculates the remaining time in milliseconds until the next token is generated.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} counter.\n */ remaining({ timestamp = Date.now() } = {}) {\n return TOTP.remaining({\n period: this.period,\n timestamp\n });\n }\n /**\n * Generates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {string} Token.\n */ static generate({ secret, algorithm, digits, period = TOTP.defaults.period, timestamp = Date.now() }) {\n return HOTP.generate({\n secret,\n algorithm,\n digits,\n counter: TOTP.counter({\n period,\n timestamp\n })\n });\n }\n /**\n * Generates a TOTP token.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {string} Token.\n */ generate({ timestamp = Date.now() } = {}) {\n return TOTP.generate({\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n period: this.period,\n timestamp\n });\n }\n /**\n * Validates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ static validate({ token, secret, algorithm, digits, period = TOTP.defaults.period, timestamp = Date.now(), window }) {\n return HOTP.validate({\n token,\n secret,\n algorithm,\n digits,\n counter: TOTP.counter({\n period,\n timestamp\n }),\n window\n });\n }\n /**\n * Validates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ validate({ token, timestamp, window }) {\n return TOTP.validate({\n token,\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n period: this.period,\n timestamp,\n window\n });\n }\n /**\n * Returns a Google Authenticator key URI.\n * @returns {string} URI.\n */ toString() {\n const e = encodeURIComponent;\n return \"otpauth://totp/\" + `${this.issuer.length > 0 ? this.issuerInLabel ? `${e(this.issuer)}:${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?`}` + `secret=${e(this.secret.base32)}&` + `algorithm=${e(this.algorithm)}&` + `digits=${e(this.digits)}&` + `period=${e(this.period)}`;\n }\n /**\n * Creates a TOTP object.\n * @param {Object} [config] Configuration options.\n * @param {string} [config.issuer=''] Account provider.\n * @param {string} [config.label='OTPAuth'] Account label.\n * @param {boolean} [config.issuerInLabel=true] Include issuer prefix in label.\n * @param {Secret|string} [config.secret=Secret] Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n */ constructor({ issuer = TOTP.defaults.issuer, label = TOTP.defaults.label, issuerInLabel = TOTP.defaults.issuerInLabel, secret = new Secret(), algorithm = TOTP.defaults.algorithm, digits = TOTP.defaults.digits, period = TOTP.defaults.period } = {}){\n /**\n * Account provider.\n * @type {string}\n */ this.issuer = issuer;\n /**\n * Account label.\n * @type {string}\n */ this.label = label;\n /**\n * Include issuer prefix in label.\n * @type {boolean}\n */ this.issuerInLabel = issuerInLabel;\n /**\n * Secret key.\n * @type {Secret}\n */ this.secret = typeof secret === \"string\" ? Secret.fromBase32(secret) : secret;\n /**\n * HMAC hashing algorithm.\n * @type {string}\n */ this.algorithm = canonicalizeAlgorithm(algorithm);\n /**\n * Token length.\n * @type {number}\n */ this.digits = digits;\n /**\n * Token time-step duration.\n * @type {number}\n */ this.period = period;\n }\n}\n\n/**\n * Key URI regex (otpauth://TYPE/[ISSUER:]LABEL?PARAMETERS).\n * @type {RegExp}\n */ const OTPURI_REGEX = /^otpauth:\\/\\/([ht]otp)\\/(.+)\\?([A-Z0-9.~_-]+=[^?&]*(?:&[A-Z0-9.~_-]+=[^?&]*)*)$/i;\n/**\n * RFC 4648 base32 alphabet with pad.\n * @type {RegExp}\n */ const SECRET_REGEX = /^[2-7A-Z]+=*$/i;\n/**\n * Regex for supported algorithms.\n * @type {RegExp}\n */ const ALGORITHM_REGEX = /^SHA(?:1|224|256|384|512|3-224|3-256|3-384|3-512)$/i;\n/**\n * Integer regex.\n * @type {RegExp}\n */ const INTEGER_REGEX = /^[+-]?\\d+$/;\n/**\n * Positive integer regex.\n * @type {RegExp}\n */ const POSITIVE_INTEGER_REGEX = /^\\+?[1-9]\\d*$/;\n/**\n * HOTP/TOTP object/string conversion.\n * @see [Key URI Format](https://github.com/google/google-authenticator/wiki/Key-Uri-Format)\n */ class URI {\n /**\n * Parses a Google Authenticator key URI and returns an HOTP/TOTP object.\n * @param {string} uri Google Authenticator Key URI.\n * @returns {HOTP|TOTP} HOTP/TOTP object.\n */ static parse(uri) {\n let uriGroups;\n try {\n uriGroups = uri.match(OTPURI_REGEX);\n // eslint-disable-next-line no-unused-vars\n } catch (_) {\n /* Handled below */ }\n if (!Array.isArray(uriGroups)) {\n throw new URIError(\"Invalid URI format\");\n }\n // Extract URI groups.\n const uriType = uriGroups[1].toLowerCase();\n const uriLabel = uriGroups[2].split(/(?::|%3A) *(.+)/i, 2).map(decodeURIComponent);\n /** @type {Object.<string, string>} */ const uriParams = uriGroups[3].split(\"&\").reduce((acc, cur)=>{\n const pairArr = cur.split(/=(.*)/, 2).map(decodeURIComponent);\n const pairKey = pairArr[0].toLowerCase();\n const pairVal = pairArr[1];\n /** @type {Object.<string, string>} */ const pairAcc = acc;\n pairAcc[pairKey] = pairVal;\n return pairAcc;\n }, {});\n // 'OTP' will be instantiated with 'config' argument.\n let OTP;\n const config = {};\n if (uriType === \"hotp\") {\n OTP = HOTP;\n // Counter: required\n if (typeof uriParams.counter !== \"undefined\" && INTEGER_REGEX.test(uriParams.counter)) {\n config.counter = parseInt(uriParams.counter, 10);\n } else {\n throw new TypeError(\"Missing or invalid 'counter' parameter\");\n }\n } else if (uriType === \"totp\") {\n OTP = TOTP;\n // Period: optional\n if (typeof uriParams.period !== \"undefined\") {\n if (POSITIVE_INTEGER_REGEX.test(uriParams.period)) {\n config.period = parseInt(uriParams.period, 10);\n } else {\n throw new TypeError(\"Invalid 'period' parameter\");\n }\n }\n } else {\n throw new TypeError(\"Unknown OTP type\");\n }\n // Label: required\n // Issuer: optional\n if (typeof uriParams.issuer !== \"undefined\") {\n config.issuer = uriParams.issuer;\n }\n if (uriLabel.length === 2) {\n config.label = uriLabel[1];\n if (typeof config.issuer === \"undefined\" || config.issuer === \"\") {\n config.issuer = uriLabel[0];\n } else if (uriLabel[0] === \"\") {\n config.issuerInLabel = false;\n }\n } else {\n config.label = uriLabel[0];\n if (typeof config.issuer !== \"undefined\" && config.issuer !== \"\") {\n config.issuerInLabel = false;\n }\n }\n // Secret: required\n if (typeof uriParams.secret !== \"undefined\" && SECRET_REGEX.test(uriParams.secret)) {\n config.secret = uriParams.secret;\n } else {\n throw new TypeError(\"Missing or invalid 'secret' parameter\");\n }\n // Algorithm: optional\n if (typeof uriParams.algorithm !== \"undefined\") {\n if (ALGORITHM_REGEX.test(uriParams.algorithm)) {\n config.algorithm = uriParams.algorithm;\n } else {\n throw new TypeError(\"Invalid 'algorithm' parameter\");\n }\n }\n // Digits: optional\n if (typeof uriParams.digits !== \"undefined\") {\n if (POSITIVE_INTEGER_REGEX.test(uriParams.digits)) {\n config.digits = parseInt(uriParams.digits, 10);\n } else {\n throw new TypeError(\"Invalid 'digits' parameter\");\n }\n }\n return new OTP(config);\n }\n /**\n * Converts an HOTP/TOTP object to a Google Authenticator key URI.\n * @param {HOTP|TOTP} otp HOTP/TOTP object.\n * @returns {string} Google Authenticator Key URI.\n */ static stringify(otp) {\n if (otp instanceof HOTP || otp instanceof TOTP) {\n return otp.toString();\n }\n throw new TypeError(\"Invalid 'HOTP/TOTP' object\");\n }\n}\n\n/**\n * Library version.\n * @type {string}\n */ const version = \"9.4.1\";\n\nexport { HOTP, Secret, TOTP, URI, version };\n","import { Frame, FrameLocator, Locator, Page } from '@playwright/test';\nimport { PlaywrightAction, PlaywrightTimeoutConfig, DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, matchRegex, SmartSelector, ProboLogLevel, TotpConfig, resolveElementTag } from '@probolabs/probo-shared';\nimport { interpolateWithParams } from './interpolation.js';\nimport { findClosestVisibleElement } from './actions';\nimport { proboLogger } from './probo-logger';\nimport { OTP } from './otp';\nimport { NavTracker } from './nav-tracker';\nimport * as OTPAuth from 'otpauth';\nimport { Highlighter } from './highlight';\n\nexport interface ScreenshotUrls {\n base_screenshot_url?: string | null;\n candidates_screenshot_url?: string | null;\n actual_interaction_screenshot_url?: string | null;\n}\n\nexport interface RunStepParams extends Partial<PlaywrightTimeoutConfig> {\n iframeSelector?: string;\n elementSelector?: string;\n smartSelector?: SmartSelector | null;\n smartIFrameSelector?: SmartSelector | null;\n action: PlaywrightAction;\n argument?: string | string[]; \n annotation?: string;\n // Wait-for specific configuration\n pollingInterval?: number;\n timeout?: number;\n // TOTP specific configuration\n totpConfig?: TotpConfig;\n // Screenshot callback - called with screenshot URLs after capture\n onScreenshots?: (urls: ScreenshotUrls) => void;\n // Screenshot function - takes a page and optional type, returns screenshot URL or file path (handles both capture/upload and filesystem save)\n takeScreenshot?: (page: Page, type?: 'base' | 'candidates' | 'actual') => Promise<string>;\n // Context flag to distinguish apply-ai vs replay (affects which screenshots are taken)\n isApplyAIContext?: boolean;\n}\n\nexport interface RunStepResult {\n key: string;\n value: any\n}\n\nexport interface ProboPlaywrightConfig {\n timeoutConfig?: Partial<PlaywrightTimeoutConfig>;\n enableSmartSelectors?: boolean; \n debugLevel?: ProboLogLevel;\n isCanceled?: () => boolean;\n}\n\nexport class ProboPlaywright {\n private readonly enableSmartSelectors: boolean;\n private readonly timeoutConfig: PlaywrightTimeoutConfig;\n private page: Page | null = null;\n private params: Record<string, any> = {};\n private isCanceled: (() => boolean) | null = null;\n private highlighter: Highlighter;\n \n constructor({ enableSmartSelectors = false, timeoutConfig = {}, debugLevel = ProboLogLevel.INFO, isCanceled }: ProboPlaywrightConfig, page: Page | null = null) {\n this.enableSmartSelectors = enableSmartSelectors;\n this.timeoutConfig = {\n ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n ...timeoutConfig\n };\n this.isCanceled = isCanceled || null;\n this.highlighter = new Highlighter(enableSmartSelectors, false, debugLevel);\n this.setPage(page);\n proboLogger.setLogLevel(debugLevel);\n }\n \n /**\n * Sets the Playwright page instance for this ProboPlaywright instance.\n * Also applies the configured default navigation and action timeouts to the page.\n * \n * @param page - The Playwright Page instance to use, or null to unset.\n */\n public setPage(page: Page | null) {\n this.page = page;\n if (this.page) {\n this.page.setDefaultNavigationTimeout(this.timeoutConfig.playwrightNavigationTimeout);\n this.page.setDefaultTimeout(this.timeoutConfig.playwrightActionTimeout);\n \n }\n }\n\n /**\n * Sets the parameters object for template literal interpolation\n * Stores a reference to the params object so mutations are automatically reflected\n * @param params The parameters object containing values to use for interpolation\n */\n public setParams(params: Record<string, any>): void {\n this.params = params;\n }\n\n /**\n * Interpolates a string using the current params and optional additional context\n * @param str The string to interpolate (may contain ${variable} syntax)\n * @param additionalContext Optional additional context to merge with params\n * @returns The interpolated string\n */\n private interpolate(str: string, additionalContext: Record<string, any> = {}): string {\n return interpolateWithParams(str, this.params, additionalContext);\n }\n\n /**\n * Executes a single step in the test scenario with the specified action on the target element.\n * Handles iframe navigation, element highlighting, and various Playwright actions like click, fill, validate, etc.\n * \n * @param params - Configuration object containing element selectors, action type, arguments, and display options\n * @returns Promise that resolves to a string for extract actions, boolean for assert actions, or void for other actions\n * @throws Error if element is not found or validation fails\n */\n public async runStep(params: RunStepParams): Promise<string | boolean | void> {\n \n let { \n action, \n argument = '', \n iframeSelector = '', \n elementSelector = '', \n smartSelector = null,\n smartIFrameSelector = null,\n annotation = '', \n } = params;\n \n // 0. Check that page is set\n if (!this.page) {\n throw new Error('Page is not set');\n }\n \n // Interpolate argument if it's a string with template literals\n if (typeof argument === 'string' && argument.includes('${')) {\n argument = this.interpolate(argument);\n } else if (Array.isArray(argument)) {\n // Handle array arguments (e.g., for UPLOAD_FILES or SELECT_DROPDOWN)\n argument = argument.map((arg: any) => {\n if (typeof arg === 'string' && arg.includes('${')) {\n return this.interpolate(arg);\n }\n return arg;\n });\n }\n \n //trace message to help with debug \n proboLogger.info(`runStep(${JSON.stringify({ ...params, argument })})`);\n // 1. Check if we need to visit a url\n if (action === PlaywrightAction.VISIT_URL || action === PlaywrightAction.VISIT_BASE_URL) {\n try {\n await this.page.goto(argument as string, { timeout: this.timeoutConfig.playwrightNavigationTimeout });\n const navTracker = await NavTracker.getInstance(this.page,{ \n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout, \n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n await navTracker.waitForNavigationToStabilize();\n } catch (e) {\n throw new Error(`Failed to navigate to ${argument}`);\n }\n return;\n }\n \n // 2. Check if we need to assert the url\n if (action === PlaywrightAction.ASSERT_URL) {\n // wait for page to stabilize\n const navTracker = await NavTracker.getInstance(this.page, { waitForStabilityQuietTimeout: this.timeoutConfig.playwrightNavigationTimeout });\n await navTracker.waitForNavigationToStabilize();\n const currentUrl = await this.page.url();\n if (currentUrl !== argument as string) {\n throw new Error(`Assertion failed: Expected URL \"${argument}\" but got \"${currentUrl}\".`);\n }\n return;\n }\n \n // 3. Check if we need to type keys\n if (action === PlaywrightAction.TYPE_KEYS) {\n await this.robustTypeKeys(argument as string);\n return;\n }\n \n // Capture base screenshot before element interaction (if screenshot function is provided)\n // Only capture base screenshot during apply-ai, skip during replay\n let baseScreenshotUrl: string | null = null;\n if (params.takeScreenshot && params.isApplyAIContext) {\n try {\n proboLogger.debug('Capturing base screenshot before element interaction');\n baseScreenshotUrl = await params.takeScreenshot(this.page, 'base');\n proboLogger.debug(`Base screenshot uploaded: ${baseScreenshotUrl}`);\n } catch (baseError) {\n proboLogger.warn(`Failed to capture base screenshot: ${baseError}`);\n // Continue even if base screenshot fails\n }\n }\n \n // 4. Get the locator (iframe or not)\n const startTime = Date.now();\n let locator: Locator;\n \n if (iframeSelector && iframeSelector.length > 0) {\n const frameLocator: FrameLocator = await this.getLocator(iframeSelector, smartIFrameSelector, true) as FrameLocator;\n locator = await this.getLocator(elementSelector, smartSelector, false, frameLocator) as Locator;\n } else {\n locator = await this.getLocator(elementSelector, smartSelector) as Locator;\n }\n \n \n // Fail fast: immediately validate that the element exists for non-wait actions\n // Use Promise.race() for all actions to enable cancellation without sacrificing precision\n const locator_timeout = (action === PlaywrightAction.WAIT_FOR) ? (params.timeout as number) || 10000 : this.timeoutConfig.playwrightLocatorTimeout;\n \n // Create a cancellation promise that checks for cancellation every 100ms\n // This allows precise waits while still enabling cancellation for all actions\n const cancellationCheckInterval = 100; // Check for cancellation every 100ms\n \n // Create a promise that rejects when cancellation is detected\n const cancellationPromise = new Promise<never>((_, reject) => {\n const checkCancellation = () => {\n if (this.isCanceled && this.isCanceled()) {\n reject(new Error('Replay execution was cancelled'));\n return;\n }\n // Continue checking until the wait completes or times out\n setTimeout(checkCancellation, cancellationCheckInterval);\n };\n checkCancellation();\n });\n \n // Helper function to wait for locator with cancellation support\n const waitForLocatorWithCancellation = async (targetLocator: Locator, timeout: number) => {\n return Promise.race([\n targetLocator.waitFor({ state: 'attached', timeout }),\n cancellationPromise\n ]);\n };\n \n try {\n // Race between the actual wait and cancellation check for all actions\n // This allows precise waits while still enabling cancellation\n await waitForLocatorWithCancellation(locator, locator_timeout);\n } catch (e) {\n // If it's a cancellation error, re-throw it\n if (e instanceof Error && e.message === 'Replay execution was cancelled') {\n throw e;\n }\n \n // Timeout reached, try fallback if smart selectors are enabled\n if (this.enableSmartSelectors) {\n try {\n proboLogger.warn(`Element not found with smart selector: ${JSON.stringify(smartSelector)} ${smartIFrameSelector ? `with iframe smart selector: ${JSON.stringify(smartIFrameSelector)}` : ''}. Falling back to CSS selector`, e);\n if (iframeSelector && iframeSelector.length > 0) {\n const frameLocator: FrameLocator = await this.getLocatorOrFrame(iframeSelector, true) as FrameLocator;\n locator = await this.getLocatorOrFrame(elementSelector, false, frameLocator) as Locator;\n } else {\n locator = await this.getLocatorOrFrame(elementSelector, false) as Locator;\n }\n \n // Race the fallback wait with cancellation as well\n await waitForLocatorWithCancellation(locator, 200);\n } catch (e) {\n // If it's a cancellation error, re-throw it\n if (e instanceof Error && e.message === 'Replay execution was cancelled') {\n throw e;\n }\n throw new Error(`Element not found with CSS selector: ${elementSelector} ${iframeSelector ? `in iframe: ${iframeSelector}` : ''} after ${locator_timeout}ms`);\n }\n } else {\n throw new Error(`Element not found with CSS selector: ${elementSelector} ${iframeSelector ? `in iframe: ${iframeSelector}` : ''} after ${locator_timeout}ms`);\n }\n }\n \n if (action === PlaywrightAction.HOVER) {\n const visibleLocator = await findClosestVisibleElement(locator);\n if (visibleLocator) {\n locator = visibleLocator;\n }\n }\n \n // 5. Capture screenshots if screenshot function is provided\n const screenshotUrls: ScreenshotUrls = {\n base_screenshot_url: baseScreenshotUrl\n };\n if (params.takeScreenshot) {\n try {\n // Candidate elements screenshot: find and highlight candidates based on action type\n // Only capture candidate screenshot during apply-ai, skip during replay\n if (params.isApplyAIContext) {\n try {\n const elementTags = resolveElementTag(action);\n proboLogger.debug(`Finding candidate elements for action ${action} with tags: ${elementTags}`);\n \n await this.highlighter.findAndCacheCandidateElements(this.page, elementTags);\n await this.highlighter.highlightCachedElements(this.page, 'candidates');\n \n // Wait for highlight timeout to ensure highlights are visible\n // if (this.timeoutConfig.highlightTimeout > 0) {\n // await this.page.waitForTimeout(this.timeoutConfig.highlightTimeout);\n // }\n \n screenshotUrls.candidates_screenshot_url = await params.takeScreenshot(this.page, 'candidates');\n proboLogger.debug(`Candidates screenshot uploaded: ${screenshotUrls.candidates_screenshot_url}`);\n \n // Unhighlight candidates\n await this.highlighter.unhighlightCached(this.page);\n } catch (candidateError) {\n proboLogger.warn(`Failed to capture candidates screenshot: ${candidateError}`);\n // Continue even if candidate screenshot fails\n }\n }\n \n // Actual element screenshot: highlight the actual element\n // Always capture actual screenshot for both apply-ai and replay\n try {\n await this.highlight(locator, annotation);\n // Wait for highlight timeout to ensure highlights are visible\n if (this.timeoutConfig.highlightTimeout > 0) {\n await this.page.waitForTimeout(this.timeoutConfig.highlightTimeout);\n }\n screenshotUrls.actual_interaction_screenshot_url = await params.takeScreenshot(this.page, 'actual');\n proboLogger.debug(`Actual element screenshot uploaded: ${screenshotUrls.actual_interaction_screenshot_url}`);\n \n // Unhighlight before performing action\n await this.unhighlight(locator);\n } catch (actualError) {\n proboLogger.warn(`Failed to capture actual element screenshot: ${actualError}`);\n // Try to unhighlight even if screenshot failed\n try {\n await this.unhighlight(locator);\n } catch (unhighlightError) {\n proboLogger.warn(`Failed to unhighlight: ${unhighlightError}`);\n }\n }\n \n // Call the callback with screenshot URLs\n if (params.onScreenshots) {\n params.onScreenshots(screenshotUrls);\n }\n } catch (screenshotError) {\n proboLogger.warn(`Screenshot capture failed: ${screenshotError}`);\n // Continue with action even if screenshots fail\n }\n } else {\n // 5. Highlight, wait, unhighlight if highlightTimeout > 0 (original behavior when no screenshots)\n if (this.timeoutConfig.highlightTimeout > 0) {\n await this.highlight(locator, annotation);\n await this.page.waitForTimeout(this.timeoutConfig.highlightTimeout);\n await this.unhighlight(locator);\n }\n }\n \n // 6. Action logic\n switch (action) {\n case PlaywrightAction.CLICK:\n case PlaywrightAction.CHECK_CHECKBOX:\n case PlaywrightAction.SELECT_RADIO:\n await this.robustMouseAction(locator, 'click');\n break;\n case PlaywrightAction.FILL_IN:\n await this.robustFill(locator, argument as string);\n break; \n case PlaywrightAction.SELECT_DROPDOWN:\n await locator.selectOption(argument, { timeout: this.timeoutConfig.playwrightActionTimeout });\n break; \n case PlaywrightAction.SET_SLIDER:\n await this.setSliderValue(locator, argument as string);\n break;\n case PlaywrightAction.WAIT_FOR_OTP:\n {\n const waitForOtpArgs = params as any;\n const otpInbox = typeof argument === 'string' && argument.trim() ? argument.trim() : undefined;\n const otpTimeout = waitForOtpArgs?.timeout as number | undefined;\n const otpCheckInterval = waitForOtpArgs?.checkInterval as number | undefined;\n const otpLookback = waitForOtpArgs?.checkRecentMessagesSinceMs as number | undefined;\n\n const otp = await OTP.waitForOTP({\n inbox: otpInbox,\n timeout: otpTimeout,\n checkInterval: otpCheckInterval,\n checkRecentMessagesSinceMs: otpLookback ?? 600_000,\n });\n\n if (otp) {\n proboLogger.log(`✅ OTP found: ${otp}`);\n await locator.fill(otp, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } else {\n proboLogger.log(`❌ OTP not found`);\n }\n }\n break;\n case PlaywrightAction.GEN_TOTP:\n // Use secret from argument and auxiliary config (digits/algorithm) from totpConfig\n // If totpConfig is not provided, use defaults (digits: 6, algorithm: 'SHA1')\n const totpAux = (params as any).totpConfig;\n const secretArg = (params as any).argument as string;\n if (secretArg) {\n try {\n // Use provided config or defaults\n const digits = totpAux?.digits || 6;\n const algorithm = totpAux?.algorithm || 'SHA1';\n const totpCode = this.generateOTP(secretArg, digits, algorithm);\n proboLogger.log(`✅ TOTP generated (digits: ${digits}, algorithm: ${algorithm})`);\n await locator.fill(totpCode, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } catch (error) {\n proboLogger.error(`❌ TOTP generation failed: ${error}`);\n throw new Error(`TOTP generation failed: ${error}`);\n }\n } else {\n proboLogger.log(`❌ Missing TOTP argument`);\n throw new Error(`Missing TOTP argument`);\n }\n break;\n \n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\n const containerText = await this.getTextValue(locator);\n if (!matchRegex(containerText, argument as string)) {\n throw new Error(`Validation failed. Expected text \"${containerText}\" to match \"${argument}\".`);\n }\n break;\n case PlaywrightAction.ASSERT_EXACT_VALUE:\n const actualText = await this.getTextValue(locator);\n \n if (actualText !== argument) {\n throw new Error(`Validation failed. Expected text \"${argument}\", but got \"${actualText}\".`);\n }\n break;\n case PlaywrightAction.HOVER: \n if (locator) {\n await this.robustMouseAction(locator, 'hover');\n } else {\n throw new Error('not executing HOVER because no visible ancestor found');\n }\n break;\n case PlaywrightAction.SCROLL_TO_ELEMENT:\n // Restore exact scroll positions from recording\n const scrollData = JSON.parse(argument as string);\n const desiredScrollTop = scrollData.scrollTop;\n const desiredScrollLeft = scrollData.scrollLeft;\n const maxAttempts = 100;\n \n try {\n proboLogger.log('🔄 Restoring scroll position for container:', locator, 'scrollTop:', desiredScrollTop, 'scrollLeft:', desiredScrollLeft);\n \n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n // Perform scroll\n await locator.evaluate((el: HTMLElement, scrollData: { scrollTop: number; scrollLeft: number }) => {\n el.scrollTo({left: scrollData.scrollLeft, top: scrollData.scrollTop, behavior: 'smooth'});\n }, { scrollTop: desiredScrollTop, scrollLeft: desiredScrollLeft }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n \n // Wait for scroll to complete\n await this.page.waitForTimeout(50);\n \n // Get actual scroll positions\n const actualScroll = await locator.evaluate((el: HTMLElement) => {\n return { scrollTop: el.scrollTop, scrollLeft: el.scrollLeft };\n }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n \n // Compare actual vs desired\n const scrollTopMatch = Math.abs(actualScroll.scrollTop - desiredScrollTop) < 1;\n const scrollLeftMatch = Math.abs(actualScroll.scrollLeft - desiredScrollLeft) < 1;\n \n if (scrollTopMatch && scrollLeftMatch) {\n proboLogger.log(`🔄 Scroll position restored successfully on attempt ${attempt}`);\n break;\n }\n \n if (attempt < maxAttempts) {\n proboLogger.log(`🔄 Scroll position mismatch on attempt ${attempt}. Desired: (${desiredScrollTop}, ${desiredScrollLeft}), Actual: (${actualScroll.scrollTop}, ${actualScroll.scrollLeft}). Retrying...`);\n } else {\n proboLogger.warn(`🔄 Scroll position mismatch after ${maxAttempts} attempts. Desired: (${desiredScrollTop}, ${desiredScrollLeft}), Final: (${actualScroll.scrollTop}, ${actualScroll.scrollLeft})`);\n }\n }\n } catch (e) {\n proboLogger.error('🔄 Failed to restore scroll position for container:', locator, 'scrollTop:', desiredScrollTop, 'scrollLeft:', desiredScrollLeft, 'error:', e);\n }\n break;\n case PlaywrightAction.UPLOAD_FILES:\n await locator.setInputFiles(argument as string[], { timeout: this.timeoutConfig.playwrightActionTimeout });\n break;\n case PlaywrightAction.EXTRACT_VALUE:\n let extractedText = await this.getTextValue(locator);\n return extractedText;\n case PlaywrightAction.WAIT_FOR: \n const expectedText = argument as string;\n // Use smaller polling interval for better precision (can detect changes sooner)\n const pollingInterval = (params.pollingInterval as number) || 100; // Default 100ms for better precision\n const timeout = (params.timeout as number) || 10000; // Default 10 seconds\n \n // Create a cancellation promise that rejects when cancellation is detected\n // This allows us to cancel the text polling loop at any time\n const createCancellationPromise = () => {\n const cancellationCheckInterval = 50; // Check for cancellation every 50ms\n return new Promise<never>((_, reject) => {\n const checkCancellation = () => {\n if (this.isCanceled && this.isCanceled()) {\n reject(new Error('Replay execution was cancelled'));\n return;\n }\n setTimeout(checkCancellation, cancellationCheckInterval);\n };\n checkCancellation();\n });\n };\n \n let textMatches = false; \n let currentText = ''; \n const waitStartTime = Date.now();\n const cancellationPromise = createCancellationPromise();\n \n while (!textMatches && (Date.now() - waitStartTime) < timeout) {\n try {\n // Check if element is visible first\n const isVisible = await locator.isVisible();\n \n if (isVisible) {\n // Get the current text content only if element is visible\n currentText = await this.getTextValue(locator);\n \n // Check if the text matches (using the same logic as ASSERT_CONTAINS_VALUE)\n if (matchRegex(currentText, expectedText)) {\n textMatches = true;\n proboLogger.log(`✅ Wait for text completed successfully. Found: \"${currentText}\"`);\n break;\n }\n }\n \n // Text doesn't match yet or element not visible, wait for the polling interval\n // Use Promise.race() to allow cancellation during the wait (consistent with element attachment logic)\n if ((Date.now() - waitStartTime) < timeout) {\n const remainingTime = timeout - (Date.now() - waitStartTime);\n const actualPollInterval = Math.min(pollingInterval, remainingTime);\n \n if (actualPollInterval > 0) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n // Race between the timeout and cancellation check\n await Promise.race([\n this.page.waitForTimeout(actualPollInterval),\n cancellationPromise\n ]);\n }\n }\n } catch (e) {\n // If it's a cancellation error, re-throw it\n if (e instanceof Error && e.message === 'Replay execution was cancelled') {\n throw e;\n }\n throw new Error(`Wait for text failed while trying to extract text from selector: ${elementSelector}${iframeSelector ? ` in iframe: ${iframeSelector}` : ''}`);\n }\n }\n \n // Final cancellation check\n if (this.isCanceled && this.isCanceled()) {\n throw new Error('Replay execution was cancelled');\n }\n \n // Timeout reached without a match\n if (!textMatches) { \n throw new Error(`Wait for text failed. Expected \"${expectedText}\" to match \"${currentText}\" after ${timeout}ms of polling every ${pollingInterval}ms`);\n } \n break;\n default:\n throw new Error(`Unhandled action: ${action}`);\n }\n }\n\n /**\n * Public method to generate TOTP code using the provided secret, digits, and algorithm\n * @param secret - The TOTP secret (base32 encoded)\n * @param digits - Number of digits in the TOTP code (default: 6)\n * @param algorithm - Hash algorithm to use (default: 'SHA1')\n * @returns The generated TOTP code\n */\n public generateOTP(secret: string, digits: number = 6, algorithm: string = 'SHA1'): string {\n const otp = new OTPAuth.TOTP({\n algorithm,\n digits, \n secret,\n });\n return otp.generate();\n }\n \n private async getLocator(elementSelector: string, smartSelector: SmartSelector | null, getIFrameLocator: boolean = false, frameLocator: FrameLocator | null = null) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n if (this.enableSmartSelectors && smartSelector && Object.keys(smartSelector).length > 0) {\n const { strategy, selector, index, label_selector } = smartSelector; \n proboLogger.debug(`getLocator: smartSelector=${JSON.stringify(smartSelector)}`);\n let labelLocator: Locator;\n let combinedSelector: string;\n let id;\n const mainStrategy = smartSelector.strategy.split(' ')[0]; //extract the main strategy from the full strategy string\n switch(mainStrategy) {\n case 'role': \n case 'placeholder':\n case 'name':\n case 'data-testid':\n case 'id':\n case 'css':\n case 'class':\n proboLogger.debug(`getLocator: strategy=${mainStrategy}, index=${index}`);\n if (typeof index === 'number') { \n const matchedLocators: Locator|FrameLocator = await this.getLocatorOrFrame(selector, getIFrameLocator, frameLocator);\n if (!getIFrameLocator) {\n proboLogger.debug(`getLocator: matched ${await (matchedLocators as Locator).count()} elements`);\n for (const [index, element] of (await (matchedLocators as Locator).all()).entries()) {\n // Get outerHTML\n const html = await element.evaluate(el => el.outerHTML);\n proboLogger.debug(`[${index}] ${html}`);\n }\n }\n return matchedLocators.nth(index);\n }\n else {\n return this.getLocatorOrFrame(selector, getIFrameLocator, frameLocator);\n } \n case 'label':\n if (smartSelector.strategy === 'label for') {\n proboLogger.debug(`getLocator: strategy=${smartSelector.strategy}, label_selector=${label_selector}`);\n labelLocator = this.getLocatorOrFrame(label_selector as string, false,frameLocator) as Locator;\n id = await labelLocator.getAttribute('for');\n proboLogger.debug(`getLocator: labelLocator.getAttribute('for')=${id}`);\n combinedSelector = selector ? `#${id} > ${selector}` : `#${id}`;\n proboLogger.debug(`getLocator: combinedSelector=${combinedSelector}`);\n return this.getLocatorOrFrame(combinedSelector, getIFrameLocator, frameLocator);\n }\n else if (smartSelector.strategy === 'label by') {\n proboLogger.debug(`getLocator: strategy=${smartSelector.strategy}, label_selector=${label_selector}`);\n labelLocator = this.getLocatorOrFrame(label_selector as string, false, frameLocator) as Locator;\n id = await labelLocator.getAttribute('id');\n proboLogger.debug(`getLocator: labelLocator.getAttribute('id')=${id}`);\n combinedSelector = selector ? `[aria-labelledby=\"${id}\"] > ${selector}` : `[aria-labelledby=\"${id}\"]`;\n proboLogger.debug(`getLocator: combinedSelector=${combinedSelector}`);\n return this.getLocatorOrFrame(combinedSelector, getIFrameLocator, frameLocator);\n }\n else {\n throw new Error(`Unsupported label strategy: ${smartSelector.strategy}`); \n }\n default:\n throw new Error(`Unsupported smart selector strategy: ${strategy}`);\n }\n }\n // fallback to standard locator\n return this.getLocatorOrFrame(elementSelector, getIFrameLocator, frameLocator);\n }\n \n private getLocatorOrFrame(selector: string, getIFrameLocator: boolean, frameLocator: FrameLocator | null = null) : Locator | FrameLocator {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n if (getIFrameLocator) {\n proboLogger.debug(`getLocatorOrFrame: getting frame locator for selector=${selector}`);\n if (frameLocator) {\n throw new Error(`getLocatorOrFrame: frameLocator must be null when getIFrameLocator is true`);\n }\n return this.page.frameLocator(selector);\n }\n proboLogger.debug(`getLocatorOrFrame: ${frameLocator ? `frameLocator.locator(\"${selector}\")` : `page.locator(\"${selector}\")`}`);\n return frameLocator ? frameLocator.locator(selector) : this.page.locator(selector);\n }\n\n\n /**\n * Creates a visual highlight overlay on the target element with optional annotation text.\n * The highlight appears as a red border around the element and can include descriptive text.\n * \n * @param locator - The Playwright locator for the element to highlight\n * @param annotation - Optional text annotation to display above/below the highlighted element\n */\n private async highlight(locator: Locator, annotation: string | null = null) {\n try {\n await locator.evaluate((el: HTMLElement) => {\n const overlay = el.ownerDocument.createElement('div');\n overlay.id = 'highlight-overlay';\n overlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 2147483647;\n `;\n el.ownerDocument.body.appendChild(overlay);\n const bbox = el.getBoundingClientRect();\n const highlight = el.ownerDocument.createElement('div');\n highlight.style.cssText = `\n position: fixed;\n left: ${bbox.x}px;\n top: ${bbox.y}px;\n width: ${bbox.width}px;\n height: ${bbox.height}px;\n border: 2px solid rgb(255, 0, 0);\n transition: all 0.2s ease-in-out;\n `;\n overlay.appendChild(highlight);\n }, { timeout: 500 });\n } catch (e) {\n proboLogger.log('highlight: failed to run locator.evaluate()', e);\n }\n if (annotation) {\n await locator.evaluate((el: HTMLElement, annotation: string) => {\n const overlay = el.ownerDocument.getElementById('highlight-overlay');\n if (overlay) {\n const bbox = el.getBoundingClientRect();\n const annotationEl = el.ownerDocument.createElement('div');\n annotationEl.style.cssText = `\n position: fixed;\n left: ${bbox.x}px;\n top: ${bbox.y - 25}px;\n padding: 2px 6px;\n background-color: rgba(255, 255, 0, 0.6);\n color: black;\n font-size: 16px;\n font-family: 'Courier New', Courier, monospace;\n font-weight: bold;\n border-radius: 3px;\n pointer-events: none;\n z-index: 2147483647;\n `;\n annotationEl.textContent = annotation;\n \n // If element is too close to top of window, position annotation below\n if (bbox.y < 30) {\n annotationEl.style.top = `${bbox.y + bbox.height + 5}px`;\n }\n \n overlay.appendChild(annotationEl);\n }\n }, annotation, { timeout: 500 });\n }\n };\n \n /**\n * Removes the highlight overlay from the target element.\n * Cleans up the visual highlighting created by the highlight method.\n * \n * @param locator - The Playwright locator for the element to unhighlight\n */\n private async unhighlight(locator: Locator) {\n try {\n await locator.evaluate((el: HTMLElement) => {\n const overlay = el.ownerDocument.getElementById('highlight-overlay');\n if (overlay) {\n overlay.remove();\n }\n }, { timeout: 500 });\n } catch (e) {\n proboLogger.log('unhighlight: failed to run locator.evaluate()', e);\n }\n };\n \n /**\n * Attempts to fill a form field with the specified value using multiple fallback strategies.\n * First tries the standard fill method, then falls back to click + type if needed.\n * \n * @param locator - The Playwright locator for the input element\n * @param value - The text value to fill into the input field\n */\n private async robustFill(locator: Locator, value: string) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n try {\n await locator.fill(value, { timeout: this.timeoutConfig.playwrightActionTimeout });\n return;\n } catch (err) {\n proboLogger.warn('robustFill: failed to run locator.fill(), trying fallback', err);\n }\n // fallback: click and type\n try {\n await locator.focus({ timeout: this.timeoutConfig.playwrightActionTimeout });\n await this.page.keyboard.type(value);\n return;\n } catch (err) {\n proboLogger.warn('robustFill: failed to run locator.focus() and page.keyboard.type()', err);\n };\n };\n \n private async robustTypeKeys(value: string) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n /* try {\n await locator.press(value);\n return;\n } catch (err) {\n proboLogger.warn('robustTypeKeys: failed to run locator.type()', err);\n } */\n // fallback: click and type\n try {\n // await locator.focus(); \n await this.page.keyboard.press(value);\n return;\n } catch (err) {\n proboLogger.warn('robustTypeKeys: failed to run page.keyboard.type()', err);\n }\n }\n \n /**\n * Performs a robust mouse action (click or hover) using multiple fallback strategies.\n * Attempts standard click first, then mouse click at center coordinates, and finally native DOM events.\n * \n * @param locator - The Playwright locator for the element to click\n * @param action - The mouse action to perform ('click' or 'hover')\n * @throws Error if all mouse action methods fail\n */\n private async robustMouseAction(locator: Locator, action: 'click' | 'hover') {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n // start with a standard click\n try {\n if (action === 'click') { \n await locator.click({ noWaitAfter: true, timeout: this.timeoutConfig.playwrightActionTimeout });\n const navTracker = await NavTracker.getInstance(this.page,{ \n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout, \n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n await navTracker.waitForNavigationToStabilize();\n /* const old_url = this.page.url();\n await locator.click({ noWaitAfter: false, timeout: this.timeoutConfig.playwrightActionTimeout });\n await this.page.waitForTimeout(50); // just enough time to detect SPA router changes\n if (old_url !== this.page.url()) {\n await this.page.waitForLoadState('networkidle', { timeout: this.timeoutConfig.playwrightNavigationTimeout });\n } */\n } else if (action === 'hover') {\n await locator.hover({ timeout: this.timeoutConfig.playwrightActionTimeout });\n } else {\n throw new Error(`Unsupported mouse action: ${action}`);\n }\n return;\n } catch (err) {\n proboLogger.warn(`robustMouseAction: failed to run locator.${action}(), trying mouse.${action}()`);\n }\n // try clicking using mouse at the center of the element\n try {\n const bbox = await locator.boundingBox({ timeout: this.timeoutConfig.playwrightLocatorTimeout });\n if (bbox) {\n if (action === 'click') {\n // Move the mouse to the bottom right corner of the page before clicking\n const viewportSize = this.page.viewportSize();\n if (viewportSize) {\n proboLogger.log(`robustMouseAction: moving mouse to the bottom right corner of the page (${viewportSize.width - 1}, ${viewportSize.height - 1})`);\n await this.page.mouse.move(viewportSize.width - 1, viewportSize.height - 1);\n } else {\n proboLogger.warn('robustMouseAction: viewportSize not available, moving mouse to element top left corner');\n await this.page.mouse.move(bbox.x, bbox.y);\n }\n await this.page.waitForTimeout(100);\n await this.page.mouse.click(bbox.x, bbox.y);\n } else if (action === 'hover') {\n await this.page.mouse.move(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2);\n }\n return;\n } else {\n proboLogger.warn('robustMouseAction: bounding box not found');\n }\n } catch (err2) {\n proboLogger.warn(`robustMouseAction: failed to run page.mouse.${action}(), trying dispatching an event`);\n }\n // fallback: dispatch native mouse events manually\n try {\n if (action === 'click') {\n await locator.evaluate((el) => {\n ['mousedown', 'mouseup', 'click'].forEach(type => {\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window\n });\n el.dispatchEvent(event);\n });\n }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } else if (action === 'hover') {\n await locator.evaluate((el) => {\n ['mouseenter', 'mouseover', 'focusin', 'focus'].forEach(type => {\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window\n });\n el.dispatchEvent(event);\n });\n }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n }\n } catch (err3) {\n proboLogger.error(`robustMouseAction: all ${action} methods failed:`);\n // not re-throwing playwright errors as they are long and not useful for the user\n throw new Error(`robustMouseAction: all ${action} methods failed`);\n }\n };\n \n /**\n * Extracts text content from an element using multiple strategies.\n * Tries textContent first, then inputValue, and finally looks for nested input elements.\n * Returns normalized and trimmed text for consistent comparison.\n * \n * @param locator - The Playwright locator for the element to extract text from\n * @returns Normalized text content with consistent whitespace handling\n */\n private async getTextValue(locator: Locator) {\n let textValue = await locator.textContent();\n if (!textValue) {\n try {\n textValue = await locator.inputValue();\n } catch (err) {\n // proboLogger.warn('getTextValue: failed to run locator.inputValue()', err);\n }\n }\n if (!textValue) {\n try {\n textValue = await locator.locator('input').inputValue();\n } catch (err) {\n // proboLogger.warn('getTextValue: failed to run locator.locator(\"input\").inputValue()', err);\n }\n }\n if (!textValue) {\n textValue = '';\n }\n // Trim and normalize whitespace to make comparison more robust\n return textValue.trim().replace(/\\s+/g, ' ');\n };\n \n private async setSliderValue(locator: Locator, value: string) {\n try {\n await locator.fill(value, { timeout: this.timeoutConfig.playwrightActionTimeout });\n return;\n } catch (err) {\n proboLogger.warn('setSliderValue: failed to run locator.fill(), trying fallback', err);\n }\n // fallback \n try {\n await locator.focus();\n await locator.evaluate((el: HTMLInputElement, value: string) => {\n el.value = value;\n el.dispatchEvent(new Event('input', { bubbles: true }));\n el.dispatchEvent(new Event('change', { bubbles: true })); \n }, value, { timeout: this.timeoutConfig.playwrightActionTimeout }); \n } catch (err) {\n proboLogger.error('setSliderValue: failed to run locator.evaluate()', err);\n }\n }\n} /* class ProboPlaywright */\n","// --- Code generation API utilities for Probo Labs Playwright scripts ---\nimport { \n ApiClient, \n Interaction, \n ElementInfo,\n RecorderSettings,\n DEFAULT_RECORDER_SETTINGS,\n generateCode,\n CodeGeneratorOptions,\n PlaywrightAction,\n ServerResponse,\n ApplyAIStatus,\n ScrollableContainer,\n WaitForConfig,\n TotpConfig,\n SmartSelector\n} from '@probolabs/probo-shared';\n\n/**\n * Options for code generation\n */\nexport interface CodeGenOptions {\n useDefaultSettings?: boolean;\n recorderSettings?: RecorderSettings;\n viewPort?: { width: number; height: number };\n}\n\n/**\n * Result of generating code for a test suite\n */\nexport interface TestSuiteCodeGenResult {\n testSuiteId: number;\n testSuiteName: string;\n scenarios: Array<{\n scenarioId: number;\n scenarioName: string;\n code: string;\n }>;\n}\n\n/**\n * Result of generating code for a project (all scenarios)\n */\nexport interface ProjectCodeGenResult {\n projectId: number;\n projectName: string;\n scenarios: Array<{\n scenarioId: number;\n scenarioName: string;\n code: string;\n }>;\n}\n\n/**\n * Backend API response format for scenario interactions\n */\ninterface BackendScenarioResponse {\n id: number;\n name: string;\n interactions: BackendInteraction[];\n parameterTable?: Record<string, string>[];\n viewPort?: { width: number; height: number };\n}\n\n/**\n * Backend API response format for test suite\n */\ninterface BackendTestSuiteResponse {\n id: number;\n name: string;\n scenarios: Array<{\n id: number;\n name: string;\n }>;\n}\n\n/**\n * Backend API response format for project scenarios\n */\ninterface BackendProjectScenario {\n id: number;\n name: string;\n}\n\n/**\n * Backend API response format for project\n */\ninterface BackendProjectResponse {\n id: number;\n name: string;\n}\n\n/**\n * Backend interaction format (from RecorderInteractionSerializer)\n */\ninterface BackendInteraction {\n interactionId: string;\n nativeDescription: string;\n isNativeDescriptionElaborate: boolean;\n action: string;\n argument: string | string[] | null;\n text?: string;\n css_selector?: string;\n iframe_selector?: string;\n smart_selector?: SmartSelector | null;\n smart_iframe_selector?: SmartSelector | null;\n nativeName: string;\n parameterName: string;\n elementInfo?: ElementInfo | null;\n stepId: number;\n base_screenshot_url?: string | null;\n candidates_screenshot_url?: string | null;\n actual_interaction_screenshot_url?: string | null;\n url: string;\n candidate_elements?: ElementInfo[];\n html?: string;\n replay_status?: string | null;\n apply_ai_status?: string | null;\n syncStatus: string;\n recordingId?: string | null;\n last_replay_timestamp?: number | null;\n index?: number;\n serverResponse?: ServerResponse | null;\n annotation?: string;\n scrollableContainers?: ScrollableContainer[];\n waitForConfig?: WaitForConfig;\n totpConfig?: TotpConfig;\n isSecret?: boolean;\n}\n\n/**\n * ProboCodeGenerator - Handles fetching test suite/scenario data and generating Playwright code\n */\nexport class ProboCodeGenerator {\n /**\n * Normalize API URL by removing trailing slash\n */\n private static normalizeApiUrl(apiUrl: string): string {\n return apiUrl.replace(/\\/+$/, '');\n }\n\n private static async readResponseErrorText(response: Response): Promise<string> {\n try {\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n const errorData: any = await response.json();\n return errorData.error || errorData.detail || JSON.stringify(errorData);\n }\n\n let errorText = await response.text();\n // Truncate HTML error pages to first 200 chars\n if (errorText.length > 200) {\n errorText = errorText.substring(0, 200) + '...';\n }\n return errorText;\n } catch (e) {\n // Best-effort fallback\n return `HTTP ${response.status}`;\n }\n }\n\n /**\n * Fetch scenario data from the backend API\n */\n private static async fetchScenarioData(\n scenarioId: number,\n apiToken: string,\n apiUrl: string\n ): Promise<BackendScenarioResponse> {\n const normalizedUrl = this.normalizeApiUrl(apiUrl);\n // Scenario interactions endpoint is under /api/ (special endpoint)\n const url = `${normalizedUrl}/api/scenarios/${scenarioId}/interactions`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await this.readResponseErrorText(response);\n throw new Error(`Failed to fetch scenario ${scenarioId}: ${response.status} ${errorText}`);\n }\n\n return response.json();\n }\n\n /**\n * Fetch test suite data from the backend API\n */\n private static async fetchTestSuiteData(\n testSuiteId: number,\n apiToken: string,\n apiUrl: string\n ): Promise<BackendTestSuiteResponse> {\n const normalizedUrl = this.normalizeApiUrl(apiUrl);\n // Note: test-suites endpoint doesn't have /api/ prefix (it's from the router at root level)\n const url = `${normalizedUrl}/test-suites/${testSuiteId}/`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await this.readResponseErrorText(response);\n throw new Error(`Failed to fetch test suite ${testSuiteId}: ${response.status} ${errorText}`);\n }\n\n return response.json();\n }\n\n /**\n * Fetch project data from the backend API\n */\n private static async fetchProjectData(\n projectId: number,\n apiToken: string,\n apiUrl: string\n ): Promise<BackendProjectResponse> {\n const normalizedUrl = this.normalizeApiUrl(apiUrl);\n // Projects endpoint is at root level, not under /api/\n const url = `${normalizedUrl}/projects/${projectId}/`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await this.readResponseErrorText(response);\n throw new Error(`Failed to fetch project ${projectId}: ${response.status} ${errorText}`);\n }\n\n return response.json();\n }\n\n /**\n * Fetch all scenarios for a project from the backend API\n */\n private static async fetchProjectScenarios(\n projectId: number,\n apiToken: string,\n apiUrl: string\n ): Promise<BackendProjectScenario[]> {\n const normalizedUrl = this.normalizeApiUrl(apiUrl);\n // Scenarios endpoint is at root level, not under /api/\n const url = `${normalizedUrl}/scenarios/?project_id=${projectId}`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await this.readResponseErrorText(response);\n throw new Error(`Failed to fetch scenarios for project ${projectId}: ${response.status} ${errorText}`);\n }\n\n const data = await response.json();\n // Handle both array and paginated responses\n if (Array.isArray(data)) {\n return data;\n }\n if (data.results && Array.isArray(data.results)) {\n return data.results;\n }\n return [];\n }\n\n /**\n * Convert backend interaction format to Interaction[] format\n */\n private static convertBackendInteractionsToInteractionFormat(\n backendInteractions: BackendInteraction[]\n ): Interaction[] {\n return backendInteractions.map((backendInteraction) => {\n // Convert action string to PlaywrightAction enum\n const action = backendInteraction.action as PlaywrightAction;\n \n // Convert apply_ai_status string to enum if present\n let applyAiStatus: ApplyAIStatus | null = null;\n if (backendInteraction.apply_ai_status) {\n applyAiStatus = backendInteraction.apply_ai_status as ApplyAIStatus;\n }\n\n // Build elementInfo from backend data\n const elementInfo: ElementInfo | null = backendInteraction.elementInfo || null;\n\n // Build interaction object\n // localId is the primary key for IndexedDB - always generate unique ID to support duplicated sequences\n const interaction: Interaction = {\n localId: crypto.randomUUID(), // Generate unique localId for each interaction\n interactionId: backendInteraction.interactionId,\n action: action,\n argument: backendInteraction.argument || '',\n elementInfo: elementInfo,\n iframe_selector: backendInteraction.iframe_selector,\n css_selector: backendInteraction.css_selector,\n smart_selector: backendInteraction.smart_selector || undefined,\n smart_iframe_selector: backendInteraction.smart_iframe_selector || undefined,\n url: backendInteraction.url,\n timestamp: backendInteraction.last_replay_timestamp || Date.now(),\n base_screenshot_url: backendInteraction.base_screenshot_url,\n actual_interaction_screenshot_url: backendInteraction.actual_interaction_screenshot_url,\n candidates_screenshot_url: backendInteraction.candidates_screenshot_url,\n candidate_elements: backendInteraction.candidate_elements || [],\n recordingId: backendInteraction.recordingId,\n syncStatus: backendInteraction.syncStatus,\n serverResponse: backendInteraction.serverResponse || null,\n nativeName: backendInteraction.nativeName,\n nativeDescription: backendInteraction.nativeDescription,\n isNativeDescriptionElaborate: backendInteraction.isNativeDescriptionElaborate,\n parameterName: backendInteraction.parameterName,\n annotation: backendInteraction.annotation,\n last_replay_timestamp: backendInteraction.last_replay_timestamp,\n replay_status: backendInteraction.replay_status,\n apply_ai_status: applyAiStatus,\n error: null,\n index: backendInteraction.index,\n html: backendInteraction.html,\n stepId: backendInteraction.stepId,\n scrollableContainers: backendInteraction.scrollableContainers,\n stdout: undefined,\n waitForConfig: backendInteraction.waitForConfig,\n totpConfig: backendInteraction.totpConfig,\n isSecret: backendInteraction.isSecret || false,\n };\n\n return interaction;\n });\n }\n\n /**\n * Get default recorder settings for code generation\n */\n private static getDefaultRecorderSettings(): RecorderSettings {\n return {\n ...DEFAULT_RECORDER_SETTINGS,\n // Override with sensible defaults for code generation\n enableSmartSelectors: true,\n debugLevel: 'INFO',\n enableConsoleLogs: false,\n };\n }\n\n /**\n * Get default viewport dimensions\n */\n private static getDefaultViewPort(): { width: number; height: number } {\n return { width: 1280, height: 720 };\n }\n\n /**\n * Validate and normalize viewport dimensions\n * Returns a valid viewport object with numeric width and height, falling back to defaults if invalid\n */\n private static normalizeViewPort(viewPort?: { width?: number; height?: number } | null): { width: number; height: number } {\n const defaultViewPort = this.getDefaultViewPort();\n \n if (!viewPort) {\n return defaultViewPort;\n }\n \n const width = typeof viewPort.width === 'number' && !isNaN(viewPort.width) ? viewPort.width : defaultViewPort.width;\n const height = typeof viewPort.height === 'number' && !isNaN(viewPort.height) ? viewPort.height : defaultViewPort.height;\n \n return { width, height };\n }\n\n /**\n * Generate code for a single scenario\n * Fetches scenario data, converts to Interaction[], generates code\n */\n static async generateCodeForScenario(\n scenarioId: number,\n apiToken: string,\n apiUrl: string,\n options?: CodeGenOptions\n ): Promise<string> {\n // Validate inputs\n if (!apiToken) {\n throw new Error('API token is required');\n }\n if (!apiUrl) {\n throw new Error('API URL is required');\n }\n\n // Fetch scenario data\n const scenarioData = await this.fetchScenarioData(scenarioId, apiToken, apiUrl);\n\n // Convert backend interactions to Interaction[] format\n const interactions = this.convertBackendInteractionsToInteractionFormat(scenarioData.interactions || []);\n\n // Get settings and viewport\n const settings = options?.recorderSettings || this.getDefaultRecorderSettings();\n const viewPort = this.normalizeViewPort(options?.viewPort || scenarioData.viewPort);\n\n // Get parameter table rows\n const rows = scenarioData.parameterTable || [];\n\n // Generate code\n const codeOptions: CodeGeneratorOptions = {\n scenarioName: scenarioData.name,\n interactions: interactions,\n rows: rows,\n };\n\n return generateCode(codeOptions, settings, viewPort);\n }\n\n /**\n * Generate code for all scenarios in a test suite\n * Returns map of scenario names to generated code\n */\n static async generateCodeForTestSuite(\n testSuiteId: number,\n apiToken: string,\n apiUrl: string,\n options?: CodeGenOptions\n ): Promise<TestSuiteCodeGenResult> {\n // Validate inputs\n if (!apiToken) {\n throw new Error('API token is required');\n }\n if (!apiUrl) {\n throw new Error('API URL is required');\n }\n\n // Fetch test suite data\n const testSuiteData = await this.fetchTestSuiteData(testSuiteId, apiToken, apiUrl);\n\n // Generate code for each scenario\n const scenarioResults = await Promise.all(\n testSuiteData.scenarios.map(async (scenario) => {\n try {\n const code = await this.generateCodeForScenario(\n scenario.id,\n apiToken,\n apiUrl,\n options\n );\n return {\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n code: code,\n };\n } catch (error: any) {\n // Log error but continue with other scenarios\n console.error(`Failed to generate code for scenario ${scenario.id}: ${error.message}`);\n throw error; // Re-throw to fail fast for now\n }\n })\n );\n\n return {\n testSuiteId: testSuiteData.id,\n testSuiteName: testSuiteData.name,\n scenarios: scenarioResults,\n };\n }\n\n /**\n * Generate code for all scenarios in a project\n * Returns map of scenario names to generated code\n */\n static async generateCodeForProject(\n projectId: number,\n apiToken: string,\n apiUrl: string,\n options?: CodeGenOptions\n ): Promise<ProjectCodeGenResult> {\n // Validate inputs\n if (!apiToken) {\n throw new Error('API token is required');\n }\n if (!apiUrl) {\n throw new Error('API URL is required');\n }\n\n // Fetch project data and scenarios\n const [projectData, scenarios] = await Promise.all([\n this.fetchProjectData(projectId, apiToken, apiUrl),\n this.fetchProjectScenarios(projectId, apiToken, apiUrl),\n ]);\n\n if (scenarios.length === 0) {\n throw new Error(`No scenarios found in project \"${projectData.name}\" (ID: ${projectId})`);\n }\n\n // Generate code for each scenario\n const scenarioResults = await Promise.all(\n scenarios.map(async (scenario) => {\n try {\n const code = await this.generateCodeForScenario(\n scenario.id,\n apiToken,\n apiUrl,\n options\n );\n return {\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n code: code,\n };\n } catch (error: any) {\n // Log error but continue with other scenarios\n console.error(`Failed to generate code for scenario ${scenario.id}: ${error.message}`);\n throw error; // Re-throw to fail fast for now\n }\n })\n );\n\n return {\n projectId: projectData.id,\n projectName: projectData.name,\n scenarios: scenarioResults,\n };\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { exec, spawn } from 'child_process';\nimport { promisify } from 'util';\nimport AdmZip from 'adm-zip';\nimport fetch from 'node-fetch';\nimport { ProboCodeGenerator, TestSuiteCodeGenResult, ProjectCodeGenResult } from './codegen-api.js';\nimport { generatePackageJson, generatePlaywrightConfig, generateProboReporter, slugify } from '@probolabs/probo-shared';\n\nconst execAsync = promisify(exec);\n\n/**\n * Result of running a test suite\n */\nexport interface TestSuiteRunResult {\n success: boolean;\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: string;\n runId?: number;\n}\n\n/**\n * Test statistics parsed from Playwright output\n */\nexport interface TestStatistics {\n passed: number;\n failed: number;\n skipped: number;\n}\n\n/**\n * Options for running a test suite\n */\nexport interface TestSuiteRunOptions {\n outputDir?: string;\n includeReporter?: boolean;\n playwrightArgs?: string[];\n skipRunCreation?: boolean; // When true, skip creating/updating run records in database\n onStatusUpdate?: (updates: Partial<{\n status: string;\n exit_code: number;\n error_message: string;\n stdout: string;\n stderr: string;\n tests_total: number;\n tests_passed: number;\n tests_failed: number;\n tests_skipped: number;\n }>) => void | Promise<void>;\n onStdout?: (chunk: string) => void | Promise<void>;\n onStderr?: (chunk: string) => void | Promise<void>;\n onReporterEvent?: (event: any) => void | Promise<void>;\n}\n\n/**\n * Ensures a directory exists, creating it recursively if needed\n */\nfunction ensureDirectoryExists(dir: string): void {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n}\n\n/**\n * Gets the default test suite directory path\n */\nfunction getDefaultTestSuiteDir(testSuiteId: number, testSuiteName?: string): string {\n const baseDir = path.join(os.homedir(), '.probium', 'test-suites');\n if (testSuiteName) {\n const sanitizedName = slugify(testSuiteName);\n return path.join(baseDir, `${testSuiteId}-${sanitizedName}`);\n }\n return path.join(baseDir, testSuiteId.toString());\n}\n\n/**\n * Count total tests by scanning spec files\n */\nfunction countTotalTests(testSuiteDir: string): number {\n const testsDir = path.join(testSuiteDir, 'tests');\n if (!fs.existsSync(testsDir)) {\n return 0;\n }\n\n let totalTests = 0;\n const specFiles = fs.readdirSync(testsDir).filter(f => f.endsWith('.spec.ts'));\n\n for (const specFile of specFiles) {\n const filePath = path.join(testsDir, specFile);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n // Count test() and it() calls\n const testMatches = content.match(/\\btest\\s*\\(/g);\n const itMatches = content.match(/\\bit\\s*\\(/g);\n\n if (testMatches) totalTests += testMatches.length;\n if (itMatches) totalTests += itMatches.length;\n\n // If no matches, assume at least 1 test per file\n if (!testMatches && !itMatches) {\n totalTests += 1;\n }\n }\n\n return totalTests;\n}\n\n/**\n * Parse Playwright statistics from stdout\n */\nfunction parsePlaywrightStatistics(stdout: string): TestStatistics {\n // Try to find final summary line: \"X passed\" or \"X passed, Y failed\" etc.\n const summaryMatch = stdout.match(/(\\d+)\\s+passed(?:,\\s*(\\d+)\\s+failed)?(?:,\\s*(\\d+)\\s+skipped)?/);\n\n if (summaryMatch) {\n return {\n passed: parseInt(summaryMatch[1]) || 0,\n failed: parseInt(summaryMatch[2]) || 0,\n skipped: parseInt(summaryMatch[3]) || 0,\n };\n }\n\n // Fallback: count individual test results\n const passed = (stdout.match(/✓/g) || []).length;\n const failed = (stdout.match(/✘/g) || []).length;\n const skipped = (stdout.match(/-\\s+test/g) || []).length;\n\n return { passed, failed, skipped };\n}\n\n/**\n * Parse statistics from Playwright HTML report metadata (most reliable)\n */\nfunction parseStatisticsFromMetadata(testSuiteDir: string): TestStatistics | null {\n try {\n const reportDir = path.join(testSuiteDir, 'playwright-report');\n const metadataPath = path.join(reportDir, 'data', 'metadata.json');\n if (!fs.existsSync(metadataPath)) {\n return null;\n }\n\n const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));\n return {\n passed: metadata.passed || 0,\n failed: metadata.failed || 0,\n skipped: metadata.skipped || 0,\n };\n } catch (error) {\n console.warn('⚠️ Could not parse metadata.json:', error);\n return null;\n }\n}\n\n/**\n * Zip a directory using adm-zip\n */\nasync function zipDirectory(sourceDir: string, outputPath: string): Promise<void> {\n try {\n const zip = new AdmZip();\n\n // Add all files from the source directory recursively\n zip.addLocalFolder(sourceDir);\n\n // Write zip file\n zip.writeZip(outputPath);\n\n const stats = fs.statSync(outputPath);\n console.log(`✅ Zipped ${stats.size} bytes`);\n } catch (error) {\n console.error(`❌ Error zipping directory: ${error}`);\n throw error;\n }\n}\n\n/**\n * Upload artifact to backend\n */\nasync function uploadArtifact(\n runId: number,\n testSuiteId: number,\n filePath: string,\n artifactType: string,\n name: string,\n apiToken: string,\n apiUrl: string\n): Promise<void> {\n const fileStats = fs.statSync(filePath);\n const fileSize = fileStats.size;\n\n // Determine content type\n const contentTypes: { [key: string]: string } = {\n 'html_report': 'application/zip',\n 'test_results': 'application/zip',\n 'log_file': 'text/plain',\n 'video': 'video/webm',\n 'screenshot': 'image/png',\n };\n const contentType = contentTypes[artifactType] || 'application/octet-stream';\n\n // Read file as buffer (like screenshot uploads)\n const fileBuffer = fs.readFileSync(filePath);\n\n // Upload directly to Django backend (like screenshots - raw binary)\n // FileUploadParser requires Content-Disposition header with filename\n const response = await fetch(`${apiUrl}/test-suites/${testSuiteId}/runs/${runId}/upload_artifact/`, {\n method: 'POST',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': contentType,\n 'Content-Disposition': `attachment; filename=\"${name}\"`,\n 'X-Artifact-Type': artifactType,\n 'X-Artifact-Name': name,\n },\n body: fileBuffer,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Failed to upload artifact: ${response.status} ${errorText}`);\n }\n\n console.log(`✅ Uploaded artifact: ${name} (${(fileSize / 1024 / 1024).toFixed(2)} MB)`);\n}\n\n/**\n * Update run status via API\n */\nasync function updateRunStatus(\n runId: number,\n testSuiteId: number,\n updates: Partial<{\n status: string;\n exit_code: number;\n error_message: string;\n stdout: string;\n stderr: string;\n steps: Array<{\n id: number;\n title: string;\n depth: number;\n status: 'running' | 'passed' | 'failed';\n error?: string | null;\n }>;\n tests_total: number;\n tests_passed: number;\n tests_failed: number;\n tests_skipped: number;\n }>,\n apiToken: string,\n apiUrl: string\n): Promise<void> {\n // Ensure apiUrl doesn't have trailing slash\n const baseUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl;\n const url = `${baseUrl}/test-suites/${testSuiteId}/runs/${runId}/`;\n const body = JSON.stringify(updates);\n\n const headers: Record<string, string> = {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n };\n\n try {\n const response = await fetch(url, {\n method: 'PATCH',\n headers: headers,\n body: body,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.warn(`⚠️ Failed to update run status: ${response.status} ${errorText}`);\n }\n } catch (error) {\n console.error(`❌ Error updating run status:`, error);\n }\n}\n\n/**\n * Find npm executable, preferring the one bundled with Node.js (for Electron compatibility)\n * Falls back to PATH for CI/CD environments\n */\nfunction findNpmExecutable(): string {\n const nodePath = process.execPath;\n const nodeDir = path.dirname(nodePath);\n \n // On Windows, npm might be npm.cmd\n const npmPaths = [\n path.join(nodeDir, 'npm'),\n path.join(nodeDir, 'npm.cmd'),\n ];\n \n for (const npmPath of npmPaths) {\n if (fs.existsSync(npmPath)) {\n return npmPath;\n }\n }\n \n // Fall back to PATH (works in CI/CD where npm is in PATH)\n return 'npm';\n}\n\n/**\n * Find npx executable, preferring the one bundled with Node.js (for Electron compatibility)\n * Falls back to PATH for CI/CD environments\n */\nfunction findNpxExecutable(): string {\n const nodePath = process.execPath;\n const nodeDir = path.dirname(nodePath);\n \n // On Windows, npx might be npx.cmd\n const npxPaths = [\n path.join(nodeDir, 'npx'),\n path.join(nodeDir, 'npx.cmd'),\n ];\n \n for (const npxPath of npxPaths) {\n if (fs.existsSync(npxPath)) {\n return npxPath;\n }\n }\n \n // Fall back to PATH (works in CI/CD where npx is in PATH)\n return 'npx';\n}\n\n/**\n * TestSuiteRunner - Handles test suite file generation and execution\n */\nexport class TestSuiteRunner {\n /**\n * Lookup project ID by name\n */\n static async lookupProjectByName(\n projectName: string,\n apiToken: string,\n apiUrl: string\n ): Promise<number> {\n const baseUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl;\n // Projects endpoint is at root level, not under /api/\n const url = `${baseUrl}/projects/?name=${encodeURIComponent(projectName)}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Failed to lookup project: ${response.status} ${errorText}`);\n }\n\n const data = await response.json();\n\n if (Array.isArray(data) && data.length > 0) {\n return data[0].id;\n }\n\n if (data.results && Array.isArray(data.results) && data.results.length > 0) {\n return data.results[0].id;\n }\n\n throw new Error(`Project \"${projectName}\" not found`);\n }\n\n /**\n * Lookup test suite ID by name and project\n */\n static async lookupTestSuiteByName(\n testSuiteName: string,\n projectName: string,\n apiToken: string,\n apiUrl: string\n ): Promise<number> {\n const baseUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl;\n const url = `${baseUrl}/test-suites/?name=${encodeURIComponent(testSuiteName)}&project=${encodeURIComponent(projectName)}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Failed to lookup test suite: ${response.status} ${errorText}`);\n }\n\n const data = await response.json();\n\n if (Array.isArray(data) && data.length > 0) {\n return data[0].id;\n }\n\n if (data.results && Array.isArray(data.results) && data.results.length > 0) {\n return data.results[0].id;\n }\n\n throw new Error(`Test suite \"${testSuiteName}\" not found in project \"${projectName}\"`);\n }\n\n /**\n * Generate all files for a test suite\n */\n static async generateTestSuiteFiles(\n testSuiteId: number,\n apiToken: string,\n apiUrl: string,\n outputDir?: string,\n testSuiteName?: string,\n includeReporter: boolean = true,\n runId?: number\n ): Promise<void> {\n const testSuiteDir = outputDir || getDefaultTestSuiteDir(testSuiteId, testSuiteName);\n\n // Generate code for all scenarios\n const codeGenResult = await ProboCodeGenerator.generateCodeForTestSuite(\n testSuiteId,\n apiToken,\n apiUrl\n );\n\n if (codeGenResult.scenarios.length === 0) {\n throw new Error(`No scenarios found in test suite ${testSuiteId}. Cannot generate test files.`);\n }\n\n // Delete everything in the test suite directory except node_modules\n // This ensures a clean state while preserving dependencies for faster subsequent runs\n if (fs.existsSync(testSuiteDir)) {\n try {\n const nodeModulesPath = path.join(testSuiteDir, 'node_modules');\n const hasNodeModules = fs.existsSync(nodeModulesPath);\n\n // Temporarily move node_modules out of the way if it exists\n let tempNodeModulesPath: string | null = null;\n if (hasNodeModules) {\n tempNodeModulesPath = path.join(testSuiteDir, '..', `node_modules.temp.${testSuiteId}`);\n // Remove temp directory if it exists from a previous failed run\n if (fs.existsSync(tempNodeModulesPath)) {\n fs.rmSync(tempNodeModulesPath, { recursive: true, force: true });\n }\n fs.renameSync(nodeModulesPath, tempNodeModulesPath);\n console.log(`📦 Preserved node_modules temporarily`);\n }\n\n // Delete everything in the directory\n const entries = fs.readdirSync(testSuiteDir, { withFileTypes: true });\n for (const entry of entries) {\n const entryPath = path.join(testSuiteDir, entry.name);\n try {\n if (entry.isDirectory()) {\n fs.rmSync(entryPath, { recursive: true, force: true });\n } else {\n fs.unlinkSync(entryPath);\n }\n } catch (error) {\n console.warn(`⚠️ Failed to delete ${entry.name}:`, error);\n }\n }\n console.log(`🗑️ Cleaned test suite directory (preserved node_modules)`);\n\n // Move node_modules back\n if (hasNodeModules && tempNodeModulesPath) {\n fs.renameSync(tempNodeModulesPath, nodeModulesPath);\n console.log(`📦 Restored node_modules`);\n }\n } catch (error) {\n console.warn(`⚠️ Failed to clean test suite directory ${testSuiteDir}:`, error);\n // Continue anyway - we'll overwrite files as needed\n }\n }\n\n // Ensure directories exist (will recreate after deletion)\n ensureDirectoryExists(testSuiteDir);\n const testsDir = path.join(testSuiteDir, 'tests');\n ensureDirectoryExists(testsDir);\n\n // Save each scenario's code to a .spec.ts file\n for (const scenario of codeGenResult.scenarios) {\n const fileName = `${slugify(scenario.scenarioName)}.spec.ts`;\n const filePath = path.join(testsDir, fileName);\n fs.writeFileSync(filePath, scenario.code, 'utf-8');\n console.log(`✅ Generated test file: ${filePath}`);\n }\n\n // Generate package.json\n await this.generatePackageJson(testSuiteDir, codeGenResult);\n\n // Generate playwright.config.ts with runId if available\n await this.generatePlaywrightConfig(testSuiteDir, includeReporter, runId);\n\n // Generate custom reporter file for live progress streaming (only if requested)\n if (includeReporter) {\n await this.generateProboReporter(testSuiteDir);\n }\n }\n\n /**\n * Generate package.json file\n */\n static async generatePackageJson(\n outputDir: string,\n codeGenResult: TestSuiteCodeGenResult | ProjectCodeGenResult\n ): Promise<void> {\n // Check if any scenario has secrets by examining the generated code\n // We'll check for dotenv imports in the generated code (check for multiple patterns to be robust)\n let hasSecrets = codeGenResult.scenarios.some(scenario => {\n const code = scenario.code;\n return code.includes(\"from 'dotenv'\") ||\n code.includes('from \"dotenv\"') ||\n code.includes(\"import { config } from 'dotenv'\") ||\n code.includes('import { config } from \"dotenv\"') ||\n code.includes(\"require('dotenv')\") ||\n code.includes('require(\"dotenv\")');\n });\n\n // Fallback: if not detected in codeGenResult, check the actual written files\n // This handles edge cases where the code might have been modified or generated differently\n if (!hasSecrets) {\n const testsDir = path.join(outputDir, 'tests');\n if (fs.existsSync(testsDir)) {\n const specFiles = fs.readdirSync(testsDir).filter(f => f.endsWith('.spec.ts'));\n for (const specFile of specFiles) {\n const filePath = path.join(testsDir, specFile);\n const content = fs.readFileSync(filePath, 'utf-8');\n if (content.includes(\"from 'dotenv'\") ||\n content.includes('from \"dotenv\"') ||\n content.includes(\"import { config } from 'dotenv'\") ||\n content.includes('import { config } from \"dotenv\"')) {\n hasSecrets = true;\n break;\n }\n }\n }\n }\n\n // Type guard: check for projectId to distinguish ProjectCodeGenResult from TestSuiteCodeGenResult\n const sanitizedName = 'projectId' in codeGenResult && 'projectName' in codeGenResult\n ? slugify((codeGenResult as ProjectCodeGenResult).projectName)\n : slugify((codeGenResult as TestSuiteCodeGenResult).testSuiteName);\n\n const packageJsonContent = generatePackageJson({\n name: sanitizedName,\n hasSecrets: hasSecrets,\n testScript: 'npx playwright test'\n });\n\n const filePath = path.join(outputDir, 'package.json');\n fs.writeFileSync(filePath, packageJsonContent, 'utf-8');\n console.log(`✅ Generated package.json: ${filePath}`);\n }\n\n /**\n * Generate playwright.config.ts file\n */\n static async generatePlaywrightConfig(outputDir: string, includeReporter: boolean = true, runId?: number): Promise<void> {\n const configContent = generatePlaywrightConfig(includeReporter, runId);\n\n const filePath = path.join(outputDir, 'playwright.config.ts');\n fs.writeFileSync(filePath, configContent, 'utf-8');\n console.log(`✅ Generated playwright.config.ts: ${filePath}`);\n }\n\n /**\n * Generate Probo custom Playwright reporter (for live step/test events)\n */\n static async generateProboReporter(outputDir: string): Promise<void> {\n const reporterContent = generateProboReporter();\n const filePath = path.join(outputDir, 'probo-reporter.ts');\n fs.writeFileSync(filePath, reporterContent, 'utf-8');\n console.log(`✅ Generated probo-reporter.ts: ${filePath}`);\n }\n\n /**\n * Run a test suite\n * Generates files, installs dependencies, and executes tests\n */\n static async runTestSuite(\n testSuiteId: number,\n apiToken: string,\n apiUrl: string,\n testSuiteName?: string,\n runId?: number,\n options: TestSuiteRunOptions = {}\n ): Promise<TestSuiteRunResult> {\n const {\n outputDir,\n includeReporter = true,\n playwrightArgs = [],\n skipRunCreation = false,\n onStatusUpdate,\n onStdout,\n onStderr,\n onReporterEvent,\n } = options;\n\n const testSuiteDir = outputDir || getDefaultTestSuiteDir(testSuiteId, testSuiteName);\n let currentRunId = runId;\n\n try {\n // Create run record if not provided and not skipping run creation\n if (!currentRunId && !skipRunCreation) {\n try {\n const createResponse = await fetch(`${apiUrl}/test-suites/${testSuiteId}/runs/`, {\n method: 'POST',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (createResponse.ok) {\n const runData = await createResponse.json();\n currentRunId = runData.id;\n console.log(`✅ Created test suite run: ${currentRunId}`);\n } else {\n console.warn('⚠️ Failed to create run record, continuing without tracking');\n }\n } catch (error) {\n console.warn('⚠️ Failed to create run record:', error);\n }\n }\n\n // Generate all files (with runId if available for run-specific report directories)\n console.log(`📝 Generating test suite files for test suite ${testSuiteId}...`);\n await this.generateTestSuiteFiles(testSuiteId, apiToken, apiUrl, testSuiteDir, testSuiteName, includeReporter, currentRunId);\n\n // Count total tests\n const testsTotal = countTotalTests(testSuiteDir);\n if (currentRunId && testsTotal > 0) {\n await updateRunStatus(currentRunId, testSuiteId, { tests_total: testsTotal }, apiToken, apiUrl);\n if (onStatusUpdate) {\n await onStatusUpdate({ tests_total: testsTotal });\n }\n }\n\n // Install dependencies\n console.log(`📦 Installing dependencies in ${testSuiteDir}...`);\n try {\n const npmExecutable = findNpmExecutable();\n const { stdout: installStdout, stderr: installStderr } = await execAsync(\n `${npmExecutable} install`,\n { cwd: testSuiteDir, timeout: 300000 } // 5 minute timeout for install\n );\n console.log('✅ Dependencies installed successfully');\n if (installStdout) console.log(installStdout);\n if (installStderr) console.warn(installStderr);\n } catch (installError: any) {\n console.error('❌ Failed to install dependencies:', installError);\n const errorMsg = `Failed to install dependencies: ${installError.message}`;\n if (currentRunId) {\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n status: 'error',\n exit_code: installError.code || 1,\n error_message: errorMsg,\n stderr: installError.stderr || installError.message || '',\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n status: 'error',\n exit_code: installError.code || 1,\n error_message: errorMsg,\n stderr: installError.stderr || installError.message || '',\n });\n }\n }\n return {\n success: false,\n exitCode: installError.code || 1,\n stdout: installError.stdout || '',\n stderr: installError.stderr || installError.message || '',\n error: errorMsg,\n runId: currentRunId,\n };\n }\n\n // Install Playwright Chromium browser (required for test execution)\n console.log(`🌐 Installing Playwright Chromium browser...`);\n try {\n const npxExecutable = findNpxExecutable();\n const { stdout: browserStdout, stderr: browserStderr } = await execAsync(\n `${npxExecutable} playwright install chromium`,\n { cwd: testSuiteDir, timeout: 300000 } // 5 minute timeout for browser install\n );\n console.log('✅ Playwright Chromium browser installed successfully');\n if (browserStdout) console.log(browserStdout);\n if (browserStderr) console.warn(browserStderr);\n } catch (browserError: any) {\n console.warn('⚠️ Failed to install Playwright browsers:', browserError);\n // Don't fail the entire run if browser install fails - Playwright might handle it gracefully\n // or the error will be caught when trying to run tests\n }\n\n // Run Playwright tests with streaming output\n console.log(`🚀 Running Playwright tests in ${testSuiteDir}...`);\n if (playwrightArgs.length > 0) {\n console.log(`🧪 Playwright extra args: ${playwrightArgs.join(' ')}`);\n }\n\n return new Promise<TestSuiteRunResult>(async (resolve) => {\n let stdout = '';\n let stderr = '';\n let hasResolved = false;\n let lastStatsUpdate = 0;\n let stdoutLineBuffer = '';\n const PROBO_REPORTER_PREFIX = '__PROBO_REPORTER_EVENT__';\n const reporterStats: TestStatistics = { passed: 0, failed: 0, skipped: 0 };\n let lastReporterStatsUpdate = 0;\n const REPORTER_STATS_UPDATE_INTERVAL = 1500; // throttle API updates from reporter events\n const STATS_UPDATE_INTERVAL = 10000; // Update stats every 10 seconds\n const STEPS_UPDATE_INTERVAL = 2000; // Update steps every 2 seconds\n let lastStepsUpdate = 0;\n const collectedSteps: Array<{\n id: number;\n title: string;\n depth: number;\n status: 'running' | 'passed' | 'failed';\n error?: string | null;\n }> = [];\n\n // Use spawn for streaming output\n const npxExecutable = findNpxExecutable();\n const testProcess = spawn(npxExecutable, ['playwright', 'test', ...playwrightArgs], {\n cwd: testSuiteDir,\n shell: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n env: {\n ...process.env,\n PROBO_API_KEY: apiToken,\n PROBO_API_ENDPOINT: apiUrl,\n },\n });\n\n // Stream stdout line by line\n testProcess.stdout?.on('data', async (data: Buffer) => {\n const chunk = data.toString();\n stdoutLineBuffer += chunk;\n\n // Process complete lines so we can intercept reporter events without polluting logs.\n const parts = stdoutLineBuffer.split(/\\n/);\n stdoutLineBuffer = parts.pop() ?? '';\n\n let forwarded = '';\n\n for (const rawLine of parts) {\n const line = rawLine.endsWith('\\r') ? rawLine.slice(0, -1) : rawLine;\n if (line.startsWith(PROBO_REPORTER_PREFIX)) {\n const jsonPart = line.slice(PROBO_REPORTER_PREFIX.length);\n try {\n const reporterEvent = JSON.parse(jsonPart);\n\n // Call reporter event callback if provided\n if (onReporterEvent) {\n await onReporterEvent(reporterEvent);\n }\n\n // Collect steps from reporter events\n if (reporterEvent?.eventType === 'stepBegin') {\n const step = reporterEvent?.step;\n const id = typeof step?.id === 'number' ? step.id : null;\n const title = typeof step?.title === 'string' ? step.title : null;\n const depth = typeof step?.depth === 'number' ? step.depth : 0;\n if (id && title) {\n // Check if step already exists (update) or add new\n const existingIndex = collectedSteps.findIndex(s => s.id === id);\n if (existingIndex === -1) {\n collectedSteps.push({ id, title, depth, status: 'running' });\n }\n }\n }\n\n if (reporterEvent?.eventType === 'stepEnd') {\n const step = reporterEvent?.step;\n const id = typeof step?.id === 'number' ? step.id : null;\n if (id) {\n const error = typeof step?.error === 'string' ? step.error : null;\n const existingIndex = collectedSteps.findIndex(s => s.id === id);\n if (existingIndex !== -1) {\n // Update existing step with final status\n collectedSteps[existingIndex] = {\n ...collectedSteps[existingIndex],\n status: error ? 'failed' : 'passed',\n error: error || null,\n };\n }\n // If step doesn't exist, ignore (stepBegin should have been called first)\n }\n }\n\n // Save steps periodically\n if (currentRunId) {\n const now = Date.now();\n if (now - lastStepsUpdate > STEPS_UPDATE_INTERVAL) {\n lastStepsUpdate = now;\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n { steps: [...collectedSteps] },\n apiToken,\n apiUrl\n );\n }\n }\n\n // Keep a more reliable running tally than parsing stdout.\n if (currentRunId && reporterEvent?.eventType === 'testEnd' && reporterEvent?.result?.status) {\n const status = reporterEvent.result.status as string;\n if (status === 'passed') reporterStats.passed += 1;\n else if (status === 'failed' || status === 'timedout' || status === 'interrupted') reporterStats.failed += 1;\n else if (status === 'skipped') reporterStats.skipped += 1;\n\n const now = Date.now();\n if (now - lastReporterStatsUpdate > REPORTER_STATS_UPDATE_INTERVAL) {\n lastReporterStatsUpdate = now;\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n tests_passed: reporterStats.passed,\n tests_failed: reporterStats.failed,\n tests_skipped: reporterStats.skipped,\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n tests_passed: reporterStats.passed,\n tests_failed: reporterStats.failed,\n tests_skipped: reporterStats.skipped,\n });\n }\n }\n }\n } catch {\n // If parsing fails, ignore and don't forward to logs.\n }\n continue;\n }\n\n forwarded += rawLine + '\\n';\n }\n\n if (forwarded) {\n stdout += forwarded;\n // Call stdout callback if provided\n if (onStdout) {\n await onStdout(forwarded);\n }\n }\n\n // Parse and update statistics periodically\n if (currentRunId) {\n const now = Date.now();\n // Only use stdout parsing as a fallback (in case reporter isn't loaded).\n if (now - lastStatsUpdate > STATS_UPDATE_INTERVAL && now - lastReporterStatsUpdate > REPORTER_STATS_UPDATE_INTERVAL) {\n lastStatsUpdate = now;\n const stats = parsePlaywrightStatistics(stdout);\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n tests_passed: stats.passed,\n tests_failed: stats.failed,\n tests_skipped: stats.skipped,\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n tests_passed: stats.passed,\n tests_failed: stats.failed,\n tests_skipped: stats.skipped,\n });\n }\n }\n }\n });\n\n // Stream stderr line by line\n testProcess.stderr?.on('data', async (data: Buffer) => {\n const chunk = data.toString();\n stderr += chunk;\n // Call stderr callback if provided\n if (onStderr) {\n await onStderr(chunk);\n }\n });\n\n // Handle process completion\n testProcess.on('close', async (code) => {\n if (hasResolved) return;\n hasResolved = true;\n\n // Flush any remaining buffered stdout (may be a partial last line)\n if (stdoutLineBuffer) {\n const remaining = stdoutLineBuffer;\n stdoutLineBuffer = '';\n if (remaining.startsWith(PROBO_REPORTER_PREFIX)) {\n try {\n const reporterEvent = JSON.parse(remaining.slice(PROBO_REPORTER_PREFIX.length));\n if (onReporterEvent) {\n await onReporterEvent(reporterEvent);\n }\n if (currentRunId && reporterEvent?.eventType === 'testEnd' && reporterEvent?.result?.status) {\n const status = reporterEvent.result.status as string;\n if (status === 'passed') reporterStats.passed += 1;\n else if (status === 'failed' || status === 'timedout' || status === 'interrupted') reporterStats.failed += 1;\n else if (status === 'skipped') reporterStats.skipped += 1;\n }\n } catch {\n // ignore\n }\n } else {\n stdout += remaining;\n if (onStdout) {\n await onStdout(remaining);\n }\n }\n }\n\n const exitCode = code ?? 1;\n const success = exitCode === 0;\n // A test failure is when tests actually ran but some failed (exit code 1 with test results)\n // An execution error is when tests couldn't run (exit code 1 without test results, or with stderr errors)\n const hasTestResults = reporterStats.passed + reporterStats.failed + reporterStats.skipped > 0;\n const isTestFailure = exitCode === 1 && hasTestResults;\n const isExecutionError = exitCode !== 0 && !isTestFailure;\n\n console.log(success ? '✅ Tests completed successfully' : (isTestFailure ? '⚠️ Tests completed with failures' : '❌ Test execution failed'));\n\n // Parse final statistics from metadata/stdout as fallback\n let parsedStats: TestStatistics | null = null;\n if (fs.existsSync(path.join(testSuiteDir, 'playwright-report'))) {\n parsedStats = parseStatisticsFromMetadata(testSuiteDir);\n }\n if (!parsedStats) {\n parsedStats = parsePlaywrightStatistics(stdout);\n }\n\n // Use reporterStats as source of truth (tracked from real-time events)\n // Fall back to parsed stats only if reporterStats is empty\n const totalFromReporter = reporterStats.passed + reporterStats.failed + reporterStats.skipped;\n const finalStats = totalFromReporter > 0 ? reporterStats : (parsedStats || { passed: 0, failed: 0, skipped: 0 });\n\n // Build error message from stderr or stdout if it's an execution error\n let errorMessage: string | undefined = undefined;\n if (isExecutionError) {\n // Check both stderr and stdout for error messages (errors can appear in either)\n const stderrLines = stderr.trim().split('\\n').filter(line => line.trim().length > 0);\n const stdoutLines = stdout.trim().split('\\n').filter(line => line.trim().length > 0);\n const allErrorLines = [...stderrLines, ...stdoutLines].filter(line => \n line.includes('Error:') || \n line.includes('Missing') || \n line.includes('No tests found') ||\n line.includes('failed') ||\n line.includes('Failed')\n );\n \n if (allErrorLines.length > 0) {\n // Use the last error line found\n errorMessage = allErrorLines[allErrorLines.length - 1];\n } else if (stderrLines.length > 0) {\n // Fall back to last stderr line if no clear error pattern found\n errorMessage = stderrLines[stderrLines.length - 1];\n } else if (stdoutLines.length > 0 && stdoutLines.some(line => line.toLowerCase().includes('error'))) {\n // Check stdout for error messages\n const errorLines = stdoutLines.filter(line => line.toLowerCase().includes('error'));\n errorMessage = errorLines[errorLines.length - 1];\n } else {\n errorMessage = `Test execution failed with exit code ${exitCode}`;\n }\n }\n\n // Update run status with final steps\n if (currentRunId) {\n const finalStatus = success ? 'success' : 'error';\n // Ensure error message is set for execution errors\n const finalErrorMessage = isExecutionError ? (errorMessage || `Test execution failed with exit code ${exitCode}`) : errorMessage;\n \n console.log(`📊 [TestSuiteRunner] Updating run ${currentRunId} status: ${finalStatus}, exitCode: ${exitCode}, isExecutionError: ${isExecutionError}, errorMessage: ${finalErrorMessage || 'none'}`);\n \n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n status: finalStatus,\n exit_code: exitCode,\n stdout: stdout,\n stderr: stderr,\n steps: [...collectedSteps], // Save final steps state\n error_message: finalErrorMessage,\n tests_passed: finalStats.passed,\n tests_failed: finalStats.failed,\n tests_skipped: finalStats.skipped,\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n status: finalStatus,\n exit_code: exitCode,\n stdout: stdout,\n stderr: stderr,\n error_message: errorMessage,\n tests_passed: finalStats.passed,\n tests_failed: finalStats.failed,\n tests_skipped: finalStats.skipped,\n });\n }\n\n // Artifact uploads disabled - reports are now accessed locally via trace viewer\n // Upload artifacts functionality preserved but disabled\n // await this.uploadArtifacts(currentRunId, testSuiteId, testSuiteDir, apiToken, apiUrl);\n }\n\n // Ensure error message is set for execution errors even if extraction failed\n let finalError = errorMessage;\n if (isExecutionError && !finalError) {\n // Fallback: try to extract any error from stdout/stderr\n const allOutput = (stdout + '\\n' + stderr).trim();\n const errorMatch = allOutput.match(/Error:.*/);\n if (errorMatch) {\n finalError = errorMatch[0].split('\\n')[0]; // Take first line of error\n } else {\n finalError = `Test execution failed with exit code ${exitCode}`;\n }\n }\n\n resolve({\n success: success,\n exitCode: exitCode,\n stdout: stdout,\n stderr: stderr,\n // Set error message for execution errors (not test failures)\n error: finalError,\n runId: currentRunId,\n });\n });\n\n // Handle process errors\n testProcess.on('error', async (error: Error) => {\n if (hasResolved) return;\n hasResolved = true;\n\n const errorMessage = error.message || String(error);\n stderr += errorMessage;\n\n console.error('❌ Test execution failed:', error);\n\n // Update run status\n if (currentRunId) {\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n status: 'error',\n exit_code: 1,\n error_message: `Test execution failed: ${errorMessage}`,\n stderr: stderr,\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n status: 'error',\n exit_code: 1,\n error_message: `Test execution failed: ${errorMessage}`,\n stderr: stderr,\n });\n }\n }\n\n resolve({\n success: false,\n exitCode: 1,\n stdout: stdout,\n stderr: stderr,\n error: `Test execution failed: ${errorMessage}`,\n runId: currentRunId,\n });\n });\n\n // Set timeout (1 hour)\n setTimeout(async () => {\n if (!hasResolved) {\n hasResolved = true;\n testProcess.kill();\n\n const errorMessage = 'Test execution timed out after 1 hour';\n stderr += errorMessage;\n\n // Update run status\n if (currentRunId) {\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n status: 'error',\n exit_code: 1,\n error_message: errorMessage,\n stderr: stderr,\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n status: 'error',\n exit_code: 1,\n error_message: errorMessage,\n stderr: stderr,\n });\n }\n }\n\n resolve({\n success: false,\n exitCode: 1,\n stdout: stdout,\n stderr: stderr,\n error: errorMessage,\n runId: currentRunId,\n });\n }\n }, 3600000); // 1 hour timeout\n });\n } catch (error: any) {\n console.error('❌ Error running test suite:', error);\n const errorMsg = error.message || String(error);\n if (currentRunId) {\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n status: 'error',\n exit_code: 1,\n error_message: errorMsg,\n },\n apiToken,\n apiUrl\n ).catch(() => { }); // Ignore errors updating status\n if (onStatusUpdate) {\n try {\n const result = onStatusUpdate({\n status: 'error',\n exit_code: 1,\n error_message: errorMsg,\n });\n if (result && typeof result.then === 'function') {\n await result.catch(() => { });\n }\n } catch {\n // Ignore errors in status update callback\n }\n }\n }\n return {\n success: false,\n exitCode: 1,\n stdout: '',\n stderr: errorMsg,\n error: errorMsg,\n runId: currentRunId,\n };\n }\n }\n\n /**\n * Generate all files for a project (all scenarios)\n */\n static async generateProjectFiles(\n projectId: number,\n apiToken: string,\n apiUrl: string,\n outputDir?: string,\n projectName?: string,\n includeReporter: boolean = true\n ): Promise<void> {\n const projectDir = outputDir || getDefaultTestSuiteDir(projectId, projectName || `project-${projectId}`);\n\n // Generate code for all scenarios\n const codeGenResult = await ProboCodeGenerator.generateCodeForProject(\n projectId,\n apiToken,\n apiUrl\n );\n\n if (codeGenResult.scenarios.length === 0) {\n throw new Error(`No scenarios found in project \"${codeGenResult.projectName}\" (ID: ${projectId}). Cannot generate test files.`);\n }\n\n // Delete everything in the project directory except node_modules\n if (fs.existsSync(projectDir)) {\n try {\n const nodeModulesPath = path.join(projectDir, 'node_modules');\n const hasNodeModules = fs.existsSync(nodeModulesPath);\n\n // Temporarily move node_modules out of the way if it exists\n let tempNodeModulesPath: string | null = null;\n if (hasNodeModules) {\n tempNodeModulesPath = path.join(projectDir, '..', `node_modules.temp.${projectId}`);\n // Remove temp directory if it exists from a previous failed run\n if (fs.existsSync(tempNodeModulesPath)) {\n fs.rmSync(tempNodeModulesPath, { recursive: true, force: true });\n }\n fs.renameSync(nodeModulesPath, tempNodeModulesPath);\n console.log(`📦 Preserved node_modules temporarily`);\n }\n\n // Delete everything in the directory\n const entries = fs.readdirSync(projectDir, { withFileTypes: true });\n for (const entry of entries) {\n const entryPath = path.join(projectDir, entry.name);\n try {\n if (entry.isDirectory()) {\n fs.rmSync(entryPath, { recursive: true, force: true });\n } else {\n fs.unlinkSync(entryPath);\n }\n } catch (error) {\n console.warn(`⚠️ Failed to delete ${entry.name}:`, error);\n }\n }\n console.log(`🗑️ Cleaned project directory (preserved node_modules)`);\n\n // Move node_modules back\n if (hasNodeModules && tempNodeModulesPath) {\n fs.renameSync(tempNodeModulesPath, nodeModulesPath);\n console.log(`📦 Restored node_modules`);\n }\n } catch (error) {\n console.warn(`⚠️ Failed to clean project directory ${projectDir}:`, error);\n // Continue anyway - we'll overwrite files as needed\n }\n }\n\n // Ensure directories exist (will recreate after deletion)\n ensureDirectoryExists(projectDir);\n const testsDir = path.join(projectDir, 'tests');\n ensureDirectoryExists(testsDir);\n\n // Save each scenario's code to a .spec.ts file\n for (const scenario of codeGenResult.scenarios) {\n const fileName = `${slugify(scenario.scenarioName)}.spec.ts`;\n const filePath = path.join(testsDir, fileName);\n fs.writeFileSync(filePath, scenario.code, 'utf-8');\n console.log(`✅ Generated test file: ${filePath}`);\n }\n\n // Generate package.json\n await this.generatePackageJson(projectDir, codeGenResult);\n\n // Generate playwright.config.ts (no runId for project runs)\n await this.generatePlaywrightConfig(projectDir, includeReporter, undefined);\n\n // Generate custom reporter file for live progress streaming (only if requested)\n if (includeReporter) {\n await this.generateProboReporter(projectDir);\n }\n }\n\n /**\n * Run all scenarios in a project\n * Generates files, installs dependencies, and executes tests\n * Does not create run records in the database (CLI mode)\n */\n static async runProjectScenarios(\n projectId: number,\n apiToken: string,\n apiUrl: string,\n projectName?: string,\n options: TestSuiteRunOptions = {}\n ): Promise<TestSuiteRunResult> {\n const {\n outputDir,\n includeReporter = false, // CLI mode - no custom reporter\n playwrightArgs = [],\n onStdout,\n onStderr,\n } = options;\n\n const projectDir = outputDir || getDefaultTestSuiteDir(projectId, projectName || `project-${projectId}`);\n\n try {\n // Generate all files\n console.log(`📝 Generating test files for project ${projectId}...`);\n await this.generateProjectFiles(projectId, apiToken, apiUrl, projectDir, projectName, includeReporter);\n\n // Count total tests\n const testsTotal = countTotalTests(projectDir);\n if (testsTotal === 0) {\n throw new Error(`No test files generated for project ${projectId}`);\n }\n\n // Install dependencies\n console.log(`📦 Installing dependencies in ${projectDir}...`);\n try {\n const npmExecutable = findNpmExecutable();\n const { stdout: installStdout, stderr: installStderr } = await execAsync(\n `${npmExecutable} install`,\n { cwd: projectDir, timeout: 300000 } // 5 minute timeout for install\n );\n console.log('✅ Dependencies installed successfully');\n if (installStdout) console.log(installStdout);\n if (installStderr) console.warn(installStderr);\n } catch (installError: any) {\n console.error('❌ Failed to install dependencies:', installError);\n const errorMsg = `Failed to install dependencies: ${installError.message}`;\n return {\n success: false,\n exitCode: installError.code || 1,\n stdout: installError.stdout || '',\n stderr: installError.stderr || installError.message || '',\n error: errorMsg,\n };\n }\n\n // Install Playwright Chromium browser (required for test execution)\n console.log(`🌐 Installing Playwright Chromium browser...`);\n try {\n const npxExecutable = findNpxExecutable();\n const { stdout: browserStdout, stderr: browserStderr } = await execAsync(\n `${npxExecutable} playwright install chromium`,\n { cwd: projectDir, timeout: 300000 } // 5 minute timeout for browser install\n );\n console.log('✅ Playwright Chromium browser installed successfully');\n if (browserStdout) console.log(browserStdout);\n if (browserStderr) console.warn(browserStderr);\n } catch (browserError: any) {\n console.warn('⚠️ Failed to install Playwright browsers:', browserError);\n // Don't fail the entire run if browser install fails - Playwright might handle it gracefully\n // or the error will be caught when trying to run tests\n }\n\n // Run Playwright tests with streaming output\n console.log(`🚀 Running Playwright tests in ${projectDir}...`);\n if (playwrightArgs.length > 0) {\n console.log(`🧪 Playwright extra args: ${playwrightArgs.join(' ')}`);\n }\n\n return new Promise<TestSuiteRunResult>(async (resolve) => {\n let stdout = '';\n let stderr = '';\n let hasResolved = false;\n let stdoutLineBuffer = '';\n\n // Use spawn for streaming output\n const npxExecutable = findNpxExecutable();\n const testProcess = spawn(npxExecutable, ['playwright', 'test', ...playwrightArgs], {\n cwd: projectDir,\n shell: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n env: {\n ...process.env,\n PROBO_API_KEY: apiToken,\n PROBO_API_ENDPOINT: apiUrl,\n },\n });\n\n // Stream stdout line by line\n testProcess.stdout?.on('data', async (data: Buffer) => {\n const chunk = data.toString();\n stdoutLineBuffer += chunk;\n\n // Process complete lines\n const parts = stdoutLineBuffer.split(/\\n/);\n stdoutLineBuffer = parts.pop() ?? '';\n\n for (const rawLine of parts) {\n const line = rawLine.endsWith('\\r') ? rawLine.slice(0, -1) : rawLine;\n stdout += rawLine + '\\n';\n // Call stdout callback if provided\n if (onStdout) {\n await onStdout(rawLine + '\\n');\n }\n }\n });\n\n // Stream stderr line by line\n testProcess.stderr?.on('data', async (data: Buffer) => {\n const chunk = data.toString();\n stderr += chunk;\n // Call stderr callback if provided\n if (onStderr) {\n await onStderr(chunk);\n }\n });\n\n // Handle process completion\n testProcess.on('close', async (code) => {\n if (hasResolved) return;\n hasResolved = true;\n\n // Flush any remaining buffered stdout\n if (stdoutLineBuffer) {\n stdout += stdoutLineBuffer;\n if (onStdout) {\n await onStdout(stdoutLineBuffer);\n }\n }\n\n const exitCode = code ?? 1;\n const success = exitCode === 0;\n // A test failure is when tests actually ran but some failed (exit code 1 with test results)\n // An execution error is when tests couldn't run (exit code 1 without test results)\n const isTestFailure = exitCode === 1 && stdout.length > 0 && stdout.includes('failed') || stdout.includes('passed');\n const isExecutionError = exitCode !== 0 && !isTestFailure;\n\n console.log(success ? '✅ Tests completed successfully' : (isTestFailure ? '⚠️ Tests completed with failures' : '❌ Test execution failed'));\n\n // Build error message from stderr or stdout if it's an execution error\n let errorMessage: string | undefined = undefined;\n if (isExecutionError) {\n // Check both stderr and stdout for error messages (errors can appear in either)\n const stderrLines = stderr.trim().split('\\n').filter(line => line.trim().length > 0);\n const stdoutLines = stdout.trim().split('\\n').filter(line => line.trim().length > 0);\n const allErrorLines = [...stderrLines, ...stdoutLines].filter(line => \n line.includes('Error:') || \n line.includes('Missing') || \n line.includes('No tests found') ||\n line.includes('failed') ||\n line.includes('Failed')\n );\n \n if (allErrorLines.length > 0) {\n // Use the last error line found\n errorMessage = allErrorLines[allErrorLines.length - 1];\n } else if (stderrLines.length > 0) {\n // Fall back to last stderr line if no clear error pattern found\n errorMessage = stderrLines[stderrLines.length - 1];\n } else if (stdoutLines.length > 0 && stdoutLines.some(line => line.toLowerCase().includes('error'))) {\n // Check stdout for error messages\n const errorLines = stdoutLines.filter(line => line.toLowerCase().includes('error'));\n errorMessage = errorLines[errorLines.length - 1];\n } else {\n errorMessage = `Test execution failed with exit code ${exitCode}`;\n }\n }\n\n resolve({\n success: success,\n exitCode: exitCode,\n stdout: stdout,\n stderr: stderr,\n error: errorMessage,\n });\n });\n\n // Handle process errors\n testProcess.on('error', async (error: Error) => {\n if (hasResolved) return;\n hasResolved = true;\n\n const errorMessage = error.message || String(error);\n stderr += errorMessage;\n\n console.error('❌ Test execution failed:', error);\n\n resolve({\n success: false,\n exitCode: 1,\n stdout: stdout,\n stderr: stderr,\n error: `Test execution failed: ${errorMessage}`,\n });\n });\n\n // Set timeout (1 hour)\n setTimeout(async () => {\n if (!hasResolved) {\n hasResolved = true;\n testProcess.kill();\n\n const errorMessage = 'Test execution timed out after 1 hour';\n stderr += errorMessage;\n\n resolve({\n success: false,\n exitCode: 1,\n stdout: stdout,\n stderr: stderr,\n error: errorMessage,\n });\n }\n }, 3600000); // 1 hour timeout\n });\n } catch (error: any) {\n console.error('❌ Error running project scenarios:', error);\n const errorMsg = error.message || String(error);\n return {\n success: false,\n exitCode: 1,\n stdout: '',\n stderr: errorMsg,\n error: errorMsg,\n };\n }\n }\n\n /**\n * Upload artifacts for a test suite run\n * \n * NOTE: This method is preserved for potential future use but is currently disabled.\n * Artifacts are now accessed locally via the trace viewer instead of being uploaded to the backend.\n */\n static async uploadArtifacts(\n runId: number,\n testSuiteId: number,\n testSuiteDir: string,\n apiToken: string,\n apiUrl: string\n ): Promise<void> {\n // Artifact uploads disabled - reports are now accessed locally via trace viewer\n // Method signature preserved for potential future re-enablement\n return;\n }\n}\n","import type { Page } from 'playwright';\nimport type { \n ElementInfo,\n ElementTag,\n InitialPageState,\n PlaywrightTimeoutConfig,\n ServerResponse, \n FindCandidateInput,\n StepMinimal,\n SmartSelector,\n} from '@probolabs/probo-shared';\nimport { ApiClient, \n apiLogger,\n Instruction, \n FindStepByPromptResult, \n PlaywrightAction,\n ProboLogger,\n ProboLogLevel,\n AIModel,\n DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n setupBrowserConsoleLogs,\n resolveElementTag\n } from '@probolabs/probo-shared';\nimport { interpolateWithParams } from './interpolation.js';\nimport {\n waitForMutationsToSettle,\n findClosestVisibleElement, \n} from './actions';\nimport { Highlighter, ElementTagType } from './highlight';\nimport pRetry, { FailedAttemptError } from 'p-retry';\nimport { proboLogger } from './probo-logger';\nimport { ProboPlaywright } from './replay-utils';\nimport { NavTracker } from './nav-tracker';\n\n\n/**\n * Configuration options for Probo client\n */\ninterface ProboConfig {\n scenarioName: string;\n token?: string;\n apiUrl?: string;\n enableSmartSelectors?: boolean;\n enableConsoleLogs?: boolean;\n logToConsole?: boolean;\n logToFile?: boolean;\n debugLevel?: ProboLogLevel;\n aiModel?: AIModel;\n timeoutConfig?: Partial<PlaywrightTimeoutConfig>;\n}\n\nexport interface RunStepOptions {\n aiModel?: AIModel;\n timeoutConfig?: PlaywrightTimeoutConfig;\n stepId?: number;\n}\n\nexport interface AskAIOptions {\n stepId?: number;\n createStep?: boolean;\n}\n\nconst retryOptions = {\n retries: 3,\n minTimeout: 1000,\n onFailedAttempt: (error: FailedAttemptError) => {\n proboLogger.warn(\n `Page operation failed, attempt ${error.attemptNumber} of ${\n error.retriesLeft +\n error.attemptNumber\n }...`\n );\n }\n};\n\nexport { AIModel };\nexport class Probo {\n private highlighter: Highlighter;\n private apiClient: ApiClient;\n private readonly debugLevel: ProboLogLevel;\n private readonly enableConsoleLogs: boolean;\n private readonly scenarioName: string;\n private readonly aiModel: AIModel;\n private readonly enableSmartSelectors: boolean;\n private readonly timeoutConfig: PlaywrightTimeoutConfig;\n private params: Record<string, any> = {};\n \n constructor({\n scenarioName,\n token = '',\n apiUrl = '',\n enableConsoleLogs = false,\n enableSmartSelectors = false,\n logToConsole = true,\n logToFile = false,\n debugLevel = ProboLogLevel.INFO,\n aiModel = AIModel.AZURE_GPT4_MINI,\n timeoutConfig = {}\n }: ProboConfig) {\n // Configure logger transports and level\n // configureLogger({ logToConsole, logToFile, level: debugLevel });\n proboLogger.setLogLevel(debugLevel);\n\n const apiKey = token || process.env.PROBO_API_KEY;\n if (!apiKey) {\n proboLogger.error(\n \"API key wasn't provided. Pass 'token' or set PROBO_API_KEY\"\n );\n throw new Error('Probo API key not provided');\n }\n\n const apiEndPoint = apiUrl || process.env.PROBO_API_ENDPOINT;\n if (!apiEndPoint) {\n proboLogger.error(\n \"API endpoint wasn't provided. Pass 'apiUrl' or set PROBO_API_ENDPOINT\"\n );\n throw new Error('Probo API endpoint not provided');\n }\n\n this.highlighter = new Highlighter(enableSmartSelectors, enableConsoleLogs);\n this.apiClient = new ApiClient(apiEndPoint, apiKey);\n this.debugLevel = debugLevel;\n this.enableConsoleLogs = enableConsoleLogs;\n this.scenarioName = scenarioName;\n this.aiModel = aiModel;\n this.enableSmartSelectors = enableSmartSelectors;\n this.timeoutConfig = { ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, ...timeoutConfig };\n // set the log level for the api client\n apiLogger.setLogLevel(this.debugLevel);\n\n proboLogger.info(\n `Initializing: scenario=${scenarioName}, apiUrl=${apiEndPoint}, ` +\n `enableConsoleLogs=${enableConsoleLogs}, debugLevel=${debugLevel}, aiModel=${aiModel}`\n );\n }\n\n /**\n * Sets the parameters object for template literal interpolation\n * Stores a reference to the params object so mutations are automatically reflected\n * @param params The parameters object containing values to use for interpolation\n */\n public setParams(params: Record<string, any>): void {\n this.params = params;\n }\n\n /**\n * Interpolates a string using the current params and optional additional context\n * @param str The string to interpolate (may contain ${variable} syntax)\n * @param additionalContext Optional additional context to merge with params\n * @returns The interpolated string\n */\n private interpolate(str: string, additionalContext: Record<string, any> = {}): string {\n return interpolateWithParams(str, this.params, additionalContext);\n }\n\n public async askAI(page: Page, question: string, options: AskAIOptions, assertAnswer: string = ''): Promise<any> {\n const response = await this.askAIHelper(page, question, options, assertAnswer);\n if (response?.result?.error) {\n throw new Error(response.result.error);\n }\n return response?.result?.answer;\n }\n\n public async runStep(\n page: Page, \n stepPrompt: string, \n argument: string|boolean|null = null,\n options: RunStepOptions = { aiModel: this.aiModel, timeoutConfig: this.timeoutConfig }\n ): Promise<string|boolean|void> {\n // Interpolate argument if it's a string with template literals\n argument = this.interpolate(argument as string);\n const runStepStartTime = Date.now();\n //trace message to help with debug\n proboLogger.info(`runStep(${stepPrompt}, ${argument})`);\n try {\n // Determine which AI model to use for this step\n const aiModelToUse = options.aiModel !== undefined ? options.aiModel : this.aiModel;\n let stepId = options.stepId;\n if (!stepId) {\n const stepByPrompt = await this.apiClient.findStepByPrompt(stepPrompt, this.scenarioName, page.url())\n if (!stepByPrompt?.step) {\n // Create new step before continuing\n stepId = Number(await this.apiClient.createStep({\n scenarioName: this.scenarioName,\n stepPrompt: stepPrompt,\n initial_screenshot_url: '',\n initial_html_content: '',\n argument: argument as string,\n use_cache: false,\n url: page.url(),\n }))\n } else {\n stepId = Number(stepByPrompt.step.id)\n }\n }\n\n proboLogger.log(`runStep: ${'#'+stepId+' - '}${stepPrompt}, aiModel: ${aiModelToUse}, pageUrl: ${page.url()}`);\n \n // Setup page monitoring and wait for navigation to stabilize\n this.setupConsoleLogs(page);\n proboLogger.debug(`🔍 [WaitForNavigationToStabilize] timeoutConfig values: quietTimeout=${this.timeoutConfig.waitForStabilityQuietTimeout}, initialDelay=${this.timeoutConfig.waitForStabilityInitialDelay}, globalTimeout=${this.timeoutConfig.waitForStabilityGlobalTimeout}, verbose=${this.timeoutConfig.waitForStabilityVerbose}`);\n const navTracker = await NavTracker.getInstance(page,{ \n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout, \n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n proboLogger.debug(`🔍 Calling waitForNavigationToStabilize: ${this.timeoutConfig.waitForStabilityQuietTimeout}ms, waitForStabilityInitialDelay: ${this.timeoutConfig.waitForStabilityInitialDelay}ms, waitForStabilityGlobalTimeout: ${this.timeoutConfig.waitForStabilityGlobalTimeout}ms, waitForStabilityVerbose: ${this.timeoutConfig.waitForStabilityVerbose}`);\n await navTracker.waitForNavigationToStabilize();\n\n // STEP 1: Check for cached step (if caching is enabled)\n let [isCachedStep, returnValue] = await this._handleCachedStep(page, stepId, stepPrompt, argument);\n if (isCachedStep) {\n const totalRunStepTime = Date.now() - runStepStartTime;\n proboLogger.debug(`⏱️ runStep total time: ${totalRunStepTime}ms (cached step)`);\n proboLogger.debug('Successfully executed cached step!');\n return returnValue;\n }\n\n // STEP 2: Create or update step in backend and capture initial page state\n proboLogger.log(`Execution failed or prompt changed, starting self-healing process...`);\n proboLogger.debug(`Taking initial screenshot from the page ${page.url()}`);\n const { base_screenshot_url, base_html_content } = await this.getInitialPageState(page);\n await this.apiClient.patchStep(stepId, {\n initial_screenshot: base_screenshot_url,\n pre_html_content: base_html_content !== '' ? base_html_content : undefined,\n prompt: stepPrompt\n });\n\n // STEP 4: Self-Healing Process - Get action from database or from AI\n const screenshotReasoningStartTime = Date.now();\n const action : PlaywrightAction = await this.apiClient.screenshotReasoning(stepId, stepPrompt, this.aiModel);\n const screenshotReasoningTime = Date.now() - screenshotReasoningStartTime;\n proboLogger.debug(`⏱️ screenshotReasoning took ${screenshotReasoningTime}ms`);\n\n // STEP 5: Find and highlight candidate elements based on reasoning\n const elementTags = resolveElementTag(action);\n const { candidates_screenshot_url, candidate_elements } = await this.findAndHighlightCandidateElements(page, elementTags);\n proboLogger.debug(`Found ${candidate_elements.length} candidate elements`);\n\n // STEP 6: Clean up highlighting\n await this.unhighlightElements(page);\n\n // STEP 7: Select the best candidate element\n const findBestCandidateStartTime = Date.now();\n const index : number = await this.apiClient.findBestCandidateElement(\n stepId,\n candidates_screenshot_url, \n candidate_elements, \n this.aiModel\n );\n const findBestCandidateTime = Date.now() - findBestCandidateStartTime;\n proboLogger.debug(`⏱️ findBestCandidateElement took ${findBestCandidateTime}ms`);\n proboLogger.debug(`AI selected candidate element at index: ${index}`);\n \n // STEP 8: Find the actual element object from the candidates\n const actualElement = candidate_elements.find(element => element.index === index);\n \n if (!actualElement) {\n throw new Error(`No candidate element found with index ${index}. Available indices: ${candidate_elements.map(e => e.index).join(', ')}`);\n }\n\n proboLogger.debug(`Selected element: ${actualElement.css_selector} (index: ${actualElement.index})`);\n\n // STEP 9: Execute the interaction with the selected element\n const actionResult = await this._handlePerformAction(page, stepId, actualElement, action, argument); \n \n const totalRunStepTime = Date.now() - runStepStartTime;\n proboLogger.debug(`⏱️ runStep total time: ${totalRunStepTime}ms (screenshotReasoning: ${screenshotReasoningTime}ms, findBestCandidateElement: ${findBestCandidateTime}ms)`);\n proboLogger.debug('Step execution completed successfully');\n return actionResult;\n\n } catch (error: any) {\n proboLogger.error(`Error in runStep: ${error.message}`);\n proboLogger.error(`Step prompt: \"${stepPrompt}\"`);\n proboLogger.error(`Page URL: ${page.url()}`);\n \n // Re-throw the error to maintain the existing error handling behavior\n throw error;\n }\n }\n \n private async _handleCachedStep(page: Page, stepId: number, stepPrompt: string, argument: string|boolean|null): Promise<[boolean, string|boolean|void]> {\n proboLogger.debug(`Checking if step exists in database: ${stepPrompt}`);\n const result: StepMinimal | null = await this.apiClient.findStepById(stepId)\n if (!result) {\n proboLogger.error(`Step not found in database`);\n throw Error(`Step #${stepId} not found in database`)\n } else if (result.action == '' || !result.action) {\n proboLogger.error(`Step action is missing`);\n throw Error(`Step #${stepId} action is missing`);\n }\n\n if(result.prompt !== stepPrompt) {\n proboLogger.debug(`Step prompt changed, skipping execution and going to start self-healing process...`);\n return [false, undefined];\n }\n\n const actionArgument = argument ?? result.argument;\n proboLogger.log(`Found existing step with ID: ${result.id} going to perform action: ${result.action} with value: ${actionArgument}`);\n \n try {\n // Create ProboPlaywright instance with the page\n const proboPlaywright = new ProboPlaywright({ \n enableSmartSelectors: this.enableSmartSelectors, \n debugLevel: this.debugLevel, \n timeoutConfig: this.timeoutConfig \n }, page);\n \n // Call runStep with the cached action\n const runStepResult = await proboPlaywright.runStep({\n iframeSelector: result.iframe_selector,\n elementSelector: result.element_css_selector,\n smartSelector: result.smart_selector,\n smartIFrameSelector: result.smart_iframe_selector,\n action: result.action as PlaywrightAction,\n argument: actionArgument as string,\n }); \n \n return [true, runStepResult];\n } catch (error: any) {\n return [false, undefined];\n }\n\n }\n\n private setupConsoleLogs(page: Page) {\n setupBrowserConsoleLogs(page, this.enableConsoleLogs, proboLogger);\n }\n\n public async getInitialPageState(page: Page): Promise<InitialPageState> {\n const baseScreenshot = await this.screenshot(page);\n proboLogger.debug(`🔍 baseScreenshot: ${baseScreenshot}`);\n const baseHtmlContent = '';\n return {\n base_screenshot_url: baseScreenshot,\n base_html_content: baseHtmlContent\n };\n \n }\n\n public async findAndHighlightCandidateElements(page: Page, elementTags: string[]): Promise<FindCandidateInput> {\n // 2. CANDIDATE ELEMENTS HANDLING: Find and cache candidates\n \n await this.highlighter.findAndCacheCandidateElements(page, elementTags as ElementTagType[]);\n proboLogger.debug(`🔍 after findAndCacheCandidateElements`);\n \n // 3. CANDIDATE ELEMENTS HANDLING: Highlight candidates and take screenshot\n await this.highlighter.highlightCachedElements(page, 'candidates');\n proboLogger.debug(`🔍 after highlightCachedElements candidates`);\n await page.waitForTimeout(200);\n const candidatesScreenshot = await this.screenshot(page);\n proboLogger.debug(`🔍 candidatesScreenshot: ${candidatesScreenshot}`);\n \n return {\n candidates_screenshot_url: candidatesScreenshot,\n candidate_elements: await this.highlighter.getCandidatesCached(page) ?? []\n };\n }\n\n\n \n \n public async highlightElements(page: Page, elementTags: [ElementTagType]) {\n return this.highlighter.highlightElements(page, elementTags);\n }\n\n public async unhighlightElements(page: Page) {\n return this.highlighter.unhighlightElements(page);\n }\n\n public async highlightElement(page: Page, element_css_selector: string, iframe_selector: string, smart_selector: SmartSelector|null, smart_iframe_selector: SmartSelector|null, element_index: number) {\n return this.highlighter.highlightElement(page, element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, element_index);\n }\n\n public async waitForMutationsToSettle(page: Page, timeout?: number, initTimeout?: number) {\n const mutationTimeout = timeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsTimeout;\n const mutationInitTimeout = initTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsInitTimeout;\n return waitForMutationsToSettle(page, mutationTimeout, mutationInitTimeout);\n }\n\n public async screenshot(page: Page) { \n proboLogger.debug(`taking screenshot of current page: ${page.url()}`);\n // await page.evaluate(() => document.fonts?.ready.catch(() => {}));\n \n const screenshot_bytes = await page.screenshot({ fullPage: true, animations: 'disabled', timeout: 10000 });\n // make an api call to upload the screenshot to cloud\n proboLogger.debug('uploading image data to cloud');\n const screenshot_url = await this.apiClient.uploadScreenshot(screenshot_bytes);\n return screenshot_url;\n \n }\n\n private async _handlePerformAction(page: Page, stepId: number, actualElement: ElementInfo, action: PlaywrightAction, argument: string|boolean|null) {\n const value = argument ?? '';\n const element_css_selector = actualElement.css_selector;\n const iframe_selector = actualElement.iframe_selector;\n const element_index = actualElement.index;\n const smart_selector = actualElement.smart_selector;\n const smart_iframe_selector = actualElement.smart_iframe_selector;\n proboLogger.debug('Handling perform action:', {action, element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, element_index});\n if(action !== PlaywrightAction.VISIT_URL) {\n await this.unhighlightElements(page);\n proboLogger.debug('Unhighlighted elements');\n await this.highlightElement(page, element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, element_index);\n proboLogger.debug('Highlighted element');\n }\n const pre_action_screenshot_url = await this.screenshot(page);\n const returnValue = await new ProboPlaywright({ \n enableSmartSelectors: this.enableSmartSelectors,\n debugLevel: this.debugLevel,\n timeoutConfig: this.timeoutConfig \n }, page).runStep({\n iframeSelector: iframe_selector,\n elementSelector: element_css_selector,\n smartSelector: smart_selector,\n smartIFrameSelector: smart_iframe_selector,\n action: action,\n argument: value as string,\n highlightTimeout: 0\n });\n\n await this.unhighlightElements(page);\n const post_action_screenshot_url = await this.screenshot(page);\n const post_html_content = '';\n \n await this.apiClient.patchStep(stepId, {\n pre_screenshot: pre_action_screenshot_url,\n post_screenshot: post_action_screenshot_url,\n post_html_content: post_html_content == '' ? null : post_html_content,\n });\n \n return returnValue;\n }\n\n public async askAIHelper(page: Page, question: string, options: AskAIOptions, assertAnswer: string = ''): Promise<ServerResponse> {\n // Set default value for createStep to true if not provided\n const createStep = options?.createStep !== undefined ? options.createStep : true;\n const stepId = options?.stepId;\n \n proboLogger.debug(`🔍 [askAI] Asking AI question: \"${question}\", scenarioName: ${this.scenarioName}, aiModel: ${this.aiModel}, createStep: ${createStep}`); \n try {\n // Get current page and capture screenshot\n const navTracker = await NavTracker.getInstance(page, {\n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout,\n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n await navTracker.waitForNavigationToStabilize();\n const screenshot = await this.screenshot(page);\n proboLogger.debug(`📸 [askAI] Screenshot captured: ${screenshot}`);\n \n \n proboLogger.debug(`📤 [askAI] Sending chat request to backend`);\n \n // Use ApiClient to send request to backend API \n const serverResponse = await this.apiClient.askAI(question, this.scenarioName, screenshot, this.aiModel);\n proboLogger.debug(`✅ [askAI] Chat response received successfully`);\n \n // Check assertion BEFORE any step update logic, so it always runs\n if (assertAnswer) {\n const actualAnswer = serverResponse?.result?.answer?.toString();\n const interpolatedAssertAnswer = this.interpolate(assertAnswer); \n if (actualAnswer !== interpolatedAssertAnswer) { \n proboLogger.error(`❌ [askAI] Expected answer to be ${interpolatedAssertAnswer}, but got ${actualAnswer}`);\n throw new Error(`Expected answer to be ${interpolatedAssertAnswer}, but got ${actualAnswer}`);\n }\n }\n \n // If stepId is provided, update the step\n if (stepId) {\n proboLogger.debug(`🔍 [askAI] Looking for step: ${stepId}`);\n const step = await this.apiClient.findStepById(stepId);\n if (!step) {\n proboLogger.error(`Step not found in database`);\n throw Error(`Step #${stepId} not found in database`)\n }\n\n if (step?.prompt === question) {\n proboLogger.debug(`✅ [askAI] Step already exists with question: ${question}, skipping update`);\n return serverResponse;\n }\n\n try {\n proboLogger.debug(`📝 [askAI] Updating step in backend for question: \"${question}\"`);\n \n // Get HTML content for the step\n const htmlContent = await page.content();\n\n await this.apiClient.patchStep(stepId, {\n stepPrompt: question,\n pre_html_content: htmlContent,\n initial_screenshot: screenshot,\n url: page.url(),\n action: PlaywrightAction.ASK_AI,\n vanilla_prompt: question,\n });\n \n proboLogger.debug(`✅ [askAI] Step updated successfully with ID: ${stepId}`);\n } catch (stepError) {\n proboLogger.error(`❌ [askAI] Error updating step: ${stepError}`);\n // Don't throw here, just log the error and continue\n }\n } else if (createStep) {\n proboLogger.debug(`🔍 [askAI] Creating new step in backend for question: \"${question}\"`);\n const stepId = await this.apiClient.createStep({\n scenarioName: this.scenarioName,\n stepPrompt: question,\n initial_screenshot_url: screenshot,\n argument: '',\n use_cache: false,\n url: page.url(),\n action: PlaywrightAction.ASK_AI,\n vanilla_prompt: question,\n is_vanilla_prompt_robust: true,\n target_element_name: 'AI Question',\n });\n proboLogger.debug(`✅ [askAI] Step created successfully with ID: ${stepId}`);\n }\n \n return serverResponse;\n \n } catch (error) {\n proboLogger.error(`❌ [askAI] Error in askAI: ${error}`);\n throw error;\n }\n }\n}\n\n// Re-export ElementTag for convenience\nexport { ElementTag, ProboLogLevel, Highlighter, ElementTagType, ElementInfo, PlaywrightAction, ProboPlaywright, findClosestVisibleElement, NavTracker };\n\n// Re-export OTP class\nexport { OTP, MailinatorMessage } from './otp';\n\n// Re-export code generation utilities from probo-shared\nexport { \n generateCode, \n getRequiredEnvVars, \n extractRequiredEnvVars, \n createUrlSlug,\n type CodeGeneratorOptions \n} from '@probolabs/probo-shared';\n\n// Export Node.js/Playwright-specific interpolation (uses process.env)\nexport { interpolateWithParams, buildInterpolationContext } from './interpolation.js';\n\n// Export ProboCodeGenerator and related types\nexport { \n ProboCodeGenerator,\n type CodeGenOptions,\n type TestSuiteCodeGenResult\n} from './codegen-api';\n\n// Export TestSuiteRunner and related types\nexport {\n TestSuiteRunner,\n type TestSuiteRunResult,\n type TestStatistics,\n type TestSuiteRunOptions\n} from './test-suite-runner';"],"names":["PlaywrightAction","ProboLogLevel","require$$0","retry","AIModel","OTPAuth.TOTP","promisify","exec","fs","path","os","fetch","spawn"],"mappings":"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CAAC,CAAC,CAAC;IAChD,KAAK;IACL;IACA,IAAI,MAAM,eAAe,GAAG,KAAK,KAAK,SAAS,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACrG,IAAI,OAAO,CAAC;AACZ;AACA;AACA;AACA;AACA,kBAAkB,EAAE,eAAe,CAAC;AACpC,+DAA+D,EAAE,eAAe,GAAG,qCAAqC,GAAG,EAAE,CAAC;AAC9H,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;IACF,CAAC;IACD;IACA;IACA;IACA;IACA;IACO,SAAS,qBAAqB,GAAG;IACxC;IACA;IACA,IAAI,OAAO,CAAC;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;IACF;;IC7rBA;;;;IAIG;IAGH;;;;;;;;IAQG;IACa,SAAA,yBAAyB,CACvC,MAA2B,EAC3B,iBAAuC,EAAA;QAEvC,OAAO;IACL,QAAA,GAAG,MAAM;IACT,QAAA,IAAI,iBAAiB,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,EAAE,OAAO,EAAE,CAAC;SACnD,CAAC;IACJ,CAAC;IAED;;;;;;;;;IASG;aACa,qBAAqB,CACnC,GAAW,EACX,MAA2B,EAC3B,iBAAuC,EAAA;QAEvC,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACrE,IAAA,OAAO,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3C;;IC1CA;IACO,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC;;ICyKtD;;IAEG;IACI,eAAe,wBAAwB,CAC5C,IAAU,EACV,eAA0B,GAAA,iCAAiC,CAAC,gBAAiB,EAC7E,WAAsB,GAAA,iCAAiC,CAAC,oBAAqB,EAAA;IAE7E,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,WAAW,CAAC,KAAK,CACf,CAAA,0CAAA,EAA6C,WAAW,C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AE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjF,KAAK;IACL,IAAI,UAAU,GAAG;IACjB,QAAQ,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtC,KAAK;IACL,IAAI,OAAO,GAAG;IACd,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,KAAK;IACL,IAAI,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC;IAC/B,QAAQ,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACzC;IACA;IACA;IACA,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK;IACL,CAAC;IACD,MAAM,MAAM,SAAS,MAAM,CAAC;IAC5B,IAAI,WAAW,EAAE;IACjB,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK;IACL,CAAC;IACD;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,MAAM,mBAAmB,YAAY,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;IAClE,4CAA4C,MAAM,MAAM,mBAAmB,YAAY,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;IAC1G,6CAA6C,MAAM,MAAM,mBAAmB,YAAY,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;IAC3G,6CAA6C,MAAM,MAAM,mBAAmB,YAAY,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;AAC3G;IACA;IACA;IACA;IACA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC;IAC9D;IACA,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IACb,QAAQ,CAAC;IACT,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B,KAAK,CAAC;IACN,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClC;IACA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD;IACA,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC;IAChB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,KAAK,CAAC;IACrD,QAAQ,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,oBAAoB,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC1E,KAAK;IACL,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B;IACA,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,mFAAmF,SAAS,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE;IACpH,IAAI,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC;IACA,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,GAAG,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC;IACrD;IACA,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/F,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACtC,YAAY,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACtC,YAAY,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACtC,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACnC,YAAY,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACtD,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3C,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,aAAa;IACb,SAAS;IACT;IACA,QAAQ,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,QAAQ,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;IACnC,YAAY,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACvC,YAAY,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,YAAY,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,YAAY,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,YAAY,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACzB,YAAY,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7B,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACvB,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3B,SAAS;IACT;IACA,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IACvC,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACtF,SAAS;IACT;IACA,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK;IACL,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;IACD,+BAA+B,MAAM,MAAM,SAAS,IAAI,CAAC;IACzD,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IACjC,KAAK;IACL,IAAI,MAAM,GAAG;IACb,QAAQ,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,QAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACrB,KAAK;IACL,IAAI,MAAM,CAAC,IAAI,EAAE;IACjB,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC;IACrB,QAAQ,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACzC,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IAChC,QAAQ,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE;IACpC,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;IAClE,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1E,YAAY,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACrD,SAAS;IACT,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;IACL,IAAI,MAAM,GAAG;IACb,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;IAClC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC7B,QAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACtD;IACA,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC;IAC7B,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,KAAK,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACzE,QAAQ,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IACpC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;IACtB,KAAK;IACL,IAAI,SAAS,CAAC,GAAG,EAAE;IACnB,QAAQ,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;IACtB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IACrC,QAAQ,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAClC,QAAQ,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE;IACtD,YAAY,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACvD,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;IACrE,YAAY,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9E,YAAY,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IAChC,YAAY,GAAG,IAAI,IAAI,CAAC;IACxB,SAAS;IACT,QAAQ,OAAO,GAAG,CAAC;IACnB,KAAK;IACL,IAAI,OAAO,CAAC,GAAG,EAAE;IACjB;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACtF,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnC,KAAK;IACL,IAAI,GAAG,CAAC,KAAK,EAAE;IACf,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC;IACvB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,KAAK;IACL,IAAI,UAAU,CAAC,GAAG,EAAE;IACpB,QAAQ,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC1E,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,QAAQ,OAAO,GAAG,CAAC;IACnB,KAAK;IACL,IAAI,MAAM,GAAG;IACb,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,KAAK;IACL,IAAI,OAAO,GAAG;IACd,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC9B,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,KAAK;IACL,IAAI,UAAU,CAAC,EAAE,EAAE;IACnB,QAAQ,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACxE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAChF,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAC1B,QAAQ,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACpC,QAAQ,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;IAC3B;IACA,QAAQ,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACtC,QAAQ,OAAO,EAAE,CAAC;IAClB,KAAK;IACL;IACA,IAAI,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC;IAC5E,QAAQ,KAAK,EAAE,CAAC;IAChB,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACrB,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC9B,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC/B,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC/B,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACjC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IACnC,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IACnC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B;IACA,QAAQ,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B;IACA;IACA,QAAQ,IAAI,EAAE,CAAC,GAAG,QAAQ,IAAI,QAAQ,GAAG,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC1G,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACzC,QAAQ,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK;IACL,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,YAAY,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACrG,+BAA+B,MAAM,QAAQ,mBAAmB,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IAChG,0DAA0D,MAAM,QAAQ,mBAAmB,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IAC3H,+BAA+B,MAAM,QAAQ,mBAAmB,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IAChG,+BAA+B,MAAM,QAAQ,mBAAmB,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/F;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,WAAW,GAAG,CAAC,IAAI;IAC7B,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,OAAO,UAAU,CAAC;IAC1D,SAAS;IACT,QAAQ,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,EAAE;IAClE,YAAY,GAAG,CAAC,GAAG;IACnB,gBAAgB,OAAO,IAAI,CAAC;IAC5B,aAAa;IACb,YAAY,YAAY,EAAE,IAAI;IAC9B,SAAS,CAAC,CAAC;IACX,QAAQ,IAAI;IACZ;IACA;IACA,YAAY,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,OAAO,cAAc,CAAC;IAC7E,SAAS,QAAQ;IACjB;IACA,YAAY,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;IACnD,SAAS;IACT,KAAK;IACL;IACA,IAAI,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,OAAO,IAAI,CAAC;IACjD,SAAS,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO,MAAM,CAAC;IAC1D,SAAS,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO,MAAM,CAAC;IAC1D,IAAI,OAAO,SAAS,CAAC;IACrB,CAAC,GAAG,CAAC;AACL;IACA;IACA;IACA;IACA,IAAI,MAAM,WAAW,GAAG;IACxB,IAAI,IAAI,EAAE,IAAI;IACd,IAAI,MAAM,EAAE,MAAM;IAClB,IAAI,MAAM,EAAE,MAAM;IAClB,IAAI,MAAM,EAAE,MAAM;IAClB,IAAI,MAAM,EAAE,MAAM;IAClB,IAAI,UAAU,EAAE,QAAQ;IACxB,IAAI,UAAU,EAAE,QAAQ;IACxB,IAAI,UAAU,EAAE,QAAQ;IACxB,IAAI,UAAU,EAAE,QAAQ;IACxB,CAAC,CAAC;IACF;IACA;IACA;IACA;IACA,IAAI,MAAM,qBAAqB,GAAG,CAAC,SAAS,GAAG;IAC/C,IAAI,OAAO,IAAI;IACf,QAAQ,KAAK,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC;IACtD,YAAY,OAAO,MAAM,CAAC;IAC1B,QAAQ,KAAK,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;IAChD,YAAY,OAAO,QAAQ,CAAC;IAC5B,QAAQ,KAAK,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;IAChD,YAAY,OAAO,QAAQ,CAAC;IAC5B,QAAQ,KAAK,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;IAChD,YAAY,OAAO,QAAQ,CAAC;IAC5B,QAAQ,KAAK,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;IAChD,YAAY,OAAO,QAAQ,CAAC;IAC5B,QAAQ,KAAK,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IAC1C,YAAY,OAAO,UAAU,CAAC;IAC9B,QAAQ,KAAK,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IAC1C,YAAY,OAAO,UAAU,CAAC;IAC9B,QAAQ,KAAK,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IAC1C,YAAY,OAAO,UAAU,CAAC;IAC9B,QAAQ,KAAK,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IAC1C,YAAY,OAAO,UAAU,CAAC;IAC9B,QAAQ;IACR,YAAY,MAAM,IAAI,SAAS,CAAC,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACxE,KAAK;IACL,CAAC,CAAC;IACF;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG;IAClD,IAAI,IAAI,IAAI,EAAE;IACd,QAAQ,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7F,QAAQ,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,KAAK,MAAM;IACX,QAAQ,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACjD,KAAK;IACL,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA,IAAI,MAAM,QAAQ,GAAG,kCAAkC,CAAC;IACxD;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG;IAChC;IACA,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChC;IACA,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACzB,IAAI,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,WAAW,EAAE,CAAC;IACzE,IAAI,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,IAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;IACjB,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;IAClB,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;IAClB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IACvC,QAAQ,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,QAAQ,KAAK,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC;IACjC,QAAQ,IAAI,IAAI,CAAC,CAAC;IAClB,QAAQ,IAAI,IAAI,IAAI,CAAC,EAAE;IACvB,YAAY,IAAI,IAAI,CAAC,CAAC;IACtB,YAAY,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC;IAC1C,SAAS;IACT,KAAK;IACL,IAAI,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;IACF;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG;IAChC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;IACjB,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;IAClB,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;IACjB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IACvC,QAAQ,KAAK,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACpC,QAAQ,IAAI,IAAI,CAAC,CAAC;IAClB,QAAQ,MAAM,IAAI,IAAI,CAAC,CAAC;IACxB,YAAY,GAAG,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,YAAY,IAAI,IAAI,CAAC,CAAC;IACtB,SAAS;IACT,KAAK;IACL,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE;IAClB,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;IAChD,KAAK;IACL,IAAI,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG;IAC7B;IACA,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChC,IAAI,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChD,IAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3D,KAAK;IACL,IAAI,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;IACF;IACA;IACA;IACA;IACA,IAAI,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG;IAC7B,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;IACjB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IACvC,QAAQ,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxC,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC;IACzC,QAAQ,GAAG,IAAI,GAAG,CAAC;IACnB,KAAK;IACL,IAAI,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG;IAChC,IAAI,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IACvC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1C,KAAK;IACL,IAAI,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;IACF;IACA;IACA;IACA;IACA,IAAI,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG;IAChC,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;IACjB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IACvC,QAAQ,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK;IACL,IAAI,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA,IAAI,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;IACnF;IACA;IACA;IACA,IAAI,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;IACnF;IACA;IACA;IACA;IACA,IAAI,MAAM,UAAU,GAAG,CAAC,GAAG,GAAG;IAC9B,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACtD,KAAK;IACL,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF;IACA;IACA;IACA;IACA,IAAI,MAAM,UAAU,GAAG,CAAC,GAAG,GAAG;IAC9B,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACtD,KAAK;IACL,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,WAAW,GAAG,CAAC,IAAI,GAAG;IAChC,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE;IAC7C,QAAQ,OAAO,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,KAAK,MAAM;IACX,QAAQ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC1D,KAAK;IACL,CAAC,CAAC;AACF;IACA;IACA;IACA,IAAI,MAAM,MAAM,CAAC;IACjB;IACA;IACA;IACA;IACA,MAAM,OAAO,UAAU,CAAC,GAAG,EAAE;IAC7B,QAAQ,OAAO,IAAI,MAAM,CAAC;IAC1B,YAAY,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM;IAC5C,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA;IACA,MAAM,OAAO,QAAQ,CAAC,GAAG,EAAE;IAC3B,QAAQ,OAAO,IAAI,MAAM,CAAC;IAC1B,YAAY,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM;IAC1C,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA;IACA,MAAM,OAAO,UAAU,CAAC,GAAG,EAAE;IAC7B,QAAQ,OAAO,IAAI,MAAM,CAAC;IAC1B,YAAY,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM;IAC5C,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA;IACA,MAAM,OAAO,OAAO,CAAC,GAAG,EAAE;IAC1B,QAAQ,OAAO,IAAI,MAAM,CAAC;IAC1B,YAAY,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM;IACzC,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA;IACA,MAAM,IAAI,MAAM,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACjC,KAAK;IACL;IACA;IACA;IACA,MAAM,IAAI,MAAM,GAAG;IACnB,QAAQ,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;IAC9C,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,QAAQ,EAAE,KAAK;IAC3B,YAAY,YAAY,EAAE,KAAK;IAC/B,YAAY,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3C,SAAS,CAAC,CAAC;IACX,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC;IAC3B,KAAK;IACL;IACA;IACA;IACA,MAAM,IAAI,IAAI,GAAG;IACjB,QAAQ,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;IAC5C,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,QAAQ,EAAE,KAAK;IAC3B,YAAY,YAAY,EAAE,KAAK;IAC/B,YAAY,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IACzC,SAAS,CAAC,CAAC;IACX,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK;IACL;IACA;IACA;IACA,MAAM,IAAI,MAAM,GAAG;IACnB,QAAQ,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;IAC9C,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,QAAQ,EAAE,KAAK;IAC3B,YAAY,YAAY,EAAE,KAAK;IAC/B,YAAY,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3C,SAAS,CAAC,CAAC;IACX,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC;IAC3B,KAAK;IACL;IACA;IACA;IACA,MAAM,IAAI,GAAG,GAAG;IAChB,QAAQ,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;IAC3C,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,QAAQ,EAAE,KAAK;IAC3B,YAAY,YAAY,EAAE,KAAK;IAC/B,YAAY,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IACxC,SAAS,CAAC,CAAC;IACX,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC;IACxB,KAAK;IACL;IACA;IACA;IACA;IACA;IACA,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC;IAC7C;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,KAAK,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAChG;IACA,QAAQ,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;IAC7C,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,QAAQ,EAAE,KAAK;IAC3B,YAAY,YAAY,EAAE,KAAK;IAC/B,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;IAC7B,SAAS,CAAC,CAAC;IACX,KAAK;IACL,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG;IACpC,IAAI;IACJ,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;IACnC,YAAY,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IAC3E,SAAS;IACT,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnB,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC;IACpB,QAAQ,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,YAAY,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrD,SAAS;IACT,QAAQ,OAAO,GAAG,KAAK,CAAC,CAAC;IACzB,KAAK;IACL,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA,IAAI,MAAM,IAAI,CAAC;IACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,WAAW,QAAQ,GAAG;IAC5B,QAAQ,OAAO;IACf,YAAY,MAAM,EAAE,EAAE;IACtB,YAAY,KAAK,EAAE,SAAS;IAC5B,YAAY,aAAa,EAAE,IAAI;IAC/B,YAAY,SAAS,EAAE,MAAM;IAC7B,YAAY,MAAM,EAAE,CAAC;IACrB,YAAY,OAAO,EAAE,CAAC;IACtB,YAAY,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC;IACV,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,OAAO,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;IACvI,QAAQ,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAChF,QAAQ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1D,QAAQ,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,IAAI,MAAM,CAAC;IAClK,QAAQ,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpD,KAAK;IACL;IACA;IACA;IACA;IACA;IACA,MAAM,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE;IAClD,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAC7B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS;IACrC,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,OAAO;IACnB,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;IACnJ;IACA,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,IAAI,CAAC;IACjD,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC;IACzB,QAAQ,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG;IACjD,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjD,gBAAgB,MAAM;IACtB,gBAAgB,SAAS;IACzB,gBAAgB,MAAM;IACtB,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa,CAAC,CAAC;IACf,YAAY,IAAI,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;IACxD,gBAAgB,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC;IACpC,aAAa;IACb,SAAS,CAAC;IACV,QAAQ,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,IAAI,KAAK,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1D,YAAY,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC/B,YAAY,IAAI,KAAK,KAAK,IAAI,EAAE,MAAM;IACtC,YAAY,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC/B,YAAY,IAAI,KAAK,KAAK,IAAI,EAAE,MAAM;IACtC,SAAS;IACT,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC1D,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAC7B,YAAY,KAAK;IACjB,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS;IACrC,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,OAAO;IACnB,YAAY,MAAM;IAClB,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA,MAAM,QAAQ,GAAG;IACjB,QAAQ,MAAM,CAAC,GAAG,kBAAkB,CAAC;IACrC,QAAQ,OAAO,iBAAiB,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChW,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;IAC/P;IACA;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B;IACA;IACA;IACA,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3B;IACA;IACA;IACA,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IAC3C;IACA;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IACtF;IACA;IACA;IACA,QAAQ,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1D;IACA;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B;IACA;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/B,KAAK;IACL,CAAC;AACD;IACA;IACA;IACA;IACA,IAAI,MAAM,IAAI,CAAC;IACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,WAAW,QAAQ,GAAG;IAC5B,QAAQ,OAAO;IACf,YAAY,MAAM,EAAE,EAAE;IACtB,YAAY,KAAK,EAAE,SAAS;IAC5B,YAAY,aAAa,EAAE,IAAI;IAC/B,YAAY,SAAS,EAAE,MAAM;IAC7B,YAAY,MAAM,EAAE,CAAC;IACrB,YAAY,MAAM,EAAE,EAAE;IACtB,YAAY,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC;IACV,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,OAAO,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;IACrF,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;IACrD,KAAK;IACL;IACA;IACA;IACA;IACA;IACA,MAAM,OAAO,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;IAC/C,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC;IAC5B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,SAAS;IACrB,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,OAAO,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;IACvF,QAAQ,OAAO,MAAM,GAAG,IAAI,GAAG,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D,KAAK;IACL;IACA;IACA;IACA;IACA;IACA,MAAM,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;IACjD,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC;IAC9B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,SAAS;IACrB,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,OAAO,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE;IAC5G,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAC7B,YAAY,MAAM;IAClB,YAAY,SAAS;IACrB,YAAY,MAAM;IAClB,YAAY,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;IAClC,gBAAgB,MAAM;IACtB,gBAAgB,SAAS;IACzB,aAAa,CAAC;IACd,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA;IACA;IACA,MAAM,QAAQ,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;IAChD,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAC7B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS;IACrC,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,SAAS;IACrB,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE;IAC3H,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAC7B,YAAY,KAAK;IACjB,YAAY,MAAM;IAClB,YAAY,SAAS;IACrB,YAAY,MAAM;IAClB,YAAY,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;IAClC,gBAAgB,MAAM;IACtB,gBAAgB,SAAS;IACzB,aAAa,CAAC;IACd,YAAY,MAAM;IAClB,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IAC7C,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAC7B,YAAY,KAAK;IACjB,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS;IACrC,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,SAAS;IACrB,YAAY,MAAM;IAClB,SAAS,CAAC,CAAC;IACX,KAAK;IACL;IACA;IACA;IACA,MAAM,QAAQ,GAAG;IACjB,QAAQ,MAAM,CAAC,GAAG,kBAAkB,CAAC;IACrC,QAAQ,OAAO,iBAAiB,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9V,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IAC7P;IACA;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B;IACA;IACA;IACA,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3B;IACA;IACA;IACA,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IAC3C;IACA;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IACtF;IACA;IACA;IACA,QAAQ,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1D;IACA;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B;IACA;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B,KAAK;IACL;;UCpwDa,eAAe,CAAA;IAQ1B,IAAA,WAAA,CAAY,EAAE,oBAAoB,GAAG,KAAK,EAAE,aAAa,GAAG,EAAE,EAAE,UAAU,GAAGA,qBAAa,CAAC,IAAI,EAAE,UAAU,EAAyB,EAAE,OAAoB,IAAI,EAAA;YALtJ,IAAI,CAAA,IAAA,GAAgB,IAAI,CAAC;YACzB,IAAM,CAAA,MAAA,GAAwB,EAAE,CAAC;YACjC,IAAU,CAAA,UAAA,GAA2B,IAAI,CAAC;IAIhD,QAAA,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;YACjD,IAAI,CAAC,aAAa,GAAG;IACnB,YAAA,GAAG,iCAAiC;IACpC,YAAA,GAAG,aAAa;aACjB,CAAC;IACF,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC;IACrC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,oBAAoB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC5E,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,QAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SACrC;IAED;;;;;IAKE;IACK,IAAA,OAAO,CAAC,IAAiB,EAAA;IAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC;gBACtF,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;aAEzE;SACF;IAED;;;;IAIG;IACI,IAAA,SAAS,CAAC,MAA2B,EAAA;IAC1C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACtB;IAED;;;;;IAKG;IACK,IAAA,WAAW,CAAC,GAAW,EAAE,iBAAA,GAAyC,EAAE,EAAA;YAC1E,OAAO,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;SACnE;IAED;;;;;;;IAOE;QACK,MAAM,OAAO,CAAC,MAAqB,EAAA;IAExC,QAAA,IAAI,EACF,MAAM,EACN,QAAQ,GAAG,EAAE,EACb,cAAc,GAAG,EAAE,EACnB,eAAe,GAAG,EAAE,EACpB,aAAa,GAAG,IAAI,EACpB,mBAAmB,GAAG,IAAI,EAC1B,UAAU,GAAG,EAAE,GAChB,GAAG,MAAM,CAAC;;IAGX,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACd,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACpC;;IAGD,QAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC3D,YAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACvC;IAAM,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;;gBAElC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAI;IACnC,gBAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;IACjD,oBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;qBAC9B;IACD,gBAAA,OAAO,GAAG,CAAC;IACb,aAAC,CAAC,CAAC;aACJ;;IAGD,QAAA,WAAW,CAAC,IAAI,CAAC,CAAW,QAAA,EAAA,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;;IAExE,QAAA,IAAI,MAAM,KAAKD,wBAAgB,CAAC,SAAS,IAAI,MAAM,KAAKA,wBAAgB,CAAC,cAAc,EAAE;IACvF,YAAA,IAAI;IACF,gBAAA,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,2BAA2B,EAAE,CAAC,CAAC;oBACtG,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAC;IACxD,oBAAA,4BAA4B,EAAE,IAAI,CAAC,aAAa,CAAC,4BAA4B;IAC7E,oBAAA,4BAA4B,EAAE,IAAI,CAAC,aAAa,CAAC,4BAA4B;IAC7E,oBAAA,6BAA6B,EAAE,IAAI,CAAC,aAAa,CAAC,6BAA6B;IAC/E,oBAAA,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB;IACpE,iBAAA,CAAC,CAAC;IACH,gBAAA,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;iBACjD;gBAAC,OAAO,CAAC,EAAE;IACV,gBAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAA,CAAE,CAAC,CAAC;iBACtD;gBACD,OAAO;aACR;;IAGD,QAAA,IAAI,MAAM,KAAKA,wBAAgB,CAAC,UAAU,EAAE;;gBAE1C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,4BAA4B,EAAE,IAAI,CAAC,aAAa,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAC7I,YAAA,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;gBAChD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACzC,YAAA,IAAI,UAAU,KAAK,QAAkB,EAAE;oBACrC,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,QAAQ,CAAc,WAAA,EAAA,UAAU,CAAI,EAAA,CAAA,CAAC,CAAC;iBAC1F;gBACD,OAAO;aACR;;IAGD,QAAA,IAAI,MAAM,KAAKA,wBAAgB,CAAC,SAAS,EAAE;IACzC,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,QAAkB,CAAC,CAAC;gBAC9C,OAAO;aACR;;;YAID,IAAI,iBAAiB,GAAkB,IAAI,CAAC;YAC5C,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,gBAAgB,EAAE;IACpD,YAAA,IAAI;IACF,gBAAA,WAAW,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,gBAAA,iBAAiB,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnE,gBAAA,WAAW,CAAC,KAAK,CAAC,6BAA6B,iBAAiB,CAAA,CAAE,CAAC,CAAC;iBACrE;gBAAC,OAAO,SAAS,EAAE;IAClB,gBAAA,WAAW,CAAC,IAAI,CAAC,sCAAsC,SAAS,CAAA,CAAE,CAAC,CAAC;;iBAErE;aACF;IAID,QAAA,IAAI,OAAgB,CAAC;YAErB,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;IAC/C,YAAA,MAAM,YAAY,GAAiB,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,mBAAmB,EAAE,IAAI,CAAiB,CAAC;IACpH,YAAA,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,CAAY,CAAC;aACjG;iBAAM;gBACL,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,CAAY,CAAC;aAC5E;;;YAKD,MAAM,eAAe,GAAG,CAAC,MAAM,KAAKA,wBAAgB,CAAC,QAAQ,IAAK,MAAM,CAAC,OAAkB,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC;;;IAInJ,QAAA,MAAM,yBAAyB,GAAG,GAAG,CAAC;;YAGtC,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,KAAI;gBAC3D,MAAM,iBAAiB,GAAG,MAAK;oBAC7B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;IACxC,oBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;wBACpD,OAAO;qBACR;;IAED,gBAAA,UAAU,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC;IAC3D,aAAC,CAAC;IACF,YAAA,iBAAiB,EAAE,CAAC;IACtB,SAAC,CAAC,CAAC;;YAGH,MAAM,8BAA8B,GAAG,OAAO,aAAsB,EAAE,OAAe,KAAI;gBACvF,OAAO,OAAO,CAAC,IAAI,CAAC;oBAClB,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;oBACrD,mBAAmB;IACpB,aAAA,CAAC,CAAC;IACL,SAAC,CAAC;IAEF,QAAA,IAAI;;;IAGF,YAAA,MAAM,8BAA8B,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;aAChE;YAAC,OAAO,CAAC,EAAE;;gBAEV,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,gCAAgC,EAAE;IACxE,gBAAA,MAAM,CAAC,CAAC;iBACT;;IAGD,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;IAC7B,gBAAA,IAAI;IACF,oBAAA,WAAW,CAAC,IAAI,CAAC,CAAA,uCAAA,EAA0C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,mBAAmB,GAAG,CAA+B,4BAAA,EAAA,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAE,CAAA,GAAG,EAAE,CAAA,8BAAA,CAAgC,EAAE,CAAC,CAAC,CAAC;wBAChO,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC/C,MAAM,YAAY,GAAiB,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAiB,CAAC;IACtG,wBAAA,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,KAAK,EAAE,YAAY,CAAY,CAAC;yBACzF;6BAAM;4BACL,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,KAAK,CAAY,CAAC;yBAC3E;;IAGD,oBAAA,MAAM,8BAA8B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;qBACpD;oBAAC,OAAO,CAAC,EAAE;;wBAEV,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,gCAAgC,EAAE;IACxE,wBAAA,MAAM,CAAC,CAAC;yBACT;wBACD,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,eAAe,CAAI,CAAA,EAAA,cAAc,GAAG,cAAc,cAAc,CAAA,CAAE,GAAG,EAAE,CAAU,OAAA,EAAA,eAAe,CAAI,EAAA,CAAA,CAAC,CAAC;qBAC/J;iBACF;qBAAM;oBACL,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,eAAe,CAAI,CAAA,EAAA,cAAc,GAAG,cAAc,cAAc,CAAA,CAAE,GAAG,EAAE,CAAU,OAAA,EAAA,eAAe,CAAI,EAAA,CAAA,CAAC,CAAC;iBAC/J;aACF;IAED,QAAA,IAAI,MAAM,KAAKA,wBAAgB,CAAC,KAAK,EAAE;IACrC,YAAA,MAAM,cAAc,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;gBAChE,IAAI,cAAc,EAAE;oBAClB,OAAO,GAAG,cAAc,CAAC;iBAC1B;aACF;;IAGD,QAAA,MAAM,cAAc,GAAmB;IACrC,YAAA,mBAAmB,EAAE,iBAAiB;aACvC,CAAC;IACF,QAAA,IAAI,MAAM,CAAC,cAAc,EAAE;IACzB,YAAA,IAAI;;;IAGF,gBAAA,IAAI,MAAM,CAAC,gBAAgB,EAAE;IAC3B,oBAAA,IAAI;IACF,wBAAA,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;4BAC9C,WAAW,CAAC,KAAK,CAAC,CAAA,sCAAA,EAAyC,MAAM,CAAe,YAAA,EAAA,WAAW,CAAE,CAAA,CAAC,CAAC;IAE/F,wBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7E,wBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;;;;;IAOxE,wBAAA,cAAc,CAAC,yBAAyB,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;4BAChG,WAAW,CAAC,KAAK,CAAC,CAAA,gCAAA,EAAmC,cAAc,CAAC,yBAAyB,CAAE,CAAA,CAAC,CAAC;;4BAGjG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACrD;wBAAC,OAAO,cAAc,EAAE;IACvB,wBAAA,WAAW,CAAC,IAAI,CAAC,4CAA4C,cAAc,CAAA,CAAE,CAAC,CAAC;;yBAEhF;qBACF;;;IAID,gBAAA,IAAI;wBACF,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;;wBAE1C,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,CAAC,EAAE;IAC3C,wBAAA,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;yBACrE;IACD,oBAAA,cAAc,CAAC,iCAAiC,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;wBACpG,WAAW,CAAC,KAAK,CAAC,CAAA,oCAAA,EAAuC,cAAc,CAAC,iCAAiC,CAAE,CAAA,CAAC,CAAC;;IAG7G,oBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;qBACjC;oBAAC,OAAO,WAAW,EAAE;IACpB,oBAAA,WAAW,CAAC,IAAI,CAAC,gDAAgD,WAAW,CAAA,CAAE,CAAC,CAAC;;IAEhF,oBAAA,IAAI;IACF,wBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;yBACjC;wBAAC,OAAO,gBAAgB,EAAE;IACzB,wBAAA,WAAW,CAAC,IAAI,CAAC,0BAA0B,gBAAgB,CAAA,CAAE,CAAC,CAAC;yBAChE;qBACF;;IAGD,gBAAA,IAAI,MAAM,CAAC,aAAa,EAAE;IACxB,oBAAA,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;qBACtC;iBACF;gBAAC,OAAO,eAAe,EAAE;IACxB,gBAAA,WAAW,CAAC,IAAI,CAAC,8BAA8B,eAAe,CAAA,CAAE,CAAC,CAAC;;iBAEnE;aACF;iBAAM;;gBAEL,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,CAAC,EAAE;oBAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,gBAAA,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACpE,gBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;iBACjC;aACF;;YAGD,QAAQ,MAAM;gBACZ,KAAKA,wBAAgB,CAAC,KAAK,CAAC;gBAC5B,KAAKA,wBAAgB,CAAC,cAAc,CAAC;gBACrC,KAAKA,wBAAgB,CAAC,YAAY;oBAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/C,MAAM;gBACR,KAAKA,wBAAgB,CAAC,OAAO;oBAC3B,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAkB,CAAC,CAAC;oBACnD,MAAM;gBACR,KAAKA,wBAAgB,CAAC,eAAe;IACnC,gBAAA,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;oBAC9F,MAAM;gBACR,KAAKA,wBAAgB,CAAC,UAAU;oBAC9B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAkB,CAAC,CAAC;oBACvD,MAAM;gBACR,KAAKA,wBAAgB,CAAC,YAAY;oBAChC;wBACE,MAAM,cAAc,GAAG,MAAa,CAAC;wBACrC,MAAM,QAAQ,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;wBAC/F,MAAM,UAAU,GAAG,cAAc,KAAA,IAAA,IAAd,cAAc,KAAd,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,cAAc,CAAE,OAA6B,CAAC;wBACjE,MAAM,gBAAgB,GAAG,cAAc,KAAA,IAAA,IAAd,cAAc,KAAd,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,cAAc,CAAE,aAAmC,CAAC;wBAC7E,MAAM,WAAW,GAAG,cAAc,KAAA,IAAA,IAAd,cAAc,KAAd,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,cAAc,CAAE,0BAAgD,CAAC;IAErF,oBAAA,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC;IAC/B,wBAAA,KAAK,EAAE,QAAQ;IACf,wBAAA,OAAO,EAAE,UAAU;IACnB,wBAAA,aAAa,EAAE,gBAAgB;IAC/B,wBAAA,0BAA0B,EAAE,WAAW,KAAA,IAAA,IAAX,WAAW,KAAX,KAAA,CAAA,GAAA,WAAW,GAAI,MAAO;IACnD,qBAAA,CAAC,CAAC;wBAEH,IAAI,GAAG,EAAE;IACP,wBAAA,WAAW,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAA,CAAE,CAAC,CAAC;IACvC,wBAAA,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;yBAClF;6BAAM;IACL,wBAAA,WAAW,CAAC,GAAG,CAAC,CAAA,eAAA,CAAiB,CAAC,CAAC;yBACpC;qBACF;oBACD,MAAM;gBACR,KAAKA,wBAAgB,CAAC,QAAQ;;;IAG5B,gBAAA,MAAM,OAAO,GAAI,MAAc,CAAC,UAAU,CAAC;IAC3C,gBAAA,MAAM,SAAS,GAAI,MAAc,CAAC,QAAkB,CAAC;oBACrD,IAAI,SAAS,EAAE;IACb,oBAAA,IAAI;;IAEF,wBAAA,MAAM,MAAM,GAAG,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,KAAI,CAAC,CAAC;IACpC,wBAAA,MAAM,SAAS,GAAG,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,SAAS,KAAI,MAAM,CAAC;IAC/C,wBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;4BAChE,WAAW,CAAC,GAAG,CAAC,CAAA,0BAAA,EAA6B,MAAM,CAAgB,aAAA,EAAA,SAAS,CAAG,CAAA,CAAA,CAAC,CAAC;IACjF,wBAAA,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;yBACvF;wBAAC,OAAO,KAAK,EAAE;IACd,wBAAA,WAAW,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAA,CAAE,CAAC,CAAC;IACxD,wBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAA,CAAE,CAAC,CAAC;yBACrD;qBACF;yBAAM;IACL,oBAAA,WAAW,CAAC,GAAG,CAAC,CAAA,uBAAA,CAAyB,CAAC,CAAC;IAC3C,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,CAAuB,CAAC,CAAC;qBAC1C;oBACD,MAAM;gBAER,KAAKA,wBAAgB,CAAC,qBAAqB;oBACzC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACvD,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAkB,CAAC,EAAE;wBAClD,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,aAAa,CAAe,YAAA,EAAA,QAAQ,CAAI,EAAA,CAAA,CAAC,CAAC;qBAChG;oBACD,MAAM;gBACR,KAAKA,wBAAgB,CAAC,kBAAkB;oBACtC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAEpD,gBAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;wBAC3B,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,QAAQ,CAAe,YAAA,EAAA,UAAU,CAAI,EAAA,CAAA,CAAC,CAAC;qBAC7F;oBACD,MAAM;gBACR,KAAKA,wBAAgB,CAAC,KAAK;oBACzB,IAAI,OAAO,EAAE;wBACX,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;qBAChD;yBAAM;IACL,oBAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;qBAC1E;oBACD,MAAM;gBACR,KAAKA,wBAAgB,CAAC,iBAAiB;;oBAErC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAkB,CAAC,CAAC;IAClD,gBAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,SAAS,CAAC;IAC9C,gBAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC;oBAChD,MAAM,WAAW,GAAG,GAAG,CAAC;IAExB,gBAAA,IAAI;IACF,oBAAA,WAAW,CAAC,GAAG,CAAC,6CAA6C,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAE1I,oBAAA,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE;;4BAEvD,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAe,EAAE,UAAqD,KAAI;gCAChG,EAAE,CAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC,CAAC;6BAC3F,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;;4BAG5H,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;;4BAGnC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAe,KAAI;IAC9D,4BAAA,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;6BAC/D,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;;IAG5D,wBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC/E,wBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAElF,wBAAA,IAAI,cAAc,IAAI,eAAe,EAAE;IACrC,4BAAA,WAAW,CAAC,GAAG,CAAC,uDAAuD,OAAO,CAAA,CAAE,CAAC,CAAC;gCAClF,MAAM;6BACP;IAED,wBAAA,IAAI,OAAO,GAAG,WAAW,EAAE;IACzB,4BAAA,WAAW,CAAC,GAAG,CAAC,0CAA0C,OAAO,CAAA,YAAA,EAAe,gBAAgB,CAAK,EAAA,EAAA,iBAAiB,eAAe,YAAY,CAAC,SAAS,CAAK,EAAA,EAAA,YAAY,CAAC,UAAU,CAAA,cAAA,CAAgB,CAAC,CAAC;6BAC1M;iCAAM;IACL,4BAAA,WAAW,CAAC,IAAI,CAAC,qCAAqC,WAAW,CAAA,qBAAA,EAAwB,gBAAgB,CAAK,EAAA,EAAA,iBAAiB,cAAc,YAAY,CAAC,SAAS,CAAK,EAAA,EAAA,YAAY,CAAC,UAAU,CAAA,CAAA,CAAG,CAAC,CAAC;6BACrM;yBACF;qBACF;oBAAC,OAAO,CAAC,EAAE;IACV,oBAAA,WAAW,CAAC,KAAK,CAAC,qDAAqD,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;qBAClK;oBACD,MAAM;gBACR,KAAKA,wBAAgB,CAAC,YAAY;IAChC,gBAAA,MAAM,OAAO,CAAC,aAAa,CAAC,QAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;oBAC3G,MAAM;gBACR,KAAKA,wBAAgB,CAAC,aAAa;oBACjC,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACrD,gBAAA,OAAO,aAAa,CAAC;gBACvB,KAAKA,wBAAgB,CAAC,QAAQ;oBAC5B,MAAM,YAAY,GAAG,QAAkB,CAAC;;oBAExC,MAAM,eAAe,GAAI,MAAM,CAAC,eAA0B,IAAI,GAAG,CAAC;oBAClE,MAAM,OAAO,GAAI,MAAM,CAAC,OAAkB,IAAI,KAAK,CAAC;;;oBAIpD,MAAM,yBAAyB,GAAG,MAAK;IACrC,oBAAA,MAAM,yBAAyB,GAAG,EAAE,CAAC;wBACrC,OAAO,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,KAAI;4BACtC,MAAM,iBAAiB,GAAG,MAAK;gCAC7B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;IACxC,gCAAA,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;oCACpD,OAAO;iCACR;IACD,4BAAA,UAAU,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC;IAC3D,yBAAC,CAAC;IACF,wBAAA,iBAAiB,EAAE,CAAC;IACtB,qBAAC,CAAC,CAAC;IACL,iBAAC,CAAC;oBAEF,IAAI,WAAW,GAAG,KAAK,CAAC;oBACxB,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,gBAAA,MAAM,mBAAmB,GAAG,yBAAyB,EAAE,CAAC;IAExD,gBAAA,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,IAAI,OAAO,EAAE;IAC7D,oBAAA,IAAI;;IAEF,wBAAA,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;4BAE5C,IAAI,SAAS,EAAE;;gCAEb,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;;IAG/C,4BAAA,IAAI,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE;oCACzC,WAAW,GAAG,IAAI,CAAC;IACnB,gCAAA,WAAW,CAAC,GAAG,CAAC,mDAAmD,WAAW,CAAA,CAAA,CAAG,CAAC,CAAC;oCACnF,MAAM;iCACP;6BACF;;;4BAID,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,IAAI,OAAO,EAAE;IAC1C,4BAAA,MAAM,aAAa,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,CAAC;gCAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IAEpE,4BAAA,IAAI,kBAAkB,GAAG,CAAC,EAAE;IAC1B,gCAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACd,oCAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;qCACpC;;oCAED,MAAM,OAAO,CAAC,IAAI,CAAC;IACjB,oCAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;wCAC5C,mBAAmB;IACpB,iCAAA,CAAC,CAAC;iCACJ;6BACF;yBACF;wBAAC,OAAO,CAAC,EAAE;;4BAEV,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,gCAAgC,EAAE;IACxE,4BAAA,MAAM,CAAC,CAAC;6BACT;IACD,wBAAA,MAAM,IAAI,KAAK,CAAC,oEAAoE,eAAe,CAAA,EAAG,cAAc,GAAG,CAAe,YAAA,EAAA,cAAc,EAAE,GAAG,EAAE,CAAA,CAAE,CAAC,CAAC;yBAChK;qBACF;;oBAGD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;IACxC,oBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;qBACnD;;oBAGD,IAAI,CAAC,WAAW,EAAE;IAChB,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,YAAY,CAAA,YAAA,EAAe,WAAW,CAAA,QAAA,EAAW,OAAO,CAAA,oBAAA,EAAuB,eAAe,CAAA,EAAA,CAAI,CAAC,CAAC;qBACxJ;oBACD,MAAM;IACR,YAAA;IACE,gBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAA,CAAE,CAAC,CAAC;aAClD;SACF;IAED;;;;;;IAMG;IACI,IAAA,WAAW,CAAC,MAAc,EAAE,SAAiB,CAAC,EAAE,YAAoB,MAAM,EAAA;IAC/E,QAAA,MAAM,GAAG,GAAG,IAAIK,IAAY,CAAC;gBAC3B,SAAS;gBACT,MAAM;gBACN,MAAM;IACP,SAAA,CAAC,CAAC;IACH,QAAA,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;SACvB;QAEO,MAAM,UAAU,CAAC,eAAuB,EAAE,aAAmC,EAAE,gBAA4B,GAAA,KAAK,EAAE,YAAA,GAAoC,IAAI,EAAA;IAChK,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACd,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACpC;IACD,QAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,aAAa,CAAC;IACpE,YAAA,WAAW,CAAC,KAAK,CAAC,CAAA,0BAAA,EAA6B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAE,CAAA,CAAC,CAAC;IAChF,YAAA,IAAI,YAAqB,CAAC;IAC1B,YAAA,IAAI,gBAAwB,CAAC;IAC7B,YAAA,IAAI,EAAE,CAAC;IACP,YAAA,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,QAAO,YAAY;IACjB,gBAAA,KAAK,MAAM,CAAC;IACZ,gBAAA,KAAK,aAAa,CAAC;IACnB,gBAAA,KAAK,MAAM,CAAC;IACZ,gBAAA,KAAK,aAAa,CAAC;IACnB,gBAAA,KAAK,IAAI,CAAC;IACV,gBAAA,KAAK,KAAK,CAAC;IACX,gBAAA,KAAK,OAAO;wBACV,WAAW,CAAC,KAAK,CAAC,CAAA,qBAAA,EAAwB,YAAY,CAAW,QAAA,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC;IAC1E,oBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;IAC7B,wBAAA,MAAM,eAAe,GAAyB,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;4BACrH,IAAI,CAAC,gBAAgB,EAAE;gCACrB,WAAW,CAAC,KAAK,CAAC,CAAuB,oBAAA,EAAA,MAAO,eAA2B,CAAC,KAAK,EAAE,CAAW,SAAA,CAAA,CAAC,CAAC;IAChG,4BAAA,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,MAAO,eAA2B,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE;;IAEnF,gCAAA,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;oCACxD,WAAW,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAK,EAAA,EAAA,IAAI,CAAE,CAAA,CAAC,CAAC;iCACzC;6BACF;IACD,wBAAA,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;yBACnC;6BACI;4BACH,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;yBACzE;IACH,gBAAA,KAAK,OAAO;IACV,oBAAA,IAAI,aAAa,CAAC,QAAQ,KAAK,WAAW,EAAE;4BAC1C,WAAW,CAAC,KAAK,CAAC,CAAwB,qBAAA,EAAA,aAAa,CAAC,QAAQ,CAAoB,iBAAA,EAAA,cAAc,CAAE,CAAA,CAAC,CAAC;4BACtG,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAwB,EAAE,KAAK,EAAC,YAAY,CAAY,CAAC;4BAC/F,EAAE,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5C,wBAAA,WAAW,CAAC,KAAK,CAAC,gDAAgD,EAAE,CAAA,CAAE,CAAC,CAAC;IACxE,wBAAA,gBAAgB,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAE,GAAG,CAAI,CAAA,EAAA,EAAE,EAAE,CAAC;IAChE,wBAAA,WAAW,CAAC,KAAK,CAAC,gCAAgC,gBAAgB,CAAA,CAAE,CAAC,CAAC;4BACtE,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;yBACjF;IACI,yBAAA,IAAI,aAAa,CAAC,QAAQ,KAAK,UAAU,EAAE;4BAC9C,WAAW,CAAC,KAAK,CAAC,CAAwB,qBAAA,EAAA,aAAa,CAAC,QAAQ,CAAoB,iBAAA,EAAA,cAAc,CAAE,CAAA,CAAC,CAAC;4BACtG,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAwB,EAAE,KAAK,EAAE,YAAY,CAAY,CAAC;4BAChG,EAAE,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3C,wBAAA,WAAW,CAAC,KAAK,CAAC,+CAA+C,EAAE,CAAA,CAAE,CAAC,CAAC;IACvE,wBAAA,gBAAgB,GAAG,QAAQ,GAAG,qBAAqB,EAAE,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAE,GAAG,CAAqB,kBAAA,EAAA,EAAE,IAAI,CAAC;IACtG,wBAAA,WAAW,CAAC,KAAK,CAAC,gCAAgC,gBAAgB,CAAA,CAAE,CAAC,CAAC;4BACtE,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;yBACjF;6BACI;4BACH,MAAM,IAAI,KAAK,CAAC,CAAA,4BAAA,EAA+B,aAAa,CAAC,QAAQ,CAAE,CAAA,CAAC,CAAC;yBAC1E;IACH,gBAAA;IACE,oBAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAA,CAAE,CAAC,CAAC;iBACrE;aACF;;YAEH,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;SAChF;IAEO,IAAA,iBAAiB,CAAC,QAAgB,EAAE,gBAAyB,EAAE,eAAoC,IAAI,EAAA;IAC7G,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACd,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACpC;YACD,IAAI,gBAAgB,EAAE;IACpB,YAAA,WAAW,CAAC,KAAK,CAAC,yDAAyD,QAAQ,CAAA,CAAE,CAAC,CAAC;gBACvF,IAAI,YAAY,EAAE;IAChB,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,0EAAA,CAA4E,CAAC,CAAC;iBAC/F;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;aACzC;IACD,QAAA,WAAW,CAAC,KAAK,CAAC,sBAAsB,YAAY,GAAG,CAAA,sBAAA,EAAyB,QAAQ,CAAI,EAAA,CAAA,GAAG,CAAA,cAAA,EAAiB,QAAQ,CAAI,EAAA,CAAA,CAAA,CAAE,CAAC,CAAC;YAChI,OAAO,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACpF;IAGD;;;;;;IAME;IACM,IAAA,MAAM,SAAS,CAAC,OAAgB,EAAE,aAA4B,IAAI,EAAA;IACxE,QAAA,IAAI;IACF,YAAA,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAe,KAAI;oBACzC,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACtD,gBAAA,OAAO,CAAC,EAAE,GAAG,mBAAmB,CAAC;IACjC,gBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;;;;;SAQvB,CAAC;oBACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,gBAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;oBACxC,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxD,gBAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;AAEhB,gBAAA,EAAA,IAAI,CAAC,CAAC,CAAA;AACP,eAAA,EAAA,IAAI,CAAC,CAAC,CAAA;AACJ,iBAAA,EAAA,IAAI,CAAC,KAAK,CAAA;AACT,kBAAA,EAAA,IAAI,CAAC,MAAM,CAAA;;;SAGtB,CAAC;IACF,gBAAA,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACjC,aAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;aACtB;YAAC,OAAO,CAAC,EAAE;IACV,YAAA,WAAW,CAAC,GAAG,CAAC,6CAA6C,EAAE,CAAC,CAAC,CAAC;aACnE;YACD,IAAI,UAAU,EAAE;gBACd,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAe,EAAE,UAAkB,KAAI;oBAC7D,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;oBACrE,IAAI,OAAO,EAAE;IACX,oBAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;wBACxC,MAAM,YAAY,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3D,oBAAA,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;AAEnB,kBAAA,EAAA,IAAI,CAAC,CAAC,CAAA;mBACP,IAAI,CAAC,CAAC,GAAG,EAAE,CAAA;;;;;;;;;;WAUnB,CAAC;IACF,oBAAA,YAAY,CAAC,WAAW,GAAG,UAAU,CAAC;;IAGtC,oBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;IACf,wBAAA,YAAY,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC;yBAC1D;IAED,oBAAA,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;qBACnC;iBACF,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;aAClC;SACF;;IAED;;;;;IAKE;QACM,MAAM,WAAW,CAAC,OAAgB,EAAA;IACxC,QAAA,IAAI;IACF,YAAA,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAe,KAAI;oBACzC,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;oBACrE,IAAI,OAAO,EAAE;wBACX,OAAO,CAAC,MAAM,EAAE,CAAC;qBAClB;IACH,aAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;aACtB;YAAC,OAAO,CAAC,EAAE;IACV,YAAA,WAAW,CAAC,GAAG,CAAC,+CAA+C,EAAE,CAAC,CAAC,CAAC;aACrE;SACF;;IAED;;;;;;IAME;IACM,IAAA,MAAM,UAAU,CAAC,OAAgB,EAAE,KAAa,EAAA;IACtD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACd,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACpC;IACD,QAAA,IAAI;IACF,YAAA,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;gBACnF,OAAO;aACR;YAAC,OAAO,GAAG,EAAE;IACZ,YAAA,WAAW,CAAC,IAAI,CAAC,2DAA2D,EAAE,GAAG,CAAC,CAAC;aACpF;;IAED,QAAA,IAAI;IACF,YAAA,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;gBAC7E,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrC,OAAO;aACR;YAAC,OAAO,GAAG,EAAE;IACZ,YAAA,WAAW,CAAC,IAAI,CAAC,oEAAoE,EAAE,GAAG,CAAC,CAAC;aAC7F;SACF;;QAEO,MAAM,cAAc,CAAC,KAAa,EAAA;IACxC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACd,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACpC;IACD;;;;;IAKI;;IAEJ,QAAA,IAAI;;gBAEF,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACtC,OAAO;aACR;YAAC,OAAO,GAAG,EAAE;IACZ,YAAA,WAAW,CAAC,IAAI,CAAC,oDAAoD,EAAE,GAAG,CAAC,CAAC;aAC7E;SACF;IAED;;;;;;;IAOE;IACM,IAAA,MAAM,iBAAiB,CAAC,OAAgB,EAAE,MAAyB,EAAA;IACzE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACd,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACpC;;IAED,QAAA,IAAI;IACF,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;IACtB,gBAAA,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;oBAChG,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAC;IACxD,oBAAA,4BAA4B,EAAE,IAAI,CAAC,aAAa,CAAC,4BAA4B;IAC7E,oBAAA,4BAA4B,EAAE,IAAI,CAAC,aAAa,CAAC,4BAA4B;IAC7E,oBAAA,6BAA6B,EAAE,IAAI,CAAC,aAAa,CAAC,6BAA6B;IAC/E,oBAAA,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB;IACpE,iBAAA,CAAC,CAAC;IACH,gBAAA,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;IAChD;;;;;IAKI;iBACL;IAAM,iBAAA,IAAI,MAAM,KAAK,OAAO,EAAE;IAC7B,gBAAA,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;iBAC9E;qBAAM;IACL,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAA,CAAE,CAAC,CAAC;iBACxD;gBACD,OAAO;aACR;YAAC,OAAO,GAAG,EAAE;gBACZ,WAAW,CAAC,IAAI,CAAC,CAAA,yCAAA,EAA4C,MAAM,CAAoB,iBAAA,EAAA,MAAM,CAAI,EAAA,CAAA,CAAC,CAAC;aACpG;;IAED,QAAA,IAAI;IACF,YAAA,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAC,CAAC;gBACjG,IAAI,IAAI,EAAE;IACR,gBAAA,IAAI,MAAM,KAAK,OAAO,EAAE;;wBAEtB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;wBAC9C,IAAI,YAAY,EAAE;IAChB,wBAAA,WAAW,CAAC,GAAG,CAAC,CAA2E,wEAAA,EAAA,YAAY,CAAC,KAAK,GAAG,CAAC,CAAA,EAAA,EAAK,YAAY,CAAC,MAAM,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;4BAClJ,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;yBAC7E;6BAAM;IACL,wBAAA,WAAW,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;IAC3G,wBAAA,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;yBAC5C;wBACD,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACpC,oBAAA,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;qBAC7C;IAAM,qBAAA,IAAI,MAAM,KAAK,OAAO,EAAE;IAC7B,oBAAA,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qBAC/E;oBACD,OAAO;iBACR;qBAAM;IACL,gBAAA,WAAW,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;iBAC/D;aACF;YAAC,OAAO,IAAI,EAAE;IACb,YAAA,WAAW,CAAC,IAAI,CAAC,+CAA+C,MAAM,CAAA,+BAAA,CAAiC,CAAC,CAAC;aAC1G;;IAED,QAAA,IAAI;IACF,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;IACtB,gBAAA,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAI;wBAC5B,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;IAC/C,wBAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE;IACjC,4BAAA,OAAO,EAAE,IAAI;IACb,4BAAA,UAAU,EAAE,IAAI;IAChB,4BAAA,IAAI,EAAE,MAAM;IACb,yBAAA,CAAC,CAAC;IACH,wBAAA,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1B,qBAAC,CAAC,CAAC;qBACJ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;iBAC7D;IAAM,iBAAA,IAAI,MAAM,KAAK,OAAO,EAAE;IAC7B,gBAAA,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAI;IAC5B,oBAAA,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;IAC7D,wBAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE;IACjC,4BAAA,OAAO,EAAE,IAAI;IACb,4BAAA,UAAU,EAAE,IAAI;IAChB,4BAAA,IAAI,EAAE,MAAM;IACb,yBAAA,CAAC,CAAC;IACH,wBAAA,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1B,qBAAC,CAAC,CAAC;qBACJ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;iBAC7D;aACF;YAAC,OAAO,IAAI,EAAE;IACb,YAAA,WAAW,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAA,gBAAA,CAAkB,CAAC,CAAC;;IAEtE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAA,eAAA,CAAiB,CAAC,CAAC;aACpE;SACF;;IAED;;;;;;;IAOE;QACM,MAAM,YAAY,CAAC,OAAgB,EAAA;IACzC,QAAA,IAAI,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE;IACd,YAAA,IAAI;IACF,gBAAA,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;iBACxC;gBAAC,OAAO,GAAG,EAAE;;iBAEb;aACF;YACD,IAAI,CAAC,SAAS,EAAE;IACd,YAAA,IAAI;oBACF,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;iBACzD;gBAAC,OAAO,GAAG,EAAE;;iBAEb;aACF;YACD,IAAI,CAAC,SAAS,EAAE;gBACd,SAAS,GAAG,EAAE,CAAC;aAChB;;YAED,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SAC9C;;IAEO,IAAA,MAAM,cAAc,CAAC,OAAgB,EAAE,KAAa,EAAA;IAC1D,QAAA,IAAI;IACF,YAAA,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;gBACnF,OAAO;aACR;YAAC,OAAO,GAAG,EAAE;IACZ,YAAA,WAAW,CAAC,IAAI,CAAC,+DAA+D,EAAE,GAAG,CAAC,CAAC;aACxF;;IAED,QAAA,IAAI;IACF,YAAA,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAoB,EAAE,KAAa,KAAI;IAC7D,gBAAA,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;IACjB,gBAAA,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxD,gBAAA,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,aAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;aACpE;YAAC,OAAO,GAAG,EAAE;IACZ,YAAA,WAAW,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAC;aAC5E;SACF;IACF,CAAA;;IC/6BD;IAkIA;;IAEG;UACU,kBAAkB,CAAA;IAC7B;;IAEG;QACK,OAAO,eAAe,CAAC,MAAc,EAAA;YAC3C,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SACnC;IAEO,IAAA,aAAa,qBAAqB,CAAC,QAAkB,EAAA;IAC3D,QAAA,IAAI;gBACF,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACzD,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;IAC3D,gBAAA,MAAM,SAAS,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC7C,gBAAA,OAAO,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;iBACzE;IAED,YAAA,IAAI,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;;IAEtC,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE;oBAC1B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;iBACjD;IACD,YAAA,OAAO,SAAS,CAAC;aAClB;YAAC,OAAO,CAAC,EAAE;;IAEV,YAAA,OAAO,CAAQ,KAAA,EAAA,QAAQ,CAAC,MAAM,EAAE,CAAC;aAClC;SACF;IAED;;IAEG;QACK,aAAa,iBAAiB,CACpC,UAAkB,EAClB,QAAgB,EAChB,MAAc,EAAA;YAEd,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;;IAEnD,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,aAAa,CAAkB,eAAA,EAAA,UAAU,eAAe,CAAC;IAExE,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;IAChC,YAAA,MAAM,EAAE,KAAK;IACb,YAAA,OAAO,EAAE;oBACP,eAAe,EAAE,CAAS,MAAA,EAAA,QAAQ,CAAE,CAAA;IACpC,gBAAA,cAAc,EAAE,kBAAkB;IACnC,aAAA;IACF,SAAA,CAAC,CAAC;IAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC7D,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,yBAAA,EAA4B,UAAU,CAAA,EAAA,EAAK,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,CAAC;aAC5F;IAED,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;SACxB;IAED;;IAEG;QACK,aAAa,kBAAkB,CACrC,WAAmB,EACnB,QAAgB,EAChB,MAAc,EAAA;YAEd,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;;IAEnD,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,aAAa,CAAgB,aAAA,EAAA,WAAW,GAAG,CAAC;IAE3D,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;IAChC,YAAA,MAAM,EAAE,KAAK;IACb,YAAA,OAAO,EAAE;oBACP,eAAe,EAAE,CAAS,MAAA,EAAA,QAAQ,CAAE,CAAA;IACpC,gBAAA,cAAc,EAAE,kBAAkB;IACnC,aAAA;IACF,SAAA,CAAC,CAAC;IAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC7D,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,WAAW,CAAA,EAAA,EAAK,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,CAAC;aAC/F;IAED,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;SACxB;IAED;;IAEG;QACK,aAAa,gBAAgB,CACnC,SAAiB,EACjB,QAAgB,EAChB,MAAc,EAAA;YAEd,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;;IAEnD,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,aAAa,CAAa,UAAA,EAAA,SAAS,GAAG,CAAC;IAEtD,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;IAChC,YAAA,MAAM,EAAE,KAAK;IACb,YAAA,OAAO,EAAE;oBACP,eAAe,EAAE,CAAS,MAAA,EAAA,QAAQ,CAAE,CAAA;IACpC,gBAAA,cAAc,EAAE,kBAAkB;IACnC,aAAA;IACF,SAAA,CAAC,CAAC;IAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC7D,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,SAAS,CAAA,EAAA,EAAK,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,CAAC;aAC1F;IAED,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;SACxB;IAED;;IAEG;QACK,aAAa,qBAAqB,CACxC,SAAiB,EACjB,QAAgB,EAChB,MAAc,EAAA;YAEd,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;;IAEnD,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,aAAa,CAA0B,uBAAA,EAAA,SAAS,EAAE,CAAC;IAElE,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;IAChC,YAAA,MAAM,EAAE,KAAK;IACb,YAAA,OAAO,EAAE;oBACP,eAAe,EAAE,CAAS,MAAA,EAAA,QAAQ,CAAE,CAAA;IACpC,gBAAA,cAAc,EAAE,kBAAkB;IACnC,aAAA;IACF,SAAA,CAAC,CAAC;IAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC7D,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sCAAA,EAAyC,SAAS,CAAA,EAAA,EAAK,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,CAAC;aACxG;IAED,QAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;;IAEnC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;IACvB,YAAA,OAAO,IAAI,CAAC;aACb;IACD,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC/C,OAAO,IAAI,CAAC,OAAO,CAAC;aACrB;IACD,QAAA,OAAO,EAAE,CAAC;SACX;IAED;;IAEG;QACK,OAAO,6CAA6C,CAC1D,mBAAyC,EAAA;IAEzC,QAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,kBAAkB,KAAI;;IAEpD,YAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAA0B,CAAC;;gBAG7D,IAAI,aAAa,GAAyB,IAAI,CAAC;IAC/C,YAAA,IAAI,kBAAkB,CAAC,eAAe,EAAE;IACtC,gBAAA,aAAa,GAAG,kBAAkB,CAAC,eAAgC,CAAC;iBACrE;;IAGD,YAAA,MAAM,WAAW,GAAuB,kBAAkB,CAAC,WAAW,IAAI,IAAI,CAAC;;;IAI/E,YAAA,MAAM,WAAW,GAAgB;IAC/B,gBAAA,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE;oBAC5B,aAAa,EAAE,kBAAkB,CAAC,aAAa;IAC/C,gBAAA,MAAM,EAAE,MAAM;IACd,gBAAA,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,IAAI,EAAE;IAC3C,gBAAA,WAAW,EAAE,WAAW;oBACxB,eAAe,EAAE,kBAAkB,CAAC,eAAe;oBACnD,YAAY,EAAE,kBAAkB,CAAC,YAAY;IAC7C,gBAAA,cAAc,EAAE,kBAAkB,CAAC,cAAc,IAAI,SAAS;IAC9D,gBAAA,qBAAqB,EAAE,kBAAkB,CAAC,qBAAqB,IAAI,SAAS;oBAC5E,GAAG,EAAE,kBAAkB,CAAC,GAAG;oBAC3B,SAAS,EAAE,kBAAkB,CAAC,qBAAqB,IAAI,IAAI,CAAC,GAAG,EAAE;oBACjE,mBAAmB,EAAE,kBAAkB,CAAC,mBAAmB;oBAC3D,iCAAiC,EAAE,kBAAkB,CAAC,iCAAiC;oBACvF,yBAAyB,EAAE,kBAAkB,CAAC,yBAAyB;IACvE,gBAAA,kBAAkB,EAAE,kBAAkB,CAAC,kBAAkB,IAAI,EAAE;oBAC/D,WAAW,EAAE,kBAAkB,CAAC,WAAW;oBAC3C,UAAU,EAAE,kBAAkB,CAAC,UAAU;IACzC,gBAAA,cAAc,EAAE,kBAAkB,CAAC,cAAc,IAAI,IAAI;oBACzD,UAAU,EAAE,kBAAkB,CAAC,UAAU;oBACzC,iBAAiB,EAAE,kBAAkB,CAAC,iBAAiB;oBACvD,4BAA4B,EAAE,kBAAkB,CAAC,4BAA4B;oBAC7E,aAAa,EAAE,kBAAkB,CAAC,aAAa;oBAC/C,UAAU,EAAE,kBAAkB,CAAC,UAAU;oBACzC,qBAAqB,EAAE,kBAAkB,CAAC,qBAAqB;oBAC/D,aAAa,EAAE,kBAAkB,CAAC,aAAa;IAC/C,gBAAA,eAAe,EAAE,aAAa;IAC9B,gBAAA,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,kBAAkB,CAAC,KAAK;oBAC/B,IAAI,EAAE,kBAAkB,CAAC,IAAI;oBAC7B,MAAM,EAAE,kBAAkB,CAAC,MAAM;oBACjC,oBAAoB,EAAE,kBAAkB,CAAC,oBAAoB;IAC7D,gBAAA,MAAM,EAAE,SAAS;oBACjB,aAAa,EAAE,kBAAkB,CAAC,aAAa;oBAC/C,UAAU,EAAE,kBAAkB,CAAC,UAAU;IACzC,gBAAA,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,IAAI,KAAK;iBAC/C,CAAC;IAEF,YAAA,OAAO,WAAW,CAAC;IACrB,SAAC,CAAC,CAAC;SACJ;IAED;;IAEG;IACK,IAAA,OAAO,0BAA0B,GAAA;YACvC,OAAO;IACL,YAAA,GAAG,yBAAyB;;IAE5B,YAAA,oBAAoB,EAAE,IAAI;IAC1B,YAAA,UAAU,EAAE,MAAM;IAClB,YAAA,iBAAiB,EAAE,KAAK;aACzB,CAAC;SACH;IAED;;IAEG;IACK,IAAA,OAAO,kBAAkB,GAAA;YAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;SACrC;IAED;;;IAGG;QACK,OAAO,iBAAiB,CAAC,QAAqD,EAAA;IACpF,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAElD,IAAI,CAAC,QAAQ,EAAE;IACb,YAAA,OAAO,eAAe,CAAC;aACxB;IAED,QAAA,MAAM,KAAK,GAAG,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;IACpH,QAAA,MAAM,MAAM,GAAG,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;IAEzH,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SAC1B;IAED;;;IAGG;QACH,aAAa,uBAAuB,CAClC,UAAkB,EAClB,QAAgB,EAChB,MAAc,EACd,OAAwB,EAAA;;YAGxB,IAAI,CAAC,QAAQ,EAAE;IACb,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;aAC1C;YACD,IAAI,CAAC,MAAM,EAAE;IACX,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;aACxC;;IAGD,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;;IAGhF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,6CAA6C,CAAC,YAAY,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;;IAGzG,QAAA,MAAM,QAAQ,GAAG,CAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,gBAAgB,KAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAChF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,QAAQ,KAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;;IAGpF,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,IAAI,EAAE,CAAC;;IAG/C,QAAA,MAAM,WAAW,GAAyB;gBACxC,YAAY,EAAE,YAAY,CAAC,IAAI;IAC/B,YAAA,YAAY,EAAE,YAAY;IAC1B,YAAA,IAAI,EAAE,IAAI;aACX,CAAC;YAEF,OAAO,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACtD;IAED;;;IAGG;QACH,aAAa,wBAAwB,CACnC,WAAmB,EACnB,QAAgB,EAChB,MAAc,EACd,OAAwB,EAAA;;YAGxB,IAAI,CAAC,QAAQ,EAAE;IACb,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;aAC1C;YACD,IAAI,CAAC,MAAM,EAAE;IACX,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;aACxC;;IAGD,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;;IAGnF,QAAA,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,QAAQ,KAAI;IAC7C,YAAA,IAAI;IACF,gBAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAC7C,QAAQ,CAAC,EAAE,EACX,QAAQ,EACR,MAAM,EACN,OAAO,CACR,CAAC;oBACF,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,EAAE;wBACvB,YAAY,EAAE,QAAQ,CAAC,IAAI;IAC3B,oBAAA,IAAI,EAAE,IAAI;qBACX,CAAC;iBACH;gBAAC,OAAO,KAAU,EAAE;;IAEnB,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,qCAAA,EAAwC,QAAQ,CAAC,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC,CAAC;oBACvF,MAAM,KAAK,CAAC;iBACb;aACF,CAAC,CACH,CAAC;YAEF,OAAO;gBACL,WAAW,EAAE,aAAa,CAAC,EAAE;gBAC7B,aAAa,EAAE,aAAa,CAAC,IAAI;IACjC,YAAA,SAAS,EAAE,eAAe;aAC3B,CAAC;SACH;IAED;;;IAGG;QACH,aAAa,sBAAsB,CACjC,SAAiB,EACjB,QAAgB,EAChB,MAAc,EACd,OAAwB,EAAA;;YAGxB,IAAI,CAAC,QAAQ,EAAE;IACb,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;aAC1C;YACD,IAAI,CAAC,MAAM,EAAE;IACX,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;aACxC;;YAGD,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACjD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;gBAClD,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;IACxD,SAAA,CAAC,CAAC;IAEH,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,CAAkC,+BAAA,EAAA,WAAW,CAAC,IAAI,CAAU,OAAA,EAAA,SAAS,CAAG,CAAA,CAAA,CAAC,CAAC;aAC3F;;IAGD,QAAA,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,SAAS,CAAC,GAAG,CAAC,OAAO,QAAQ,KAAI;IAC/B,YAAA,IAAI;IACF,gBAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAC7C,QAAQ,CAAC,EAAE,EACX,QAAQ,EACR,MAAM,EACN,OAAO,CACR,CAAC;oBACF,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,EAAE;wBACvB,YAAY,EAAE,QAAQ,CAAC,IAAI;IAC3B,oBAAA,IAAI,EAAE,IAAI;qBACX,CAAC;iBACH;gBAAC,OAAO,KAAU,EAAE;;IAEnB,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,qCAAA,EAAwC,QAAQ,CAAC,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC,CAAC;oBACvF,MAAM,KAAK,CAAC;iBACb;aACF,CAAC,CACH,CAAC;YAEF,OAAO;gBACL,SAAS,EAAE,WAAW,CAAC,EAAE;gBACzB,WAAW,EAAE,WAAW,CAAC,IAAI;IAC7B,YAAA,SAAS,EAAE,eAAe;aAC3B,CAAC;SACH;IACF;;ICxgBD,MAAM,SAAS,GAAGC,cAAS,CAACC,kBAAI,CAAC,CAAC;IA+ClC;;IAEG;IACH,SAAS,qBAAqB,CAAC,GAAW,EAAA;QACxC,IAAI,CAACC,aAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvBA,aAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SACxC;IACH,CAAC;IAED;;IAEG;IACH,SAAS,sBAAsB,CAAC,WAAmB,EAAE,aAAsB,EAAA;IACzE,IAAA,MAAM,OAAO,GAAGC,eAAI,CAAC,IAAI,CAACC,aAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACnE,IAAI,aAAa,EAAE;IACjB,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7C,QAAA,OAAOD,eAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAG,EAAA,WAAW,CAAI,CAAA,EAAA,aAAa,CAAE,CAAA,CAAC,CAAC;SAC9D;QACD,OAAOA,eAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;IAEG;IACH,SAAS,eAAe,CAAC,YAAoB,EAAA;QAC3C,MAAM,QAAQ,GAAGA,eAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,CAACD,aAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;IAC5B,QAAA,OAAO,CAAC,CAAC;SACV;QAED,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAGA,aAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAE/E,IAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,MAAM,QAAQ,GAAGC,eAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAGD,aAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;;YAGnD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE9C,QAAA,IAAI,WAAW;IAAE,YAAA,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC;IAClD,QAAA,IAAI,SAAS;IAAE,YAAA,UAAU,IAAI,SAAS,CAAC,MAAM,CAAC;;IAG9C,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE;gBAC9B,UAAU,IAAI,CAAC,CAAC;aACjB;SACF;IAED,IAAA,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;IAEG;IACH,SAAS,yBAAyB,CAAC,MAAc,EAAA;;QAE/C,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAEnG,IAAI,YAAY,EAAE;YAChB,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;aACxC,CAAC;SACH;;IAGD,IAAA,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;IACjD,IAAA,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;IACjD,IAAA,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;IAEzD,IAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACrC,CAAC;IAED;;IAEG;IACH,SAAS,2BAA2B,CAAC,YAAoB,EAAA;IACvD,IAAA,IAAI;YACF,MAAM,SAAS,GAAGC,eAAI,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAC/D,QAAA,MAAM,YAAY,GAAGA,eAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,IAAI,CAACD,aAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;IAChC,YAAA,OAAO,IAAI,CAAC;aACb;IAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAACA,aAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YACpE,OAAO;IACL,YAAA,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC;IAC5B,YAAA,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC;IAC5B,YAAA,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC;aAC/B,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;IACd,QAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;IACzD,QAAA,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAyED;;IAEG;IACH,eAAe,eAAe,CAC5B,KAAa,EACb,WAAmB,EACnB,OAiBE,EACF,QAAgB,EAChB,MAAc,EAAA;;QAGd,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACpE,MAAM,GAAG,GAAG,CAAG,EAAA,OAAO,gBAAgB,WAAW,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,CAAG,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAErC,IAAA,MAAM,OAAO,GAA2B;YACtC,eAAe,EAAE,CAAS,MAAA,EAAA,QAAQ,CAAE,CAAA;IACpC,QAAA,cAAc,EAAE,kBAAkB;SACnC,CAAC;IAEF,IAAA,IAAI;IACF,QAAA,MAAM,QAAQ,GAAG,MAAMG,OAAK,CAAC,GAAG,EAAE;IAChC,YAAA,MAAM,EAAE,OAAO;IACf,YAAA,OAAO,EAAE,OAAO;IAChB,YAAA,IAAI,EAAE,IAAI;IACX,SAAA,CAAC,CAAC;IAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAChB,YAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,CAAmC,gCAAA,EAAA,QAAQ,CAAC,MAAM,CAAI,CAAA,EAAA,SAAS,CAAE,CAAA,CAAC,CAAC;aACjF;SACF;QAAC,OAAO,KAAK,EAAE;IACd,QAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;SACtD;IACH,CAAC;IAED;;;IAGG;IACH,SAAS,iBAAiB,GAAA;IACxB,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,MAAM,OAAO,GAAGF,eAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;;IAGvC,IAAA,MAAM,QAAQ,GAAG;IACf,QAAAA,eAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;IACzB,QAAAA,eAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;SAC9B,CAAC;IAEF,IAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;IAC9B,QAAA,IAAID,aAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;IAC1B,YAAA,OAAO,OAAO,CAAC;aAChB;SACF;;IAGD,IAAA,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;IAGG;IACH,SAAS,iBAAiB,GAAA;IACxB,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,MAAM,OAAO,GAAGC,eAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;;IAGvC,IAAA,MAAM,QAAQ,GAAG;IACf,QAAAA,eAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;IACzB,QAAAA,eAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;SAC9B,CAAC;IAEF,IAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;IAC9B,QAAA,IAAID,aAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;IAC1B,YAAA,OAAO,OAAO,CAAC;aAChB;SACF;;IAGD,IAAA,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;IAEG;UACU,eAAe,CAAA;IAC1B;;IAEG;QACH,aAAa,mBAAmB,CAC9B,WAAmB,EACnB,QAAgB,EAChB,MAAc,EAAA;YAEd,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;;YAEpE,MAAM,GAAG,GAAG,CAAA,EAAG,OAAO,CAAA,gBAAA,EAAmB,kBAAkB,CAAC,WAAW,CAAC,CAAA,CAAE,CAAC;IAE3E,QAAA,MAAM,QAAQ,GAAG,MAAMG,OAAK,CAAC,GAAG,EAAE;IAChC,YAAA,MAAM,EAAE,KAAK;IACb,YAAA,OAAO,EAAE;oBACP,eAAe,EAAE,CAAS,MAAA,EAAA,QAAQ,CAAE,CAAA;IACpC,gBAAA,cAAc,EAAE,kBAAkB;IACnC,aAAA;IACF,SAAA,CAAC,CAAC;IAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAChB,YAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,CAA6B,0BAAA,EAAA,QAAQ,CAAC,MAAM,CAAI,CAAA,EAAA,SAAS,CAAE,CAAA,CAAC,CAAC;aAC9E;IAED,QAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;IAC1C,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACnB;YAED,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3B;IAED,QAAA,MAAM,IAAI,KAAK,CAAC,YAAY,WAAW,CAAA,WAAA,CAAa,CAAC,CAAC;SACvD;IAED;;IAEG;QACH,aAAa,qBAAqB,CAChC,aAAqB,EACrB,WAAmB,EACnB,QAAgB,EAChB,MAAc,EAAA;YAEd,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IACpE,QAAA,MAAM,GAAG,GAAG,CAAG,EAAA,OAAO,sBAAsB,kBAAkB,CAAC,aAAa,CAAC,YAAY,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;IAE3H,QAAA,MAAM,QAAQ,GAAG,MAAMA,OAAK,CAAC,GAAG,EAAE;IAChC,YAAA,MAAM,EAAE,KAAK;IACb,YAAA,OAAO,EAAE;oBACP,eAAe,EAAE,CAAS,MAAA,EAAA,QAAQ,CAAE,CAAA;IACpC,gBAAA,cAAc,EAAE,kBAAkB;IACnC,aAAA;IACF,SAAA,CAAC,CAAC;IAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAChB,YAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,CAAgC,6BAAA,EAAA,QAAQ,CAAC,MAAM,CAAI,CAAA,EAAA,SAAS,CAAE,CAAA,CAAC,CAAC;aACjF;IAED,QAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;IAC1C,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACnB;YAED,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3B;YAED,MAAM,IAAI,KAAK,CAAC,CAAA,YAAA,EAAe,aAAa,CAA2B,wBAAA,EAAA,WAAW,CAAG,CAAA,CAAA,CAAC,CAAC;SACxF;IAED;;IAEG;IACH,IAAA,aAAa,sBAAsB,CACjC,WAAmB,EACnB,QAAgB,EAChB,MAAc,EACd,SAAkB,EAClB,aAAsB,EACtB,eAA2B,GAAA,IAAI,EAC/B,KAAc,EAAA;YAEd,MAAM,YAAY,GAAG,SAAS,IAAI,sBAAsB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;;IAGrF,QAAA,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,wBAAwB,CACrE,WAAW,EACX,QAAQ,EACR,MAAM,CACP,CAAC;YAEF,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;IACxC,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,CAAA,6BAAA,CAA+B,CAAC,CAAC;aACjG;;;IAID,QAAA,IAAIH,aAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;IAC/B,YAAA,IAAI;oBACF,MAAM,eAAe,GAAGC,eAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;oBAChE,MAAM,cAAc,GAAGD,aAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;;oBAGtD,IAAI,mBAAmB,GAAkB,IAAI,CAAC;oBAC9C,IAAI,cAAc,EAAE;IAClB,oBAAA,mBAAmB,GAAGC,eAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAA,kBAAA,EAAqB,WAAW,CAAA,CAAE,CAAC,CAAC;;IAExF,oBAAA,IAAID,aAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;IACtC,wBAAAA,aAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;yBAClE;IACD,oBAAAA,aAAE,CAAC,UAAU,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;IACpD,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,qCAAA,CAAuC,CAAC,CAAC;qBACtD;;IAGD,gBAAA,MAAM,OAAO,GAAGA,aAAE,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,gBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;IAC3B,oBAAA,MAAM,SAAS,GAAGC,eAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,oBAAA,IAAI;IACF,wBAAA,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;IACvB,4BAAAD,aAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;6BACxD;iCAAM;IACL,4BAAAA,aAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;6BAC1B;yBACF;wBAAC,OAAO,KAAK,EAAE;4BACd,OAAO,CAAC,IAAI,CAAC,CAAwB,qBAAA,EAAA,KAAK,CAAC,IAAI,CAAG,CAAA,CAAA,EAAE,KAAK,CAAC,CAAC;yBAC5D;qBACF;IACD,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,0DAAA,CAA4D,CAAC,CAAC;;IAG1E,gBAAA,IAAI,cAAc,IAAI,mBAAmB,EAAE;IACzC,oBAAAA,aAAE,CAAC,UAAU,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IACpD,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,wBAAA,CAA0B,CAAC,CAAC;qBACzC;iBACF;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,CAAA,yCAAA,EAA4C,YAAY,CAAG,CAAA,CAAA,EAAE,KAAK,CAAC,CAAC;;iBAElF;aACF;;YAGD,qBAAqB,CAAC,YAAY,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAGC,eAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAClD,qBAAqB,CAAC,QAAQ,CAAC,CAAC;;IAGhC,QAAA,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,SAAS,EAAE;gBAC9C,MAAM,QAAQ,GAAG,CAAA,EAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA,QAAA,CAAU,CAAC;gBAC7D,MAAM,QAAQ,GAAGA,eAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/CD,aAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,CAAA,CAAE,CAAC,CAAC;aACnD;;YAGD,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;;YAG5D,MAAM,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;;YAG1E,IAAI,eAAe,EAAE;IACnB,YAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;aAChD;SACF;IAED;;IAEG;IACH,IAAA,aAAa,mBAAmB,CAC9B,SAAiB,EACjB,aAA4D,EAAA;;;YAI5D,IAAI,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAG;IACvD,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IACnC,gBAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IAC9B,gBAAA,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAChD,gBAAA,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAChD,gBAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAClC,gBAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACvC,SAAC,CAAC,CAAC;;;YAIH,IAAI,CAAC,UAAU,EAAE;gBACf,MAAM,QAAQ,GAAGC,eAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,YAAA,IAAID,aAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oBAC3B,MAAM,SAAS,GAAGA,aAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/E,gBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;wBAChC,MAAM,QAAQ,GAAGC,eAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;wBAC/C,MAAM,OAAO,GAAGD,aAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,oBAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACnC,wBAAA,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC,wBAAA,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACnD,wBAAA,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE;4BACrD,UAAU,GAAG,IAAI,CAAC;4BAClB,MAAM;yBACP;qBACF;iBACF;aACF;;YAGD,MAAM,aAAa,GAAG,WAAW,IAAI,aAAa,IAAI,aAAa,IAAI,aAAa;IAClF,cAAE,OAAO,CAAE,aAAsC,CAAC,WAAW,CAAC;IAC9D,cAAE,OAAO,CAAE,aAAwC,CAAC,aAAa,CAAC,CAAC;YAErE,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;IAC7C,YAAA,IAAI,EAAE,aAAa;IACnB,YAAA,UAAU,EAAE,UAAU;IACtB,YAAA,UAAU,EAAE,qBAAqB;IAClC,SAAA,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAGC,eAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YACtDD,aAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACxD,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,QAAQ,CAAA,CAAE,CAAC,CAAC;SACtD;IAED;;IAEG;QACH,aAAa,wBAAwB,CAAC,SAAiB,EAAE,eAAA,GAA2B,IAAI,EAAE,KAAc,EAAA;YACtG,MAAM,aAAa,GAAG,wBAAwB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YAEvE,MAAM,QAAQ,GAAGC,eAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;YAC9DD,aAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IACnD,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,QAAQ,CAAA,CAAE,CAAC,CAAC;SAC9D;IAED;;IAEG;IACH,IAAA,aAAa,qBAAqB,CAAC,SAAiB,EAAA;IAClD,QAAA,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAGC,eAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;YAC3DD,aAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IACrD,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,QAAQ,CAAA,CAAE,CAAC,CAAC;SAC3D;IAED;;;IAGG;IACH,IAAA,aAAa,YAAY,CACvB,WAAmB,EACnB,QAAgB,EAChB,MAAc,EACd,aAAsB,EACtB,KAAc,EACd,UAA+B,EAAE,EAAA;YAEjC,MAAM,EACJ,SAAS,EACT,eAAe,GAAG,IAAI,EACtB,cAAc,GAAG,EAAE,EACnB,eAAe,GAAG,KAAK,EACvB,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,eAAe,GAChB,GAAG,OAAO,CAAC;YAEZ,MAAM,YAAY,GAAG,SAAS,IAAI,sBAAsB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YACrF,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,QAAA,IAAI;;IAEF,YAAA,IAAI,CAAC,YAAY,IAAI,CAAC,eAAe,EAAE;IACrC,gBAAA,IAAI;wBACF,MAAM,cAAc,GAAG,MAAMG,OAAK,CAAC,GAAG,MAAM,CAAA,aAAA,EAAgB,WAAW,CAAA,MAAA,CAAQ,EAAE;IAC/E,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,OAAO,EAAE;gCACP,eAAe,EAAE,CAAS,MAAA,EAAA,QAAQ,CAAE,CAAA;IACpC,4BAAA,cAAc,EAAE,kBAAkB;IACnC,yBAAA;IACF,qBAAA,CAAC,CAAC;IAEH,oBAAA,IAAI,cAAc,CAAC,EAAE,EAAE;IACrB,wBAAA,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;IAC5C,wBAAA,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAC1B,wBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,YAAY,CAAA,CAAE,CAAC,CAAC;yBAC1D;6BAAM;IACL,wBAAA,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;yBAC7E;qBACF;oBAAC,OAAO,KAAK,EAAE;IACd,oBAAA,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;qBACxD;iBACF;;IAGD,YAAA,OAAO,CAAC,GAAG,CAAC,iDAAiD,WAAW,CAAA,GAAA,CAAK,CAAC,CAAC;IAC/E,YAAA,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;;IAG7H,YAAA,MAAM,UAAU,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACjD,YAAA,IAAI,YAAY,IAAI,UAAU,GAAG,CAAC,EAAE;IAClC,gBAAA,MAAM,eAAe,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAChG,IAAI,cAAc,EAAE;wBAClB,MAAM,cAAc,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;qBACnD;iBACF;;IAGD,YAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,YAAY,CAAA,GAAA,CAAK,CAAC,CAAC;IAChE,YAAA,IAAI;IACF,gBAAA,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;oBAC1C,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,SAAS,CACtE,CAAG,EAAA,aAAa,CAAU,QAAA,CAAA,EAC1B,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE;qBACvC,CAAC;IACF,gBAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,gBAAA,IAAI,aAAa;IAAE,oBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9C,gBAAA,IAAI,aAAa;IAAE,oBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBAChD;gBAAC,OAAO,YAAiB,EAAE;IAC1B,gBAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,YAAY,CAAC,CAAC;IACjE,gBAAA,MAAM,QAAQ,GAAG,CAAA,gCAAA,EAAmC,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC3E,IAAI,YAAY,EAAE;IAChB,oBAAA,MAAM,eAAe,CACnB,YAAY,EACZ,WAAW,EACX;IACE,wBAAA,MAAM,EAAE,OAAO;IACf,wBAAA,SAAS,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC;IACjC,wBAAA,aAAa,EAAE,QAAQ;4BACvB,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,OAAO,IAAI,EAAE;IAC1D,qBAAA,EACD,QAAQ,EACR,MAAM,CACP,CAAC;wBACF,IAAI,cAAc,EAAE;IAClB,wBAAA,MAAM,cAAc,CAAC;IACnB,4BAAA,MAAM,EAAE,OAAO;IACf,4BAAA,SAAS,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC;IACjC,4BAAA,aAAa,EAAE,QAAQ;gCACvB,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,OAAO,IAAI,EAAE;IAC1D,yBAAA,CAAC,CAAC;yBACJ;qBACF;oBACD,OAAO;IACL,oBAAA,OAAO,EAAE,KAAK;IACd,oBAAA,QAAQ,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC;IAChC,oBAAA,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,EAAE;wBACjC,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,OAAO,IAAI,EAAE;IACzD,oBAAA,KAAK,EAAE,QAAQ;IACf,oBAAA,KAAK,EAAE,YAAY;qBACpB,CAAC;iBACH;;IAGD,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,4CAAA,CAA8C,CAAC,CAAC;IAC5D,YAAA,IAAI;IACF,gBAAA,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;oBAC1C,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,SAAS,CACtE,CAAG,EAAA,aAAa,CAA8B,4BAAA,CAAA,EAC9C,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE;qBACvC,CAAC;IACF,gBAAA,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,gBAAA,IAAI,aAAa;IAAE,oBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9C,gBAAA,IAAI,aAAa;IAAE,oBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBAChD;gBAAC,OAAO,YAAiB,EAAE;IAC1B,gBAAA,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,YAAY,CAAC,CAAC;;;iBAGzE;;IAGD,YAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,YAAY,CAAA,GAAA,CAAK,CAAC,CAAC;IACjE,YAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;IAC7B,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,0BAAA,EAA6B,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAE,CAAA,CAAC,CAAC;iBACtE;IAED,YAAA,OAAO,IAAI,OAAO,CAAqB,OAAO,OAAO,KAAI;;oBACvD,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,IAAI,WAAW,GAAG,KAAK,CAAC;oBACxB,IAAI,eAAe,GAAG,CAAC,CAAC;oBACxB,IAAI,gBAAgB,GAAG,EAAE,CAAC;oBAC1B,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;IACzD,gBAAA,MAAM,aAAa,GAAmB,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC3E,IAAI,uBAAuB,GAAG,CAAC,CAAC;IAChC,gBAAA,MAAM,8BAA8B,GAAG,IAAI,CAAC;IAC5C,gBAAA,MAAM,qBAAqB,GAAG,KAAK,CAAC;IACpC,gBAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC;oBACnC,IAAI,eAAe,GAAG,CAAC,CAAC;oBACxB,MAAM,cAAc,GAMf,EAAE,CAAC;;IAGR,gBAAA,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,gBAAA,MAAM,WAAW,GAAGC,mBAAK,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE;IAClF,oBAAA,GAAG,EAAE,YAAY;IACjB,oBAAA,KAAK,EAAE,IAAI;IACX,oBAAA,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;IACjC,oBAAA,GAAG,EAAE;4BACH,GAAG,OAAO,CAAC,GAAG;IACd,wBAAA,aAAa,EAAE,QAAQ;IACvB,wBAAA,kBAAkB,EAAE,MAAM;IAC3B,qBAAA;IACF,iBAAA,CAAC,CAAC;;IAGH,gBAAA,CAAA,EAAA,GAAA,WAAW,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,EAAE,CAAC,MAAM,EAAE,OAAO,IAAY,KAAI;;IACpD,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC9B,gBAAgB,IAAI,KAAK,CAAC;;wBAG1B,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC3C,gBAAgB,GAAG,MAAA,KAAK,CAAC,GAAG,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;wBAErC,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,oBAAA,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE;4BAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACrE,wBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE;gCAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC1D,4BAAA,IAAI;oCACF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;;oCAG3C,IAAI,eAAe,EAAE;IACnB,oCAAA,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;qCACtC;;oCAGD,IAAI,CAAA,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAb,aAAa,CAAE,SAAS,MAAK,WAAW,EAAE;wCAC5C,MAAM,IAAI,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,IAAI,CAAC;wCACjC,MAAM,EAAE,GAAG,QAAO,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,EAAE,CAAA,KAAK,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;wCACzD,MAAM,KAAK,GAAG,QAAO,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,CAAA,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;wCAClE,MAAM,KAAK,GAAG,QAAO,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,CAAA,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAC/D,oCAAA,IAAI,EAAE,IAAI,KAAK,EAAE;;IAEf,wCAAA,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,wCAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;IACxB,4CAAA,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;6CAC9D;yCACF;qCACF;oCAED,IAAI,CAAA,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAb,aAAa,CAAE,SAAS,MAAK,SAAS,EAAE;wCAC1C,MAAM,IAAI,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,IAAI,CAAC;wCACjC,MAAM,EAAE,GAAG,QAAO,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,EAAE,CAAA,KAAK,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;wCACzD,IAAI,EAAE,EAAE;4CACN,MAAM,KAAK,GAAG,QAAO,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,CAAA,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAClE,wCAAA,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,wCAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;;gDAExB,cAAc,CAAC,aAAa,CAAC,GAAG;oDAC9B,GAAG,cAAc,CAAC,aAAa,CAAC;oDAChC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ;oDACnC,KAAK,EAAE,KAAK,IAAI,IAAI;iDACrB,CAAC;6CACH;;yCAEF;qCACF;;oCAGD,IAAI,YAAY,EAAE;IAChB,oCAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,oCAAA,IAAI,GAAG,GAAG,eAAe,GAAG,qBAAqB,EAAE;4CACjD,eAAe,GAAG,GAAG,CAAC;IACtB,wCAAA,MAAM,eAAe,CACnB,YAAY,EACZ,WAAW,EACX,EAAE,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,EAAE,EAC9B,QAAQ,EACR,MAAM,CACP,CAAC;yCACH;qCACF;;oCAGD,IAAI,YAAY,IAAI,CAAA,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,SAAS,MAAK,SAAS,KAAI,CAAA,EAAA,GAAA,aAAa,KAAb,IAAA,IAAA,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA,EAAE;IAC3F,oCAAA,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,MAAgB,CAAC;wCACrD,IAAI,MAAM,KAAK,QAAQ;IAAE,wCAAA,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;6CAC9C,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,aAAa;IAAE,wCAAA,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;6CACxG,IAAI,MAAM,KAAK,SAAS;IAAE,wCAAA,aAAa,CAAC,OAAO,IAAI,CAAC,CAAC;IAE1D,oCAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,oCAAA,IAAI,GAAG,GAAG,uBAAuB,GAAG,8BAA8B,EAAE;4CAClE,uBAAuB,GAAG,GAAG,CAAC;IAC9B,wCAAA,MAAM,eAAe,CACnB,YAAY,EACZ,WAAW,EACX;gDACE,YAAY,EAAE,aAAa,CAAC,MAAM;gDAClC,YAAY,EAAE,aAAa,CAAC,MAAM;gDAClC,aAAa,EAAE,aAAa,CAAC,OAAO;IACrC,yCAAA,EACD,QAAQ,EACR,MAAM,CACP,CAAC;4CACF,IAAI,cAAc,EAAE;IAClB,4CAAA,MAAM,cAAc,CAAC;oDACnB,YAAY,EAAE,aAAa,CAAC,MAAM;oDAClC,YAAY,EAAE,aAAa,CAAC,MAAM;oDAClC,aAAa,EAAE,aAAa,CAAC,OAAO;IACrC,6CAAA,CAAC,CAAC;6CACJ;yCACF;qCACF;iCACF;IAAC,4BAAA,OAAA,EAAA,EAAM;;iCAEP;gCACD,SAAS;6BACV;IAED,wBAAA,SAAS,IAAI,OAAO,GAAG,IAAI,CAAC;yBAC7B;wBAED,IAAI,SAAS,EAAE;4BACb,MAAM,IAAI,SAAS,CAAC;;4BAEpB,IAAI,QAAQ,EAAE;IACZ,4BAAA,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;6BAC3B;yBACF;;wBAGD,IAAI,YAAY,EAAE;IAChB,wBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;;IAEvB,wBAAA,IAAI,GAAG,GAAG,eAAe,GAAG,qBAAqB,IAAI,GAAG,GAAG,uBAAuB,GAAG,8BAA8B,EAAE;gCACnH,eAAe,GAAG,GAAG,CAAC;IACtB,4BAAA,MAAM,KAAK,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAChD,4BAAA,MAAM,eAAe,CACnB,YAAY,EACZ,WAAW,EACX;oCACE,YAAY,EAAE,KAAK,CAAC,MAAM;oCAC1B,YAAY,EAAE,KAAK,CAAC,MAAM;oCAC1B,aAAa,EAAE,KAAK,CAAC,OAAO;IAC7B,6BAAA,EACD,QAAQ,EACR,MAAM,CACP,CAAC;gCACF,IAAI,cAAc,EAAE;IAClB,gCAAA,MAAM,cAAc,CAAC;wCACnB,YAAY,EAAE,KAAK,CAAC,MAAM;wCAC1B,YAAY,EAAE,KAAK,CAAC,MAAM;wCAC1B,aAAa,EAAE,KAAK,CAAC,OAAO;IAC7B,iCAAA,CAAC,CAAC;iCACJ;6BACF;yBACF;IACH,iBAAC,CAAC,CAAC;;IAGH,gBAAA,CAAA,EAAA,GAAA,WAAW,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,EAAE,CAAC,MAAM,EAAE,OAAO,IAAY,KAAI;IACpD,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC9B,MAAM,IAAI,KAAK,CAAC;;wBAEhB,IAAI,QAAQ,EAAE;IACZ,wBAAA,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;yBACvB;IACH,iBAAC,CAAC,CAAC;;oBAGH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,IAAI,KAAI;;IACrC,oBAAA,IAAI,WAAW;4BAAE,OAAO;wBACxB,WAAW,GAAG,IAAI,CAAC;;wBAGnB,IAAI,gBAAgB,EAAE;4BACpB,MAAM,SAAS,GAAG,gBAAgB,CAAC;4BACnC,gBAAgB,GAAG,EAAE,CAAC;IACtB,wBAAA,IAAI,SAAS,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE;IAC/C,4BAAA,IAAI;IACF,gCAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;oCAChF,IAAI,eAAe,EAAE;IACnB,oCAAA,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;qCACtC;oCACD,IAAI,YAAY,IAAI,CAAA,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,SAAS,MAAK,SAAS,KAAI,CAAA,EAAA,GAAA,aAAa,KAAb,IAAA,IAAA,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA,EAAE;IAC3F,oCAAA,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,MAAgB,CAAC;wCACrD,IAAI,MAAM,KAAK,QAAQ;IAAE,wCAAA,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;6CAC9C,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,aAAa;IAAE,wCAAA,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;6CACxG,IAAI,MAAM,KAAK,SAAS;IAAE,wCAAA,aAAa,CAAC,OAAO,IAAI,CAAC,CAAC;qCAC3D;iCACF;IAAC,4BAAA,OAAA,EAAA,EAAM;;iCAEP;6BACF;iCAAM;gCACL,MAAM,IAAI,SAAS,CAAC;gCACpB,IAAI,QAAQ,EAAE;IACZ,gCAAA,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;iCAC3B;6BACF;yBACF;wBAED,MAAM,QAAQ,GAAG,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,IAAI,GAAI,CAAC,CAAC;IAC3B,oBAAA,MAAM,OAAO,GAAG,QAAQ,KAAK,CAAC,CAAC;;;IAG/B,oBAAA,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;IAC/F,oBAAA,MAAM,aAAa,GAAG,QAAQ,KAAK,CAAC,IAAI,cAAc,CAAC;wBACvD,MAAM,gBAAgB,GAAG,QAAQ,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;wBAE1D,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,gCAAgC,IAAI,aAAa,GAAG,kCAAkC,GAAG,yBAAyB,CAAC,CAAC,CAAC;;wBAG3I,IAAI,WAAW,GAA0B,IAAI,CAAC;IAC9C,oBAAA,IAAIJ,aAAE,CAAC,UAAU,CAACC,eAAI,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC,EAAE;IAC/D,wBAAA,WAAW,GAAG,2BAA2B,CAAC,YAAY,CAAC,CAAC;yBACzD;wBACD,IAAI,CAAC,WAAW,EAAE;IAChB,wBAAA,WAAW,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;yBACjD;;;IAID,oBAAA,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;IAC9F,oBAAA,MAAM,UAAU,GAAG,iBAAiB,GAAG,CAAC,GAAG,aAAa,IAAI,WAAW,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;;wBAGjH,IAAI,YAAY,GAAuB,SAAS,CAAC;wBACjD,IAAI,gBAAgB,EAAE;;4BAEpB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;4BACrF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;4BACrF,MAAM,aAAa,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,IAChE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACvB,4BAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACxB,4BAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC/B,4BAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACvB,4BAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACxB,CAAC;IAEF,wBAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;;gCAE5B,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;6BACxD;IAAM,6BAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;;gCAEjC,YAAY,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;6BACpD;iCAAM,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;;gCAEnG,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gCACpF,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;6BAClD;iCAAM;IACL,4BAAA,YAAY,GAAG,CAAA,qCAAA,EAAwC,QAAQ,CAAA,CAAE,CAAC;6BACnE;yBACF;;wBAGD,IAAI,YAAY,EAAE;4BAChB,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;;IAElD,wBAAA,MAAM,iBAAiB,GAAG,gBAAgB,IAAI,YAAY,IAAI,CAAA,qCAAA,EAAwC,QAAQ,CAAE,CAAA,IAAI,YAAY,CAAC;IAEjI,wBAAA,OAAO,CAAC,GAAG,CAAC,CAAqC,kCAAA,EAAA,YAAY,YAAY,WAAW,CAAA,YAAA,EAAe,QAAQ,CAAA,oBAAA,EAAuB,gBAAgB,CAAmB,gBAAA,EAAA,iBAAiB,IAAI,MAAM,CAAA,CAAE,CAAC,CAAC;IAEpM,wBAAA,MAAM,eAAe,CACnB,YAAY,EACZ,WAAW,EACX;IACE,4BAAA,MAAM,EAAE,WAAW;IACnB,4BAAA,SAAS,EAAE,QAAQ;IACnB,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC;IAC1B,4BAAA,aAAa,EAAE,iBAAiB;gCAChC,YAAY,EAAE,UAAU,CAAC,MAAM;gCAC/B,YAAY,EAAE,UAAU,CAAC,MAAM;gCAC/B,aAAa,EAAE,UAAU,CAAC,OAAO;IAClC,yBAAA,EACD,QAAQ,EACR,MAAM,CACP,CAAC;4BACF,IAAI,cAAc,EAAE;IAClB,4BAAA,MAAM,cAAc,CAAC;IACnB,gCAAA,MAAM,EAAE,WAAW;IACnB,gCAAA,SAAS,EAAE,QAAQ;IACnB,gCAAA,MAAM,EAAE,MAAM;IACd,gCAAA,MAAM,EAAE,MAAM;IACd,gCAAA,aAAa,EAAE,YAAY;oCAC3B,YAAY,EAAE,UAAU,CAAC,MAAM;oCAC/B,YAAY,EAAE,UAAU,CAAC,MAAM;oCAC/B,aAAa,EAAE,UAAU,CAAC,OAAO;IAClC,6BAAA,CAAC,CAAC;6BACJ;;;;yBAKF;;wBAGD,IAAI,UAAU,GAAG,YAAY,CAAC;IAC9B,oBAAA,IAAI,gBAAgB,IAAI,CAAC,UAAU,EAAE;;IAEnC,wBAAA,MAAM,SAAS,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;4BAClD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;4BAC/C,IAAI,UAAU,EAAE;IACd,4BAAA,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;6BAC3C;iCAAM;IACL,4BAAA,UAAU,GAAG,CAAA,qCAAA,EAAwC,QAAQ,CAAA,CAAE,CAAC;6BACjE;yBACF;IAED,oBAAA,OAAO,CAAC;IACN,wBAAA,OAAO,EAAE,OAAO;IAChB,wBAAA,QAAQ,EAAE,QAAQ;IAClB,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,MAAM,EAAE,MAAM;;IAEd,wBAAA,KAAK,EAAE,UAAU;IACjB,wBAAA,KAAK,EAAE,YAAY;IACpB,qBAAA,CAAC,CAAC;IACL,iBAAC,CAAC,CAAC;;oBAGH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAY,KAAI;IAC7C,oBAAA,IAAI,WAAW;4BAAE,OAAO;wBACxB,WAAW,GAAG,IAAI,CAAC;wBAEnB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;wBACpD,MAAM,IAAI,YAAY,CAAC;IAEvB,oBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;;wBAGjD,IAAI,YAAY,EAAE;IAChB,wBAAA,MAAM,eAAe,CACnB,YAAY,EACZ,WAAW,EACX;IACE,4BAAA,MAAM,EAAE,OAAO;IACf,4BAAA,SAAS,EAAE,CAAC;gCACZ,aAAa,EAAE,CAA0B,uBAAA,EAAA,YAAY,CAAE,CAAA;IACvD,4BAAA,MAAM,EAAE,MAAM;IACf,yBAAA,EACD,QAAQ,EACR,MAAM,CACP,CAAC;4BACF,IAAI,cAAc,EAAE;IAClB,4BAAA,MAAM,cAAc,CAAC;IACnB,gCAAA,MAAM,EAAE,OAAO;IACf,gCAAA,SAAS,EAAE,CAAC;oCACZ,aAAa,EAAE,CAA0B,uBAAA,EAAA,YAAY,CAAE,CAAA;IACvD,gCAAA,MAAM,EAAE,MAAM;IACf,6BAAA,CAAC,CAAC;6BACJ;yBACF;IAED,oBAAA,OAAO,CAAC;IACN,wBAAA,OAAO,EAAE,KAAK;IACd,wBAAA,QAAQ,EAAE,CAAC;IACX,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,CAA0B,uBAAA,EAAA,YAAY,CAAE,CAAA;IAC/C,wBAAA,KAAK,EAAE,YAAY;IACpB,qBAAA,CAAC,CAAC;IACL,iBAAC,CAAC,CAAC;;oBAGH,UAAU,CAAC,YAAW;wBACpB,IAAI,CAAC,WAAW,EAAE;4BAChB,WAAW,GAAG,IAAI,CAAC;4BACnB,WAAW,CAAC,IAAI,EAAE,CAAC;4BAEnB,MAAM,YAAY,GAAG,uCAAuC,CAAC;4BAC7D,MAAM,IAAI,YAAY,CAAC;;4BAGvB,IAAI,YAAY,EAAE;IAChB,4BAAA,MAAM,eAAe,CACnB,YAAY,EACZ,WAAW,EACX;IACE,gCAAA,MAAM,EAAE,OAAO;IACf,gCAAA,SAAS,EAAE,CAAC;IACZ,gCAAA,aAAa,EAAE,YAAY;IAC3B,gCAAA,MAAM,EAAE,MAAM;IACf,6BAAA,EACD,QAAQ,EACR,MAAM,CACP,CAAC;gCACF,IAAI,cAAc,EAAE;IAClB,gCAAA,MAAM,cAAc,CAAC;IACnB,oCAAA,MAAM,EAAE,OAAO;IACf,oCAAA,SAAS,EAAE,CAAC;IACZ,oCAAA,aAAa,EAAE,YAAY;IAC3B,oCAAA,MAAM,EAAE,MAAM;IACf,iCAAA,CAAC,CAAC;iCACJ;6BACF;IAED,wBAAA,OAAO,CAAC;IACN,4BAAA,OAAO,EAAE,KAAK;IACd,4BAAA,QAAQ,EAAE,CAAC;IACX,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,KAAK,EAAE,YAAY;IACnB,4BAAA,KAAK,EAAE,YAAY;IACpB,yBAAA,CAAC,CAAC;yBACJ;IACH,iBAAC,EAAE,OAAO,CAAC,CAAC;IACd,aAAC,CAAC,CAAC;aACJ;YAAC,OAAO,KAAU,EAAE;IACnB,YAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;gBACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChD,IAAI,YAAY,EAAE;IAChB,gBAAA,MAAM,eAAe,CACnB,YAAY,EACZ,WAAW,EACX;IACE,oBAAA,MAAM,EAAE,OAAO;IACf,oBAAA,SAAS,EAAE,CAAC;IACZ,oBAAA,aAAa,EAAE,QAAQ;IACxB,iBAAA,EACD,QAAQ,EACR,MAAM,CACP,CAAC,KAAK,CAAC,MAAQ,GAAC,CAAC,CAAC;oBACnB,IAAI,cAAc,EAAE;IAClB,oBAAA,IAAI;4BACF,MAAM,MAAM,GAAG,cAAc,CAAC;IAC5B,4BAAA,MAAM,EAAE,OAAO;IACf,4BAAA,SAAS,EAAE,CAAC;IACZ,4BAAA,aAAa,EAAE,QAAQ;IACxB,yBAAA,CAAC,CAAC;4BACH,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;gCAC/C,MAAM,MAAM,CAAC,KAAK,CAAC,MAAK,GAAI,CAAC,CAAC;6BAC/B;yBACF;IAAC,oBAAA,OAAA,EAAA,EAAM;;yBAEP;qBACF;iBACF;gBACD,OAAO;IACL,gBAAA,OAAO,EAAE,KAAK;IACd,gBAAA,QAAQ,EAAE,CAAC;IACX,gBAAA,MAAM,EAAE,EAAE;IACV,gBAAA,MAAM,EAAE,QAAQ;IAChB,gBAAA,KAAK,EAAE,QAAQ;IACf,gBAAA,KAAK,EAAE,YAAY;iBACpB,CAAC;aACH;SACF;IAED;;IAEG;IACH,IAAA,aAAa,oBAAoB,CAC/B,SAAiB,EACjB,QAAgB,EAChB,MAAc,EACd,SAAkB,EAClB,WAAoB,EACpB,kBAA2B,IAAI,EAAA;IAE/B,QAAA,MAAM,UAAU,GAAG,SAAS,IAAI,sBAAsB,CAAC,SAAS,EAAE,WAAW,IAAI,CAAA,QAAA,EAAW,SAAS,CAAA,CAAE,CAAC,CAAC;;IAGzG,QAAA,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,sBAAsB,CACnE,SAAS,EACT,QAAQ,EACR,MAAM,CACP,CAAC;YAEF,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxC,MAAM,IAAI,KAAK,CAAC,CAAkC,+BAAA,EAAA,aAAa,CAAC,WAAW,CAAU,OAAA,EAAA,SAAS,CAAgC,8BAAA,CAAA,CAAC,CAAC;aACjI;;IAGD,QAAA,IAAID,aAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;IAC7B,YAAA,IAAI;oBACF,MAAM,eAAe,GAAGC,eAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;oBAC9D,MAAM,cAAc,GAAGD,aAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;;oBAGtD,IAAI,mBAAmB,GAAkB,IAAI,CAAC;oBAC9C,IAAI,cAAc,EAAE;IAClB,oBAAA,mBAAmB,GAAGC,eAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAE,CAAC,CAAC;;IAEpF,oBAAA,IAAID,aAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;IACtC,wBAAAA,aAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;yBAClE;IACD,oBAAAA,aAAE,CAAC,UAAU,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;IACpD,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,qCAAA,CAAuC,CAAC,CAAC;qBACtD;;IAGD,gBAAA,MAAM,OAAO,GAAGA,aAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,gBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;IAC3B,oBAAA,MAAM,SAAS,GAAGC,eAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,oBAAA,IAAI;IACF,wBAAA,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;IACvB,4BAAAD,aAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;6BACxD;iCAAM;IACL,4BAAAA,aAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;6BAC1B;yBACF;wBAAC,OAAO,KAAK,EAAE;4BACd,OAAO,CAAC,IAAI,CAAC,CAAwB,qBAAA,EAAA,KAAK,CAAC,IAAI,CAAG,CAAA,CAAA,EAAE,KAAK,CAAC,CAAC;yBAC5D;qBACF;IACD,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,uDAAA,CAAyD,CAAC,CAAC;;IAGvE,gBAAA,IAAI,cAAc,IAAI,mBAAmB,EAAE;IACzC,oBAAAA,aAAE,CAAC,UAAU,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IACpD,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,wBAAA,CAA0B,CAAC,CAAC;qBACzC;iBACF;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,CAAA,sCAAA,EAAyC,UAAU,CAAG,CAAA,CAAA,EAAE,KAAK,CAAC,CAAC;;iBAE7E;aACF;;YAGD,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAGC,eAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAChD,qBAAqB,CAAC,QAAQ,CAAC,CAAC;;IAGhC,QAAA,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,SAAS,EAAE;gBAC9C,MAAM,QAAQ,GAAG,CAAA,EAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA,QAAA,CAAU,CAAC;gBAC7D,MAAM,QAAQ,GAAGA,eAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/CD,aAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,CAAA,CAAE,CAAC,CAAC;aACnD;;YAGD,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;;YAG1D,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;;YAG5E,IAAI,eAAe,EAAE;IACnB,YAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;aAC9C;SACF;IAED;;;;IAIG;IACH,IAAA,aAAa,mBAAmB,CAC9B,SAAiB,EACjB,QAAgB,EAChB,MAAc,EACd,WAAoB,EACpB,UAA+B,EAAE,EAAA;IAEjC,QAAA,MAAM,EACJ,SAAS,EACT,eAAe,GAAG,KAAK;YACvB,cAAc,GAAG,EAAE,EACnB,QAAQ,EACR,QAAQ,GACT,GAAG,OAAO,CAAC;IAEZ,QAAA,MAAM,UAAU,GAAG,SAAS,IAAI,sBAAsB,CAAC,SAAS,EAAE,WAAW,IAAI,CAAA,QAAA,EAAW,SAAS,CAAA,CAAE,CAAC,CAAC;IAEzG,QAAA,IAAI;;IAEF,YAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,SAAS,CAAA,GAAA,CAAK,CAAC,CAAC;IACpE,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;;IAGvG,YAAA,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC/C,YAAA,IAAI,UAAU,KAAK,CAAC,EAAE;IACpB,gBAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,SAAS,CAAA,CAAE,CAAC,CAAC;iBACrE;;IAGD,YAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,UAAU,CAAA,GAAA,CAAK,CAAC,CAAC;IAC9D,YAAA,IAAI;IACF,gBAAA,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;oBAC1C,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,SAAS,CACtE,CAAG,EAAA,aAAa,CAAU,QAAA,CAAA,EAC1B,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE;qBACrC,CAAC;IACF,gBAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,gBAAA,IAAI,aAAa;IAAE,oBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9C,gBAAA,IAAI,aAAa;IAAE,oBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBAChD;gBAAC,OAAO,YAAiB,EAAE;IAC1B,gBAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,YAAY,CAAC,CAAC;IACjE,gBAAA,MAAM,QAAQ,GAAG,CAAA,gCAAA,EAAmC,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC3E,OAAO;IACL,oBAAA,OAAO,EAAE,KAAK;IACd,oBAAA,QAAQ,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC;IAChC,oBAAA,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,EAAE;wBACjC,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,OAAO,IAAI,EAAE;IACzD,oBAAA,KAAK,EAAE,QAAQ;qBAChB,CAAC;iBACH;;IAGD,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,4CAAA,CAA8C,CAAC,CAAC;IAC5D,YAAA,IAAI;IACF,gBAAA,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;oBAC1C,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,SAAS,CACtE,CAAG,EAAA,aAAa,CAA8B,4BAAA,CAAA,EAC9C,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE;qBACrC,CAAC;IACF,gBAAA,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,gBAAA,IAAI,aAAa;IAAE,oBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9C,gBAAA,IAAI,aAAa;IAAE,oBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBAChD;gBAAC,OAAO,YAAiB,EAAE;IAC1B,gBAAA,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,YAAY,CAAC,CAAC;;;iBAGzE;;IAGD,YAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,UAAU,CAAA,GAAA,CAAK,CAAC,CAAC;IAC/D,YAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;IAC7B,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,0BAAA,EAA6B,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAE,CAAA,CAAC,CAAC;iBACtE;IAED,YAAA,OAAO,IAAI,OAAO,CAAqB,OAAO,OAAO,KAAI;;oBACvD,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,IAAI,WAAW,GAAG,KAAK,CAAC;oBACxB,IAAI,gBAAgB,GAAG,EAAE,CAAC;;IAG1B,gBAAA,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,gBAAA,MAAM,WAAW,GAAGI,mBAAK,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE;IAClF,oBAAA,GAAG,EAAE,UAAU;IACf,oBAAA,KAAK,EAAE,IAAI;IACX,oBAAA,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;IACjC,oBAAA,GAAG,EAAE;4BACH,GAAG,OAAO,CAAC,GAAG;IACd,wBAAA,aAAa,EAAE,QAAQ;IACvB,wBAAA,kBAAkB,EAAE,MAAM;IAC3B,qBAAA;IACF,iBAAA,CAAC,CAAC;;IAGH,gBAAA,CAAA,EAAA,GAAA,WAAW,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,EAAE,CAAC,MAAM,EAAE,OAAO,IAAY,KAAI;;IACpD,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC9B,gBAAgB,IAAI,KAAK,CAAC;;wBAG1B,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC3C,gBAAgB,GAAG,MAAA,KAAK,CAAC,GAAG,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;IAErC,oBAAA,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE;4BAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACrE,wBAAA,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC;;4BAEzB,IAAI,QAAQ,EAAE;IACZ,4BAAA,MAAM,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;6BAChC;yBACF;IACH,iBAAC,CAAC,CAAC;;IAGH,gBAAA,CAAA,EAAA,GAAA,WAAW,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,EAAE,CAAC,MAAM,EAAE,OAAO,IAAY,KAAI;IACpD,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC9B,MAAM,IAAI,KAAK,CAAC;;wBAEhB,IAAI,QAAQ,EAAE;IACZ,wBAAA,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;yBACvB;IACH,iBAAC,CAAC,CAAC;;oBAGH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,IAAI,KAAI;IACrC,oBAAA,IAAI,WAAW;4BAAE,OAAO;wBACxB,WAAW,GAAG,IAAI,CAAC;;wBAGnB,IAAI,gBAAgB,EAAE;4BACpB,MAAM,IAAI,gBAAgB,CAAC;4BAC3B,IAAI,QAAQ,EAAE;IACZ,4BAAA,MAAM,QAAQ,CAAC,gBAAgB,CAAC,CAAC;6BAClC;yBACF;wBAED,MAAM,QAAQ,GAAG,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,IAAI,GAAI,CAAC,CAAC;IAC3B,oBAAA,MAAM,OAAO,GAAG,QAAQ,KAAK,CAAC,CAAC;;;wBAG/B,MAAM,aAAa,GAAG,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBACpH,MAAM,gBAAgB,GAAG,QAAQ,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;wBAE1D,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,gCAAgC,IAAI,aAAa,GAAG,kCAAkC,GAAG,yBAAyB,CAAC,CAAC,CAAC;;wBAG3I,IAAI,YAAY,GAAuB,SAAS,CAAC;wBACjD,IAAI,gBAAgB,EAAE;;4BAEpB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;4BACrF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;4BACrF,MAAM,aAAa,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,IAChE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACvB,4BAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACxB,4BAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC/B,4BAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACvB,4BAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACxB,CAAC;IAEF,wBAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;;gCAE5B,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;6BACxD;IAAM,6BAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;;gCAEjC,YAAY,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;6BACpD;iCAAM,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;;gCAEnG,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gCACpF,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;6BAClD;iCAAM;IACL,4BAAA,YAAY,GAAG,CAAA,qCAAA,EAAwC,QAAQ,CAAA,CAAE,CAAC;6BACnE;yBACF;IAED,oBAAA,OAAO,CAAC;IACN,wBAAA,OAAO,EAAE,OAAO;IAChB,wBAAA,QAAQ,EAAE,QAAQ;IAClB,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,KAAK,EAAE,YAAY;IACpB,qBAAA,CAAC,CAAC;IACL,iBAAC,CAAC,CAAC;;oBAGH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAY,KAAI;IAC7C,oBAAA,IAAI,WAAW;4BAAE,OAAO;wBACxB,WAAW,GAAG,IAAI,CAAC;wBAEnB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;wBACpD,MAAM,IAAI,YAAY,CAAC;IAEvB,oBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IAEjD,oBAAA,OAAO,CAAC;IACN,wBAAA,OAAO,EAAE,KAAK;IACd,wBAAA,QAAQ,EAAE,CAAC;IACX,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,CAA0B,uBAAA,EAAA,YAAY,CAAE,CAAA;IAChD,qBAAA,CAAC,CAAC;IACL,iBAAC,CAAC,CAAC;;oBAGH,UAAU,CAAC,YAAW;wBACpB,IAAI,CAAC,WAAW,EAAE;4BAChB,WAAW,GAAG,IAAI,CAAC;4BACnB,WAAW,CAAC,IAAI,EAAE,CAAC;4BAEnB,MAAM,YAAY,GAAG,uCAAuC,CAAC;4BAC7D,MAAM,IAAI,YAAY,CAAC;IAEvB,wBAAA,OAAO,CAAC;IACN,4BAAA,OAAO,EAAE,KAAK;IACd,4BAAA,QAAQ,EAAE,CAAC;IACX,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,KAAK,EAAE,YAAY;IACpB,yBAAA,CAAC,CAAC;yBACJ;IACH,iBAAC,EAAE,OAAO,CAAC,CAAC;IACd,aAAC,CAAC,CAAC;aACJ;YAAC,OAAO,KAAU,EAAE;IACnB,YAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;gBAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChD,OAAO;IACL,gBAAA,OAAO,EAAE,KAAK;IACd,gBAAA,QAAQ,EAAE,CAAC;IACX,gBAAA,MAAM,EAAE,EAAE;IACV,gBAAA,MAAM,EAAE,QAAQ;IAChB,gBAAA,KAAK,EAAE,QAAQ;iBAChB,CAAC;aACH;SACF;IAED;;;;;IAKG;IACH,IAAA,aAAa,eAAe,CAC1B,KAAa,EACb,WAAmB,EACnB,YAAoB,EACpB,QAAgB,EAChB,MAAc,EAAA;;;YAId,OAAO;SACR;IACF;;UCj7CY,KAAK,CAAA;IAWhB,IAAA,WAAA,CAAY,EACV,YAAY,EACZ,KAAK,GAAG,EAAE,EACV,MAAM,GAAG,EAAE,EACX,iBAAiB,GAAG,KAAK,EACzB,oBAAoB,GAAG,KAAK,EAC5B,YAAY,GAAG,IAAI,EACnB,SAAS,GAAG,KAAK,EACjB,UAAU,GAAGX,qBAAa,CAAC,IAAI,EAC/B,OAAO,GAAGG,eAAO,CAAC,eAAe,EACjC,aAAa,GAAG,EAAE,EACN,EAAA;YAbN,IAAM,CAAA,MAAA,GAAwB,EAAE,CAAC;;;IAgBvC,QAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE;IACX,YAAA,WAAW,CAAC,KAAK,CACf,4DAA4D,CAC7D,CAAC;IACF,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;aAC/C;YAED,MAAM,WAAW,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC7D,IAAI,CAAC,WAAW,EAAE;IAChB,YAAA,WAAW,CAAC,KAAK,CACf,uEAAuE,CACxE,CAAC;IACF,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;aACpD;YAED,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;YAC5E,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpD,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC7B,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC3C,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACjC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACvB,QAAA,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;YACjD,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,iCAAiC,EAAE,GAAG,aAAa,EAAE,CAAC;;IAEhF,QAAA,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEvC,QAAA,WAAW,CAAC,IAAI,CACd,0BAA0B,YAAY,CAAA,SAAA,EAAY,WAAW,CAAI,EAAA,CAAA;IACjE,YAAA,CAAA,kBAAA,EAAqB,iBAAiB,CAAgB,aAAA,EAAA,UAAU,aAAa,OAAO,CAAA,CAAE,CACvF,CAAC;SACH;IAED;;;;IAIG;IACI,IAAA,SAAS,CAAC,MAA2B,EAAA;IAC1C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACtB;IAED;;;;;IAKG;IACK,IAAA,WAAW,CAAC,GAAW,EAAE,iBAAA,GAAyC,EAAE,EAAA;YAC1E,OAAO,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;SACnE;QAEM,MAAM,KAAK,CAAC,IAAU,EAAE,QAAgB,EAAE,OAAqB,EAAE,YAAA,GAAuB,EAAE,EAAA;;IAC/F,QAAA,MAAM,QAAQ,GAAI,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;YAChF,IAAI,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,EAAE;gBAC3B,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACxC;YACD,OAAO,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC;SACjC;QAEM,MAAM,OAAO,CAClB,IAAU,EACV,UAAkB,EAClB,QAAgC,GAAA,IAAI,EACpC,OAAA,GAA0B,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,EAAA;;IAGtF,QAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAkB,CAAC,CAAC;IAChD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;;YAEpC,WAAW,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,UAAU,CAAK,EAAA,EAAA,QAAQ,CAAG,CAAA,CAAA,CAAC,CAAC;IACxD,QAAA,IAAI;;IAEF,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IACpF,YAAA,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE;oBACX,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;oBACrG,IAAI,EAAC,YAAY,KAAZ,IAAA,IAAA,YAAY,KAAZ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,YAAY,CAAE,IAAI,CAAA,EAAE;;wBAEvB,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;4BAC9C,YAAY,EAAE,IAAI,CAAC,YAAY;IAC/B,wBAAA,UAAU,EAAE,UAAU;IACtB,wBAAA,sBAAsB,EAAE,EAAE;IAC1B,wBAAA,oBAAoB,EAAE,EAAE;IACxB,wBAAA,QAAQ,EAAE,QAAkB;IAC5B,wBAAA,SAAS,EAAE,KAAK;IAChB,wBAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;IAChB,qBAAA,CAAC,CAAC,CAAA;qBACJ;yBAAM;wBACL,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;qBACtC;iBACF;gBAED,WAAW,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,GAAG,GAAC,MAAM,GAAC,KAAK,CAAA,EAAG,UAAU,CAAc,WAAA,EAAA,YAAY,cAAc,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE,CAAC,CAAC;;IAG/G,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,YAAA,WAAW,CAAC,KAAK,CAAC,CAAA,qEAAA,EAAwE,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAA,eAAA,EAAkB,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAA,gBAAA,EAAmB,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAA,UAAA,EAAa,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAA,CAAE,CAAC,CAAC;gBACxU,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,EAAC;IACnD,gBAAA,4BAA4B,EAAE,IAAI,CAAC,aAAa,CAAC,4BAA4B;IAC7E,gBAAA,4BAA4B,EAAE,IAAI,CAAC,aAAa,CAAC,4BAA4B;IAC7E,gBAAA,6BAA6B,EAAE,IAAI,CAAC,aAAa,CAAC,6BAA6B;IAC/E,gBAAA,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB;IACpE,aAAA,CAAC,CAAC;IACH,YAAA,WAAW,CAAC,KAAK,CAAC,CAAA,yCAAA,EAA4C,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAA,kCAAA,EAAqC,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAA,mCAAA,EAAsC,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAA,6BAAA,EAAgC,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAA,CAAE,CAAC,CAAC;IACrW,YAAA,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;;IAGhD,YAAA,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACnG,IAAI,YAAY,EAAE;oBAChB,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;IACvD,gBAAA,WAAW,CAAC,KAAK,CAAC,2BAA2B,gBAAgB,CAAA,gBAAA,CAAkB,CAAC,CAAC;IACjF,gBAAA,WAAW,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,gBAAA,OAAO,WAAW,CAAC;iBACpB;;IAGD,YAAA,WAAW,CAAC,GAAG,CAAC,CAAA,oEAAA,CAAsE,CAAC,CAAC;gBACxF,WAAW,CAAC,KAAK,CAAC,CAA2C,wCAAA,EAAA,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA,CAAC,CAAC;IAC3E,YAAA,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACxF,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE;IACrC,gBAAA,kBAAkB,EAAE,mBAAmB;oBACvC,gBAAgB,EAAE,iBAAiB,KAAK,EAAE,GAAG,iBAAiB,GAAG,SAAS;IAC1E,gBAAA,MAAM,EAAE,UAAU;IACnB,aAAA,CAAC,CAAC;;IAGH,YAAA,MAAM,4BAA4B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAChD,YAAA,MAAM,MAAM,GAAsB,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC7G,MAAM,uBAAuB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,4BAA4B,CAAC;IAC1E,YAAA,WAAW,CAAC,KAAK,CAAC,gCAAgC,uBAAuB,CAAA,EAAA,CAAI,CAAC,CAAC;;IAG/E,YAAA,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9C,YAAA,MAAM,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,iCAAiC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC1H,WAAW,CAAC,KAAK,CAAC,CAAA,MAAA,EAAS,kBAAkB,CAAC,MAAM,CAAqB,mBAAA,CAAA,CAAC,CAAC;;IAG3E,YAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;;IAGrC,YAAA,MAAM,0BAA0B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9C,YAAA,MAAM,KAAK,GAAY,MAAM,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAClE,MAAM,EACN,yBAAyB,EACzB,kBAAkB,EAClB,IAAI,CAAC,OAAO,CACb,CAAC;gBACF,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,0BAA0B,CAAC;IACtE,YAAA,WAAW,CAAC,KAAK,CAAC,qCAAqC,qBAAqB,CAAA,EAAA,CAAI,CAAC,CAAC;IAClF,YAAA,WAAW,CAAC,KAAK,CAAC,2CAA2C,KAAK,CAAA,CAAE,CAAC,CAAC;;IAGtE,YAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBAElF,IAAI,CAAC,aAAa,EAAE;oBAClB,MAAM,IAAI,KAAK,CAAC,CAAyC,sCAAA,EAAA,KAAK,wBAAwB,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAA,CAAC,CAAC;iBAC1I;IAED,YAAA,WAAW,CAAC,KAAK,CAAC,CAAA,kBAAA,EAAqB,aAAa,CAAC,YAAY,CAAA,SAAA,EAAY,aAAa,CAAC,KAAK,CAAA,CAAA,CAAG,CAAC,CAAC;;IAGrG,YAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAEpG,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;gBACvD,WAAW,CAAC,KAAK,CAAC,CAA2B,wBAAA,EAAA,gBAAgB,CAA4B,yBAAA,EAAA,uBAAuB,CAAiC,8BAAA,EAAA,qBAAqB,CAAK,GAAA,CAAA,CAAC,CAAC;IAC7K,YAAA,WAAW,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,YAAA,OAAO,YAAY,CAAC;aAErB;YAAC,OAAO,KAAU,EAAE;gBACnB,WAAW,CAAC,KAAK,CAAC,CAAA,kBAAA,EAAqB,KAAK,CAAC,OAAO,CAAE,CAAA,CAAC,CAAC;IACxD,YAAA,WAAW,CAAC,KAAK,CAAC,iBAAiB,UAAU,CAAA,CAAA,CAAG,CAAC,CAAC;gBAClD,WAAW,CAAC,KAAK,CAAC,CAAa,UAAA,EAAA,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA,CAAC,CAAC;;IAG7C,YAAA,MAAM,KAAK,CAAC;aACb;SACF;QAEO,MAAM,iBAAiB,CAAC,IAAU,EAAE,MAAc,EAAE,UAAkB,EAAE,QAA6B,EAAA;IAC3G,QAAA,WAAW,CAAC,KAAK,CAAC,wCAAwC,UAAU,CAAA,CAAE,CAAC,CAAC;YACxE,MAAM,MAAM,GAAuB,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YAC5E,IAAI,CAAC,MAAM,EAAE;IACX,YAAA,WAAW,CAAC,KAAK,CAAC,CAAA,0BAAA,CAA4B,CAAC,CAAC;IAChD,YAAA,MAAM,KAAK,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,sBAAA,CAAwB,CAAC,CAAA;aACrD;iBAAM,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAChD,YAAA,WAAW,CAAC,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC,CAAC;IAC5C,YAAA,MAAM,KAAK,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,kBAAA,CAAoB,CAAC,CAAC;aAClD;IAED,QAAA,IAAG,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;IAC/B,YAAA,WAAW,CAAC,KAAK,CAAC,CAAA,kFAAA,CAAoF,CAAC,CAAC;IACxG,YAAA,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;aAC3B;YAED,MAAM,cAAc,GAAG,QAAQ,KAAR,IAAA,IAAA,QAAQ,KAAR,KAAA,CAAA,GAAA,QAAQ,GAAI,MAAM,CAAC,QAAQ,CAAC;IACnD,QAAA,WAAW,CAAC,GAAG,CAAC,CAAA,6BAAA,EAAgC,MAAM,CAAC,EAAE,CAA6B,0BAAA,EAAA,MAAM,CAAC,MAAM,CAAA,aAAA,EAAgB,cAAc,CAAA,CAAE,CAAC,CAAC;IAErI,QAAA,IAAI;;IAEF,YAAA,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC;oBAC1C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;oBAC/C,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;iBAClC,EAAE,IAAI,CAAC,CAAC;;IAGT,YAAA,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC;oBAClD,cAAc,EAAE,MAAM,CAAC,eAAe;oBACtC,eAAe,EAAE,MAAM,CAAC,oBAAoB;oBAC5C,aAAa,EAAE,MAAM,CAAC,cAAc;oBACpC,mBAAmB,EAAE,MAAM,CAAC,qBAAqB;oBACjD,MAAM,EAAE,MAAM,CAAC,MAA0B;IACzC,gBAAA,QAAQ,EAAE,cAAwB;IACnC,aAAA,CAAC,CAAC;IAEH,YAAA,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;aAC9B;YAAC,OAAO,KAAU,EAAE;IACnB,YAAA,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;aAC3B;SAEF;IAEO,IAAA,gBAAgB,CAAC,IAAU,EAAA;YACjC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;SACpE;QAEM,MAAM,mBAAmB,CAAC,IAAU,EAAA;YACzC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnD,QAAA,WAAW,CAAC,KAAK,CAAC,sBAAsB,cAAc,CAAA,CAAE,CAAC,CAAC;YAC1D,MAAM,eAAe,GAAG,EAAE,CAAC;YAC3B,OAAO;IACL,YAAA,mBAAmB,EAAE,cAAc;IACnC,YAAA,iBAAiB,EAAE,eAAe;aACnC,CAAC;SAEH;IAEM,IAAA,MAAM,iCAAiC,CAAC,IAAU,EAAE,WAAqB,EAAA;;;YAG9E,MAAM,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,IAAI,EAAE,WAA+B,CAAC,CAAC;IAC5F,QAAA,WAAW,CAAC,KAAK,CAAC,CAAA,sCAAA,CAAwC,CAAC,CAAC;;YAG5D,MAAM,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACnE,QAAA,WAAW,CAAC,KAAK,CAAC,CAAA,2CAAA,CAA6C,CAAC,CAAC;IACjE,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzD,QAAA,WAAW,CAAC,KAAK,CAAC,4BAA4B,oBAAoB,CAAA,CAAE,CAAC,CAAC;YAEtE,OAAO;IACL,YAAA,yBAAyB,EAAE,oBAAoB;IAC/C,YAAA,kBAAkB,EAAE,CAAA,EAAA,GAAA,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE;aAC3E,CAAC;SACH;IAKM,IAAA,MAAM,iBAAiB,CAAC,IAAU,EAAE,WAA6B,EAAA;YACtE,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;SAC9D;QAEM,MAAM,mBAAmB,CAAC,IAAU,EAAA;YACzC,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;SACnD;IAEM,IAAA,MAAM,gBAAgB,CAAC,IAAU,EAAE,oBAA4B,EAAE,eAAuB,EAAE,cAAkC,EAAE,qBAAyC,EAAE,aAAqB,EAAA;IACnM,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,aAAa,CAAC,CAAC;SAC7I;IAEM,IAAA,MAAM,wBAAwB,CAAC,IAAU,EAAE,OAAgB,EAAE,WAAoB,EAAA;YACtF,MAAM,eAAe,GAAG,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,OAAO,GAAI,iCAAiC,CAAC,gBAAgB,CAAC;YACtF,MAAM,mBAAmB,GAAG,WAAW,KAAX,IAAA,IAAA,WAAW,KAAX,KAAA,CAAA,GAAA,WAAW,GAAI,iCAAiC,CAAC,oBAAoB,CAAC;YAClG,OAAO,wBAAwB,CAAC,IAAI,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;SAC7E;QAEM,MAAM,UAAU,CAAC,IAAU,EAAA;YAChC,WAAW,CAAC,KAAK,CAAC,CAAsC,mCAAA,EAAA,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA,CAAC,CAAC;;YAGtE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;;IAE3G,QAAA,WAAW,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAC/E,QAAA,OAAO,cAAc,CAAC;SAEvB;QAEO,MAAM,oBAAoB,CAAC,IAAU,EAAE,MAAc,EAAE,aAA0B,EAAE,MAAwB,EAAE,QAA6B,EAAA;YAChJ,MAAM,KAAK,GAAG,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,KAAA,CAAA,GAAA,QAAQ,GAAI,EAAE,CAAC;IAC7B,QAAA,MAAM,oBAAoB,GAAG,aAAa,CAAC,YAAY,CAAC;IACxD,QAAA,MAAM,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;IACtD,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC;IAC1C,QAAA,MAAM,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC;IACpD,QAAA,MAAM,qBAAqB,GAAG,aAAa,CAAC,qBAAqB,CAAC;IAClE,QAAA,WAAW,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAC,MAAM,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,aAAa,EAAC,CAAC,CAAC;IACrJ,QAAA,IAAG,MAAM,KAAMJ,wBAAgB,CAAC,SAAS,EAAE;IACzC,YAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrC,YAAA,WAAW,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,aAAa,CAAC,CAAC;IAC/H,YAAA,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;aAC1C;YACD,MAAM,yBAAyB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9D,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,eAAe,CAAC;gBAC5C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;gBAC/C,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;IAClC,SAAA,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC;IACf,YAAA,cAAc,EAAE,eAAe;IAC/B,YAAA,eAAe,EAAE,oBAAoB;IACrC,YAAA,aAAa,EAAE,cAAc;IAC7B,YAAA,mBAAmB,EAAE,qBAAqB;IAC1C,YAAA,MAAM,EAAE,MAAM;IACd,YAAA,QAAQ,EAAE,KAAe;IACzB,YAAA,gBAAgB,EAAE,CAAC;IACpB,SAAA,CAAC,CAAC;IAEH,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,0BAA0B,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAG/D,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE;IACrC,YAAA,cAAc,EAAE,yBAAyB;IACzC,YAAA,eAAe,EAAE,0BAA0B;gBAC3C,iBAAiB,EAA4B,IAAI,CAAoB;IACtE,SAAA,CAAC,CAAC;IAEH,QAAA,OAAO,WAAW,CAAC;SACpB;QAEM,MAAM,WAAW,CAAC,IAAU,EAAE,QAAgB,EAAE,OAAqB,EAAE,YAAA,GAAuB,EAAE,EAAA;;;YAErG,MAAM,UAAU,GAAG,CAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,UAAU,MAAK,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YACjF,MAAM,MAAM,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAC;IAE/B,QAAA,WAAW,CAAC,KAAK,CAAC,CAAmC,gCAAA,EAAA,QAAQ,oBAAoB,IAAI,CAAC,YAAY,CAAA,WAAA,EAAc,IAAI,CAAC,OAAO,iBAAiB,UAAU,CAAA,CAAE,CAAC,CAAC;IAC3J,QAAA,IAAI;;gBAEF,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE;IACpD,gBAAA,4BAA4B,EAAE,IAAI,CAAC,aAAa,CAAC,4BAA4B;IAC7E,gBAAA,4BAA4B,EAAE,IAAI,CAAC,aAAa,CAAC,4BAA4B;IAC7E,gBAAA,6BAA6B,EAAE,IAAI,CAAC,aAAa,CAAC,6BAA6B;IAC/E,gBAAA,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB;IACpE,aAAA,CAAC,CAAC;IACH,YAAA,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;gBAChD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/C,YAAA,WAAW,CAAC,KAAK,CAAC,mCAAmC,UAAU,CAAA,CAAE,CAAC,CAAC;IAGnE,YAAA,WAAW,CAAC,KAAK,CAAC,CAAA,0CAAA,CAA4C,CAAC,CAAC;;gBAGhE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzG,YAAA,WAAW,CAAC,KAAK,CAAC,CAAA,6CAAA,CAA+C,CAAC,CAAC;;gBAGnE,IAAI,YAAY,EAAE;IAChB,gBAAA,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,cAAc,aAAd,cAAc,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAd,cAAc,CAAE,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,EAAE,CAAC;oBAChE,MAAM,wBAAwB,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAChE,gBAAA,IAAI,YAAY,KAAK,wBAAwB,EAAE;wBAC7C,WAAW,CAAC,KAAK,CAAC,CAAA,gCAAA,EAAmC,wBAAwB,CAAa,UAAA,EAAA,YAAY,CAAE,CAAA,CAAC,CAAC;wBAC1G,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,wBAAwB,CAAa,UAAA,EAAA,YAAY,CAAE,CAAA,CAAC,CAAC;qBAC/F;iBACF;;gBAGD,IAAI,MAAM,EAAE;IACV,gBAAA,WAAW,CAAC,KAAK,CAAC,gCAAgC,MAAM,CAAA,CAAE,CAAC,CAAC;oBAC5D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;oBACvD,IAAI,CAAC,IAAI,EAAE;IACT,oBAAA,WAAW,CAAC,KAAK,CAAC,CAAA,0BAAA,CAA4B,CAAC,CAAC;IAChD,oBAAA,MAAM,KAAK,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,sBAAA,CAAwB,CAAC,CAAA;qBACrD;oBAED,IAAI,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,MAAM,MAAK,QAAQ,EAAE;IAC7B,oBAAA,WAAW,CAAC,KAAK,CAAC,gDAAgD,QAAQ,CAAA,iBAAA,CAAmB,CAAC,CAAC;IAC/F,oBAAA,OAAO,cAAc,CAAC;qBACvB;IAED,gBAAA,IAAI;IACF,oBAAA,WAAW,CAAC,KAAK,CAAC,sDAAsD,QAAQ,CAAA,CAAA,CAAG,CAAC,CAAC;;IAGrF,oBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IAEzC,oBAAA,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE;IACrC,wBAAA,UAAU,EAAE,QAAQ;IACpB,wBAAA,gBAAgB,EAAE,WAAW;IAC7B,wBAAA,kBAAkB,EAAE,UAAU;IAC9B,wBAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;4BACf,MAAM,EAAEA,wBAAgB,CAAC,MAAM;IAC/B,wBAAA,cAAc,EAAE,QAAQ;IACzB,qBAAA,CAAC,CAAC;IAEH,oBAAA,WAAW,CAAC,KAAK,CAAC,gDAAgD,MAAM,CAAA,CAAE,CAAC,CAAC;qBAC7E;oBAAC,OAAO,SAAS,EAAE;IAClB,oBAAA,WAAW,CAAC,KAAK,CAAC,kCAAkC,SAAS,CAAA,CAAE,CAAC,CAAC;;qBAElE;iBACF;qBAAM,IAAI,UAAU,EAAE;IACrB,gBAAA,WAAW,CAAC,KAAK,CAAC,0DAA0D,QAAQ,CAAA,CAAA,CAAG,CAAC,CAAC;oBACzF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;wBAC7C,YAAY,EAAE,IAAI,CAAC,YAAY;IAC/B,oBAAA,UAAU,EAAE,QAAQ;IACpB,oBAAA,sBAAsB,EAAE,UAAU;IAClC,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,SAAS,EAAE,KAAK;IAChB,oBAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;wBACf,MAAM,EAAEA,wBAAgB,CAAC,MAAM;IAC/B,oBAAA,cAAc,EAAE,QAAQ;IACxB,oBAAA,wBAAwB,EAAE,IAAI;IAC9B,oBAAA,mBAAmB,EAAE,aAAa;IACnC,iBAAA,CAAC,CAAC;IACH,gBAAA,WAAW,CAAC,KAAK,CAAC,gDAAgD,MAAM,CAAA,CAAE,CAAC,CAAC;iBAC7E;IAED,YAAA,OAAO,cAAc,CAAC;aAEvB;YAAC,OAAO,KAAK,EAAE;IACd,YAAA,WAAW,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAA,CAAE,CAAC,CAAC;IACxD,YAAA,MAAM,KAAK,CAAC;aACb;SACF;IACF;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[6,7,8,9,10,22]}
1
+ {"version":3,"file":"index.cjs","sources":["../../probo-shared/dist/ElementTag.js","../../probo-shared/dist/Interaction.js","../../probo-shared/dist/PlaywrightAction.js","../../probo-shared/dist/element-utils.js","../../probo-shared/dist/MessageType.js","../../probo-shared/dist/utils.js","../../../node_modules/retry/lib/retry_operation.js","../../../node_modules/retry/lib/retry.js","../../../node_modules/retry/index.js","../../../node_modules/is-network-error/index.js","../../probo-shared/node_modules/p-retry/index.js","../../probo-shared/dist/api-client.js","../../probo-shared/dist/AIModel.js","../../probo-shared/dist/PlaywrightTimeoutConfig.js","../../probo-shared/dist/RecorderSettings.js","../../probo-shared/dist/codegen.js","../src/interpolation.ts","../src/probo-logger.ts","../src/actions.ts","../src/highlight.ts","../src/otp.ts","../src/nav-tracker.ts","../../../node_modules/otpauth/dist/otpauth.esm.js","../src/replay-utils.ts","../src/codegen-api.ts","../src/test-suite-runner.ts","../src/index.ts"],"sourcesContent":["/**\n * Element tag constants for different types of interactive elements\n */\nexport const ElementTag = {\n CLICKABLE: \"CLICKABLE\",\n FILLABLE: \"FILLABLE\",\n SELECTABLE: \"SELECTABLE\",\n NON_INTERACTIVE_ELEMENT: 'NON_INTERACTIVE_ELEMENT',\n};\n//# sourceMappingURL=ElementTag.js.map","export var ApplyAIStatus;\n(function (ApplyAIStatus) {\n ApplyAIStatus[\"PREPARE_START\"] = \"PREPARE_START\";\n ApplyAIStatus[\"PREPARE_SUCCESS\"] = \"PREPARE_SUCCESS\";\n ApplyAIStatus[\"PREPARE_ERROR\"] = \"PREPARE_ERROR\";\n ApplyAIStatus[\"SEND_START\"] = \"SEND_START\";\n ApplyAIStatus[\"SEND_SUCCESS\"] = \"SEND_SUCCESS\";\n ApplyAIStatus[\"SEND_ERROR\"] = \"SEND_ERROR\";\n ApplyAIStatus[\"APPLY_AI_ERROR\"] = \"APPLY_AI_ERROR\";\n ApplyAIStatus[\"APPLY_AI_CANCELLED\"] = \"APPLY_AI_CANCELLED\";\n ApplyAIStatus[\"SUMMARY_COMPLETED\"] = \"SUMMARY_COMPLETED\";\n ApplyAIStatus[\"SUMMARY_ERROR\"] = \"SUMMARY_ERROR\";\n})(ApplyAIStatus || (ApplyAIStatus = {}));\nexport var ReplayStatus;\n(function (ReplayStatus) {\n ReplayStatus[\"REPLAY_START\"] = \"REPLAY_START\";\n ReplayStatus[\"REPLAY_SUCCESS\"] = \"REPLAY_SUCCESS\";\n ReplayStatus[\"REPLAY_ERROR\"] = \"REPLAY_ERROR\";\n ReplayStatus[\"REPLAY_CANCELLED\"] = \"REPLAY_CANCELLED\";\n})(ReplayStatus || (ReplayStatus = {}));\n//# sourceMappingURL=Interaction.js.map","// Action constants\nexport var PlaywrightAction;\n(function (PlaywrightAction) {\n PlaywrightAction[\"VISIT_BASE_URL\"] = \"VISIT_BASE_URL\";\n PlaywrightAction[\"VISIT_URL\"] = \"VISIT_URL\";\n PlaywrightAction[\"CLICK\"] = \"CLICK\";\n PlaywrightAction[\"FILL_IN\"] = \"FILL_IN\";\n PlaywrightAction[\"SELECT_DROPDOWN\"] = \"SELECT_DROPDOWN\";\n PlaywrightAction[\"SELECT_MULTIPLE_DROPDOWN\"] = \"SELECT_MULTIPLE_DROPDOWN\";\n PlaywrightAction[\"CHECK_CHECKBOX\"] = \"CHECK_CHECKBOX\";\n PlaywrightAction[\"SELECT_RADIO\"] = \"SELECT_RADIO\";\n PlaywrightAction[\"TOGGLE_SWITCH\"] = \"TOGGLE_SWITCH\";\n PlaywrightAction[\"SET_SLIDER\"] = \"SET_SLIDER\";\n PlaywrightAction[\"TYPE_KEYS\"] = \"TYPE_KEYS\";\n PlaywrightAction[\"HOVER\"] = \"HOVER\";\n PlaywrightAction[\"ASSERT_EXACT_VALUE\"] = \"ASSERT_EXACT_VALUE\";\n PlaywrightAction[\"ASSERT_CONTAINS_VALUE\"] = \"ASSERT_CONTAINS_VALUE\";\n PlaywrightAction[\"ASSERT_URL\"] = \"ASSERT_URL\";\n PlaywrightAction[\"SCROLL_TO_ELEMENT\"] = \"SCROLL_TO_ELEMENT\";\n PlaywrightAction[\"EXTRACT_VALUE\"] = \"EXTRACT_VALUE\";\n PlaywrightAction[\"ASK_AI\"] = \"ASK_AI\";\n PlaywrightAction[\"EXECUTE_SCRIPT\"] = \"EXECUTE_SCRIPT\";\n PlaywrightAction[\"UPLOAD_FILES\"] = \"UPLOAD_FILES\";\n PlaywrightAction[\"WAIT_FOR\"] = \"WAIT_FOR\";\n PlaywrightAction[\"WAIT_FOR_OTP\"] = \"WAIT_FOR_OTP\";\n PlaywrightAction[\"GEN_TOTP\"] = \"GEN_TOTP\";\n // Sequence marker actions (not real interactions, used only for grouping)\n PlaywrightAction[\"SEQUENCE_START\"] = \"SEQUENCE_START\";\n PlaywrightAction[\"SEQUENCE_END\"] = \"SEQUENCE_END\";\n})(PlaywrightAction || (PlaywrightAction = {}));\n//# sourceMappingURL=PlaywrightAction.js.map","import { ElementTag } from \"./ElementTag.js\";\nimport { PlaywrightAction } from \"./PlaywrightAction.js\";\n/**\n * Resolves an action type to the corresponding ElementTag\n *\n * @param action The action type (CLICK, FILL_IN, SELECT_DROPDOWN)\n * @returns The corresponding ElementTag\n */\nexport function resolveElementTag(action) {\n switch (action) {\n case PlaywrightAction.CLICK:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE];\n case PlaywrightAction.FILL_IN:\n return [ElementTag.FILLABLE];\n case PlaywrightAction.SELECT_DROPDOWN:\n return [ElementTag.SELECTABLE];\n case PlaywrightAction.HOVER:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE, ElementTag.NON_INTERACTIVE_ELEMENT];\n case PlaywrightAction.ASSERT_EXACT_VALUE:\n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\n case PlaywrightAction.EXTRACT_VALUE:\n case PlaywrightAction.WAIT_FOR:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE, ElementTag.NON_INTERACTIVE_ELEMENT];\n case PlaywrightAction.WAIT_FOR_OTP:\n case PlaywrightAction.GEN_TOTP:\n return [ElementTag.FILLABLE];\n default:\n console.error(`Unknown action: ${action}`);\n throw new Error(`Unknown action: ${action}`);\n }\n}\nexport function getElementText(element) {\n var _a;\n return element.textContent || element.innerText || element.value || ((_a = element.querySelector('input')) === null || _a === void 0 ? void 0 : _a.value) || '';\n}\n/**\n * Checks if any string in the array matches the given regular expression pattern.\n *\n * @param array - Array of strings to test.\n * @param pattern - Regular expression to test against each string.\n * @returns true if at least one string matches the pattern, false otherwise.\n */\nfunction testArray(array, pattern) {\n return array.some(item => pattern.test(item));\n}\n/**\n * Determines if an element is fillable (can accept text input)\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is fillable\n */\nexport function isFillableElement(element) {\n var _a;\n if (!element)\n return false;\n // Check if it's an input element\n if (element.tagName === 'INPUT') {\n const inputType = (_a = element.type) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n const isOTPInput = element.getAttribute('data-input-otp') === 'true' ||\n element.getAttribute('autocomplete') === 'one-time-code';\n // if it's an OTP input, don't consider it fillable as it's handled by OTP logic\n if (isOTPInput)\n return false;\n // Include text, password, email, number, tel, url, search, date, datetime-local, month, week, time\n const fillableTypes = [\n 'text', 'password', 'email', 'number', 'tel', 'url', 'search',\n 'date', 'datetime-local', 'month', 'week', 'time'\n ];\n return fillableTypes.includes(inputType);\n }\n // Check if it's a textarea\n if (element.tagName === 'TEXTAREA') {\n return true;\n }\n // Check if it's a contenteditable element\n if (element.getAttribute('contenteditable') === 'true') {\n return true;\n }\n return false;\n}\n/**\n * Determines if an element is a selectable dropdown element\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is a select element\n */\nexport function isSelectableElement(element) {\n return element && element.tagName === 'SELECT';\n}\n/**\n * Determines if an element is a non-interactive element (not clickable, fillable, or selectable)\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is non-interactive\n */\nexport function isSliderElement(element) {\n if (!element)\n return false;\n // check for <input type=\"range\">\n if (element.tagName === 'INPUT' && element.getAttribute('type') === 'range')\n return true;\n // check for role and additional attributes\n const sliderAttributes = ['aria-valuenow', 'aria-valuemin', 'aria-valuemax'];\n if (element.getAttribute('role') === 'slider' || sliderAttributes.some(attr => element.hasAttribute(attr)))\n return true;\n // check for class names\n const classNames = Array.from(element.classList);\n const sliderClassPattern = /^MuiSlider|mat-slider|mdl-slider|ui-slider|carousel/;\n if (testArray(classNames, sliderClassPattern))\n return true;\n return false;\n}\n/**\n * Determines if an element is an <input type=\"file\"> element.\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is an input file element\n */\nexport function isInputFileElement(element) {\n return element && element.tagName === 'INPUT' && element.getAttribute('type') === 'file';\n}\n/**\n * Determines if an element is clickable\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is fillable\n */\nexport function isClickableElement(element) {\n if (!element)\n return false;\n let depth = 0;\n while (depth < 5 && element && element.nodeType === Node.ELEMENT_NODE) {\n if (isClickableElementHelper(element) === IsClickable.YES)\n return true;\n if (isClickableElementHelper(element) === IsClickable.NO)\n return false;\n // if maybe, continue searching up to 5 levels up the DOM tree\n element = element.parentNode;\n depth++;\n }\n return false;\n}\n// clickable element detection result\nvar IsClickable;\n(function (IsClickable) {\n IsClickable[\"YES\"] = \"YES\";\n IsClickable[\"NO\"] = \"NO\";\n IsClickable[\"MAYBE\"] = \"MAYBE\";\n})(IsClickable || (IsClickable = {}));\nfunction isClickableElementHelper(element) {\n var _a, _b;\n if (!element)\n return IsClickable.NO;\n //check for tag name\n const tagName = element.tagName.toLowerCase();\n const clickableTags = [\n 'a', 'button',\n ];\n if (clickableTags.includes(tagName))\n return IsClickable.YES;\n //check for clickable <input>\n const inputType = (_a = element.type) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n const clickableTypes = [\n 'button', 'submit', 'reset', 'checkbox', 'radio',\n ];\n const ariaAutocompleteValues = [\n 'list', 'both',\n ];\n if (tagName === 'input') {\n if (clickableTypes.includes(inputType) || ariaAutocompleteValues.includes((_b = element.getAttribute('aria-autocomplete')) !== null && _b !== void 0 ? _b : ''))\n return IsClickable.YES;\n if (['date', 'number', 'range'].includes(inputType))\n return IsClickable.NO; //don't record the click as a change event will be generated for elements that generate an input change event\n }\n // check for cursor type\n const style = window.getComputedStyle(element);\n if (style.cursor === 'pointer')\n return IsClickable.YES;\n // check for attributes\n const clickableRoles = [\n 'button', 'combobox', 'listbox', 'dropdown', 'option', 'menu', 'menuitem',\n 'navigation', 'checkbox', 'switch', 'toggle', 'slider', 'textbox', 'listitem',\n 'presentation',\n ];\n const ariaPopupValues = [\n 'true', 'listbox', 'menu',\n ];\n if (element.hasAttribute('onclick') ||\n clickableRoles.includes(element.getAttribute('role') || '') ||\n ariaPopupValues.includes(element.getAttribute('aria-haspopup') || ''))\n return IsClickable.YES;\n // check for tabindex (means element is focusable and therefore clickable)\n if (parseInt(element.getAttribute('tabindex') || '-1') >= 0)\n return IsClickable.YES;\n // extract class names\n const classNames = Array.from(element.classList);\n // check for checkbox/radio-like class name - TODO: check if can be removed\n const checkboxPattern = /checkbox|switch|toggle|slider/i;\n if (testArray(classNames, checkboxPattern))\n return IsClickable.YES;\n // check for Material UI class names\n const muiClickableClassPattern = /MuiButton|MuiIconButton|MuiChip|MuiMenuItem|MuiListItem|MuiInputBase|MuiOutlinedInput|MuiSelect|MuiAutocomplete|MuiToggleButton|MuiBackdrop-root|MuiBackdrop-invisible/;\n if (testArray(classNames, muiClickableClassPattern))\n return IsClickable.YES;\n // check for SalesForce class names\n const sfClassPattern = /slds-button|slds-dropdown|slds-combobox|slds-picklist|slds-tabs|slds-pill|slds-action|slds-row-action|slds-context-bar|slds-input|slds-rich-text-area|slds-radio|slds-checkbox|slds-toggle|slds-link|slds-accordion|slds-tree/;\n if (testArray(classNames, sfClassPattern))\n return IsClickable.YES;\n // check for chart dots\n const chartClickableClassPattern = /recharts-dot/;\n if (testArray(classNames, chartClickableClassPattern))\n return IsClickable.YES;\n // check for React component classes\n const reactClickableClassPattern = /react-select|ant-select|rc-select|react-dropdown|react-autocomplete|react-datepicker|react-modal|react-tooltip|react-popover|react-menu|react-tabs|react-accordion|react-collapse|react-toggle|react-switch|react-checkbox|react-radio|react-button|react-link|react-card|react-list-item|react-menu-item|react-option|react-tab|react-panel|react-drawer|react-sidebar|react-nav|react-breadcrumb|react-pagination|react-stepper|react-wizard|react-carousel|react-slider|react-range|react-progress|react-badge|react-chip|react-tag|react-avatar|react-icon|react-fab|react-speed-dial|react-floating|react-sticky|react-affix|react-backdrop|react-overlay|react-portal|react-transition|react-animate|react-spring|react-framer|react-gesture|react-drag|react-drop|react-sortable|react-resizable|react-split|react-grid|react-table|react-datagrid|react-tree|react-treeview|react-file|react-upload|react-cropper|react-image|react-gallery|react-lightbox|react-player|react-video|react-audio|react-chart|react-graph|react-diagram|react-flow|react-d3|react-plotly|react-vega|react-vis|react-nivo|react-recharts|react-victory|react-echarts|react-highcharts|react-google-charts|react-fusioncharts|react-apexcharts|react-chartjs|react-chartkick|react-sparklines|react-trend|react-smooth|react-animated|react-lottie|react-spring|react-framer-motion|react-pose|react-motion|react-transition-group|react-router|react-navigation/i;\n if (testArray(classNames, reactClickableClassPattern))\n return IsClickable.YES;\n //check for cloudinary class names\n const cloudinaryClickableClassPattern = /cld-combobox|cld-upload-button|cld-controls|cld-player|cld-tab|cld-menu-item|cld-close|cld-play|cld-pause|cld-fullscreen|cld-browse|cld-cancel|cld-retry/;\n if (testArray(classNames, cloudinaryClickableClassPattern))\n return IsClickable.YES;\n return IsClickable.MAYBE;\n}\nexport function isTextInputElement(element) {\n return (element.tagName === 'INPUT' && element.getAttribute('type') !== 'checkbox' && element.getAttribute('type') !== 'radio') ||\n element.tagName === 'TEXTAREA' ||\n element.getAttribute('contenteditable') === 'true' ||\n element.getAttribute('role') === 'textbox';\n}\nexport function getParentNode(element) {\n if (!element || element.nodeType !== Node.ELEMENT_NODE)\n return null;\n let parent = null;\n // SF is using slots and shadow DOM heavily\n // However, there might be slots in the light DOM which shouldn't be traversed\n if (element.assignedSlot && element.getRootNode() instanceof ShadowRoot)\n parent = element.assignedSlot;\n else\n parent = element.parentNode;\n // Check if we're at a shadow root\n if (parent && parent.nodeType !== Node.ELEMENT_NODE && parent.getRootNode() instanceof ShadowRoot)\n parent = parent.getRootNode().host;\n return parent;\n}\nexport function getElementDepth(element) {\n let depth = 0;\n let currentElement = element;\n while ((currentElement === null || currentElement === void 0 ? void 0 : currentElement.nodeType) === Node.ELEMENT_NODE) {\n depth++;\n currentElement = getParentNode(currentElement);\n }\n return depth;\n}\n//# sourceMappingURL=element-utils.js.map","// WebSocketsMessageType enum for WebSocket and event message types shared across the app\nexport var WebSocketsMessageType;\n(function (WebSocketsMessageType) {\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_START\"] = \"INTERACTION_APPLY_AI_PREPARE_START\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_SUCCESS\"] = \"INTERACTION_APPLY_AI_PREPARE_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_ERROR\"] = \"INTERACTION_APPLY_AI_PREPARE_ERROR\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_START\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_START\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_SUCCESS\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_ERROR\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_ERROR\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_START\"] = \"INTERACTION_REPLAY_START\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_SUCCESS\"] = \"INTERACTION_REPLAY_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_ERROR\"] = \"INTERACTION_REPLAY_ERROR\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_CANCELLED\"] = \"INTERACTION_REPLAY_CANCELLED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_CANCELLED\"] = \"INTERACTION_APPLY_AI_CANCELLED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_ERROR\"] = \"INTERACTION_APPLY_AI_ERROR\";\n WebSocketsMessageType[\"INTERACTION_STEP_CREATED\"] = \"INTERACTION_STEP_CREATED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SUMMARY_COMPLETED\"] = \"INTERACTION_APPLY_AI_SUMMARY_COMPLETED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SUMMARY_ERROR\"] = \"INTERACTION_APPLY_AI_SUMMARY_ERROR\";\n WebSocketsMessageType[\"OTP_RETRIEVED\"] = \"OTP_RETRIEVED\";\n WebSocketsMessageType[\"TEST_SUITE_RUN_START\"] = \"TEST_SUITE_RUN_START\";\n WebSocketsMessageType[\"TEST_SUITE_RUN_LOG\"] = \"TEST_SUITE_RUN_LOG\";\n WebSocketsMessageType[\"TEST_SUITE_RUN_COMPLETE\"] = \"TEST_SUITE_RUN_COMPLETE\";\n WebSocketsMessageType[\"TEST_SUITE_RUN_ERROR\"] = \"TEST_SUITE_RUN_ERROR\";\n WebSocketsMessageType[\"TEST_SUITE_RUN_REPORTER_EVENT\"] = \"TEST_SUITE_RUN_REPORTER_EVENT\";\n})(WebSocketsMessageType || (WebSocketsMessageType = {}));\n//# sourceMappingURL=MessageType.js.map","import { PlaywrightAction } from './PlaywrightAction.js';\n/**\n * Logging levels for Probo\n */\nexport var ProboLogLevel;\n(function (ProboLogLevel) {\n ProboLogLevel[\"DEBUG\"] = \"DEBUG\";\n ProboLogLevel[\"INFO\"] = \"INFO\";\n ProboLogLevel[\"LOG\"] = \"LOG\";\n ProboLogLevel[\"WARN\"] = \"WARN\";\n ProboLogLevel[\"ERROR\"] = \"ERROR\";\n})(ProboLogLevel || (ProboLogLevel = {}));\nconst logLevelOrder = {\n [ProboLogLevel.DEBUG]: 0,\n [ProboLogLevel.INFO]: 1,\n [ProboLogLevel.LOG]: 2,\n [ProboLogLevel.WARN]: 3,\n [ProboLogLevel.ERROR]: 4,\n};\nexport class ProboLogger {\n constructor(prefix, level = ProboLogLevel.INFO) {\n this.prefix = prefix;\n this.level = level;\n }\n setLogLevel(level) {\n console.log(`[${this.prefix}] Setting log level to: ${level} (was: ${this.level})`);\n this.level = level;\n }\n shouldLog(level) {\n return logLevelOrder[level] >= logLevelOrder[this.level];\n }\n preamble(level) {\n const now = new Date();\n const hours = String(now.getHours()).padStart(2, '0');\n const minutes = String(now.getMinutes()).padStart(2, '0');\n const seconds = String(now.getSeconds()).padStart(2, '0');\n const milliseconds = String(now.getMilliseconds()).padStart(3, '0');\n return `[${hours}:${minutes}:${seconds}.${milliseconds}] [${this.prefix}] [${level}]`;\n }\n debug(...args) { if (this.shouldLog(ProboLogLevel.DEBUG))\n console.debug(this.preamble(ProboLogLevel.DEBUG), ...args); }\n info(...args) { if (this.shouldLog(ProboLogLevel.INFO))\n console.info(this.preamble(ProboLogLevel.INFO), ...args); }\n log(...args) { if (this.shouldLog(ProboLogLevel.LOG))\n console.log(this.preamble(ProboLogLevel.LOG), ...args); }\n warn(...args) { if (this.shouldLog(ProboLogLevel.WARN))\n console.warn(this.preamble(ProboLogLevel.WARN), ...args); }\n error(...args) { if (this.shouldLog(ProboLogLevel.ERROR))\n console.error(this.preamble(ProboLogLevel.ERROR), ...args); }\n}\nconst fetchLogger = new ProboLogger('fetch');\nfunction formatFetchErrorDetails(error, depth = 0) {\n if (!error || depth > 2) {\n return String(error);\n }\n if (error instanceof Error) {\n const err = error;\n const details = {\n name: err.name,\n message: err.message\n };\n for (const key of ['code', 'errno', 'syscall', 'hostname', 'address', 'port', 'type']) {\n if (err[key] !== undefined) {\n details[key] = err[key];\n }\n }\n if (err.cause !== undefined) {\n details.cause = formatFetchErrorDetails(err.cause, depth + 1);\n }\n return details;\n }\n if (typeof error === 'object') {\n const err = error;\n const details = {};\n for (const key of ['name', 'message', 'code', 'errno', 'syscall', 'hostname', 'address', 'port', 'type']) {\n if (err[key] !== undefined) {\n details[key] = err[key];\n }\n }\n if (err.cause !== undefined) {\n details.cause = formatFetchErrorDetails(err.cause, depth + 1);\n }\n return Object.keys(details).length > 0 ? details : String(error);\n }\n return String(error);\n}\nfunction getFetchUrl(input) {\n if (typeof input === 'string')\n return input;\n if (input instanceof URL)\n return input.toString();\n if (typeof input === 'object' && input && 'url' in input) {\n const url = input.url;\n if (typeof url === 'string')\n return url;\n }\n return 'unknown-url';\n}\nfunction getFetchMethod(input, init) {\n if (init === null || init === void 0 ? void 0 : init.method)\n return init.method;\n if (typeof input === 'object' && input && 'method' in input) {\n const method = input.method;\n if (typeof method === 'string')\n return method;\n }\n return 'GET';\n}\nexport async function fetchWithLogging(input, init, context) {\n try {\n return await fetch(input, init);\n }\n catch (error) {\n const url = getFetchUrl(input);\n const method = getFetchMethod(input, init);\n const meta = {\n source: context === null || context === void 0 ? void 0 : context.source,\n operation: context === null || context === void 0 ? void 0 : context.operation,\n method,\n url,\n details: formatFetchErrorDetails(error)\n };\n fetchLogger.error('Fetch failed', meta);\n throw error;\n }\n}\n// Element cleaner logging\n// const elementLogger = new ProboLogger('element-cleaner');\n/**\n * Cleans and returns a minimal element info structure.\n */\n//TODO: is this needed?\n/* export function cleanupElementInfo(elementInfo: ElementInfo): CleanElementInfo {\n elementLogger.debug(\n `Cleaning up element info for ${elementInfo.tag} at index ${elementInfo.index}`\n );\n const depth = elementInfo.depth ?? elementInfo.getDepth();\n const cleanEl = {\n index: elementInfo.index,\n tag: elementInfo.tag,\n type: elementInfo.type,\n text: elementInfo.text,\n html: elementInfo.html,\n xpath: elementInfo.xpath,\n css_selector: elementInfo.css_selector,\n iframe_selector: elementInfo.iframe_selector,\n bounding_box: elementInfo.bounding_box,\n depth\n };\n elementLogger.debug(`Cleaned element: ${JSON.stringify(cleanEl)}`);\n return cleanEl;\n} */\n/**\n * Cleans highlighted elements in an instruction payload.\n */\n/* export function cleanupInstructionElements(instruction: any): any {\n if (!instruction?.result?.highlighted_elements) {\n elementLogger.debug('No highlighted elements to clean');\n return instruction;\n }\n elementLogger.debug(\n `Cleaning ${instruction.result.highlighted_elements.length} highlighted elements`\n );\n const cleaned = {\n ...instruction,\n result: {\n ...instruction.result,\n highlighted_elements: instruction.result.highlighted_elements.map(\n (el: ElementInfo) => cleanupElementInfo(el)\n )\n }\n };\n elementLogger.debug('Instruction cleaning completed');\n return cleaned;\n} */\n// Determine whether an interaction can return a value\nexport const hasReturnValue = (i) => {\n return [\n PlaywrightAction.EXTRACT_VALUE,\n PlaywrightAction.ASK_AI,\n PlaywrightAction.EXECUTE_SCRIPT\n ].includes(i.action);\n};\nexport const getReturnValueParameterName = (i) => {\n switch (i.action) {\n case PlaywrightAction.EXTRACT_VALUE:\n case PlaywrightAction.EXECUTE_SCRIPT:\n return i.parameterName;\n case PlaywrightAction.ASK_AI:\n return i.parameterName.replace(/^assert_/, '');\n default:\n console.error(`Action ${i.action} has no return value`);\n return '';\n }\n};\n// Determine whether an interaction can be parameterized\nexport const isParameterizable = (i) => {\n const parameterizableActions = [\n PlaywrightAction.FILL_IN,\n PlaywrightAction.SELECT_DROPDOWN,\n PlaywrightAction.SET_SLIDER,\n PlaywrightAction.ASSERT_CONTAINS_VALUE,\n PlaywrightAction.ASSERT_EXACT_VALUE,\n PlaywrightAction.VISIT_URL,\n PlaywrightAction.ASSERT_URL,\n PlaywrightAction.UPLOAD_FILES,\n PlaywrightAction.WAIT_FOR,\n PlaywrightAction.GEN_TOTP,\n PlaywrightAction.WAIT_FOR_OTP\n ];\n return parameterizableActions.includes(i.action) || (i.action === PlaywrightAction.ASK_AI && i.argument);\n};\n// Determine whether an interaction is AI-related\nexport const isAI = (i) => {\n var _a, _b, _c, _d, _e, _f;\n return !['TYPE_KEYS', 'VISIT_URL', 'EXECUTE_SCRIPT'].includes(i.action) &&\n (i.action === PlaywrightAction.ASK_AI ||\n (((_b = (_a = i.serverResponse) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b.prompt) && (((_d = (_c = i.serverResponse) === null || _c === void 0 ? void 0 : _c.result) === null || _d === void 0 ? void 0 : _d.error) === \"\" || !((_f = (_e = i.serverResponse) === null || _e === void 0 ? void 0 : _e.result) === null || _f === void 0 ? void 0 : _f.error))));\n};\n// Determine whether an interaction is fortified (doesn't need AI processing)\nexport const isFortifiedInteraction = (i) => {\n return [\n PlaywrightAction.VISIT_URL,\n PlaywrightAction.ASSERT_URL,\n PlaywrightAction.TYPE_KEYS,\n PlaywrightAction.EXECUTE_SCRIPT,\n PlaywrightAction.ASK_AI\n ].includes(i.action);\n};\n/**\n * Check if an interaction is a sequence marker (SEQUENCE_START or SEQUENCE_END)\n * @param action - The PlaywrightAction to check\n * @returns true if the action is a sequence marker\n */\nexport function isSequenceMarker(action) {\n return action === PlaywrightAction.SEQUENCE_START || action === PlaywrightAction.SEQUENCE_END;\n}\nexport function singleQuoteString(str) {\n if (!str)\n return '';\n return `'${str.replace(/'/g, \"\\\\'\")}'`;\n}\nexport function doubleQuoteString(str) {\n if (!str)\n return '';\n return `\"${str.replace(/\"/g, '\\\\\"')}\"`;\n}\n/**\n * Extract unique process.env variable names from a parameter table.\n * Looks for ${process.env.VAR_NAME} patterns in string values.\n */\nexport function extractEnvVarsFromParameterTable(parameterTable) {\n if (!Array.isArray(parameterTable) || parameterTable.length === 0) {\n return [];\n }\n const envVars = new Set();\n const pattern = /\\$\\{process\\.env\\.([a-zA-Z_][a-zA-Z0-9_]*)\\}/g;\n parameterTable.forEach((row) => {\n Object.values(row).forEach((value) => {\n if (typeof value !== 'string')\n return;\n let match;\n while ((match = pattern.exec(value)) !== null) {\n envVars.add(match[1]);\n }\n });\n });\n return Array.from(envVars).sort();\n}\n/**\n * Converts a string to a filesystem-safe slug.\n * Used for filenames/package names (not URL parsing).\n */\nexport function slugify(text) {\n if (!text)\n return 'scenario';\n return text\n .toLowerCase()\n .trim()\n .replace(/[^a-zA-Z0-9-_]/g, '-') // Replace non-alphanumeric chars with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with single hyphen\n .replace(/^-|-$/g, '') // Remove leading/trailing hyphens\n .substring(0, 100); // Limit length to 100 chars\n}\n// Normalize a parameter name to a legal JS identifier\nexport function normalizeParameterName(name) {\n // 0. Remove leading/trailing spaces\n // 1. Replace invalid characters with underscores\n // 2. collapse multiple underscores\n // 3. Remove trailing underscores\n // 4. If starts with a digit, prepend '_'\n // 5. Convert to lowercase\n name = name.trim();\n name = name.replace(/[^a-zA-Z0-9_$]/g, '_');\n name = name.replace(/_+/g, '_');\n name = name.replace(/_+$/, ''); // Remove trailing underscores\n if (/^[0-9]/.test(name)) {\n name = '_' + name;\n }\n name = name.toLowerCase();\n // Ensure we never return an empty string or just underscores\n if (!name || name === '_' || /^_+$/.test(name)) {\n name = 'param_' + Date.now();\n }\n return name;\n}\nexport function matchRegex(str, regex) {\n //parse the regex string\n const match = regex.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (!match) // normal string\n return str.includes(regex);\n else { // regex string\n const pattern = match[1].replace(/\\\\/g, '\\\\');\n const flags = match[2];\n console.log(`Matching ${str} against ${pattern} with flags ${flags}`);\n return new RegExp(pattern, flags).test(str);\n }\n}\n/**\n * Truncates a URL by replacing query parameters (everything after ?) with three dots.\n * @param url The URL to truncate\n * @returns The truncated URL with three dots replacing query parameters\n */\nexport function truncateUrl(url) {\n if (!url)\n return '';\n const questionMarkIndex = url.indexOf('?');\n if (questionMarkIndex === -1) {\n // No query parameters found, return the original URL\n return url;\n }\n const baseUrl = url.substring(0, questionMarkIndex);\n return `${baseUrl}...`;\n}\n/**\n * Sets up browser console logging on a Playwright page.\n * This function removes all existing console listeners and optionally adds a new one.\n * @param page The Playwright page instance\n * @param enableConsoleLogs Whether to enable console logging\n * @param logger Optional logger instance to use for output (defaults to console.log)\n */\nexport const setupBrowserConsoleLogs = (page, enableConsoleLogs, logger = null) => {\n // Always remove all existing console listeners first\n page.removeAllListeners('console');\n // Always add a listener, but filter output based on enableConsoleLogs\n const listener = (msg) => {\n if (enableConsoleLogs) {\n const type = msg.type();\n const text = msg.text();\n if (logger) {\n logger.log(`[Browser-${type}]: ${text}`);\n }\n else {\n console.log(`[Browser-${type}]: ${text}`);\n }\n }\n // If disabled, do nothing (silently ignore the console message)\n };\n page.on('console', listener);\n};\n/**\n * Safely interpolates template literals in a string using the provided context.\n * Similar to JavaScript template literals, but executed safely at runtime.\n * Recursively interpolates until no more template literals remain.\n *\n * This function only interpolates the argument string itself, not the entire context.\n * When a template literal resolves to another string containing template literals,\n * it recursively interpolates that result.\n *\n * @param str The string containing template literal syntax (e.g., \"Hello ${name}\")\n * @param context The context object containing variables for interpolation\n * @param maxDepth Maximum recursion depth to prevent infinite loops (default: 10)\n * @returns The interpolated string, or the original string if no interpolation is needed\n */\nexport function interpolateTemplate(str, context, maxDepth = 10) {\n if (typeof str !== 'string' || !str.includes('${')) {\n return str;\n }\n if (maxDepth <= 0) {\n console.warn('⚠️ Maximum interpolation depth reached, returning partially interpolated string');\n return str;\n }\n try {\n // Escape backticks in the template to prevent template literal injection\n const escapedTemplate = str.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`');\n // Create a safe template execution function\n // Assign all context properties to variables so they're accessible in the template\n // This works for both simple values and nested objects like process.env\n const contextKeys = Object.keys(context);\n const assignments = contextKeys.map(key => `const ${key} = ctx.${key};`).join('\\n');\n const functionBody = `\n const ctx = arguments[0];\n ${assignments}\n return \\`${escapedTemplate}\\`;\n `;\n const compiled = new Function(functionBody);\n const rendered = compiled(context);\n // If the result still contains template literals, recursively interpolate\n if (rendered.includes('${') && rendered !== str) {\n return interpolateTemplate(rendered, context, maxDepth - 1);\n }\n return rendered;\n }\n catch (e) {\n const error = e instanceof Error ? e : new Error(String(e));\n console.error('⚠️ Template evaluation failed:', error);\n throw error;\n }\n}\nexport class Mutex {\n constructor() {\n this._locked = false;\n this._waiters = [];\n }\n lock() {\n return new Promise((resolve) => {\n const unlock = () => {\n if (this._waiters.length > 0) {\n const nextResolve = this._waiters.shift();\n if (nextResolve) {\n nextResolve(unlock);\n }\n }\n else {\n this._locked = false;\n }\n };\n if (this._locked) {\n this._waiters.push(resolve);\n }\n else {\n this._locked = true;\n resolve(unlock);\n }\n });\n }\n async withLock(fn) {\n const unlock = await this.lock();\n try {\n return await fn();\n }\n finally {\n unlock();\n }\n }\n}\n//# sourceMappingURL=utils.js.map","function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n","module.exports = require('./lib/retry');","const objectToString = Object.prototype.toString;\n\nconst isError = value => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n\t' A network error occurred.', // Bun (WebKit)\n\t'Network connection lost', // Cloudflare Workers (fetch)\n]);\n\nexport default function isNetworkError(error) {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\tconst {message, stack} = error;\n\n\t// Safari 17+ has generic message but no stack for network errors\n\tif (message === 'Load failed') {\n\t\treturn stack === undefined\n\t\t\t// Sentry adds its own stack trace to the fetch error, so also check for that\n\t\t\t|| '__sentry_captured__' in error;\n\t}\n\n\t// Deno network errors start with specific text\n\tif (message.startsWith('error sending request for url')) {\n\t\treturn true;\n\t}\n\n\t// Standard network error messages\n\treturn errorMessages.has(message);\n}\n","import retry from 'retry';\nimport isNetworkError from 'is-network-error';\n\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nexport default async function pRetry(input, options) {\n\treturn new Promise((resolve, reject) => {\n\t\toptions = {...options};\n\t\toptions.onFailedAttempt ??= () => {};\n\t\toptions.shouldRetry ??= () => true;\n\t\toptions.retries ??= 10;\n\n\t\tconst operation = retry.operation(options);\n\n\t\tconst abortHandler = () => {\n\t\t\toperation.stop();\n\t\t\treject(options.signal?.reason);\n\t\t};\n\n\t\tif (options.signal && !options.signal.aborted) {\n\t\t\toptions.signal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tconst cleanUp = () => {\n\t\t\toptions.signal?.removeEventListener('abort', abortHandler);\n\t\t\toperation.stop();\n\t\t};\n\n\t\toperation.attempt(async attemptNumber => {\n\t\t\ttry {\n\t\t\t\tconst result = await input(attemptNumber);\n\t\t\t\tcleanUp();\n\t\t\t\tresolve(result);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t\t\tthrow new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof AbortError) {\n\t\t\t\t\t\tthrow error.originalError;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof TypeError && !isNetworkError(error)) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\t\tif (!(await options.shouldRetry(error))) {\n\t\t\t\t\t\toperation.stop();\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\n\t\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\t\tthrow operation.mainError();\n\t\t\t\t\t}\n\t\t\t\t} catch (finalError) {\n\t\t\t\t\tdecorateErrorWithCounts(finalError, attemptNumber, options);\n\t\t\t\t\tcleanUp();\n\t\t\t\t\treject(finalError);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n","import pRetry from 'p-retry';\nimport { ProboLogger } from './utils.js';\nexport const apiLogger = new ProboLogger('apiclient');\nexport class ApiError extends Error {\n constructor(status, message, data) {\n super(message);\n this.status = status;\n this.data = data;\n this.name = 'ApiError';\n // Remove stack trace for cleaner error messages\n this.stack = undefined;\n }\n toString() {\n return `${this.message} (Status: ${this.status})`;\n }\n}\nexport class ApiClient {\n constructor(apiUrl, token, maxRetries = 3, initialBackoff = 1000) {\n this.apiUrl = apiUrl;\n this.token = token;\n this.maxRetries = maxRetries;\n this.initialBackoff = initialBackoff;\n }\n /**\n * Determines if an error should be retried.\n * Only retries on timeout and network errors, not on client/server errors.\n */\n isRetryableError(error) {\n var _a, _b, _c, _d, _e;\n // Network/connection errors should be retried\n if ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('fetch failed'))\n return true;\n if ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('network'))\n return true;\n if ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('ETIMEDOUT'))\n return true;\n if ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('ECONNRESET'))\n return true;\n if ((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('ECONNREFUSED'))\n return true;\n if (error.code === 'ETIMEDOUT')\n return true;\n if (error.code === 'ECONNRESET')\n return true;\n if (error.code === 'ECONNREFUSED')\n return true;\n // If it's an ApiError, check the status code\n if (error instanceof ApiError) {\n // Retry on timeout-related status codes\n if (error.status === 408)\n return true; // Request Timeout\n if (error.status === 502)\n return true; // Bad Gateway (temporary)\n if (error.status === 503)\n return true; // Service Unavailable (temporary)\n if (error.status === 504)\n return true; // Gateway Timeout\n if (error.status === 0)\n return true; // Network error\n // Don't retry on client errors (4xx) or server errors (5xx)\n // These indicate problems that won't be fixed by retrying\n return false;\n }\n // For unknown errors, don't retry to avoid masking issues\n return false;\n }\n isNetworkFailure(error) {\n var _a, _b;\n if (!error)\n return false;\n if (error instanceof ApiError && error.status === 0)\n return true;\n if ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('fetch failed'))\n return true;\n const errorCode = error.code || ((_b = error === null || error === void 0 ? void 0 : error.cause) === null || _b === void 0 ? void 0 : _b.code);\n if (['ETIMEDOUT', 'ECONNRESET', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN', 'ECONNABORTED'].includes(errorCode)) {\n return true;\n }\n if (error.cause && this.isNetworkFailure(error.cause)) {\n return true;\n }\n return false;\n }\n formatNetworkErrorDetails(error, depth = 0) {\n if (!error || depth > 2) {\n return { message: String(error) };\n }\n const details = {\n name: error === null || error === void 0 ? void 0 : error.name,\n message: error === null || error === void 0 ? void 0 : error.message\n };\n for (const key of ['code', 'errno', 'syscall', 'hostname', 'address', 'port', 'type']) {\n if ((error === null || error === void 0 ? void 0 : error[key]) !== undefined) {\n details[key] = error[key];\n }\n }\n if (error === null || error === void 0 ? void 0 : error.cause) {\n details.cause = this.formatNetworkErrorDetails(error.cause, depth + 1);\n }\n return details;\n }\n logNetworkFailure(operationName, error, context) {\n if (!this.isNetworkFailure(error)) {\n return;\n }\n apiLogger.error(`[${operationName}] Network failure`, {\n apiUrl: this.apiUrl,\n attempt: context === null || context === void 0 ? void 0 : context.attempt,\n retriesLeft: context === null || context === void 0 ? void 0 : context.retriesLeft,\n details: this.formatNetworkErrorDetails(error)\n });\n }\n /**\n * Generic helper to wrap API requests with retry logic and consistent error handling.\n */\n async requestWithRetry(operationName, operation) {\n return pRetry(operation, {\n retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n shouldRetry: (error) => {\n const shouldRetry = this.isRetryableError(error);\n if (!shouldRetry) {\n if (this.isNetworkFailure(error)) {\n this.logNetworkFailure(operationName, error);\n }\n else {\n apiLogger.error(`${operationName} failed with non-retryable error: ${error.message || error}`);\n }\n }\n return shouldRetry;\n },\n onFailedAttempt: error => {\n this.logNetworkFailure(operationName, error, {\n attempt: error.attemptNumber,\n retriesLeft: error.retriesLeft\n });\n apiLogger.warn(`${operationName} failed (retryable), attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}. Error: ${error.message}`);\n }\n });\n }\n async handleResponse(response) {\n var _a;\n try {\n const data = await response.json();\n const error = `${(data === null || data === void 0 ? void 0 : data.error) || 'Unknown error'}`;\n apiLogger.debug(`API response: ${JSON.stringify(data)}`);\n if (!response.ok) {\n switch (response.status) {\n case 401:\n throw new ApiError(401, `Unauthorized - Invalid or missing authentication token: ${error}`);\n case 403:\n throw new ApiError(403, `Forbidden - You do not have permission to perform this action: ${error}`);\n case 400:\n throw new ApiError(400, `Bad Request: ${error}`);\n case 404:\n throw new ApiError(404, `Not Found: ${error}`);\n case 500:\n throw new ApiError(500, `Internal Server Error: ${error}`);\n default:\n throw new ApiError(response.status, `API Error: ${error}`);\n }\n }\n return data;\n }\n catch (error) {\n // Only throw the original error if it's not a network error\n if (!((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('fetch failed'))) {\n throw error;\n }\n throw new ApiError(0, 'Network error: fetch failed');\n }\n }\n getHeaders() {\n const headers = {\n 'Content-Type': 'application/json',\n };\n // Always include token in headers now that we have a default\n headers['Authorization'] = `Token ${this.token}`;\n return headers;\n }\n async createStep(options) {\n apiLogger.debug('creating step ', options.stepPrompt);\n return this.requestWithRetry('createStep', async () => {\n const response = await fetch(`${this.apiUrl}/step-runners/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n step_id: options.stepIdFromServer,\n scenario_name: options.scenarioName,\n step_prompt: options.stepPrompt,\n argument: options.argument,\n initial_screenshot: options.initial_screenshot_url,\n initial_html_content: options.initial_html_content,\n use_cache: options.use_cache,\n url: options.url,\n action: options.action,\n vanilla_prompt: options.vanilla_prompt,\n is_vanilla_prompt_robust: options.is_vanilla_prompt_robust,\n target_element_name: options.target_element_name,\n position: options.position\n }),\n });\n const data = await this.handleResponse(response);\n return data.step.id;\n });\n }\n async patchStep(stepId, fields) {\n // Use PATCH /steps/:id/ endpoint with partial=true\n apiLogger.debug(`patching step #${stepId} with fields:`, Object.keys(fields));\n return this.requestWithRetry('patchStep', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/`, {\n method: 'PATCH',\n headers: this.getHeaders(),\n body: JSON.stringify(fields)\n });\n const data = await this.handleResponse(response);\n return;\n });\n }\n /* async resolveNextInstruction(stepId: string, instruction: Instruction | null, aiModel?: string) {\n apiLogger.debug(`resolving next instruction: ${instruction}`);\n return this.requestWithRetry('resolveNextInstruction', async () => {\n apiLogger.debug(`API client: Resolving next instruction for step ${stepId}`);\n \n const cleanInstruction = cleanupInstructionElements(instruction);\n \n const response = await fetch(`${this.apiUrl}/step-runners/${stepId}/run/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n executed_instruction: cleanInstruction,\n ai_model: aiModel\n }),\n });\n \n const data = await this.handleResponse(response);\n return data.instruction;\n });\n } */\n async uploadScreenshot(screenshot_bytes) {\n return this.requestWithRetry('uploadScreenshot', async () => {\n const response = await fetch(`${this.apiUrl}/upload-screenshots/`, {\n method: 'POST',\n headers: {\n 'Authorization': `Token ${this.token}`\n },\n body: screenshot_bytes,\n });\n const data = await this.handleResponse(response);\n return data.screenshot_url;\n });\n }\n async findStepById(stepId) {\n apiLogger.debug(`Finding step by id: ${stepId}`);\n return this.requestWithRetry('findStepById', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/`, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n const data = await this.handleResponse(response);\n return data.step;\n });\n }\n async findStepByPrompt(prompt, scenarioName, url = '') {\n apiLogger.debug(`Finding step by prompt: ${prompt} and scenario: ${scenarioName}`);\n return this.requestWithRetry('findStepByPrompt', async () => {\n const response = await fetch(`${this.apiUrl}/step-runners/find-step-by-prompt/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n prompt: prompt,\n scenario_name: scenarioName,\n url: url\n }),\n });\n try {\n const data = await this.handleResponse(response);\n return {\n step: data.step,\n total_count: data.total_count\n };\n }\n catch (error) {\n // If we get a 404, the step doesn't exist\n if (error instanceof ApiError && error.status === 404) {\n return null;\n }\n // For any other error, rethrow\n throw error;\n }\n });\n }\n async resetStep(stepId) {\n return this.requestWithRetry('resetStep', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/reset/`, {\n method: 'POST',\n headers: this.getHeaders(),\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async interactionToStep(scenarioId, interaction, position = -1) {\n // Use POST /interaction-to-step/ endpoint\n // Backend will create new step or update existing one based on interaction_id\n apiLogger.debug(`converting interaction #${interaction.interactionId} to step`);\n return this.requestWithRetry('interactionToStep', async () => {\n var _a, _b, _c, _d;\n const response = await fetch(`${this.apiUrl}/interaction-to-step/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n scenario_id: scenarioId,\n position,\n interaction_id: interaction.interactionId,\n action: interaction.action,\n argument: interaction.argument,\n element_css_selector: ((_a = interaction.elementInfo) === null || _a === void 0 ? void 0 : _a.css_selector) || '',\n iframe_selector: ((_b = interaction.elementInfo) === null || _b === void 0 ? void 0 : _b.iframe_selector) || '',\n smart_selector: ((_c = interaction.elementInfo) === null || _c === void 0 ? void 0 : _c.smart_selector) || null,\n smart_iframe_selector: ((_d = interaction.elementInfo) === null || _d === void 0 ? void 0 : _d.smart_iframe_selector) || null,\n prompt: interaction.nativeDescription,\n vanilla_prompt: interaction.nativeDescription,\n is_vanilla_prompt_robust: interaction.isNativeDescriptionElaborate || false,\n target_element_name: interaction.nativeName,\n target_element_info: interaction.elementInfo,\n url: interaction.url,\n is_secret: interaction.isSecret || false,\n })\n });\n const data = await this.handleResponse(response);\n return [data.result.step_id, data.result.matched_step, data.scenario_id];\n });\n }\n async actionToPrompt(action2promptInput, aiModel) {\n // Use POST /action-to-prompt/ endpoint\n apiLogger.debug(`running action2prompt for step #${action2promptInput.step_id}`);\n return this.requestWithRetry('actionToPrompt', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${action2promptInput.step_id}/action_to_prompt/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({ ...action2promptInput, 'model': aiModel })\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async summarizeScenario(scenarioId, aiModel) {\n return this.requestWithRetry('summarizeScenario', async () => {\n const response = await fetch(`${this.apiUrl}/api/scenarios/${scenarioId}/summary`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({ 'model': aiModel })\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async askAI(question, scenarioName, screenshot, aiModel) {\n apiLogger.debug(`Asking AI question: \"${question}\", scenarioName: ${scenarioName}`);\n apiLogger.debug(`headers: ${JSON.stringify(this.getHeaders())}`);\n return this.requestWithRetry('askAI', async () => {\n const response = await fetch(`${this.apiUrl}/api/ask-ai/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n question: question,\n scenario_name: scenarioName,\n screenshot: screenshot,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async screenshotReasoning(stepId, prompt, aiModel) {\n apiLogger.debug(`Performing screenshot reasoning for step: ${stepId}`);\n return this.requestWithRetry('screenshotReasoning', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/screenshot_reasoning/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n prompt: prompt,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data.action;\n });\n }\n async findBestCandidateElement(stepId, candidatesScreenshotUrl, candidateElements, aiModel) {\n apiLogger.debug(`Finding best candidate element for step: ${stepId}`);\n return this.requestWithRetry('findBestCandidateElement', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/find_best_candidate_element/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n screenshot_url: candidatesScreenshotUrl,\n candidate_elements: candidateElements,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data.index;\n });\n }\n async getProjects() {\n return this.requestWithRetry('getProjects', async () => {\n const response = await fetch(`${this.apiUrl}/projects/`, {\n method: 'GET',\n headers: this.getHeaders()\n });\n return this.handleResponse(response);\n });\n }\n} /* ApiClient */\n//# sourceMappingURL=api-client.js.map","/**\n * Available AI models for LLM operations\n */\nexport var AIModel;\n(function (AIModel) {\n AIModel[\"AZURE_GPT4\"] = \"azure-gpt4\";\n AIModel[\"AZURE_GPT4_MINI\"] = \"azure-gpt4-mini\";\n AIModel[\"GEMINI_1_5_FLASH\"] = \"gemini-1.5-flash\";\n AIModel[\"GEMINI_2_5_FLASH\"] = \"gemini-2.5-flash\";\n AIModel[\"GPT4\"] = \"gpt4\";\n AIModel[\"GPT4_MINI\"] = \"gpt4-mini\";\n AIModel[\"CLAUDE_3_5\"] = \"claude-3.5\";\n AIModel[\"CLAUDE_SONNET_4_5\"] = \"claude-sonnet-4.5\";\n AIModel[\"CLAUDE_HAIKU_4_5\"] = \"claude-haiku-4.5\";\n AIModel[\"CLAUDE_OPUS_4_1\"] = \"claude-opus-4.1\";\n AIModel[\"GROK_2\"] = \"grok-2\";\n AIModel[\"LLAMA_4_SCOUT\"] = \"llama-4-scout\";\n AIModel[\"DEEPSEEK_V3\"] = \"deepseek-v3\";\n})(AIModel || (AIModel = {}));\n//# sourceMappingURL=AIModel.js.map","export const DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG = {\n highlightTimeout: 300,\n playwrightActionTimeout: 5000,\n playwrightNavigationTimeout: 10000,\n playwrightLocatorTimeout: 2000,\n // mutation observer\n mutationsTimeout: 500,\n mutationsInitTimeout: 1000,\n // wait for navigation\n waitForNavigationInitialTimeout: 2000,\n waitForNavigationNavigationTimeout: 7000,\n waitForNavigationGlobalTimeout: 15000,\n // wait for stability\n waitForStabilityQuietTimeout: 2000,\n waitForStabilityInitialDelay: 100,\n waitForStabilityGlobalTimeout: 15000,\n waitForStabilityVerbose: false,\n scriptTimeout: 120000, // 2 minutes\n};\n//# sourceMappingURL=PlaywrightTimeoutConfig.js.map","import { DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG } from './PlaywrightTimeoutConfig.js';\nexport const DEFAULT_RECORDER_SETTINGS = {\n // API Configuration\n apiKey: '',\n apiEndPoint: 'https://api.probolabs.ai',\n frontendUrl: 'https://app.probolabs.ai',\n baseUrl: undefined,\n // Scenario Configuration\n scenarioName: 'new recording',\n scenarioId: undefined,\n aiModel: 'azure-gpt4-mini',\n activeParamSet: 0,\n // Browser Configuration\n resetBrowserBeforeReplay: true,\n enableSmartSelectors: true, // Smart selectors always enabled\n // Script Configuration\n scriptTimeout: DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.scriptTimeout,\n // Logging Configuration\n enableConsoleLogs: true,\n debugLevel: 'DEBUG',\n // Timeout Configuration (spread from PlaywrightTimeoutConfig)\n ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n};\n//# sourceMappingURL=RecorderSettings.js.map","// --- Code generation utilities for Probo Labs Playwright scripts ---\nimport { isParameterizable, isAI, singleQuoteString, PlaywrightAction, getReturnValueParameterName, hasReturnValue, AIModel } from \"./index.js\";\n/**\n * Extracts environment variable names from parameter table rows\n * by parsing ${process.env.VAR_NAME} patterns from parameter values\n *\n * @param rows - Array of parameter table rows (Record<string, string>)\n * @returns Set of unique environment variable names (in uppercase)\n */\nexport function extractRequiredEnvVars(rows) {\n const envVars = new Set();\n // Return empty set if rows are not provided or empty\n if (!rows || !Array.isArray(rows) || rows.length === 0) {\n return envVars;\n }\n // Regex to match both escaped and unescaped process.env patterns\n // Matches: ${process.env.VAR_NAME} or \\${process.env.VAR_NAME}\n // Pattern: optional backslash (\\\\), then ${ (escaped as \\$\\{), then process.env., then variable name\n const envVarPattern = /\\\\?\\$\\{process\\.env\\.([a-zA-Z_][a-zA-Z0-9_]*)\\}/g;\n // Scan all parameter values in all rows for env var patterns\n rows.forEach((row) => {\n if (row && typeof row === 'object') {\n Object.values(row).forEach((value) => {\n if (typeof value === 'string') {\n let match;\n while ((match = envVarPattern.exec(value)) !== null) {\n const varName = match[1].toUpperCase(); // Ensure uppercase for consistency\n envVars.add(varName);\n }\n // Reset regex lastIndex for next iteration\n envVarPattern.lastIndex = 0;\n }\n });\n }\n });\n return envVars;\n}\n/**\n * Extracts the list of required environment variable names from parameter table rows\n * @param rows - Array of parameter table rows (Record<string, string>)\n * @returns Array of required environment variable names (sorted)\n */\nexport function getRequiredEnvVars(rows) {\n const envVars = extractRequiredEnvVars(rows);\n return Array.from(envVars).sort();\n}\n/**\n * Generates Playwright native code for a given interaction.\n *\n * @param interaction - The interaction object containing action, element info, and other metadata.\n * @returns A string of Playwright code that performs the specified interaction.\n */\nfunction interactionToNativeCode(interaction) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n const selector = ((_a = interaction.elementInfo) === null || _a === void 0 ? void 0 : _a.css_selector) || '';\n const iframe = ((_b = interaction.elementInfo) === null || _b === void 0 ? void 0 : _b.iframe_selector) || '';\n const smartSelector = ((_c = interaction.elementInfo) === null || _c === void 0 ? void 0 : _c.smart_selector) || null;\n const smartIFrameSelector = ((_d = interaction.elementInfo) === null || _d === void 0 ? void 0 : _d.smart_iframe_selector) || null;\n const argument = isParameterizable(interaction) ? `param.${interaction.parameterName}` : singleQuoteString(interaction.argument);\n // Escape the nativeDescription for use in test.step() string literal\n const escapedStepName = interaction.nativeDescription.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n const comment = `\n // ${interaction.nativeDescription}${interaction.annotation ? `\\n // annotation: ${interaction.annotation}` : ''}`;\n switch (interaction.action) {\n case PlaywrightAction.CLICK:\n case PlaywrightAction.CHECK_CHECKBOX:\n case PlaywrightAction.SELECT_RADIO:\n case PlaywrightAction.FILL_IN:\n case PlaywrightAction.TYPE_KEYS:\n case PlaywrightAction.SET_SLIDER:\n case PlaywrightAction.SELECT_DROPDOWN:\n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\n case PlaywrightAction.ASSERT_EXACT_VALUE:\n case PlaywrightAction.HOVER:\n case PlaywrightAction.SCROLL_TO_ELEMENT:\n case PlaywrightAction.UPLOAD_FILES:\n case PlaywrightAction.VISIT_URL:\n case PlaywrightAction.VISIT_BASE_URL:\n case PlaywrightAction.ASSERT_URL:\n case PlaywrightAction.WAIT_FOR:\n case PlaywrightAction.WAIT_FOR_OTP:\n case PlaywrightAction.GEN_TOTP:\n const args = [\n `action: PlaywrightAction.${interaction.action}`,\n ...(argument ? [`argument: ${argument}`] : []),\n ...(iframe ? [`iframeSelector: '${iframe}'`] : []),\n ...(selector ? [`elementSelector: '${selector}'`] : []),\n ...(smartSelector ? [`smartSelector: ${JSON.stringify(smartSelector)}`] : []),\n ...(smartIFrameSelector ? [`smartIFrameSelector: ${JSON.stringify(smartIFrameSelector)}`] : []),\n ...(interaction.annotation ? [`annotation: '${interaction.annotation}'`] : []),\n ...(((_e = interaction.waitForConfig) === null || _e === void 0 ? void 0 : _e.pollingInterval) ? [`pollingInterval: ${(_f = interaction.waitForConfig) === null || _f === void 0 ? void 0 : _f.pollingInterval}`] : []),\n ...(((_g = interaction.waitForConfig) === null || _g === void 0 ? void 0 : _g.timeout) ? [`timeout: ${(_h = interaction.waitForConfig) === null || _h === void 0 ? void 0 : _h.timeout}`] : []),\n // Always include totpConfig for GEN_TOTP actions, using defaults if not present in interaction\n ...(interaction.action === PlaywrightAction.GEN_TOTP ? [`totpConfig: { digits: ${((_j = interaction.totpConfig) === null || _j === void 0 ? void 0 : _j.digits) || 6}, algorithm: '${((_k = interaction.totpConfig) === null || _k === void 0 ? void 0 : _k.algorithm) || 'SHA1'}' }`] : [])\n ];\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n await ppw.runStep({\n ${args.join(',\\n ')}\n });\n });`;\n case PlaywrightAction.EXTRACT_VALUE:\n const extractVarName = getReturnValueParameterName(interaction);\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n const ${extractVarName} = await ppw.runStep({\n iframeSelector: '${iframe}',\n elementSelector: '${selector}',\n smartSelector: ${JSON.stringify(smartSelector)},\n smartIFrameSelector: ${JSON.stringify(smartIFrameSelector)},\n action: '${interaction.action}', \n annotation: '${(_l = interaction.annotation) !== null && _l !== void 0 ? _l : \"\"}',\n });\n param['${extractVarName}'] = ${extractVarName};\n });`;\n case PlaywrightAction.EXECUTE_SCRIPT:\n return generateExecuteScriptCode(interaction, comment, escapedStepName);\n default:\n return `// Unhandled action: ${interaction.action}!!!`;\n }\n}\nfunction interactionToProboLib(interaction) {\n var _a, _b, _c;\n const escapedPrompt = (_c = (_b = (_a = interaction.serverResponse) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b.prompt) === null || _c === void 0 ? void 0 : _c.replace(/'/g, \"\\\\'\");\n const argument = isParameterizable(interaction) ? `param.${interaction.parameterName}` : `'${interaction.argument}'`;\n // Escape the nativeDescription for use in test.step() string literal\n const escapedStepName = interaction.nativeDescription.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n const comment = `\n // ${interaction.nativeDescription}${interaction.annotation ? `\\n // annotation: ${interaction.annotation}` : ''}`;\n if (interaction.action === PlaywrightAction.EXTRACT_VALUE) {\n const extractVarName = getReturnValueParameterName(interaction);\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n const ${extractVarName} = await probo.runStep(page, '${escapedPrompt}', null, { stepId: ${interaction.stepId} });\n param['${extractVarName}'] = ${extractVarName};\n });`;\n }\n else if (interaction.action === PlaywrightAction.ASSERT_CONTAINS_VALUE ||\n interaction.action === PlaywrightAction.ASSERT_EXACT_VALUE) {\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n await probo.runStep(page, '${escapedPrompt}', ${argument}, { stepId: ${interaction.stepId} });\n });`;\n }\n else if (interaction.action === PlaywrightAction.VISIT_URL) {\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n await probo.runStep(page, '${interaction.nativeDescription}', ${argument}, { stepId: ${interaction.stepId} });\n });`;\n }\n else if (interaction.action === PlaywrightAction.ASK_AI) {\n const escapedQuestion = interaction.nativeDescription.replace(/'/g, \"\\\\'\");\n const aiVarName = getReturnValueParameterName(interaction);\n // const assertion = interaction.argument ? ` \n const askAIOptions = interaction.stepId ? `{ stepId: ${interaction.stepId} }` : '{}';\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n const ${aiVarName} = await probo.askAI(page, '${escapedQuestion}', ${askAIOptions}${argument ? `, ${argument}` : ''});\n param['${aiVarName}'] = ${aiVarName};\n });`;\n }\n else if (interaction.action === PlaywrightAction.EXECUTE_SCRIPT) {\n return generateExecuteScriptCode(interaction, comment, escapedStepName);\n }\n else {\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n ${argument ? `await probo.runStep(page, '${escapedPrompt}', ${argument}, { stepId: ${interaction.stepId} });` : `await probo.runStep(page, '${escapedPrompt}', null, { stepId: ${interaction.stepId} });`}\n });`;\n }\n}\nfunction generateExecuteScriptCode(interaction, comment, escapedStepName) {\n let scriptCode = Array.isArray(interaction.argument) ? interaction.argument[0] : interaction.argument;\n const scriptVarName = getReturnValueParameterName(interaction);\n // Replace returnValue(x) with 'const param = x;'\n scriptCode = scriptCode.replace(/returnValue\\((.*)\\);?/, `${scriptVarName} = $1;`);\n // Trim trailing whitespace\n scriptCode = scriptCode.trimEnd();\n // If scriptCode doesn't end with a semicolon add one\n if (!/\\s*;\\s*$/.test(scriptCode))\n scriptCode = scriptCode + ';';\n // Indent the code (extra indent for test.step wrapper)\n const indentedCode = scriptCode.split('\\n').map((line, idx) => idx === 0 ? line : ` ${line}`).join('\\n');\n return `${comment}\n await test.step(\"${escapedStepName}\", async () => {\n let ${scriptVarName} = null;\n try {\n ${indentedCode}\n } catch (error) {\n console.error('❌ Workspace script execution failed:', error.message);\n throw error;\n }\n param['${scriptVarName}'] = ${scriptVarName};\n });`;\n}\nfunction scriptTemplate(options, settings, viewPort) {\n var _a, _b, _c, _d;\n const areActionsParameterized = options.rows.length > 0;\n const hasAiInteractions = options.interactions.some((interaction) => isAI(interaction));\n const hasScriptInteractions = options.interactions.some((interaction) => interaction.action === PlaywrightAction.EXECUTE_SCRIPT);\n // const uniquelyParameterizedInteractions = uniquifyInteractionParameters(options.interactions);\n const steps = options.interactions.map((interaction) => {\n if (isAI(interaction))\n return interactionToProboLib(interaction);\n return interactionToNativeCode(interaction);\n }).join('\\n');\n // Get list of all extracted value parameter names to filter them out from the parameter table\n const extractedValueNames = new Set();\n options.interactions.forEach((interaction) => {\n if (hasReturnValue(interaction)) {\n const retName = getReturnValueParameterName(interaction);\n if (retName) {\n extractedValueNames.add(retName);\n }\n }\n });\n // Escape apostrophes and backslashes for single-quoted strings\n const escapeForSingleQuotes = (value) => {\n if (!value || typeof value !== 'string')\n return ''; //check for null, undefined, or non-string values\n //escape backslashes and single quotes\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n };\n // Lookup value from settings \n const aiModelKey = Object.keys(AIModel).find(key => AIModel[key] === settings.aiModel);\n // Check if any interactions have the isSecret flag set\n const hasSecrets = options.interactions.some(interaction => interaction.isSecret === true);\n // Extract required environment variable names from parameter table rows\n const requiredEnvVars = extractRequiredEnvVars(options.rows);\n const requiredEnvVarsArray = Array.from(requiredEnvVars).sort();\n // generate the parameter table (exclude extracted values as they are declared as const in the steps)\n const parameterTable = areActionsParameterized ? `\n const parameterTable: Record<string, any>[] = [\n ${options.rows.map((row) => {\n // Filter out extracted value columns from the parameter table\n const filteredRow = Object.fromEntries(Object.entries(row).filter(([key]) => !extractedValueNames.has(key)));\n return `{ ${Object.entries(filteredRow).map(([key, value]) => `${key}: '${escapeForSingleQuotes(value)}'`).join(', ')} }`;\n }).join(',\\n ')}\n ];\n ` : '';\n const proboConstructor = hasAiInteractions ? `\n const probo = new Probo({\n scenarioName: '${options.scenarioName}',\n enableSmartSelectors: ${settings.enableSmartSelectors},\n debugLevel: ProboLogLevel.${settings.debugLevel},\n aiModel: AIModel.${aiModelKey},\n timeoutConfig: {\n waitForStabilityQuietTimeout: ${(_a = settings.waitForStabilityQuietTimeout) !== null && _a !== void 0 ? _a : 2000},\n waitForStabilityInitialDelay: ${(_b = settings.waitForStabilityInitialDelay) !== null && _b !== void 0 ? _b : 500},\n waitForStabilityGlobalTimeout: ${(_c = settings.waitForStabilityGlobalTimeout) !== null && _c !== void 0 ? _c : 15000},\n waitForStabilityVerbose: ${(_d = settings.waitForStabilityVerbose) !== null && _d !== void 0 ? _d : false}\n }\n });` : '';\n return `\n /*\n * Probo Labs Playwright Script\n * Scenario: ${options.scenarioName}\n * Auto generated on ${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}\n * \n * HOW TO INTEGRATE THIS SCRIPT INTO YOUR EXISTING PROJECT:\n * 1. Install dependencies: npm install @playwright/test @probolabs/playwright@latest${hasSecrets ? ' dotenv' : ''}\n * 2. copy and paste the code below into your test file${hasSecrets ? '\\n * 3. Ensure a .env file exists in your project root (or ~/.probium/.env) or set environment variables manually' : ''}\n */\n \n // launch chromium with pre-installed extensions\n import { test, expect} from '@probolabs/playwright/fixtures';\n import { ProboPlaywright, Probo, PlaywrightAction, ProboLogLevel, AIModel } from '@probolabs/playwright';${hasScriptInteractions ? `\n import { execSync } from 'child_process';\n import * as fs from 'fs';\n import * as path from 'path';\n import * as os from 'os';` : ''}${hasSecrets && !hasScriptInteractions ? `\n import * as path from 'path';\n import * as os from 'os';\n import * as fs from 'fs';` : ''}\n \n${hasSecrets ? `import { config } from 'dotenv';\n // Load secrets: first try local .env (project root), then fallback to ~/.probium/.env\n const localEnvPath = path.join(process.cwd(), '.env');\n const homeEnvPath = path.join(os.homedir(), '.probium', '.env');\n \n if (fs.existsSync(localEnvPath)) {\n config({ path: localEnvPath });\n console.log('✅ Loaded env vars from project .env:', localEnvPath);\n } else if (fs.existsSync(homeEnvPath)) {\n config({ path: homeEnvPath });\n console.log('✅ Loaded env vars from home .env:', homeEnvPath);\n } else {\n console.warn('⚠️ .env not found at', localEnvPath, 'or', homeEnvPath, '- ensure environment variables are set before running tests');\n }\n \n // Validate that all required secrets are set\n const requiredSecrets: string[] = ${JSON.stringify(requiredEnvVarsArray)};\n const missingSecrets = requiredSecrets.filter(varName => !process.env[varName] || process.env[varName].trim() === '');\n if (missingSecrets.length > 0) {\n throw new Error(\\`Missing required environment variables: \\${missingSecrets.join(', ')}. Please set them in your .env file or as environment variables.\\`);\n }\n console.log(\\`✅ All required secrets are set: \\${requiredSecrets.join(', ')}\\`);\n ` : ''}\n \n ${parameterTable} \n ${proboConstructor}\n const ppw = new ProboPlaywright({\n enableSmartSelectors: ${settings.enableSmartSelectors},\n debugLevel: ProboLogLevel.${settings.debugLevel},\n timeoutConfig: {\n waitForStabilityQuietTimeout: ${settings.waitForStabilityQuietTimeout},\n waitForStabilityInitialDelay: ${settings.waitForStabilityInitialDelay},\n waitForStabilityGlobalTimeout: ${settings.waitForStabilityGlobalTimeout},\n waitForStabilityVerbose: ${settings.waitForStabilityVerbose},\n highlightTimeout: ${settings.highlightTimeout},\n playwrightActionTimeout: ${settings.playwrightActionTimeout},\n playwrightNavigationTimeout: ${settings.playwrightNavigationTimeout},\n playwrightLocatorTimeout: ${settings.playwrightLocatorTimeout}\n }\n });\n\n test.describe('${options.scenarioName}', () => {\n test.beforeEach(async ({ page }) => {\n // set the ProboPlaywright instance to the current page\n ppw.setPage(page); \n // set the viewport dimensions to be identical to their values during recording\n await page.setViewportSize({ width: ${viewPort.width}, height: ${viewPort.height} });\n });\n\n for (const param of parameterTable) {\n test(param.testName, async ({ page }) => {\n ${hasAiInteractions ? `probo.setParams(param);` : ''}\n ppw.setParams(param);\n ${steps}\n });\n }\n });\n `;\n}\n/**\n * Generates Playwright code for a scenario\n * @param options - Code generation options (scenarioName, interactions, rows)\n * @param settings - Recorder settings (timeouts, AI model, etc.)\n * @param viewPort - Viewport dimensions {width, height}\n * @returns Generated Playwright test code as a string\n */\nexport function generateCode(options, settings, viewPort) {\n return scriptTemplate(options, settings, viewPort);\n}\n// Custom function to create a URL-friendly slug\nexport const createUrlSlug = (url) => {\n try {\n const urlObj = new URL(url);\n // Extract hostname and path\n const hostname = urlObj.hostname;\n const path = urlObj.pathname;\n // Create a more readable name\n let name = hostname;\n // Add path segments if they exist and are meaningful\n if (path && path !== '/') {\n // Remove leading slash and split by slashes\n const pathSegments = path.substring(1).split('/').filter(segment => segment);\n // Add meaningful path segments to the name\n if (pathSegments.length > 0) {\n // Take up to 2 path segments to keep the name reasonable\n const relevantSegments = pathSegments.slice(0, 2);\n name += '-' + relevantSegments.join('-');\n }\n }\n // Replace any remaining special characters with hyphens\n return name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-') // Replace non-alphanumeric chars with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with a single hyphen\n .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens\n }\n catch (error) {\n // If URL parsing fails, create a simple slug\n // proboLog('❌ Error parsing URL:', error); // Don't log here, just fallback\n return url\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '');\n }\n};\n/**\n * Default @playwright/test version for generated test suites.\n * Aligns with @probolabs/playwright peer dependency (^1.54.0).\n */\nexport const DEFAULT_PLAYWRIGHT_TEST_VERSION = '^1.57.0';\n/**\n * Generate package.json content for a Playwright test project\n */\nexport function generatePackageJson(options) {\n const { name, hasSecrets = false, testScript = 'npx playwright test', playwrightTestVersion = DEFAULT_PLAYWRIGHT_TEST_VERSION } = options;\n return `{\n \"name\": \"${name}\",\n \"version\": \"1.0.0\",\n \"description\": \"Probo Labs Playwright Script\",\n \"type\": \"module\",\n \"scripts\": {\n \"test\": \"${testScript}\"\n },\n \"dependencies\": {\n \"@playwright/test\": \"${playwrightTestVersion}\",\n \"@probolabs/playwright\": \"latest\"${hasSecrets ? ',\\n \"dotenv\": \"latest\"' : ''}\n }\n}`;\n}\n/**\n * Generate playwright.config.ts content\n */\nexport function generatePlaywrightConfig(includeReporter = true, runId) {\n const reporters = [\n ['list'],\n ['html', { open: 'never' }],\n ];\n // Configure run-specific output directories if runId is provided\n if (runId !== undefined) {\n reporters[1] = ['html', { open: 'never', outputFolder: `playwright-report/run-${runId}` }];\n }\n if (includeReporter) {\n reporters.push(['./probo-reporter.ts']);\n }\n // Configure outputDir for run-specific test results if runId is provided\n const outputDirConfig = runId !== undefined ? `\\n outputDir: 'test-results/run-${runId}',` : '';\n return `import { defineConfig } from '@playwright/test';\n\nexport default defineConfig({\n testDir: 'tests',\n testMatch: /.*\\\\.(ts|js)$/,\n timeout: 600000,${outputDirConfig}\n // Keep Playwright's default console output, plus HTML report${includeReporter ? ', plus Probo live progress reporter' : ''}.\n reporter: ${JSON.stringify(reporters)},\n use: {\n ignoreHTTPSErrors: true,\n actionTimeout: 30000,\n navigationTimeout: 30000,\n video: 'off',\n screenshot: 'on',\n trace: 'on',\n },\n retries: 0,\n});\n`;\n}\n/**\n * Generate a Playwright reporter that emits structured events to stdout.\n *\n * The recorder app runner can parse these lines and broadcast them to the UI.\n */\nexport function generateProboReporter() {\n // NOTE: Keep this file dependency-free; it runs inside the generated test suite project.\n // It prints one JSON payload per line, prefixed for easy extraction from stdout.\n return `import type { Reporter, FullConfig, Suite, TestCase, TestResult, TestStep } from '@playwright/test/reporter';\n\nconst PREFIX = '__PROBO_REPORTER_EVENT__';\n\ntype ProboReporterEvent =\n | {\n v: 1;\n ts: number;\n eventType: 'runBegin';\n config: { workers: number; retries: number; projects: string[] };\n }\n | {\n v: 1;\n ts: number;\n eventType: 'runEnd';\n status: 'passed' | 'failed' | 'timedout' | 'interrupted';\n }\n | {\n v: 1;\n ts: number;\n eventType: 'testBegin';\n test: ProboTestRef;\n }\n | {\n v: 1;\n ts: number;\n eventType: 'testEnd';\n test: ProboTestRef;\n result: {\n status: 'passed' | 'failed' | 'timedout' | 'skipped' | 'interrupted';\n expectedStatus: 'passed' | 'failed' | 'timedout' | 'skipped';\n duration: number;\n errors: string[];\n };\n }\n | {\n v: 1;\n ts: number;\n eventType: 'stepBegin';\n test: ProboTestRef;\n step: ProboStepRef & { title: string; category?: string; depth: number };\n }\n | {\n v: 1;\n ts: number;\n eventType: 'stepEnd';\n test: ProboTestRef;\n step: ProboStepRef & { duration?: number; error?: string | null };\n };\n\ntype ProboLocation = { file?: string; line?: number; column?: number };\ntype ProboTestRef = {\n id?: string;\n title: string;\n titlePath: string[];\n location?: ProboLocation;\n};\ntype ProboStepRef = {\n id: number;\n location?: ProboLocation;\n};\n\nfunction safeLocation(loc: any): ProboLocation | undefined {\n if (!loc || typeof loc !== 'object') return undefined;\n const file = typeof loc.file === 'string' ? loc.file : undefined;\n const line = typeof loc.line === 'number' ? loc.line : undefined;\n const column = typeof loc.column === 'number' ? loc.column : undefined;\n return file || line || column ? { file, line, column } : undefined;\n}\n\nfunction safeTitlePath(test: TestCase): string[] {\n try {\n // titlePath() exists on TestCase and includes describe blocks.\n return test.titlePath();\n } catch {\n return [test.title];\n }\n}\n\nfunction testRef(test: TestCase): ProboTestRef {\n return {\n // @ts-expect-error: Playwright has test.id at runtime; keep optional for forward/back compat.\n id: (test as any).id,\n title: test.title,\n titlePath: safeTitlePath(test),\n location: safeLocation((test as any).location),\n };\n}\n\nfunction serializeErrors(result: TestResult): string[] {\n const errors: any[] = (result as any).errors || [];\n if (!Array.isArray(errors)) return [];\n return errors\n .map((e) => {\n if (!e) return null;\n if (typeof e === 'string') return e;\n if (typeof e.message === 'string') return e.message;\n if (typeof e.value === 'string') return e.value;\n try {\n return JSON.stringify(e);\n } catch {\n return String(e);\n }\n })\n .filter(Boolean) as string[];\n}\n\nfunction emit(event: ProboReporterEvent) {\n try {\n process.stdout.write(PREFIX + JSON.stringify(event) + '\\\\n');\n } catch {\n // Ignore reporter failures; never break the run.\n }\n}\n\n/**\n * Check if a step should be included in the output.\n * Filters out hooks, fixtures, and internal Playwright operations.\n */\nfunction shouldIncludeStep(step: TestStep): boolean {\n const category = (step as any).category;\n const title = step.title?.toLowerCase() || '';\n \n // Filter out hooks (beforeAll, beforeEach, afterAll, afterEach)\n if (category === 'hook') {\n return false;\n }\n \n // Filter out fixtures\n if (category === 'fixture') {\n return false;\n }\n \n // Filter out internal waiting/timeout operations\n if (title.includes('waiting for') || \n title.includes('wait for') ||\n title.includes('timeout') ||\n title.includes('attaching') ||\n title.startsWith('attach')) {\n return false;\n }\n \n // Include user-defined steps and assertions only (exclude pw:api like click, evaluate, etc.)\n return category === 'test.step' || \n category === 'expect' ||\n !category; // Include steps without category (likely user actions)\n}\n\nexport default class ProboReporter implements Reporter {\n private stepIds = new WeakMap<TestStep, number>();\n private stepDepths = new WeakMap<TestStep, number>();\n private nextStepId = 1;\n\n onBegin(config: FullConfig, suite: Suite) {\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'runBegin',\n config: {\n workers: config.workers,\n retries: config.retries,\n projects: (config.projects || []).map((p) => p.name || 'project'),\n },\n });\n }\n\n onEnd(result: any) {\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'runEnd',\n status: result?.status || 'failed',\n });\n }\n\n onTestBegin(test: TestCase, result: TestResult) {\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'testBegin',\n test: testRef(test),\n });\n }\n\n onTestEnd(test: TestCase, result: TestResult) {\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'testEnd',\n test: testRef(test),\n result: {\n status: result.status,\n expectedStatus: result.expectedStatus,\n duration: result.duration,\n errors: serializeErrors(result),\n },\n });\n }\n\n onStepBegin(test: TestCase, result: TestResult, step: TestStep) {\n // Filter out hooks, fixtures, and internal operations\n if (!shouldIncludeStep(step)) {\n return;\n }\n\n const id = this.stepIds.get(step) ?? this.nextStepId++;\n this.stepIds.set(step, id);\n\n const depth = this.stepDepths.get(step) ?? (step.parent ? (this.stepDepths.get(step.parent) ?? 0) + 1 : 0);\n this.stepDepths.set(step, depth);\n\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'stepBegin',\n test: testRef(test),\n step: {\n id,\n title: step.title,\n category: (step as any).category,\n depth,\n location: safeLocation((step as any).location),\n },\n });\n }\n\n onStepEnd(test: TestCase, result: TestResult, step: TestStep) {\n // Filter out hooks, fixtures, and internal operations\n if (!shouldIncludeStep(step)) {\n return;\n }\n\n const id = this.stepIds.get(step) ?? this.nextStepId++;\n this.stepIds.set(step, id);\n\n const err = (step as any).error;\n emit({\n v: 1,\n ts: Date.now(),\n eventType: 'stepEnd',\n test: testRef(test),\n step: {\n id,\n duration: (step as any).duration,\n error: err ? (typeof err.message === 'string' ? err.message : String(err)) : null,\n location: safeLocation((step as any).location),\n },\n });\n }\n}\n`;\n}\n//# sourceMappingURL=codegen.js.map","/**\n * Node.js/Playwright-specific interpolation utilities.\n * These functions add process to the context for ${process.env.X} templates,\n * so they belong in probo-playwright (Node-only) rather than probo-shared (browser-compatible).\n */\nimport { interpolateTemplate } from '@probolabs/probo-shared';\n\n/**\n * Builds the standard interpolation context for template literals.\n * Merges params with additional context and includes process (when available)\n * so that ${process.env.VAR_NAME} templates resolve correctly.\n *\n * @param params The primary context (e.g., parameter table row)\n * @param additionalContext Optional extra context (e.g., extractedValues)\n * @returns Context object suitable for interpolateTemplate\n */\nexport function buildInterpolationContext(\n params: Record<string, any>,\n additionalContext?: Record<string, any>\n): Record<string, any> {\n return {\n ...params,\n ...(additionalContext || {}),\n ...(typeof process !== 'undefined' && { process }),\n };\n}\n\n/**\n * Interpolates a string with params and optional additional context.\n * Convenience wrapper that builds the standard context (including process for ${process.env.X})\n * and calls interpolateTemplate.\n *\n * @param str The string containing template literal syntax (e.g., \"${process.env.TOTP_SECRET}\")\n * @param params The primary context (e.g., parameter table row)\n * @param additionalContext Optional extra context (e.g., extractedValues)\n * @returns The interpolated string\n */\nexport function interpolateWithParams(\n str: string,\n params: Record<string, any>,\n additionalContext?: Record<string, any>\n): string {\n const context = buildInterpolationContext(params, additionalContext);\n return interpolateTemplate(str, context);\n}\n","import { ProboLogger } from \"@probolabs/probo-shared\";\n\n// Default logger instance\nexport const proboLogger = new ProboLogger('proboLib');\n","import { Page, Frame, Locator } from 'playwright';\nimport { DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, PlaywrightAction, matchRegex } from '@probolabs/probo-shared';\nimport { proboLogger } from './probo-logger';\n\nexport const SPECIAL_KEYS = [\n 'Enter', 'Tab', 'Escape', 'Backspace', 'Delete',\n 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n 'Home', 'End', 'PageUp', 'PageDown',\n 'Insert', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12',\n 'Shift', 'Control', 'Alt', 'Meta',\n 'CapsLock', 'NumLock', 'ScrollLock',\n 'Pause', 'PrintScreen', 'ContextMenu',\n 'AudioVolumeUp', 'AudioVolumeDown', 'AudioVolumeMute',\n 'MediaTrackNext', 'MediaTrackPrevious', 'MediaStop', 'MediaPlayPause',\n 'BrowserBack', 'BrowserForward', 'BrowserRefresh', 'BrowserFavorites'\n] as const;\n\n/**\n * Handle potential navigation exactly like Python's handle_potential_navigation\n */\nexport async function handlePotentialNavigation_deprecated(\n page: Page,\n locator: Locator | null = null,\n value: string | null = null,\n options: {\n initialTimeout?: number;\n navigationTimeout?: number;\n globalTimeout?: number;\n } = {}\n): Promise<boolean> {\n const {\n initialTimeout,\n navigationTimeout,\n globalTimeout,\n } = options;\n \n const finalInitialTimeout = initialTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationInitialTimeout!;\n const finalNavigationTimeout = navigationTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationNavigationTimeout!;\n const finalGlobalTimeout = globalTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationGlobalTimeout!;\n\n const startTime = Date.now();\n let navigationCount = 0;\n let lastNavTime: number | null = null;\n\n const onFrameNav = (frame: Frame) => {\n if (frame === page.mainFrame()) {\n navigationCount++;\n lastNavTime = Date.now();\n proboLogger.debug(\n `DEBUG_NAV[${((Date.now() - startTime) / 1000).toFixed(3)}s]: navigation detected (count=${navigationCount})`\n );\n }\n };\n\n proboLogger.debug(`DEBUG_NAV[0.000s]: Starting navigation detection`);\n page.on(\"framenavigated\", onFrameNav);\n\n try {\n if (locator) {\n proboLogger.debug(`DEBUG_NAV: Executing click(${value})`);\n await clickAtPosition(page, locator, value as ClickPosition | null);\n }\n\n // wait for any initial nav to fire\n await page.waitForTimeout(finalInitialTimeout);\n proboLogger.debug(\n `DEBUG_NAV[${((Date.now() - startTime) / 1000).toFixed(3)}s]: After initial wait, count=${navigationCount}`\n );\n\n if (navigationCount > 0) {\n // loop until either per-nav or global timeout\n while (true) {\n const now = Date.now();\n if (\n lastNavTime !== null &&\n now - lastNavTime > finalNavigationTimeout\n ) {\n proboLogger.debug(\n `DEBUG_NAV[${((now - startTime) / 1000).toFixed(3)}s]: per‐navigation timeout reached`\n );\n break;\n }\n if (now - startTime > finalGlobalTimeout) {\n proboLogger.debug(\n `DEBUG_NAV[${((now - startTime) / 1000).toFixed(3)}s]: overall timeout reached`\n );\n break;\n }\n await page.waitForTimeout(500);\n }\n\n // now wait for load + idle\n proboLogger.debug(`DEBUG_NAV: waiting for load state`);\n await page.waitForLoadState(\"load\", { timeout: finalGlobalTimeout });\n\n proboLogger.debug(`DEBUG_NAV: waiting for networkidle`);\n try {\n // shorter idle‐wait so we don't hang the full globalTimeout here\n await page.waitForLoadState(\"networkidle\", {\n timeout: finalNavigationTimeout,\n });\n } catch {\n proboLogger.debug(\n `DEBUG_NAV: networkidle not reached in ${finalNavigationTimeout}ms, proceeding anyway`\n );\n }\n\n await scrollToBottomRight(page);\n proboLogger.debug(`DEBUG_NAV: done`);\n return true;\n }\n\n proboLogger.debug(`DEBUG_NAV: no navigation detected`);\n return false;\n } finally {\n page.removeListener(\"framenavigated\", onFrameNav);\n proboLogger.debug(`DEBUG_NAV: listener removed`);\n }\n}\n\n\n/**\n * Scroll entire page to bottom-right, triggering lazy-loaded content\n */\nexport async function scrollToBottomRight(page: Page): Promise<void> {\n const startTime = performance.now();\n proboLogger.debug(`Starting scroll to bottom-right`);\n\n let lastHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n let lastWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n\n let smoothingSteps = 0;\n while (true) { \n const initY = await page.evaluate(() => window.scrollY);\n const initX = await page.evaluate(() => window.scrollX);\n const clientHeight = await page.evaluate(() => document.documentElement.clientHeight);\n const maxHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n const clientWidth = await page.evaluate(() => document.documentElement.clientWidth);\n const maxWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n \n let currX = initX;\n while (currX < maxWidth - clientWidth) {\n let currY = initY;\n while (currY < maxHeight - clientHeight) {\n currY += clientHeight;\n await page.evaluate(([x, y]) => window.scrollTo(x, y), [currX, currY]);\n await page.waitForTimeout(50);\n smoothingSteps++;\n }\n currX += clientWidth;\n }\n\n proboLogger.debug(\n `performed ${smoothingSteps} smoothing steps while scrolling`\n );\n\n const newHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n const newWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n if (newHeight === lastHeight && newWidth === lastWidth) break;\n proboLogger.debug(`page dimensions updated, repeating scroll`);\n lastHeight = newHeight;\n lastWidth = newWidth;\n }\n\n if (smoothingSteps > 0) {\n await page.waitForTimeout(200);\n await page.evaluate('window.scrollTo(0, 0)');\n await page.waitForTimeout(50);\n }\n proboLogger.debug(`Scroll completed in ${(performance.now() - startTime).toFixed(3)}ms`);\n}\n\n/**\n * Wait for DOM mutations to settle using MutationObserver logic\n */\nexport async function waitForMutationsToSettle(\n page: Page,\n mutationTimeout: number = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsTimeout!,\n initTimeout: number = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsInitTimeout!\n): Promise<boolean> {\n const startTime = Date.now();\n proboLogger.debug(\n `Starting mutation settlement (initTimeout=${initTimeout}, mutationTimeout=${mutationTimeout})`\n );\n\n const result = await page.evaluate(\n async ({ mutationTimeout, initTimeout }) => {\n async function blockUntilStable(\n targetNode: HTMLElement,\n options = { childList: true, subtree: true }\n ) {\n return new Promise<boolean>((resolve) => {\n let initTimerExpired = false;\n let mutationsOccurred = false;\n const observerTimers = new Set<number>();\n\n const initTimer = window.setTimeout(() => {\n initTimerExpired = true;\n if (observerTimers.size === 0) resolve(mutationsOccurred);\n }, initTimeout);\n\n const observer = new MutationObserver(() => {\n mutationsOccurred = true;\n observerTimers.forEach((t) => clearTimeout(t));\n observerTimers.clear();\n const t = window.setTimeout(() => {\n observerTimers.delete(t);\n if (initTimerExpired && observerTimers.size === 0) {\n observer.disconnect();\n resolve(mutationsOccurred);\n }\n }, mutationTimeout);\n observerTimers.add(t);\n });\n\n observer.observe(targetNode, options);\n });\n }\n return blockUntilStable(document.body as HTMLElement);\n },\n { mutationTimeout, initTimeout }\n );\n\n const total = ((Date.now() - startTime) / 1000).toFixed(2);\n proboLogger.debug(\n result\n ? `Mutations settled. Took ${total}s`\n : `No mutations observed. Took ${total}s`\n );\n\n return result;\n}\n\n\n/**\n * Get element text value: allTextContents + innerText fallback\n */\nexport async function getElementValue(\n page: Page,\n locator: Locator\n): Promise<string> {\n const texts = await locator.allTextContents();\n let allText = texts.join('').trim();\n if (!allText) {\n allText = await locator.evaluate((el: HTMLElement) => el.innerText);\n }\n if (!allText) {\n allText = await locator.inputValue();\n }\n proboLogger.debug(`getElementValue: [${allText}]`);\n return allText;\n}\n\n/**\n * Select dropdown option: native <select>, <option>, child select, or ARIA listbox\n */\nexport async function selectDropdownOption(\n page: Page,\n locator: Locator,\n value: string | string[]\n): Promise<void> { \n const tagName = await locator?.evaluate((el) => el.tagName.toLowerCase());\n const role = await locator?.getAttribute('role');\n\n if (tagName === 'option' || role === 'option') {\n proboLogger.debug('selectDropdownOption: option role detected');\n await locator?.click();\n } else if (tagName === 'select') {\n proboLogger.debug('selectDropdownOption: simple select tag detected');\n try {\n await locator?.selectOption(value as any);\n } catch {\n proboLogger.debug('selectDropdownOption: manual change event fallback');\n const handle = locator ? await locator.elementHandle() : null;\n await page.evaluate(\n ({ h, val }: { h: HTMLElement | SVGElement | null, val: string | string[] }) => {\n const el = h as HTMLSelectElement;\n if (el) {\n el.value = Array.isArray(val) ? val[0] : (val as string);\n el.dispatchEvent(new Event('change', { bubbles: true }));\n }\n },\n { h: handle, val: value }\n );\n }\n } else {\n proboLogger.debug('selectDropdownOption: custom dropdown path');\n let listbox = locator.locator('select');\n let count = await listbox.count();\n if (count > 1) throw new Error(`selectDropdownOption: ambiguous <select> count=${count}`);\n if (count === 1) {\n proboLogger.debug('selectDropdownOption: child <select> found');\n await listbox.selectOption(value as any);\n return;\n }\n await locator.click();\n let container = locator;\n count = 0;\n if (role !== 'listbox') {\n for (let i = 0; i < 7; i++) {\n listbox = container.getByRole('listbox');\n count = await listbox.count();\n if (count >= 1) break;\n proboLogger.debug(`selectDropdownOption: iteration #${i} no listbox found`);\n container = container.locator('xpath=..');\n }\n } else {\n listbox = container;\n count = await listbox.count();\n }\n if (count !== 1) throw new Error(`selectDropdownOption: found ${count} listbox locators`);\n const vals = Array.isArray(value) ? value : [value];\n for (const val of vals) {\n const option = listbox.getByRole('option').getByText(new RegExp(`^${val}$`, 'i'));\n const optCount = await option.count();\n if (optCount !== 1) throw new Error(`selectDropdownOption: ${optCount} options for '${val}'`);\n await option.click();\n }\n }\n}\n\n/**\n * Execute a given Playwright action, mirroring Python's _perform_action\n */\nexport async function executePlaywrightAction_deprecated(\n page: Page,\n action: PlaywrightAction,\n value: string|boolean,\n iframe_selector: string,\n element_css_selector: string\n): Promise<boolean|string> {\n proboLogger.info(`performing Action: ${action} Value: ${value}`);\n try {\n \n if (action === PlaywrightAction.VISIT_BASE_URL || action === PlaywrightAction.VISIT_URL) {\n await page.goto(value as string, { waitUntil: 'load' });\n await handlePotentialNavigation_deprecated(page, null); \n }\n else {\n let locator = undefined;\n if (iframe_selector)\n locator = page.frameLocator(iframe_selector).locator(element_css_selector);\n else\n locator = page.locator(element_css_selector);\n \n // Fail fast: immediately validate that the element exists\n try {\n await locator.waitFor({ state: 'attached' });\n } catch (e) {\n throw new Error(`Element not found with selector: ${element_css_selector}${iframe_selector ? ` in iframe: ${iframe_selector}` : ''}`);\n }\n switch (action) { \n case PlaywrightAction.CLICK:\n await handlePotentialNavigation_deprecated(page, locator, value as ClickPosition | null);\n break;\n\n case PlaywrightAction.FILL_IN:\n // await locator.click();\n await locator.fill(value as string);\n break;\n\n case PlaywrightAction.TYPE_KEYS:\n // Check if the value contains any special keys\n const specialKey = SPECIAL_KEYS.find(key => (value as string).includes(key));\n if (specialKey) {\n // If it's a single special key, just press it\n if (value === specialKey) {\n await locator?.press(specialKey);\n } else {\n // Handle combinations like 'Control+A' or 'Shift+ArrowRight'\n const parts = (value as string).split('+');\n if (parts.length === 2 && SPECIAL_KEYS.includes(parts[0] as any) && SPECIAL_KEYS.includes(parts[1] as any)) {\n await locator?.press(value as string);\n } else {\n // If it's a mix of special keys and text, use pressSequentially\n await locator?.pressSequentially(value as string);\n }\n }\n } else {\n // No special keys, just type normally\n await locator?.pressSequentially(value as string);\n }\n break;\n\n case PlaywrightAction.SELECT_DROPDOWN:\n await selectDropdownOption(page, locator, value as string);\n break;\n\n case PlaywrightAction.SELECT_MULTIPLE_DROPDOWN:\n let optsArr: string[];\n if ((value as string).startsWith('[')) {\n try { optsArr = JSON.parse(value as string); } catch {\n optsArr = (value as string).slice(1, -1).split(',').map(o => o.trim());\n }\n } else {\n optsArr = (value as string).split(',').map(o => o.trim());\n }\n await locator?.selectOption(optsArr as any);\n break;\n\n case PlaywrightAction.CHECK_CHECKBOX:\n await locator?.setChecked(value == true);\n break;\n\n case PlaywrightAction.SELECT_RADIO:\n case PlaywrightAction.TOGGLE_SWITCH:\n await locator?.click();\n break;\n\n case PlaywrightAction.HOVER:\n if (await locator.isVisible()) {\n await locator?.hover({ noWaitAfter: false });\n await page.waitForTimeout(100); // short delay for hover to take effect\n }\n break;\n\n case PlaywrightAction.ASSERT_EXACT_VALUE: \n const actualExact = await getElementValue(page, locator);\n proboLogger.debug(`actual value is [${actualExact}]`);\n if (actualExact !== value) {\n proboLogger.info(`Validation *FAIL* expected '${value}' but got '${actualExact}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.ASSERT_CONTAINS_VALUE: \n const actualContains = await getElementValue(page, locator);\n proboLogger.debug(`actual value is [${actualContains}]`);\n if (!matchRegex(actualContains, value as string)) {\n proboLogger.info(`Validation *FAIL* expected '${actualContains}' to match '${value}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.ASSERT_URL:\n const currUrl = page.url();\n if (currUrl !== value) {\n proboLogger.info(`Validation *FAIL* expected url '${value}' while is '${currUrl}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.SCROLL_TO_ELEMENT:\n // Restore exact scroll positions from recording\n const scrollData = JSON.parse(value as string);\n try {\n proboLogger.debug('🔄 Restoring scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft);\n await locator.evaluate((el: HTMLElement, scrollData: { scrollTop: number; scrollLeft: number }) => {\n el.scrollTop = scrollData.scrollTop;\n el.scrollLeft = scrollData.scrollLeft;\n }, { scrollTop: scrollData.scrollTop, scrollLeft: scrollData.scrollLeft }, { timeout: 2000 });\n } catch (e) {\n proboLogger.error('🔄 Failed to restore scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft, 'error:', e);\n }\n await page.waitForTimeout(500);\n break;\n\n case PlaywrightAction.EXTRACT_VALUE:\n const extractedValue = await getElementValue(page, locator);\n proboLogger.debug(`extracted value is [${extractedValue}]`);\n return extractedValue;\n\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n }\n return true;\n } catch (e) {\n proboLogger.debug(`***ERROR failed to execute action ${action}: ${e}`);\n throw e;\n }\n}\n\n/**\n * Execute a given Playwright action using native Playwright functions where possible\n */\n\n\nexport enum ClickPosition {\n LEFT = 'LEFT',\n RIGHT = 'RIGHT',\n CENTER = 'CENTER'\n}\n\n/**\n * Click on an element at a specific position\n */\nexport async function clickAtPosition(page: Page, locator: Locator, clickPosition: ClickPosition | null): Promise<void> {\n if (!clickPosition || clickPosition === ClickPosition.CENTER) {\n await locator.click({noWaitAfter: false});\n return\n }\n const boundingBox = await locator.boundingBox();\n if (boundingBox) {\n if (clickPosition === ClickPosition.LEFT) {\n // await page.mouse.click(boundingBox.x + 10, boundingBox.y + boundingBox.height/2);\n // mouse click returns immediately, use locator click instead (position relative to top left corner)\n await locator.click({noWaitAfter: false, position: {x: 10, y: boundingBox.height/2}});\n }\n else if (clickPosition === ClickPosition.RIGHT) {\n // await page.mouse.click(boundingBox.x + boundingBox.width - 10, boundingBox.y + boundingBox.height/2);\n // mouse click returns immediately, use locator click instead (position relative to top left corner)\n await locator.click({noWaitAfter: false, position: {x: boundingBox.width - 10, y: boundingBox.height/2}});\n }\n }\n}\n\n/**\n * Traverses up the DOM from the given locator to find the closest visible ancestor.\n * Returns a Locator for the first visible element found, or null if none is visible up to <html>.\n * \n * @param locator - The Playwright locator to start searching from\n * @returns Promise that resolves to a visible ancestor locator or null if none found\n */\nexport async function findClosestVisibleElement(locator: Locator): Promise<Locator | null> {\n let currentLocator = locator;\n let parentLocator: Locator;\n while (true) {\n if (await currentLocator.isVisible()) {\n return currentLocator;\n }\n // Move up to the parent element\n parentLocator = currentLocator.locator('..');\n // Check if we've reached the top of the DOM\n const tagName = await parentLocator.evaluate(el => el.tagName).catch((): string | null => null);\n if (!tagName || tagName === 'HTML' || tagName === 'BODY') {\n break;\n }\n currentLocator = parentLocator;\n }\n return null;\n}\n","import type { Page } from 'playwright';\nimport { ElementTag, SmartSelector, ProboLogLevel } from '@probolabs/probo-shared';\nimport { proboLogger } from './probo-logger';\n\n// Fix the type definition\ntype ElementTagType = typeof ElementTag[keyof typeof ElementTag];\n\n// Add type declaration for the ProboLabs global\ndeclare global {\n // Declare highlighterCode in the global scope\n var highlighterCode: string;\n \n interface Window {\n ProboLabs?: {\n highlight: {\n execute: (elementTypes: ElementTagType[]) => Promise<any>;\n unexecute: () => Promise<any>;\n };\n highlightElements: (elements: Array<{ css_selector: string, iframe_selector: string, smart_selector: SmartSelector|null, smart_iframe_selector: SmartSelector|null, index: number }>, enableSmartSelectors: boolean) => void;\n unhighlightElements: () => void;\n findElements: (elementTypes: string) => any[];\n getElementInfo: (element: Element, index: number) => any;\n ElementTag: typeof ElementTag;\n\n // --- New caching API ---\n candidates?: any[];\n actual?: any;\n matchingCandidate?: any;\n findAndCacheCandidateElements?: (elementTypes: string[]) => number;\n findAndCacheActualElement?: (iframeSelector: string|SmartSelector, elementSelector: string|SmartSelector, isHover: boolean, useSmartSelectors: boolean) => boolean;\n findAndCacheMatchingCandidate?: () => boolean;\n highlightCachedElements?: (which: 'candidates' | 'actual' | 'matching') => void;\n unhighlight?: () => void;\n reset?: () => void;\n getCandidates?: () => any[];\n getActual?: () => any;\n getMatchingCandidate?: () => any;\n setLoggerDebugLevel?: (debugLevel: ProboLogLevel) => void;\n };\n }\n}\n\nexport class Highlighter {\n constructor(private readonly enableSmartSelectors: boolean = false, private readonly enableConsoleLogs: boolean = true, private readonly debugLevel: ProboLogLevel = ProboLogLevel.INFO) {}\n\n private async ensureHighlighterScript(page: Page, maxRetries = 3) {\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n const scriptExists = await page.evaluate(\n `typeof window.ProboLabs?.highlight?.execute === 'function'`\n );\n\n if (!scriptExists) {\n proboLogger.debug('Injecting highlighter script...');\n await page.evaluate(highlighterCode);\n \n // Verify the script was injected correctly\n const verified = await page.evaluate(`\n //console.log('ProboLabs global:', window.ProboLabs);\n typeof window.ProboLabs?.highlight?.execute === 'function'\n `);\n proboLogger.debug('Script injection verified:', verified);\n await page.evaluate(`window.ProboLabs.setLoggerDebugLevel('${this.debugLevel}');`);\n }\n return; // Success - exit the function\n } catch (error) {\n if (attempt === maxRetries - 1) {\n throw error;\n }\n proboLogger.debug(`Script injection attempt ${attempt + 1} failed, retrying after delay...`);\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n }\n }\n\n public async highlightElements(page: Page, elementTags: [ElementTagType]) {\n proboLogger.debug('highlightElements called with:', elementTags);\n await this.ensureHighlighterScript(page);\n \n // Execute the highlight function and await its result\n const result = await page.evaluate(\n async (tags) => {\n //proboLogger.debug('Browser: Starting highlight execution with tag:', tag);\n if (!window.ProboLabs?.highlight?.execute) {\n console.error('Browser: ProboLabs.highlight.execute is not available!');\n return null;\n }\n const elements = await window.ProboLabs.highlight.execute(tags);\n //proboLogger.debug('Browser: Found elements:', elements);\n return elements;\n },\n elementTags\n );\n \n // proboLogger.debug(\"highlighted elements =>\");\n // for (let i = 0; i < result.length; i++) { \n // proboLogger.debug(result[i]);\n // };\n \n return result;\n }\n\n public async unhighlightElements(page: Page) {\n proboLogger.debug('unhighlightElements called');\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window?.ProboLabs?.highlight?.unexecute();\n });\n }\n\n public async highlightElement(page: Page, element_css_selector: string, iframe_selector: string, smart_selector: SmartSelector|null, smart_iframe_selector: SmartSelector|null, element_index: number) {\n await this.ensureHighlighterScript(page);\n proboLogger.debug('Highlighting element with:', { element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, enableSmartSelectors: this.enableSmartSelectors, element_index });\n \n await page.evaluate(\n ({ css_selector, iframe_selector, smart_selector, smart_iframe_selector, index }) => {\n const proboLabs = window.ProboLabs;\n if (!proboLabs) {\n proboLogger.warn('ProboLabs not initialized');\n return;\n }\n // Create ElementInfo object for the element\n const elementInfo = {\n css_selector: css_selector,\n iframe_selector: iframe_selector,\n smart_selector: smart_selector,\n smart_iframe_selector: smart_iframe_selector,\n index: index\n };\n \n // Call highlightElements directly\n proboLabs.highlightElements([elementInfo], this.enableSmartSelectors);\n },\n { \n css_selector: element_css_selector,\n iframe_selector: iframe_selector,\n smart_selector: smart_selector,\n smart_iframe_selector: smart_iframe_selector,\n index: element_index \n }\n );\n }\n\n \n // --- New Clean Caching API ---\n /**\n * Find and cache candidate elements of a given type (e.g., 'CLICKABLE').\n * Returns the number of candidates found.\n */\n public async findAndCacheCandidateElements(page: Page, elementTypes: string[]): Promise<number> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate(async (types: string[]) => {\n return await window.ProboLabs?.findAndCacheCandidateElements?.(types);\n }, elementTypes);\n return result ?? 0;\n }\n\n /**\n * Find and cache the actual interaction element by CSS and iframe selector.\n * Returns true if found, false otherwise.\n */\n public async findAndCacheActualElement(page: Page, iframeSelector: string|SmartSelector, elementSelector: string|SmartSelector, isHover: boolean = false): Promise<boolean> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate((params: { iframeSelector: string|SmartSelector, elementSelector: string|SmartSelector, isHover: boolean, useSmartSelectors: boolean }) => {\n return window.ProboLabs?.findAndCacheActualElement?.(params.iframeSelector, params.elementSelector, params.isHover, params.useSmartSelectors);\n }, { iframeSelector: iframeSelector, elementSelector: elementSelector, isHover: isHover, useSmartSelectors: this.enableSmartSelectors });\n return result ?? false;\n }\n\n /**\n * Find and cache the best matching candidate for the actual element.\n * Returns true if a match was found, false otherwise.\n */\n public async findAndCacheMatchingCandidate(page: Page): Promise<boolean> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate(() => {\n return window.ProboLabs?.findAndCacheMatchingCandidate?.();\n });\n return result ?? false;\n }\n\n /**\n * Highlight the cached candidates, actual, or matching candidate.\n * @param which 'candidates' | 'actual' | 'matching'\n */\n public async highlightCachedElements(page: Page, which: 'candidates' | 'actual' | 'matching') {\n await this.ensureHighlighterScript(page);\n await page.evaluate((w: 'candidates' | 'actual' | 'matching') => {\n window.ProboLabs?.highlightCachedElements?.(w);\n }, which);\n }\n\n /**\n * Remove all highlights.\n */\n public async unhighlightCached(page: Page) {\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window.ProboLabs?.unhighlight?.();\n });\n }\n\n /**\n * Reset/clear all cached state.\n */\n public async resetCached(page: Page) {\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window.ProboLabs?.reset?.();\n });\n }\n\n /**\n * Get serializable info for Node/Playwright (candidates, actual, matchingCandidate)\n */\n public async getCandidatesCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getCandidates?.();\n });\n }\n\n public async getActualCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getActual?.();\n });\n }\n\n public async getMatchingCandidateCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getMatchingCandidate?.();\n });\n }\n}\n\nexport { ElementTag, ElementTagType };\n","const MAILPIT_BASE_URL = (process.env.MAILPIT_BASE_URL ?? 'http://mailpit.probolabs.ai:8025').replace(/\\/$/, '');\nconst MAILPIT_DEFAULT_DOMAIN = process.env.MAILPIT_DEFAULT_DOMAIN ?? 'mailpit.probolabs.ai';\nconst MAILPIT_USERNAME = process.env.MAILPIT_USERNAME;\nconst MAILPIT_PASSWORD = process.env.MAILPIT_PASSWORD;\nconst MAILPIT_FETCH_LIMIT = Number(process.env.MAILPIT_FETCH_LIMIT ?? 50);\n\nconst MAILPIT_API_BASE = `${MAILPIT_BASE_URL}/api/v1`;\n\ntype MailpitAddress = {\n Name?: string;\n Address?: string;\n};\n\ntype MailpitMessageSummary = {\n ID: string;\n MessageID?: string;\n Created?: string;\n Date?: string;\n Subject?: string;\n Read?: boolean;\n Snippet?: string;\n From?: MailpitAddress;\n To?: MailpitAddress[];\n Cc?: MailpitAddress[] | null;\n Bcc?: MailpitAddress[] | null;\n ReplyTo?: MailpitAddress[];\n Tags?: string[];\n Size?: number;\n Attachments?: number;\n Username?: string;\n};\n\ntype MailpitMessageDetail = MailpitMessageSummary & {\n Text?: string;\n HTML?: string;\n Inline?: Array<Record<string, unknown>>;\n Attachments?: Array<Record<string, unknown>>;\n};\n\ntype MailpitMessagesResponse = {\n messages?: MailpitMessageSummary[];\n total?: number;\n count?: number;\n start?: number;\n unread?: number;\n};\n\nexport interface MailinatorMessage {\n id: string;\n subject: string;\n from: string;\n origfrom?: string;\n to: string;\n time: number;\n seconds_ago?: number;\n domain?: string;\n source?: string;\n parts?: Array<{\n headers: Record<string, string>;\n body: string;\n }>;\n textBody?: string;\n htmlBody?: string;\n}\n\n/**\n * OTP utility class for working with Mailpit API\n */\nexport class OTP {\n /**\n * Flag to control whether messages should be deleted after OTP extraction\n * Set to false for debugging purposes to keep messages in the inbox\n * @default true\n */\n static DELETE_MESSAGE_AFTER_OTP_EXTRACTION = true;\n\n /**\n * Fetches the last messages from Mailpit for a specific inbox (or all inboxes)\n * @param inbox - Optional inbox (local part or full email). When omitted all inboxes are returned.\n * @param since - Unix timestamp to fetch messages since (optional)\n * @returns Promise<MailinatorMessage[]> - Array of normalized messages\n */\n static async fetchLastMessages(inbox?: string, since?: number): Promise<MailinatorMessage[]> {\n const normalizedInbox = OTP.normalizeInbox(inbox);\n\n try {\n console.log(`[fetchLastMessages] querying Mailpit (inbox=${normalizedInbox ?? 'ALL'})`);\n\n const data = await OTP.request<MailpitMessagesResponse>('/messages', undefined, {\n limit: MAILPIT_FETCH_LIMIT,\n mailbox: normalizedInbox,\n });\n\n const messages = (data.messages ?? []).map(OTP.mapSummaryToMessage);\n\n console.log(\n `[fetchLastMessages] received ${messages.length} messages`,\n messages.map((msg) => ({\n id: msg.id,\n to: msg.to,\n time: new Date(msg.time).toISOString(),\n subject: msg.subject,\n }))\n );\n\n if (since) {\n const filtered = messages.filter((message) => message.time >= since);\n console.log(\n `[fetchLastMessages] filtered to ${filtered.length} messages after since=${new Date(since).toISOString()}`\n );\n return filtered;\n }\n\n return messages;\n } catch (error) {\n console.error('Error fetching messages from Mailpit:', error);\n throw error;\n }\n }\n\n /**\n * Fetches a specific message by ID\n * @param messageId - The message ID\n * @returns Promise<MailinatorMessage> - The message details\n */\n static async fetchMessage(messageId: string): Promise<MailinatorMessage> {\n try {\n const data = await OTP.request<MailpitMessageDetail>(`/message/${encodeURIComponent(messageId)}`);\n return OTP.mapDetailToMessage(data);\n } catch (error) {\n console.error('Error fetching message from Mailpit:', error);\n throw error;\n }\n }\n\n /**\n * Deletes a specific message by ID\n * @param messageId - The message ID to delete\n * @returns Promise<boolean> - True if deleted successfully, false otherwise\n */\n static async deleteMessage(messageId: string): Promise<boolean> {\n try {\n const response = await OTP.rawRequest('/messages', {\n method: 'DELETE',\n body: JSON.stringify({\n messageIDs: [messageId],\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n console.error(`Failed to delete message ${messageId}: ${response.status} ${response.statusText}`);\n return false;\n }\n\n console.log(`🗑️ [deleteMessage] Deleted message: ${messageId}`);\n return true;\n } catch (error) {\n console.error('Error deleting message from Mailpit:', error);\n return false;\n }\n }\n\n\n /**\n * Extracts OTP codes from message content\n * @param message - The message to extract OTP from\n * @returns string | null - The OTP code or null if not found\n */\n static extractOTPFromMessage(message: MailinatorMessage): string | null {\n // Common OTP patterns - ordered by specificity (most specific first)\n const otpPatterns = [\n // Very specific patterns for common OTP formats\n /(?:verification\\s+code|verification\\s+number|6-digit\\s+verification\\s+code)[\\s\\S]*?(\\d{6})/i,\n /(?:use\\s+the\\s+6-digit\\s+verification\\s+code\\s+below)[\\s\\S]*?(\\d{6})/i,\n /(?:code\\s+below\\s+to\\s+complete)[\\s\\S]*?(\\d{6})/i,\n /(?:verification\\s+code)[\\s\\S]*?(\\d{6})/i,\n \n // Patterns with context around the code\n /(?:OTP|code|verification code|verification):\\s*(\\d{4,8})/i,\n /(?:enter|use|input)\\s+(?:the\\s+)?(?:code|OTP|verification code):\\s*(\\d{4,8})/i,\n /(?:your\\s+)?(?:verification\\s+)?(?:code\\s+is|OTP\\s+is):\\s*(\\d{4,8})/i,\n /(?:code|OTP|pin):\\s*(\\d{4,8})/i,\n /(?:code|OTP)\\s+is\\s+(\\d{4,8})/i,\n \n // Look for codes in specific contexts (avoiding URLs and tracking IDs)\n /(?:complete\\s+your\\s+sign-in)[\\s\\S]*?(\\d{6})/i,\n /(?:valid\\s+for\\s+the\\s+next)[\\s\\S]*?(\\d{6})/i,\n \n // Fallback: 6-digit numbers (most common OTP length)\n /(?:^|\\s)(\\d{6})(?:\\s|$)/i,\n \n // Last resort: 4-8 digit numbers (but avoid very long ones that are likely tracking IDs)\n /(?:^|\\s)(\\d{4,8})(?:\\s|$)/i\n ];\n\n // Helper function to check if a number is likely an OTP (not a tracking ID, phone number, year, etc.)\n const isValidOTP = (number: string, text: string): boolean => {\n // Common OTP lengths\n if (number.length < 4 || number.length > 8) return false;\n \n // Only filter out very obvious non-OTPs\n // Avoid numbers that are all the same digit (unlikely to be OTPs)\n if (/^(\\d)\\1+$/.test(number)) return false;\n \n // Avoid very long numbers that are clearly tracking IDs (but be more lenient)\n if (number.length >= 8 && parseInt(number) > 99999999) return false;\n \n // Filter out common false positives\n // Check if this looks like a year (4 digits starting with 19 or 20)\n if (number.length === 4 && /^(19|20)\\d{2}$/.test(number)) {\n // Check if it appears in copyright context\n if (text.includes(`© GoSource ${number}`) || text.includes(`©${number}`) || text.match(new RegExp(`©[^\\\\d]*${number}`, 'i'))) {\n return false;\n }\n }\n \n return true;\n };\n\n // Helper function to extract OTP from text content\n const extractFromText = (text: string, debugContext: string = ''): string | null => {\n if (!text) return null;\n \n for (let i = 0; i < otpPatterns.length; i++) {\n const pattern = otpPatterns[i];\n const match = text.match(pattern);\n if (match && match[1] && isValidOTP(match[1], text)) {\n console.log(`[OTP] Pattern ${i} matched \"${match[1]}\" in ${debugContext}`);\n return match[1];\n } else if (match && match[1]) {\n console.log(`[OTP] Pattern ${i} matched \"${match[1]}\" but rejected by isValidOTP in ${debugContext}`);\n }\n }\n return null;\n };\n\n // Helper function to strip HTML tags\n const stripHtml = (html: string): string => {\n return html.replace(/<[^>]*>/g, '').replace(/&[^;]+;/g, ' ');\n };\n\n // 1. Try to extract from text body first (preferred)\n if (message.textBody) {\n const otp = extractFromText(message.textBody, 'textBody');\n if (otp) return otp;\n }\n\n // 2. Try to extract from HTML body (strip HTML tags first)\n if (message.htmlBody) {\n const plainText = stripHtml(message.htmlBody);\n const otp = extractFromText(plainText, 'htmlBody');\n if (otp) return otp;\n }\n\n // 3. Try to extract from message parts\n if (message.parts && message.parts.length > 0) {\n for (let i = 0; i < message.parts.length; i++) {\n const part = message.parts[i];\n if (part.body) {\n const otp = extractFromText(part.body, `part[${i}]`);\n if (otp) return otp;\n }\n }\n }\n\n // 4. Fallback: try to extract from subject\n const otp = extractFromText(message.subject, 'subject');\n if (otp) return otp;\n \n return null;\n }\n\n /**\n * Gets the text content from a message for debugging/display purposes\n * @param message - The message to extract text from\n * @returns string - The text content of the message\n */\n static getMessageTextContent(message: MailinatorMessage): string {\n // Helper function to strip HTML tags\n const stripHtml = (html: string): string => {\n return html.replace(/<[^>]*>/g, '').replace(/&[^;]+;/g, ' ');\n };\n\n // Priority order: textBody > htmlBody > parts > subject\n if (message.textBody) {\n return message.textBody;\n }\n\n if (message.htmlBody) {\n return stripHtml(message.htmlBody);\n }\n\n if (message.parts && message.parts.length > 0) {\n return message.parts.map(part => part.body || '').join('\\n');\n }\n\n return message.subject || '';\n }\n\n /**\n * Fetches messages from all inboxes in the domain\n * @param limit - Number of messages to fetch (default: 50)\n * @param sort - Sort order: 'ascending' or 'descending' (default: 'descending')\n * @param full - Whether to fetch full message content (default: false)\n * @returns Promise<MailinatorMessage[]> - Array of messages from all inboxes\n */\n static async fetchAllInboxMessages(\n limit: number = MAILPIT_FETCH_LIMIT,\n sort: 'ascending' | 'descending' = 'descending',\n full: boolean = false\n ): Promise<MailinatorMessage[]> {\n const data = await OTP.request<MailpitMessagesResponse>('/messages', undefined, {\n limit,\n sort: sort === 'ascending' ? 'asc' : 'desc',\n });\n\n const summaries = (data.messages ?? []).map(OTP.mapSummaryToMessage);\n\n console.log(\n `[fetchAllInboxMessages] received ${summaries.length} messages`,\n summaries.map((msg) => ({\n id: msg.id,\n to: msg.to,\n time: new Date(msg.time).toISOString(),\n subject: msg.subject,\n }))\n );\n\n if (!full) {\n return summaries;\n }\n\n const expanded = await Promise.all(\n summaries.map(async (summary) => {\n try {\n return await OTP.fetchMessage(summary.id);\n } catch {\n return summary;\n }\n })\n );\n\n return expanded;\n }\n\n /**\n * Waits for an OTP to arrive in the inbox and extracts it\n * @param options - Configuration options for waiting for OTP\n * @param options.inbox - The inbox name to monitor (optional - if not provided, searches all inboxes)\n * @param options.timeout - Maximum time to wait in milliseconds (default: 30000)\n * @param options.checkInterval - How often to check in milliseconds (default: 1000)\n * @param options.checkRecentMessagesSinceMs - When > 0, check messages from the last X milliseconds and return the most recent OTP (default: 0)\n * @returns Promise<string | null> - The extracted OTP code or null if timeout/no OTP found\n */\n static async waitForOTP(\n optionsOrInbox: string | {\n inbox?: string;\n timeout?: number;\n checkInterval?: number;\n checkRecentMessagesSinceMs?: number;\n } = {}\n ): Promise<string | null> {\n const options = typeof optionsOrInbox === 'string'\n ? { inbox: optionsOrInbox }\n : optionsOrInbox ?? {};\n\n const {\n inbox,\n timeout = 30000,\n checkInterval = 1000,\n checkRecentMessagesSinceMs = 0\n } = options;\n \n console.log(`[waitForOTP] inbox: ${inbox || 'all'}, timeout: ${timeout}ms, checkInterval: ${checkInterval}ms, checkRecentSince: ${checkRecentMessagesSinceMs}ms`);\n \n const startTime = Date.now();\n \n // If checkRecentMessagesSinceMs > 0, check for recent messages first\n if (checkRecentMessagesSinceMs > 0) {\n const recentMessagesCutoff = Date.now() - checkRecentMessagesSinceMs;\n const recentMessages = inbox\n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n \n const messagesFromWindow = recentMessages.filter(msg => msg.time >= recentMessagesCutoff);\n const sortedMessages = messagesFromWindow.sort((a, b) => b.time - a.time);\n \n for (const message of sortedMessages) {\n let otp = OTP.extractOTPFromMessage(message);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp}`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(message.id);\n }\n \n return otp;\n }\n \n // If no OTP found in summary, fetch full message details\n try {\n const fullMessage = await OTP.fetchMessage(message.id);\n otp = OTP.extractOTPFromMessage(fullMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp}`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(fullMessage.id);\n }\n \n return otp;\n }\n } catch (error) {\n // Silently continue to next message\n }\n }\n \n if (messagesFromWindow.length === 0) {\n console.log(`❌ [waitForOTP] No messages found in the last ${checkRecentMessagesSinceMs}ms`);\n } else {\n console.log(`❌ [waitForOTP] Checked ${messagesFromWindow.length} recent message(s) but none contained OTP`);\n }\n }\n \n // Get initial messages for monitoring new ones (from specific inbox or all inboxes)\n const initialMessages = inbox\n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n const initialMessageIds = new Set(initialMessages.map(msg => msg.id));\n \n while (Date.now() - startTime < timeout) {\n await new Promise(resolve => setTimeout(resolve, checkInterval));\n \n try {\n // Get current messages (from specific inbox or all inboxes)\n const currentMessages = inbox\n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n const newMessages = currentMessages.filter(msg => !initialMessageIds.has(msg.id));\n \n if (newMessages.length > 0) {\n // Sort new messages by time (newest first) to handle multiple messages arriving at once\n const sortedNewMessages = newMessages.sort((a, b) => b.time - a.time);\n \n // Check all new messages (not just the first one)\n for (const newMessage of sortedNewMessages) {\n // First try to extract OTP from the message summary (faster)\n let otp = OTP.extractOTPFromMessage(newMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp} in new message`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(newMessage.id);\n }\n \n return otp;\n }\n \n // If no OTP found in summary, fetch full message details\n try {\n const fullMessage = await OTP.fetchMessage(newMessage.id);\n otp = OTP.extractOTPFromMessage(fullMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp} in new message (full fetch)`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(fullMessage.id);\n }\n \n return otp;\n }\n } catch (error) {\n // Silently continue to next message\n }\n }\n \n // Add all new messages to the set so we don't reprocess them\n newMessages.forEach(msg => initialMessageIds.add(msg.id));\n }\n } catch (error) {\n // Silently continue polling\n }\n }\n \n console.log(`❌ [waitForOTP] Timeout reached (${timeout}ms) - no OTP found`);\n return null; // Timeout reached or no OTP found\n }\n\n private static normalizeInbox(inbox?: string): string | undefined {\n if (!inbox) {\n return undefined;\n }\n\n const trimmed = inbox.trim();\n if (!trimmed) {\n return undefined;\n }\n\n if (trimmed.includes('@')) {\n return trimmed;\n }\n\n return `${trimmed}@${MAILPIT_DEFAULT_DOMAIN}`;\n }\n\n private static buildHeaders(additional?: HeadersInit): HeadersInit {\n const headers = new Headers(additional ?? {});\n\n if (!headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json');\n }\n\n if (MAILPIT_USERNAME !== undefined || MAILPIT_PASSWORD !== undefined) {\n const authString = Buffer.from(`${MAILPIT_USERNAME ?? ''}:${MAILPIT_PASSWORD ?? ''}`).toString('base64');\n headers.set('Authorization', `Basic ${authString}`);\n }\n\n return headers;\n }\n\n private static async request<T>(\n path: string,\n init?: RequestInit,\n queryParams?: Record<string, string | number | boolean | undefined>\n ): Promise<T> {\n const url = new URL(`${MAILPIT_API_BASE}${path}`);\n\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value === undefined || value === null || value === '') {\n return;\n }\n url.searchParams.set(key, String(value));\n });\n }\n\n const headers = OTP.buildHeaders(init?.headers);\n\n const response = await fetch(url.toString(), {\n ...init,\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Mailpit API error: ${response.status} ${response.statusText}`);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n return (await response.json()) as T;\n }\n\n private static async rawRequest(\n path: string,\n init?: RequestInit,\n queryParams?: Record<string, string | number | boolean | undefined>\n ): Promise<Response> {\n const url = new URL(`${MAILPIT_API_BASE}${path}`);\n\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value === undefined || value === null || value === '') {\n return;\n }\n url.searchParams.set(key, String(value));\n });\n }\n\n const headers = OTP.buildHeaders(init?.headers);\n\n return fetch(url.toString(), {\n ...init,\n headers,\n });\n }\n\n private static mapSummaryToMessage(summary: MailpitMessageSummary): MailinatorMessage {\n const toAddresses = summary.To?.map((addr) => addr.Address).filter(Boolean) ?? [];\n const createdAt = summary.Created ?? summary.Date;\n const timestamp = OTP.parseTimestamp(createdAt);\n\n return {\n id: summary.ID,\n subject: summary.Subject ?? '',\n from: summary.From?.Address ?? '',\n origfrom: summary.From?.Name || summary.From?.Address,\n to: toAddresses.join(', '),\n time: timestamp,\n textBody: summary.Snippet,\n parts: [],\n };\n }\n\n private static mapDetailToMessage(detail: MailpitMessageDetail): MailinatorMessage {\n const base = OTP.mapSummaryToMessage(detail);\n return {\n ...base,\n textBody: detail.Text ?? base.textBody,\n htmlBody: detail.HTML ?? base.htmlBody,\n };\n }\n\n private static parseTimestamp(value?: string): number {\n if (!value) {\n return Date.now();\n }\n\n const parsed = Date.parse(value);\n return Number.isNaN(parsed) ? Date.now() : parsed;\n }\n}\n\n","import { Page, Frame } from 'playwright';\nimport { proboLogger } from './probo-logger';\n\nexport interface NavTrackerOptions {\n waitForStabilityQuietTimeout?: number; // Time to wait for network stability (default: 2000ms)\n waitForStabilityInitialDelay?: number; // Initial delay before monitoring starts (default: 500ms)\n waitForStabilityGlobalTimeout?: number; // Overall timeout for stabilization (default: 15000ms)\n pollMs?: number; // Polling interval (default: 100ms)\n maxInflight?: number; // Maximum inflight requests (default: 0)\n inflightGraceMs?: number; // Grace period for inflight requests (default: 4000ms)\n waitForStabilityVerbose?: boolean; // Enable verbose logging (default: false)\n}\n\ntype ResourceType =\n | 'Document' | 'Stylesheet' | 'Image' | 'Media' | 'Font' | 'Script'\n | 'TextTrack' | 'XHR' | 'Fetch' | 'EventSource' | 'WebSocket' | 'Manifest' | 'Other';\n\n/**\n * Global navigation tracker that monitors page navigation events and network activity\n * using CDP (Chrome DevTools Protocol) for comprehensive network monitoring\n * \n * This is a singleton class - only one instance can exist at a time\n */\nexport class NavTracker {\n private static instance: NavTracker | null = null;\n private page: Page;\n private navigationCount: number = 0;\n private lastNavTime: number | null = null;\n private waitForStabilityQuietTimeout: number;\n private waitForStabilityInitialDelay: number;\n private waitForStabilityGlobalTimeout: number;\n private pollMs: number;\n private maxInflight: number;\n private inflightGraceMs: number;\n private waitForStabilityVerbose: boolean;\n private isListening: boolean = false;\n private instanceId: string;\n private client: any = null;\n private inflight: Set<string> = new Set();\n private lastHardNavAt: number = 0;\n private lastSoftNavAt: number = 0;\n private lastNetworkActivityAt: number = 0;\n private totalRequestsTracked: number = 0;\n\n // Define relevant resource types and content types\n private readonly RELEVANT_RESOURCE_TYPES = [\n 'Document',\n 'Stylesheet', \n 'Image',\n 'Font',\n 'Script',\n 'XHR',\n 'Fetch'\n ];\n\n private readonly RELEVANT_CONTENT_TYPES = [\n 'text/html',\n 'text/css',\n 'application/javascript',\n 'image/',\n 'font/',\n 'application/json',\n ];\n\n // Additional patterns to filter out\n private readonly IGNORED_URL_PATTERNS = [\n // Analytics and tracking\n 'analytics',\n 'tracking',\n 'telemetry',\n 'beacon',\n 'metrics',\n // Ad-related\n 'doubleclick',\n 'adsystem',\n 'adserver',\n 'advertising',\n // Social media widgets\n 'facebook.com/plugins',\n 'platform.twitter',\n 'linkedin.com/embed',\n // Live chat and support\n 'livechat',\n 'zendesk',\n 'intercom',\n 'crisp.chat',\n 'hotjar',\n // Push notifications\n 'push-notifications',\n 'onesignal',\n 'pushwoosh',\n // Background sync/heartbeat\n 'heartbeat',\n 'ping',\n 'alive',\n // WebRTC and streaming\n 'webrtc',\n 'rtmp://',\n 'wss://',\n // Common CDNs for dynamic content\n 'cloudfront.net',\n 'fastly.net',\n ];\n\n /**\n * Private constructor - use getInstance() to get the singleton instance\n */\n private constructor(page: Page, options: NavTrackerOptions = {}) {\n this.page = page;\n this.waitForStabilityQuietTimeout = options.waitForStabilityQuietTimeout ?? 2000;\n this.waitForStabilityInitialDelay = options.waitForStabilityInitialDelay ?? 500;\n this.waitForStabilityGlobalTimeout = options.waitForStabilityGlobalTimeout ?? 15000;\n this.pollMs = options.pollMs ?? 100;\n this.maxInflight = options.maxInflight ?? 0;\n this.inflightGraceMs = options.inflightGraceMs ?? 4000;\n this.waitForStabilityVerbose = options.waitForStabilityVerbose ?? false;\n \n proboLogger.debug(`NavTracker constructor set values: quietTimeout=${this.waitForStabilityQuietTimeout}, initialDelay=${this.waitForStabilityInitialDelay}, globalTimeout=${this.waitForStabilityGlobalTimeout}, verbose=${this.waitForStabilityVerbose}`);\n this.instanceId = Math.random().toString(36).substring(2, 11);\n \n // Initialize timestamps\n const now = Date.now();\n this.lastHardNavAt = now;\n this.lastSoftNavAt = now;\n this.lastNetworkActivityAt = now;\n\n // Note: start() is called asynchronously in getInstance() to ensure proper initialization\n }\n\n /**\n * Start listening for navigation and network events using CDP (private method)\n */\n private async start(): Promise<void> {\n if (this.isListening) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: already listening, ignoring start()`);\n return;\n }\n\n try {\n // Set up CDP session\n this.client = await this.page.context().newCDPSession(this.page);\n await this.client.send('Page.enable');\n await this.client.send('Network.enable');\n await this.client.send('Runtime.enable');\n await this.client.send('Page.setLifecycleEventsEnabled', { enabled: true });\n\n // Set up navigation event handlers\n this.client.on('Page.frameNavigated', (e: any) => {\n if (!e.frame?.parentId) { // main frame has no parentId\n this.lastHardNavAt = Date.now();\n this.navigationCount++;\n this.lastNavTime = Date.now();\n \n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Hard navigation detected at ${this.lastHardNavAt}`);\n }\n }\n });\n\n this.client.on('Page.navigatedWithinDocument', (_e: any) => {\n this.lastSoftNavAt = Date.now();\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Soft navigation detected at ${this.lastSoftNavAt}`);\n }\n });\n\n // Set up network event handlers\n this.client.on('Network.requestWillBeSent', (e: any) => {\n this.onNetworkRequest(e);\n });\n\n this.client.on('Network.loadingFinished', (e: any) => {\n this.onNetworkResponse(e, 'finished');\n });\n\n this.client.on('Network.loadingFailed', (e: any) => {\n this.onNetworkResponse(e, 'failed');\n });\n\n this.isListening = true;\n proboLogger.debug(`NavTracker[${this.instanceId}]: started CDP-based monitoring`);\n } catch (error) {\n proboLogger.error(`NavTracker[${this.instanceId}]: Failed to start CDP monitoring: ${error}`);\n // Fall back to basic navigation tracking\n this.page.on(\"framenavigated\", (frame: Frame) => {\n if (frame === this.page.mainFrame()) {\n this.navigationCount++;\n this.lastNavTime = Date.now();\n this.lastHardNavAt = Date.now();\n }\n });\n this.isListening = true;\n }\n }\n\n /**\n * Stop listening for navigation and network events (private method)\n */\n private stop(): void {\n if (!this.isListening) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: not listening, ignoring stop()`);\n return;\n }\n\n try {\n if (this.client) {\n // Check if the page is still available before detaching\n if (this.page && !this.page.isClosed()) {\n this.client.detach();\n } else {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Page is closed, skipping CDP detach`);\n }\n this.client = null;\n }\n } catch (error) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Error detaching CDP client: ${error}`);\n }\n\n this.isListening = false;\n proboLogger.debug(`NavTracker[${this.instanceId}]: stopped CDP monitoring`);\n }\n\n /**\n * Handle network request events\n */\n private onNetworkRequest(e: any): void {\n const requestType = e.type as ResourceType | undefined;\n const url = e.request?.url ?? '';\n \n // Filter by resource type\n if (!this.RELEVANT_RESOURCE_TYPES.includes(requestType as any)) {\n return;\n }\n\n // Filter out streaming, websocket, and other real-time requests\n if (['WebSocket', 'EventSource', 'Media', 'Manifest', 'Other'].includes(requestType as any)) {\n return;\n }\n\n // Filter out by URL patterns\n const urlLower = url.toLowerCase();\n if (this.IGNORED_URL_PATTERNS.some(pattern => urlLower.includes(pattern))) {\n return;\n }\n\n // Filter out data URLs and blob URLs\n if (urlLower.startsWith('data:') || urlLower.startsWith('blob:')) {\n return;\n }\n\n // Filter out requests with certain headers\n const headers = e.request?.headers || {};\n if (headers['purpose'] === 'prefetch' || ['video', 'audio'].includes(headers['sec-fetch-dest'])) {\n return;\n }\n\n this.inflight.add(e.requestId);\n this.totalRequestsTracked++;\n this.lastNetworkActivityAt = Date.now();\n\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Network request started: ${requestType} - ${url}`);\n }\n }\n\n /**\n * Handle network response events\n */\n private onNetworkResponse(e: any, status: 'finished' | 'failed'): void {\n const requestId = e.requestId;\n \n if (!this.inflight.has(requestId)) {\n return;\n }\n\n this.inflight.delete(requestId);\n this.lastNetworkActivityAt = Date.now();\n\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Network request ${status} (${this.inflight.size} remaining)`);\n }\n }\n\n /**\n * Check if navigation and network activity has stabilized\n */\n private hasNavigationStabilized(): boolean {\n const now = Date.now();\n \n // Use the most recent activity timestamp\n const lastActivityAt = Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n const quietSinceMs = now - lastActivityAt;\n const inflightOk = this.inflight.size <= this.maxInflight || (now - this.lastHardNavAt) > this.inflightGraceMs;\n \n const isStabilized = quietSinceMs >= this.waitForStabilityQuietTimeout && inflightOk;\n \n if (this.waitForStabilityVerbose) {\n proboLogger.debug(\n `NavTracker[${this.instanceId}]: hasNavigationStabilized() - quietSinceMs=${quietSinceMs}ms, waitForStabilityQuietTimeout=${this.waitForStabilityQuietTimeout}ms, inflight=${this.inflight.size}, inflightOk=${inflightOk}, stabilized=${isStabilized}`\n );\n }\n \n return isStabilized;\n }\n\n /**\n * Wait for navigation and network activity to stabilize\n * Uses CDP-based monitoring for comprehensive network activity tracking\n */\n async waitForNavigationToStabilize(): Promise<void> {\n const now = Date.now();\n const lastActivityAt = Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n const timeSinceLastActivity = now - lastActivityAt;\n proboLogger.debug(`NavTracker[${this.instanceId}]: waiting for navigation and network to stabilize (quietTimeout: ${this.waitForStabilityQuietTimeout}ms, initialDelay: ${this.waitForStabilityInitialDelay}ms, globalTimeout: ${this.waitForStabilityGlobalTimeout}ms, verbose: ${this.waitForStabilityVerbose}, lastActivity: ${timeSinceLastActivity}ms ago)`);\n \n // Ensure CDP monitoring is properly initialized\n if (!this.isListening) {\n proboLogger.warn(`NavTracker[${this.instanceId}]: CDP monitoring not initialized, initializing now...`);\n await this.start();\n }\n \n const startTime = Date.now();\n const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n \n try {\n // Initial delay to catch any new network activity triggered by user actions\n if (this.waitForStabilityInitialDelay > 0) {\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: initial delay of ${this.waitForStabilityInitialDelay}ms to catch new network activity`);\n }\n await sleep(this.waitForStabilityInitialDelay);\n }\n \n // Wait a short time to catch any missed events\n await sleep(100);\n \n // Main stabilization loop\n while (true) {\n const now = Date.now();\n \n // Check for timeout\n if (now - startTime > this.waitForStabilityGlobalTimeout) {\n proboLogger.warn(`NavTracker[${this.instanceId}]: Timeout reached after ${this.waitForStabilityGlobalTimeout}ms with ${this.inflight.size} pending requests`);\n break;\n }\n \n // Check if stabilized\n if (this.hasNavigationStabilized()) {\n const quietSinceMs = now - Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n proboLogger.debug(`NavTracker[${this.instanceId}]: Page stabilized after ${quietSinceMs}ms of quiet time`);\n break;\n }\n \n // Log progress every 2 seconds in verbose mode\n if (this.waitForStabilityVerbose && now % 2000 < this.pollMs) {\n const quietSinceMs = now - Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n proboLogger.debug(`NavTracker[${this.instanceId}]: Status - quiet=${quietSinceMs}ms/${this.waitForStabilityQuietTimeout}ms, inflight=${this.inflight.size}/${this.maxInflight}`);\n }\n \n await sleep(this.pollMs);\n }\n } catch (error) {\n proboLogger.error(`NavTracker[${this.instanceId}]: Error during stabilization: ${error}`);\n }\n }\n\n\n // ============================================================================\n // SINGLETON METHODS\n // ============================================================================\n\n /**\n * Get the singleton instance of NavTracker\n * @param page The page to track (required for first creation)\n * @param options Optional configuration\n * @returns The singleton NavTracker instance\n */\n public static async getInstance(page?: Page, options?: NavTrackerOptions): Promise<NavTracker> {\n proboLogger.debug(`NavTracker.getInstance called with options:`, options);\n if (!NavTracker.instance) {\n if (!page) {\n throw new Error('NavTracker: Page is required for first instance creation');\n }\n NavTracker.instance = new NavTracker(page, options);\n await NavTracker.instance.start();\n proboLogger.debug(`NavTracker: created new singleton instance with options:`, options);\n } else {\n // Update existing instance with new options\n if (options) {\n if (options.waitForStabilityQuietTimeout !== undefined) {\n NavTracker.instance.waitForStabilityQuietTimeout = options.waitForStabilityQuietTimeout;\n }\n if (options.waitForStabilityInitialDelay !== undefined) {\n NavTracker.instance.waitForStabilityInitialDelay = options.waitForStabilityInitialDelay;\n }\n if (options.waitForStabilityGlobalTimeout !== undefined) {\n NavTracker.instance.waitForStabilityGlobalTimeout = options.waitForStabilityGlobalTimeout;\n }\n if (options.pollMs !== undefined) {\n NavTracker.instance.pollMs = options.pollMs;\n }\n if (options.maxInflight !== undefined) {\n NavTracker.instance.maxInflight = options.maxInflight;\n }\n if (options.inflightGraceMs !== undefined) {\n NavTracker.instance.inflightGraceMs = options.inflightGraceMs;\n }\n if (options.waitForStabilityVerbose !== undefined) {\n NavTracker.instance.waitForStabilityVerbose = options.waitForStabilityVerbose;\n }\n proboLogger.debug(`NavTracker: updated existing instance with new values: quietTimeout=${NavTracker.instance.waitForStabilityQuietTimeout}, initialDelay=${NavTracker.instance.waitForStabilityInitialDelay}, globalTimeout=${NavTracker.instance.waitForStabilityGlobalTimeout}, verbose=${NavTracker.instance.waitForStabilityVerbose}`);\n }\n if (options?.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker: returning existing singleton instance`);\n }\n }\n return NavTracker.instance;\n }\n\n /**\n * Reset the singleton instance (useful for testing or page changes)\n */\n public static resetInstance(): void {\n if (NavTracker.instance) {\n NavTracker.instance.stop();\n NavTracker.instance = null;\n proboLogger.debug(`NavTracker: reset singleton instance`);\n }\n }\n\n}","//! otpauth 9.4.1 | (c) Héctor Molinero Fernández | MIT | https://github.com/hectorm/otpauth\n//! noble-hashes 1.8.0 | (c) Paul Miller | MIT | https://github.com/paulmillr/noble-hashes\n/// <reference types=\"./otpauth.d.ts\" />\n// @ts-nocheck\n/**\n * Converts an integer to an Uint8Array.\n * @param {number} num Integer.\n * @returns {Uint8Array} Uint8Array.\n */ const uintDecode = (num)=>{\n const buf = new ArrayBuffer(8);\n const arr = new Uint8Array(buf);\n let acc = num;\n for(let i = 7; i >= 0; i--){\n if (acc === 0) break;\n arr[i] = acc & 255;\n acc -= arr[i];\n acc /= 256;\n }\n return arr;\n};\n\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */ /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ // We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */ function isBytes(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array';\n}\n/** Asserts something is positive integer. */ function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */ function abytes(b, ...lengths) {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length)) throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */ function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function') throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */ function aexists(instance, checkFinished = true) {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */ function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u32. */ function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */ function clean(...arrays) {\n for(let i = 0; i < arrays.length; i++){\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */ function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */ function rotr(word, shift) {\n return word << 32 - shift | word >>> shift;\n}\n/** The rotate left (circular left shift) operation for uint32 */ function rotl(word, shift) {\n return word << shift | word >>> 32 - shift >>> 0;\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */ const isLE = /* @__PURE__ */ (()=>new Uint8Array(new Uint32Array([\n 0x11223344\n ]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */ function byteSwap(word) {\n return word << 24 & 0xff000000 | word << 8 & 0xff0000 | word >>> 8 & 0xff00 | word >>> 24 & 0xff;\n}\n/** In place byte swap for Uint32Array */ function byteSwap32(arr) {\n for(let i = 0; i < arr.length; i++){\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nconst swap32IfBE = isLE ? (u)=>u : byteSwap32;\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */ function utf8ToBytes(str) {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */ function toBytes(data) {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** For runtime check if class implements interface */ class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */ function createHasher(hashCons) {\n const hashC = (msg)=>hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = ()=>hashCons();\n return hashC;\n}\n\nclass HMAC extends Hash {\n update(buf) {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n aexists(this);\n abytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n constructor(hash, _key){\n super();\n this.finished = false;\n this.destroyed = false;\n ahash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (typeof this.iHash.update !== 'function') throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for(let i = 0; i < pad.length; i++)pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for(let i = 0; i < pad.length; i++)pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */ const hmac = (hash, key, message)=>new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key)=>new HMAC(hash, key);\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */ function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number(value >> _32n & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */ function Chi(a, b, c) {\n return a & b ^ ~a & c;\n}\n/** Majority function, true if any two inputs is true. */ function Maj(a, b, c) {\n return a & b ^ a & c ^ b & c;\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */ class HashMD extends Hash {\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for(let pos = 0; pos < len;){\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for(; blockLen <= len - pos; pos += blockLen)this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for(let i = pos; i < blockLen; i++)buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for(let i = 0; i < outLen; i++)oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n constructor(blockLen, outputLen, padOffset, isLE){\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */ /** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */ const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */ const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8,\n 0x367cd507,\n 0x3070dd17,\n 0xf70e5939,\n 0xffc00b31,\n 0x68581511,\n 0x64f98fa7,\n 0xbefa4fa4\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */ const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d,\n 0xc1059ed8,\n 0x629a292a,\n 0x367cd507,\n 0x9159015a,\n 0x3070dd17,\n 0x152fecd8,\n 0xf70e5939,\n 0x67332667,\n 0xffc00b31,\n 0x8eb44a87,\n 0x68581511,\n 0xdb0c2e0d,\n 0x64f98fa7,\n 0x47b5481d,\n 0xbefa4fa4\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */ const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667,\n 0xf3bcc908,\n 0xbb67ae85,\n 0x84caa73b,\n 0x3c6ef372,\n 0xfe94f82b,\n 0xa54ff53a,\n 0x5f1d36f1,\n 0x510e527f,\n 0xade682d1,\n 0x9b05688c,\n 0x2b3e6c1f,\n 0x1f83d9ab,\n 0xfb41bd6b,\n 0x5be0cd19,\n 0x137e2179\n]);\n\n/** Initial SHA1 state */ const SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n 0xc3d2e1f0\n]);\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n/** SHA1 legacy hash class. */ class SHA1 extends HashMD {\n get() {\n const { A, B, C, D, E } = this;\n return [\n A,\n B,\n C,\n D,\n E\n ];\n }\n set(A, B, C, D, E) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n }\n process(view, offset) {\n for(let i = 0; i < 16; i++, offset += 4)SHA1_W[i] = view.getUint32(offset, false);\n for(let i = 16; i < 80; i++)SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n // Compression function main loop, 80 rounds\n let { A, B, C, D, E } = this;\n for(let i = 0; i < 80; i++){\n let F, K;\n if (i < 20) {\n F = Chi(B, C, D);\n K = 0x5a827999;\n } else if (i < 40) {\n F = B ^ C ^ D;\n K = 0x6ed9eba1;\n } else if (i < 60) {\n F = Maj(B, C, D);\n K = 0x8f1bbcdc;\n } else {\n F = B ^ C ^ D;\n K = 0xca62c1d6;\n }\n const T = rotl(A, 5) + F + E + K + SHA1_W[i] | 0;\n E = D;\n D = C;\n C = rotl(B, 30);\n B = A;\n A = T;\n }\n // Add the compressed chunk to the current hash value\n A = A + this.A | 0;\n B = B + this.B | 0;\n C = C + this.C | 0;\n D = D + this.D | 0;\n E = E + this.E | 0;\n this.set(A, B, C, D, E);\n }\n roundClean() {\n clean(SHA1_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n constructor(){\n super(64, 20, 8, false);\n this.A = SHA1_IV[0] | 0;\n this.B = SHA1_IV[1] | 0;\n this.C = SHA1_IV[2] | 0;\n this.D = SHA1_IV[3] | 0;\n this.E = SHA1_IV[4] | 0;\n }\n}\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */ const sha1 = /* @__PURE__ */ createHasher(()=>new SHA1());\n\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */ const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le) return {\n h: Number(n & U32_MASK64),\n l: Number(n >> _32n & U32_MASK64)\n };\n return {\n h: Number(n >> _32n & U32_MASK64) | 0,\n l: Number(n & U32_MASK64) | 0\n };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for(let i = 0; i < len; i++){\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [\n h,\n l\n ];\n }\n return [\n Ah,\n Al\n ];\n}\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s)=>h >>> s;\nconst shrSL = (h, l, s)=>h << 32 - s | l >>> s;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s)=>h >>> s | l << 32 - s;\nconst rotrSL = (h, l, s)=>h << 32 - s | l >>> s;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s)=>h << 64 - s | l >>> s - 32;\nconst rotrBL = (h, l, s)=>h >>> s - 32 | l << 64 - s;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s)=>h << s | l >>> 32 - s;\nconst rotlSL = (h, l, s)=>l << s | h >>> 32 - s;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s)=>l << s - 32 | h >>> 64 - s;\nconst rotlBL = (h, l, s)=>h << s - 32 | l >>> 64 - s;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return {\n h: Ah + Bh + (l / 2 ** 32 | 0) | 0,\n l: l | 0\n };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl)=>(Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch)=>Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0;\nconst add4L = (Al, Bl, Cl, Dl)=>(Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh)=>Ah + Bh + Ch + Dh + (low / 2 ** 32 | 0) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El)=>(Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh)=>Ah + Bh + Ch + Dh + Eh + (low / 2 ** 32 | 0) | 0;\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */ // prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */ const SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends HashMD {\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [\n A,\n B,\n C,\n D,\n E,\n F,\n G,\n H\n ];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for(let i = 0; i < 16; i++, offset += 4)SHA256_W[i] = view.getUint32(offset, false);\n for(let i = 16; i < 64; i++){\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ W15 >>> 3;\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ W2 >>> 10;\n SHA256_W[i] = s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16] | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for(let i = 0; i < 64; i++){\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i] | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = sigma0 + Maj(A, B, C) | 0;\n H = G;\n G = F;\n F = E;\n E = D + T1 | 0;\n D = C;\n C = B;\n B = A;\n A = T1 + T2 | 0;\n }\n // Add the compressed chunk to the current hash value\n A = A + this.A | 0;\n B = B + this.B | 0;\n C = C + this.C | 0;\n D = D + this.D | 0;\n E = E + this.E | 0;\n F = F + this.F | 0;\n G = G + this.G | 0;\n H = H + this.H | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n constructor(outputLen = 32){\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n}\nclass SHA224 extends SHA256 {\n constructor(){\n super(28);\n this.A = SHA224_IV[0] | 0;\n this.B = SHA224_IV[1] | 0;\n this.C = SHA224_IV[2] | 0;\n this.D = SHA224_IV[3] | 0;\n this.E = SHA224_IV[4] | 0;\n this.F = SHA224_IV[5] | 0;\n this.G = SHA224_IV[6] | 0;\n this.H = SHA224_IV[7] | 0;\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (()=>split([\n '0x428a2f98d728ae22',\n '0x7137449123ef65cd',\n '0xb5c0fbcfec4d3b2f',\n '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538',\n '0x59f111f1b605d019',\n '0x923f82a4af194f9b',\n '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242',\n '0x12835b0145706fbe',\n '0x243185be4ee4b28c',\n '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f',\n '0x80deb1fe3b1696b1',\n '0x9bdc06a725c71235',\n '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2',\n '0xefbe4786384f25e3',\n '0x0fc19dc68b8cd5b5',\n '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275',\n '0x4a7484aa6ea6e483',\n '0x5cb0a9dcbd41fbd4',\n '0x76f988da831153b5',\n '0x983e5152ee66dfab',\n '0xa831c66d2db43210',\n '0xb00327c898fb213f',\n '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2',\n '0xd5a79147930aa725',\n '0x06ca6351e003826f',\n '0x142929670a0e6e70',\n '0x27b70a8546d22ffc',\n '0x2e1b21385c26c926',\n '0x4d2c6dfc5ac42aed',\n '0x53380d139d95b3df',\n '0x650a73548baf63de',\n '0x766a0abb3c77b2a8',\n '0x81c2c92e47edaee6',\n '0x92722c851482353b',\n '0xa2bfe8a14cf10364',\n '0xa81a664bbc423001',\n '0xc24b8b70d0f89791',\n '0xc76c51a30654be30',\n '0xd192e819d6ef5218',\n '0xd69906245565a910',\n '0xf40e35855771202a',\n '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8',\n '0x1e376c085141ab53',\n '0x2748774cdf8eeb99',\n '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63',\n '0x4ed8aa4ae3418acb',\n '0x5b9cca4f7763e373',\n '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc',\n '0x78a5636f43172f60',\n '0x84c87814a1f0ab72',\n '0x8cc702081a6439ec',\n '0x90befffa23631e28',\n '0xa4506cebde82bde9',\n '0xbef9a3f7b2c67915',\n '0xc67178f2e372532b',\n '0xca273eceea26619c',\n '0xd186b8c721c0c207',\n '0xeada7dd6cde0eb1e',\n '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba',\n '0x0a637dc5a2c898a6',\n '0x113f9804bef90dae',\n '0x1b710b35131c471b',\n '0x28db77f523047d84',\n '0x32caab7b40c72493',\n '0x3c9ebe0a15c9bebc',\n '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6',\n '0x597f299cfc657e2a',\n '0x5fcb6fab3ad6faec',\n '0x6c44198c4a475817'\n ].map((n)=>BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (()=>K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (()=>K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nclass SHA512 extends HashMD {\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [\n Ah,\n Al,\n Bh,\n Bl,\n Ch,\n Cl,\n Dh,\n Dl,\n Eh,\n El,\n Fh,\n Fl,\n Gh,\n Gl,\n Hh,\n Hl\n ];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for(let i = 0; i < 16; i++, offset += 4){\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32(offset += 4);\n }\n for(let i = 16; i < 80; i++){\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = rotrSH(W15h, W15l, 1) ^ rotrSH(W15h, W15l, 8) ^ shrSH(W15h, W15l, 7);\n const s0l = rotrSL(W15h, W15l, 1) ^ rotrSL(W15h, W15l, 8) ^ shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = rotrSH(W2h, W2l, 19) ^ rotrBH(W2h, W2l, 61) ^ shrSH(W2h, W2l, 6);\n const s1l = rotrSL(W2h, W2l, 19) ^ rotrBL(W2h, W2l, 61) ^ shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for(let i = 0; i < 80; i++){\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = rotrSH(Eh, El, 14) ^ rotrSH(Eh, El, 18) ^ rotrBH(Eh, El, 41);\n const sigma1l = rotrSL(Eh, El, 14) ^ rotrSL(Eh, El, 18) ^ rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = Eh & Fh ^ ~Eh & Gh;\n const CHIl = El & Fl ^ ~El & Gl;\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = rotrSH(Ah, Al, 28) ^ rotrBH(Ah, Al, 34) ^ rotrBH(Ah, Al, 39);\n const sigma0l = rotrSL(Ah, Al, 28) ^ rotrBL(Ah, Al, 34) ^ rotrBL(Ah, Al, 39);\n const MAJh = Ah & Bh ^ Ah & Ch ^ Bh & Ch;\n const MAJl = Al & Bl ^ Al & Cl ^ Bl & Cl;\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = add3L(T1l, sigma0l, MAJl);\n Ah = add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n constructor(outputLen = 64){\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = SHA512_IV[0] | 0;\n this.Al = SHA512_IV[1] | 0;\n this.Bh = SHA512_IV[2] | 0;\n this.Bl = SHA512_IV[3] | 0;\n this.Ch = SHA512_IV[4] | 0;\n this.Cl = SHA512_IV[5] | 0;\n this.Dh = SHA512_IV[6] | 0;\n this.Dl = SHA512_IV[7] | 0;\n this.Eh = SHA512_IV[8] | 0;\n this.El = SHA512_IV[9] | 0;\n this.Fh = SHA512_IV[10] | 0;\n this.Fl = SHA512_IV[11] | 0;\n this.Gh = SHA512_IV[12] | 0;\n this.Gl = SHA512_IV[13] | 0;\n this.Hh = SHA512_IV[14] | 0;\n this.Hl = SHA512_IV[15] | 0;\n }\n}\nclass SHA384 extends SHA512 {\n constructor(){\n super(48);\n this.Ah = SHA384_IV[0] | 0;\n this.Al = SHA384_IV[1] | 0;\n this.Bh = SHA384_IV[2] | 0;\n this.Bl = SHA384_IV[3] | 0;\n this.Ch = SHA384_IV[4] | 0;\n this.Cl = SHA384_IV[5] | 0;\n this.Dh = SHA384_IV[6] | 0;\n this.Dl = SHA384_IV[7] | 0;\n this.Eh = SHA384_IV[8] | 0;\n this.El = SHA384_IV[9] | 0;\n this.Fh = SHA384_IV[10] | 0;\n this.Fl = SHA384_IV[11] | 0;\n this.Gh = SHA384_IV[12] | 0;\n this.Gl = SHA384_IV[13] | 0;\n this.Hh = SHA384_IV[14] | 0;\n this.Hl = SHA384_IV[15] | 0;\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */ const sha256 = /* @__PURE__ */ createHasher(()=>new SHA256());\n/** SHA2-224 hash function from RFC 4634 */ const sha224 = /* @__PURE__ */ createHasher(()=>new SHA224());\n/** SHA2-512 hash function from RFC 4634. */ const sha512 = /* @__PURE__ */ createHasher(()=>new SHA512());\n/** SHA2-384 hash function from RFC 4634. */ const sha384 = /* @__PURE__ */ createHasher(()=>new SHA384());\n\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nfor(let round = 0, R = _1n, x = 1, y = 0; round < 24; round++){\n // Pi\n [x, y] = [\n y,\n (2 * x + 3 * y) % 5\n ];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((round + 1) * (round + 2) / 2 % 64);\n // Iota\n let t = _0n;\n for(let j = 0; j < 7; j++){\n R = (R << _1n ^ (R >> _7n) * _0x71n) % _256n;\n if (R & _2n) t ^= _1n << (_1n << /* @__PURE__ */ BigInt(j)) - _1n;\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s)=>s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s);\nconst rotlL = (h, l, s)=>s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s);\n/** `keccakf1600` internal function, additionally allows to adjust round count. */ function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for(let round = 24 - rounds; round < 24; round++){\n // Theta θ\n for(let x = 0; x < 10; x++)B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for(let x = 0; x < 10; x += 2){\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for(let y = 0; y < 50; y += 10){\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for(let t = 0; t < 24; t++){\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for(let y = 0; y < 50; y += 10){\n for(let x = 0; x < 10; x++)B[x] = s[y + x];\n for(let x = 0; x < 10; x++)s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean(B);\n}\n/** Keccak sponge function. */ class Keccak extends Hash {\n clone() {\n return this._cloneInto();\n }\n keccak() {\n swap32IfBE(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { blockLen, state } = this;\n const len = data.length;\n for(let pos = 0; pos < len;){\n const take = Math.min(blockLen - this.pos, len - pos);\n for(let i = 0; i < take; i++)state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen) this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished) return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for(let pos = 0, len = out.length; pos < len;){\n if (this.posOut >= blockLen) this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished) throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n clean(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24){\n super();\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n this.enableXOF = false;\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n anumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200)) throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n}\nconst gen = (suffix, blockLen, outputLen)=>createHasher(()=>new Keccak(blockLen, suffix, outputLen));\n/** SHA3-224 hash function. */ const sha3_224 = /* @__PURE__ */ (()=>gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */ const sha3_256 = /* @__PURE__ */ (()=>gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */ const sha3_384 = /* @__PURE__ */ (()=>gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */ const sha3_512 = /* @__PURE__ */ (()=>gen(0x06, 72, 512 / 8))();\n\n/**\n * \"globalThis\" ponyfill.\n * @see [A horrifying globalThis polyfill in universal JavaScript](https://mathiasbynens.be/notes/globalthis)\n * @type {Object.<string, *>}\n */ const globalScope = (()=>{\n if (typeof globalThis === \"object\") return globalThis;\n else {\n Object.defineProperty(Object.prototype, \"__GLOBALTHIS__\", {\n get () {\n return this;\n },\n configurable: true\n });\n try {\n // @ts-expect-error\n // eslint-disable-next-line no-undef\n if (typeof __GLOBALTHIS__ !== \"undefined\") return __GLOBALTHIS__;\n } finally{\n // @ts-expect-error\n delete Object.prototype.__GLOBALTHIS__;\n }\n }\n // Still unable to determine \"globalThis\", fall back to a naive method.\n if (typeof self !== \"undefined\") return self;\n else if (typeof window !== \"undefined\") return window;\n else if (typeof global !== \"undefined\") return global;\n return undefined;\n})();\n\n/**\n * @noble/hashes hash functions.\n * @type {Object.<string, sha1|sha224|sha256|sha384|sha512|sha3_224|sha3_256|sha3_384|sha3_512>}\n */ const nobleHashes = {\n SHA1: sha1,\n SHA224: sha224,\n SHA256: sha256,\n SHA384: sha384,\n SHA512: sha512,\n \"SHA3-224\": sha3_224,\n \"SHA3-256\": sha3_256,\n \"SHA3-384\": sha3_384,\n \"SHA3-512\": sha3_512\n};\n/**\n * Canonicalizes a hash algorithm name.\n * @param {string} algorithm Hash algorithm name.\n * @returns {\"SHA1\"|\"SHA224\"|\"SHA256\"|\"SHA384\"|\"SHA512\"|\"SHA3-224\"|\"SHA3-256\"|\"SHA3-384\"|\"SHA3-512\"} Canonicalized hash algorithm name.\n */ const canonicalizeAlgorithm = (algorithm)=>{\n switch(true){\n case /^(?:SHA-?1|SSL3-SHA1)$/i.test(algorithm):\n return \"SHA1\";\n case /^SHA(?:2?-)?224$/i.test(algorithm):\n return \"SHA224\";\n case /^SHA(?:2?-)?256$/i.test(algorithm):\n return \"SHA256\";\n case /^SHA(?:2?-)?384$/i.test(algorithm):\n return \"SHA384\";\n case /^SHA(?:2?-)?512$/i.test(algorithm):\n return \"SHA512\";\n case /^SHA3-224$/i.test(algorithm):\n return \"SHA3-224\";\n case /^SHA3-256$/i.test(algorithm):\n return \"SHA3-256\";\n case /^SHA3-384$/i.test(algorithm):\n return \"SHA3-384\";\n case /^SHA3-512$/i.test(algorithm):\n return \"SHA3-512\";\n default:\n throw new TypeError(`Unknown hash algorithm: ${algorithm}`);\n }\n};\n/**\n * Calculates an HMAC digest.\n * @param {string} algorithm Algorithm.\n * @param {Uint8Array} key Key.\n * @param {Uint8Array} message Message.\n * @returns {Uint8Array} Digest.\n */ const hmacDigest = (algorithm, key, message)=>{\n if (hmac) {\n const hash = nobleHashes[algorithm] ?? nobleHashes[canonicalizeAlgorithm(algorithm)];\n return hmac(hash, key, message);\n } else {\n throw new Error(\"Missing HMAC function\");\n }\n};\n\n/**\n * RFC 4648 base32 alphabet without pad.\n * @type {string}\n */ const ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n/**\n * Converts a base32 string to an Uint8Array (RFC 4648).\n * @see [LinusU/base32-decode](https://github.com/LinusU/base32-decode)\n * @param {string} str Base32 string.\n * @returns {Uint8Array} Uint8Array.\n */ const base32Decode = (str)=>{\n // Remove spaces (although they are not allowed by the spec, some issuers add them for readability).\n str = str.replace(/ /g, \"\");\n // Canonicalize to all upper case and remove padding if it exists.\n let end = str.length;\n while(str[end - 1] === \"=\")--end;\n str = (end < str.length ? str.substring(0, end) : str).toUpperCase();\n const buf = new ArrayBuffer(str.length * 5 / 8 | 0);\n const arr = new Uint8Array(buf);\n let bits = 0;\n let value = 0;\n let index = 0;\n for(let i = 0; i < str.length; i++){\n const idx = ALPHABET.indexOf(str[i]);\n if (idx === -1) throw new TypeError(`Invalid character found: ${str[i]}`);\n value = value << 5 | idx;\n bits += 5;\n if (bits >= 8) {\n bits -= 8;\n arr[index++] = value >>> bits;\n }\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a base32 string (RFC 4648).\n * @see [LinusU/base32-encode](https://github.com/LinusU/base32-encode)\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Base32 string.\n */ const base32Encode = (arr)=>{\n let bits = 0;\n let value = 0;\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n value = value << 8 | arr[i];\n bits += 8;\n while(bits >= 5){\n str += ALPHABET[value >>> bits - 5 & 31];\n bits -= 5;\n }\n }\n if (bits > 0) {\n str += ALPHABET[value << 5 - bits & 31];\n }\n return str;\n};\n\n/**\n * Converts a hexadecimal string to an Uint8Array.\n * @param {string} str Hexadecimal string.\n * @returns {Uint8Array} Uint8Array.\n */ const hexDecode = (str)=>{\n // Remove spaces (although they are not allowed by the spec, some issuers add them for readability).\n str = str.replace(/ /g, \"\");\n const buf = new ArrayBuffer(str.length / 2);\n const arr = new Uint8Array(buf);\n for(let i = 0; i < str.length; i += 2){\n arr[i / 2] = parseInt(str.substring(i, i + 2), 16);\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a hexadecimal string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Hexadecimal string.\n */ const hexEncode = (arr)=>{\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n const hex = arr[i].toString(16);\n if (hex.length === 1) str += \"0\";\n str += hex;\n }\n return str.toUpperCase();\n};\n\n/**\n * Converts a Latin-1 string to an Uint8Array.\n * @param {string} str Latin-1 string.\n * @returns {Uint8Array} Uint8Array.\n */ const latin1Decode = (str)=>{\n const buf = new ArrayBuffer(str.length);\n const arr = new Uint8Array(buf);\n for(let i = 0; i < str.length; i++){\n arr[i] = str.charCodeAt(i) & 0xff;\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a Latin-1 string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Latin-1 string.\n */ const latin1Encode = (arr)=>{\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n str += String.fromCharCode(arr[i]);\n }\n return str;\n};\n\n/**\n * TextEncoder instance.\n * @type {TextEncoder|null}\n */ const ENCODER = globalScope.TextEncoder ? new globalScope.TextEncoder() : null;\n/**\n * TextDecoder instance.\n * @type {TextDecoder|null}\n */ const DECODER = globalScope.TextDecoder ? new globalScope.TextDecoder() : null;\n/**\n * Converts an UTF-8 string to an Uint8Array.\n * @param {string} str String.\n * @returns {Uint8Array} Uint8Array.\n */ const utf8Decode = (str)=>{\n if (!ENCODER) {\n throw new Error(\"Encoding API not available\");\n }\n return ENCODER.encode(str);\n};\n/**\n * Converts an Uint8Array to an UTF-8 string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} String.\n */ const utf8Encode = (arr)=>{\n if (!DECODER) {\n throw new Error(\"Encoding API not available\");\n }\n return DECODER.decode(arr);\n};\n\n/**\n * Returns random bytes.\n * @param {number} size Size.\n * @returns {Uint8Array} Random bytes.\n */ const randomBytes = (size)=>{\n if (globalScope.crypto?.getRandomValues) {\n return globalScope.crypto.getRandomValues(new Uint8Array(size));\n } else {\n throw new Error(\"Cryptography API not available\");\n }\n};\n\n/**\n * OTP secret key.\n */ class Secret {\n /**\n * Converts a Latin-1 string to a Secret object.\n * @param {string} str Latin-1 string.\n * @returns {Secret} Secret object.\n */ static fromLatin1(str) {\n return new Secret({\n buffer: latin1Decode(str).buffer\n });\n }\n /**\n * Converts an UTF-8 string to a Secret object.\n * @param {string} str UTF-8 string.\n * @returns {Secret} Secret object.\n */ static fromUTF8(str) {\n return new Secret({\n buffer: utf8Decode(str).buffer\n });\n }\n /**\n * Converts a base32 string to a Secret object.\n * @param {string} str Base32 string.\n * @returns {Secret} Secret object.\n */ static fromBase32(str) {\n return new Secret({\n buffer: base32Decode(str).buffer\n });\n }\n /**\n * Converts a hexadecimal string to a Secret object.\n * @param {string} str Hexadecimal string.\n * @returns {Secret} Secret object.\n */ static fromHex(str) {\n return new Secret({\n buffer: hexDecode(str).buffer\n });\n }\n /**\n * Secret key buffer.\n * @deprecated For backward compatibility, the \"bytes\" property should be used instead.\n * @type {ArrayBufferLike}\n */ get buffer() {\n return this.bytes.buffer;\n }\n /**\n * Latin-1 string representation of secret key.\n * @type {string}\n */ get latin1() {\n Object.defineProperty(this, \"latin1\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: latin1Encode(this.bytes)\n });\n return this.latin1;\n }\n /**\n * UTF-8 string representation of secret key.\n * @type {string}\n */ get utf8() {\n Object.defineProperty(this, \"utf8\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: utf8Encode(this.bytes)\n });\n return this.utf8;\n }\n /**\n * Base32 string representation of secret key.\n * @type {string}\n */ get base32() {\n Object.defineProperty(this, \"base32\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: base32Encode(this.bytes)\n });\n return this.base32;\n }\n /**\n * Hexadecimal string representation of secret key.\n * @type {string}\n */ get hex() {\n Object.defineProperty(this, \"hex\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: hexEncode(this.bytes)\n });\n return this.hex;\n }\n /**\n * Creates a secret key object.\n * @param {Object} [config] Configuration options.\n * @param {ArrayBufferLike} [config.buffer] Secret key buffer.\n * @param {number} [config.size=20] Number of random bytes to generate, ignored if 'buffer' is provided.\n */ constructor({ buffer, size = 20 } = {}){\n /**\n * Secret key.\n * @type {Uint8Array}\n * @readonly\n */ this.bytes = typeof buffer === \"undefined\" ? randomBytes(size) : new Uint8Array(buffer);\n // Prevent the \"bytes\" property from being modified.\n Object.defineProperty(this, \"bytes\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: this.bytes\n });\n }\n}\n\n/**\n * Returns true if a is equal to b, without leaking timing information that would allow an attacker to guess one of the values.\n * @param {string} a String a.\n * @param {string} b String b.\n * @returns {boolean} Equality result.\n */ const timingSafeEqual = (a, b)=>{\n {\n if (a.length !== b.length) {\n throw new TypeError(\"Input strings must have the same length\");\n }\n let i = -1;\n let out = 0;\n while(++i < a.length){\n out |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return out === 0;\n }\n};\n\n/**\n * HOTP: An HMAC-based One-time Password Algorithm.\n * @see [RFC 4226](https://datatracker.ietf.org/doc/html/rfc4226)\n */ class HOTP {\n /**\n * Default configuration.\n * @type {{\n * issuer: string,\n * label: string,\n * issuerInLabel: boolean,\n * algorithm: string,\n * digits: number,\n * counter: number\n * window: number\n * }}\n */ static get defaults() {\n return {\n issuer: \"\",\n label: \"OTPAuth\",\n issuerInLabel: true,\n algorithm: \"SHA1\",\n digits: 6,\n counter: 0,\n window: 1\n };\n }\n /**\n * Generates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Counter value.\n * @returns {string} Token.\n */ static generate({ secret, algorithm = HOTP.defaults.algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter }) {\n const digest = hmacDigest(algorithm, secret.bytes, uintDecode(counter));\n const offset = digest[digest.byteLength - 1] & 15;\n const otp = ((digest[offset] & 127) << 24 | (digest[offset + 1] & 255) << 16 | (digest[offset + 2] & 255) << 8 | digest[offset + 3] & 255) % 10 ** digits;\n return otp.toString().padStart(digits, \"0\");\n }\n /**\n * Generates an HOTP token.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.counter=this.counter++] Counter value.\n * @returns {string} Token.\n */ generate({ counter = this.counter++ } = {}) {\n return HOTP.generate({\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n counter\n });\n }\n /**\n * Validates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Counter value.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ static validate({ token, secret, algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter, window = HOTP.defaults.window }) {\n // Return early if the token length does not match the digit number.\n if (token.length !== digits) return null;\n let delta = null;\n const check = (/** @type {number} */ i)=>{\n const generatedToken = HOTP.generate({\n secret,\n algorithm,\n digits,\n counter: i\n });\n if (timingSafeEqual(token, generatedToken)) {\n delta = i - counter;\n }\n };\n check(counter);\n for(let i = 1; i <= window && delta === null; ++i){\n check(counter - i);\n if (delta !== null) break;\n check(counter + i);\n if (delta !== null) break;\n }\n return delta;\n }\n /**\n * Validates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {number} [config.counter=this.counter] Counter value.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ validate({ token, counter = this.counter, window }) {\n return HOTP.validate({\n token,\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n counter,\n window\n });\n }\n /**\n * Returns a Google Authenticator key URI.\n * @returns {string} URI.\n */ toString() {\n const e = encodeURIComponent;\n return \"otpauth://hotp/\" + `${this.issuer.length > 0 ? this.issuerInLabel ? `${e(this.issuer)}:${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?`}` + `secret=${e(this.secret.base32)}&` + `algorithm=${e(this.algorithm)}&` + `digits=${e(this.digits)}&` + `counter=${e(this.counter)}`;\n }\n /**\n * Creates an HOTP object.\n * @param {Object} [config] Configuration options.\n * @param {string} [config.issuer=''] Account provider.\n * @param {string} [config.label='OTPAuth'] Account label.\n * @param {boolean} [config.issuerInLabel=true] Include issuer prefix in label.\n * @param {Secret|string} [config.secret=Secret] Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Initial counter value.\n */ constructor({ issuer = HOTP.defaults.issuer, label = HOTP.defaults.label, issuerInLabel = HOTP.defaults.issuerInLabel, secret = new Secret(), algorithm = HOTP.defaults.algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter } = {}){\n /**\n * Account provider.\n * @type {string}\n */ this.issuer = issuer;\n /**\n * Account label.\n * @type {string}\n */ this.label = label;\n /**\n * Include issuer prefix in label.\n * @type {boolean}\n */ this.issuerInLabel = issuerInLabel;\n /**\n * Secret key.\n * @type {Secret}\n */ this.secret = typeof secret === \"string\" ? Secret.fromBase32(secret) : secret;\n /**\n * HMAC hashing algorithm.\n * @type {string}\n */ this.algorithm = canonicalizeAlgorithm(algorithm);\n /**\n * Token length.\n * @type {number}\n */ this.digits = digits;\n /**\n * Initial counter value.\n * @type {number}\n */ this.counter = counter;\n }\n}\n\n/**\n * TOTP: Time-Based One-Time Password Algorithm.\n * @see [RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238)\n */ class TOTP {\n /**\n * Default configuration.\n * @type {{\n * issuer: string,\n * label: string,\n * issuerInLabel: boolean,\n * algorithm: string,\n * digits: number,\n * period: number\n * window: number\n * }}\n */ static get defaults() {\n return {\n issuer: \"\",\n label: \"OTPAuth\",\n issuerInLabel: true,\n algorithm: \"SHA1\",\n digits: 6,\n period: 30,\n window: 1\n };\n }\n /**\n * Calculates the counter. i.e. the number of periods since timestamp 0.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} Counter.\n */ static counter({ period = TOTP.defaults.period, timestamp = Date.now() } = {}) {\n return Math.floor(timestamp / 1000 / period);\n }\n /**\n * Calculates the counter. i.e. the number of periods since timestamp 0.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} Counter.\n */ counter({ timestamp = Date.now() } = {}) {\n return TOTP.counter({\n period: this.period,\n timestamp\n });\n }\n /**\n * Calculates the remaining time in milliseconds until the next token is generated.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} counter.\n */ static remaining({ period = TOTP.defaults.period, timestamp = Date.now() } = {}) {\n return period * 1000 - timestamp % (period * 1000);\n }\n /**\n * Calculates the remaining time in milliseconds until the next token is generated.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} counter.\n */ remaining({ timestamp = Date.now() } = {}) {\n return TOTP.remaining({\n period: this.period,\n timestamp\n });\n }\n /**\n * Generates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {string} Token.\n */ static generate({ secret, algorithm, digits, period = TOTP.defaults.period, timestamp = Date.now() }) {\n return HOTP.generate({\n secret,\n algorithm,\n digits,\n counter: TOTP.counter({\n period,\n timestamp\n })\n });\n }\n /**\n * Generates a TOTP token.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {string} Token.\n */ generate({ timestamp = Date.now() } = {}) {\n return TOTP.generate({\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n period: this.period,\n timestamp\n });\n }\n /**\n * Validates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ static validate({ token, secret, algorithm, digits, period = TOTP.defaults.period, timestamp = Date.now(), window }) {\n return HOTP.validate({\n token,\n secret,\n algorithm,\n digits,\n counter: TOTP.counter({\n period,\n timestamp\n }),\n window\n });\n }\n /**\n * Validates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ validate({ token, timestamp, window }) {\n return TOTP.validate({\n token,\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n period: this.period,\n timestamp,\n window\n });\n }\n /**\n * Returns a Google Authenticator key URI.\n * @returns {string} URI.\n */ toString() {\n const e = encodeURIComponent;\n return \"otpauth://totp/\" + `${this.issuer.length > 0 ? this.issuerInLabel ? `${e(this.issuer)}:${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?`}` + `secret=${e(this.secret.base32)}&` + `algorithm=${e(this.algorithm)}&` + `digits=${e(this.digits)}&` + `period=${e(this.period)}`;\n }\n /**\n * Creates a TOTP object.\n * @param {Object} [config] Configuration options.\n * @param {string} [config.issuer=''] Account provider.\n * @param {string} [config.label='OTPAuth'] Account label.\n * @param {boolean} [config.issuerInLabel=true] Include issuer prefix in label.\n * @param {Secret|string} [config.secret=Secret] Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n */ constructor({ issuer = TOTP.defaults.issuer, label = TOTP.defaults.label, issuerInLabel = TOTP.defaults.issuerInLabel, secret = new Secret(), algorithm = TOTP.defaults.algorithm, digits = TOTP.defaults.digits, period = TOTP.defaults.period } = {}){\n /**\n * Account provider.\n * @type {string}\n */ this.issuer = issuer;\n /**\n * Account label.\n * @type {string}\n */ this.label = label;\n /**\n * Include issuer prefix in label.\n * @type {boolean}\n */ this.issuerInLabel = issuerInLabel;\n /**\n * Secret key.\n * @type {Secret}\n */ this.secret = typeof secret === \"string\" ? Secret.fromBase32(secret) : secret;\n /**\n * HMAC hashing algorithm.\n * @type {string}\n */ this.algorithm = canonicalizeAlgorithm(algorithm);\n /**\n * Token length.\n * @type {number}\n */ this.digits = digits;\n /**\n * Token time-step duration.\n * @type {number}\n */ this.period = period;\n }\n}\n\n/**\n * Key URI regex (otpauth://TYPE/[ISSUER:]LABEL?PARAMETERS).\n * @type {RegExp}\n */ const OTPURI_REGEX = /^otpauth:\\/\\/([ht]otp)\\/(.+)\\?([A-Z0-9.~_-]+=[^?&]*(?:&[A-Z0-9.~_-]+=[^?&]*)*)$/i;\n/**\n * RFC 4648 base32 alphabet with pad.\n * @type {RegExp}\n */ const SECRET_REGEX = /^[2-7A-Z]+=*$/i;\n/**\n * Regex for supported algorithms.\n * @type {RegExp}\n */ const ALGORITHM_REGEX = /^SHA(?:1|224|256|384|512|3-224|3-256|3-384|3-512)$/i;\n/**\n * Integer regex.\n * @type {RegExp}\n */ const INTEGER_REGEX = /^[+-]?\\d+$/;\n/**\n * Positive integer regex.\n * @type {RegExp}\n */ const POSITIVE_INTEGER_REGEX = /^\\+?[1-9]\\d*$/;\n/**\n * HOTP/TOTP object/string conversion.\n * @see [Key URI Format](https://github.com/google/google-authenticator/wiki/Key-Uri-Format)\n */ class URI {\n /**\n * Parses a Google Authenticator key URI and returns an HOTP/TOTP object.\n * @param {string} uri Google Authenticator Key URI.\n * @returns {HOTP|TOTP} HOTP/TOTP object.\n */ static parse(uri) {\n let uriGroups;\n try {\n uriGroups = uri.match(OTPURI_REGEX);\n // eslint-disable-next-line no-unused-vars\n } catch (_) {\n /* Handled below */ }\n if (!Array.isArray(uriGroups)) {\n throw new URIError(\"Invalid URI format\");\n }\n // Extract URI groups.\n const uriType = uriGroups[1].toLowerCase();\n const uriLabel = uriGroups[2].split(/(?::|%3A) *(.+)/i, 2).map(decodeURIComponent);\n /** @type {Object.<string, string>} */ const uriParams = uriGroups[3].split(\"&\").reduce((acc, cur)=>{\n const pairArr = cur.split(/=(.*)/, 2).map(decodeURIComponent);\n const pairKey = pairArr[0].toLowerCase();\n const pairVal = pairArr[1];\n /** @type {Object.<string, string>} */ const pairAcc = acc;\n pairAcc[pairKey] = pairVal;\n return pairAcc;\n }, {});\n // 'OTP' will be instantiated with 'config' argument.\n let OTP;\n const config = {};\n if (uriType === \"hotp\") {\n OTP = HOTP;\n // Counter: required\n if (typeof uriParams.counter !== \"undefined\" && INTEGER_REGEX.test(uriParams.counter)) {\n config.counter = parseInt(uriParams.counter, 10);\n } else {\n throw new TypeError(\"Missing or invalid 'counter' parameter\");\n }\n } else if (uriType === \"totp\") {\n OTP = TOTP;\n // Period: optional\n if (typeof uriParams.period !== \"undefined\") {\n if (POSITIVE_INTEGER_REGEX.test(uriParams.period)) {\n config.period = parseInt(uriParams.period, 10);\n } else {\n throw new TypeError(\"Invalid 'period' parameter\");\n }\n }\n } else {\n throw new TypeError(\"Unknown OTP type\");\n }\n // Label: required\n // Issuer: optional\n if (typeof uriParams.issuer !== \"undefined\") {\n config.issuer = uriParams.issuer;\n }\n if (uriLabel.length === 2) {\n config.label = uriLabel[1];\n if (typeof config.issuer === \"undefined\" || config.issuer === \"\") {\n config.issuer = uriLabel[0];\n } else if (uriLabel[0] === \"\") {\n config.issuerInLabel = false;\n }\n } else {\n config.label = uriLabel[0];\n if (typeof config.issuer !== \"undefined\" && config.issuer !== \"\") {\n config.issuerInLabel = false;\n }\n }\n // Secret: required\n if (typeof uriParams.secret !== \"undefined\" && SECRET_REGEX.test(uriParams.secret)) {\n config.secret = uriParams.secret;\n } else {\n throw new TypeError(\"Missing or invalid 'secret' parameter\");\n }\n // Algorithm: optional\n if (typeof uriParams.algorithm !== \"undefined\") {\n if (ALGORITHM_REGEX.test(uriParams.algorithm)) {\n config.algorithm = uriParams.algorithm;\n } else {\n throw new TypeError(\"Invalid 'algorithm' parameter\");\n }\n }\n // Digits: optional\n if (typeof uriParams.digits !== \"undefined\") {\n if (POSITIVE_INTEGER_REGEX.test(uriParams.digits)) {\n config.digits = parseInt(uriParams.digits, 10);\n } else {\n throw new TypeError(\"Invalid 'digits' parameter\");\n }\n }\n return new OTP(config);\n }\n /**\n * Converts an HOTP/TOTP object to a Google Authenticator key URI.\n * @param {HOTP|TOTP} otp HOTP/TOTP object.\n * @returns {string} Google Authenticator Key URI.\n */ static stringify(otp) {\n if (otp instanceof HOTP || otp instanceof TOTP) {\n return otp.toString();\n }\n throw new TypeError(\"Invalid 'HOTP/TOTP' object\");\n }\n}\n\n/**\n * Library version.\n * @type {string}\n */ const version = \"9.4.1\";\n\nexport { HOTP, Secret, TOTP, URI, version };\n","import { Frame, FrameLocator, Locator, Page } from '@playwright/test';\nimport { PlaywrightAction, PlaywrightTimeoutConfig, DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, matchRegex, SmartSelector, ProboLogLevel, TotpConfig, resolveElementTag } from '@probolabs/probo-shared';\nimport { interpolateWithParams } from './interpolation.js';\nimport { findClosestVisibleElement } from './actions';\nimport { proboLogger } from './probo-logger';\nimport { OTP } from './otp';\nimport { NavTracker } from './nav-tracker';\nimport * as OTPAuth from 'otpauth';\nimport { Highlighter } from './highlight';\n\nexport interface ScreenshotUrls {\n base_screenshot_url?: string | null;\n candidates_screenshot_url?: string | null;\n actual_interaction_screenshot_url?: string | null;\n}\n\nexport interface RunStepParams extends Partial<PlaywrightTimeoutConfig> {\n iframeSelector?: string;\n elementSelector?: string;\n smartSelector?: SmartSelector | null;\n smartIFrameSelector?: SmartSelector | null;\n action: PlaywrightAction;\n argument?: string | string[]; \n annotation?: string;\n // Wait-for specific configuration\n pollingInterval?: number;\n timeout?: number;\n // TOTP specific configuration\n totpConfig?: TotpConfig;\n // Screenshot callback - called with screenshot URLs after capture\n onScreenshots?: (urls: ScreenshotUrls) => void;\n // Screenshot function - takes a page and optional type, returns screenshot URL or file path (handles both capture/upload and filesystem save)\n takeScreenshot?: (page: Page, type?: 'base' | 'candidates' | 'actual') => Promise<string>;\n // Context flag to distinguish apply-ai vs replay (affects which screenshots are taken)\n isApplyAIContext?: boolean;\n}\n\nexport interface RunStepResult {\n key: string;\n value: any\n}\n\nexport interface ProboPlaywrightConfig {\n timeoutConfig?: Partial<PlaywrightTimeoutConfig>;\n enableSmartSelectors?: boolean; \n debugLevel?: ProboLogLevel;\n isCanceled?: () => boolean;\n}\n\nexport class ProboPlaywright {\n private readonly enableSmartSelectors: boolean;\n private readonly timeoutConfig: PlaywrightTimeoutConfig;\n private page: Page | null = null;\n private params: Record<string, any> = {};\n private isCanceled: (() => boolean) | null = null;\n private highlighter: Highlighter;\n \n constructor({ enableSmartSelectors = false, timeoutConfig = {}, debugLevel = ProboLogLevel.INFO, isCanceled }: ProboPlaywrightConfig, page: Page | null = null) {\n this.enableSmartSelectors = enableSmartSelectors;\n this.timeoutConfig = {\n ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n ...timeoutConfig\n };\n this.isCanceled = isCanceled || null;\n this.highlighter = new Highlighter(enableSmartSelectors, false, debugLevel);\n this.setPage(page);\n proboLogger.setLogLevel(debugLevel);\n }\n \n /**\n * Sets the Playwright page instance for this ProboPlaywright instance.\n * Also applies the configured default navigation and action timeouts to the page.\n * \n * @param page - The Playwright Page instance to use, or null to unset.\n */\n public setPage(page: Page | null) {\n this.page = page;\n if (this.page) {\n this.page.setDefaultNavigationTimeout(this.timeoutConfig.playwrightNavigationTimeout);\n this.page.setDefaultTimeout(this.timeoutConfig.playwrightActionTimeout);\n \n }\n }\n\n /**\n * Sets the parameters object for template literal interpolation\n * Stores a reference to the params object so mutations are automatically reflected\n * @param params The parameters object containing values to use for interpolation\n */\n public setParams(params: Record<string, any>): void {\n this.params = params;\n }\n\n /**\n * Interpolates a string using the current params and optional additional context\n * @param str The string to interpolate (may contain ${variable} syntax)\n * @param additionalContext Optional additional context to merge with params\n * @returns The interpolated string\n */\n private interpolate(str: string, additionalContext: Record<string, any> = {}): string {\n return interpolateWithParams(str, this.params, additionalContext);\n }\n\n /**\n * Executes a single step in the test scenario with the specified action on the target element.\n * Handles iframe navigation, element highlighting, and various Playwright actions like click, fill, validate, etc.\n * \n * @param params - Configuration object containing element selectors, action type, arguments, and display options\n * @returns Promise that resolves to a string for extract actions, boolean for assert actions, or void for other actions\n * @throws Error if element is not found or validation fails\n */\n public async runStep(params: RunStepParams): Promise<string | boolean | void> {\n \n let { \n action, \n argument = '', \n iframeSelector = '', \n elementSelector = '', \n smartSelector = null,\n smartIFrameSelector = null,\n annotation = '', \n } = params;\n \n // 0. Check that page is set\n if (!this.page) {\n throw new Error('Page is not set');\n }\n \n // Interpolate argument if it's a string with template literals\n if (typeof argument === 'string' && argument.includes('${')) {\n argument = this.interpolate(argument);\n } else if (Array.isArray(argument)) {\n // Handle array arguments (e.g., for UPLOAD_FILES or SELECT_DROPDOWN)\n argument = argument.map((arg: any) => {\n if (typeof arg === 'string' && arg.includes('${')) {\n return this.interpolate(arg);\n }\n return arg;\n });\n }\n \n //trace message to help with debug \n proboLogger.info(`runStep(${JSON.stringify({ ...params, argument })})`);\n // 1. Check if we need to visit a url\n if (action === PlaywrightAction.VISIT_URL || action === PlaywrightAction.VISIT_BASE_URL) {\n try {\n await this.page.goto(argument as string, { timeout: this.timeoutConfig.playwrightNavigationTimeout });\n const navTracker = await NavTracker.getInstance(this.page,{ \n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout, \n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n await navTracker.waitForNavigationToStabilize();\n } catch (e) {\n throw new Error(`Failed to navigate to ${argument}`);\n }\n return;\n }\n \n // 2. Check if we need to assert the url\n if (action === PlaywrightAction.ASSERT_URL) {\n // wait for page to stabilize\n const navTracker = await NavTracker.getInstance(this.page, { waitForStabilityQuietTimeout: this.timeoutConfig.playwrightNavigationTimeout });\n await navTracker.waitForNavigationToStabilize();\n const currentUrl = await this.page.url();\n if (currentUrl !== argument as string) {\n throw new Error(`Assertion failed: Expected URL \"${argument}\" but got \"${currentUrl}\".`);\n }\n return;\n }\n \n // 3. Check if we need to type keys\n if (action === PlaywrightAction.TYPE_KEYS) {\n await this.robustTypeKeys(argument as string);\n return;\n }\n \n // Capture base screenshot before element interaction (if screenshot function is provided)\n // Only capture base screenshot during apply-ai, skip during replay\n let baseScreenshotUrl: string | null = null;\n if (params.takeScreenshot && params.isApplyAIContext) {\n try {\n proboLogger.debug('Capturing base screenshot before element interaction');\n baseScreenshotUrl = await params.takeScreenshot(this.page, 'base');\n proboLogger.debug(`Base screenshot uploaded: ${baseScreenshotUrl}`);\n } catch (baseError) {\n proboLogger.warn(`Failed to capture base screenshot: ${baseError}`);\n // Continue even if base screenshot fails\n }\n }\n \n // 4. Get the locator (iframe or not)\n const startTime = Date.now();\n let locator: Locator;\n \n if (iframeSelector && iframeSelector.length > 0) {\n const frameLocator: FrameLocator = await this.getLocator(iframeSelector, smartIFrameSelector, true) as FrameLocator;\n locator = await this.getLocator(elementSelector, smartSelector, false, frameLocator) as Locator;\n } else {\n locator = await this.getLocator(elementSelector, smartSelector) as Locator;\n }\n \n \n // Fail fast: immediately validate that the element exists for non-wait actions\n // Use Promise.race() for all actions to enable cancellation without sacrificing precision\n const locator_timeout = (action === PlaywrightAction.WAIT_FOR) ? (params.timeout as number) || 10000 : this.timeoutConfig.playwrightLocatorTimeout;\n \n // Create a cancellation promise that checks for cancellation every 100ms\n // This allows precise waits while still enabling cancellation for all actions\n const cancellationCheckInterval = 100; // Check for cancellation every 100ms\n \n // Create a promise that rejects when cancellation is detected\n const cancellationPromise = new Promise<never>((_, reject) => {\n const checkCancellation = () => {\n if (this.isCanceled && this.isCanceled()) {\n reject(new Error('Replay execution was cancelled'));\n return;\n }\n // Continue checking until the wait completes or times out\n setTimeout(checkCancellation, cancellationCheckInterval);\n };\n checkCancellation();\n });\n \n // Helper function to wait for locator with cancellation support\n const waitForLocatorWithCancellation = async (targetLocator: Locator, timeout: number) => {\n return Promise.race([\n targetLocator.waitFor({ state: 'attached', timeout }),\n cancellationPromise\n ]);\n };\n \n try {\n // Race between the actual wait and cancellation check for all actions\n // This allows precise waits while still enabling cancellation\n await waitForLocatorWithCancellation(locator, locator_timeout);\n } catch (e) {\n // If it's a cancellation error, re-throw it\n if (e instanceof Error && e.message === 'Replay execution was cancelled') {\n throw e;\n }\n \n // Timeout reached, try fallback if smart selectors are enabled\n if (this.enableSmartSelectors) {\n try {\n proboLogger.warn(`Element not found with smart selector: ${JSON.stringify(smartSelector)} ${smartIFrameSelector ? `with iframe smart selector: ${JSON.stringify(smartIFrameSelector)}` : ''}. Falling back to CSS selector`, e);\n if (iframeSelector && iframeSelector.length > 0) {\n const frameLocator: FrameLocator = await this.getLocatorOrFrame(iframeSelector, true) as FrameLocator;\n locator = await this.getLocatorOrFrame(elementSelector, false, frameLocator) as Locator;\n } else {\n locator = await this.getLocatorOrFrame(elementSelector, false) as Locator;\n }\n \n // Race the fallback wait with cancellation as well\n await waitForLocatorWithCancellation(locator, 200);\n } catch (e) {\n // If it's a cancellation error, re-throw it\n if (e instanceof Error && e.message === 'Replay execution was cancelled') {\n throw e;\n }\n throw new Error(`Element not found with CSS selector: ${elementSelector} ${iframeSelector ? `in iframe: ${iframeSelector}` : ''} after ${locator_timeout}ms`);\n }\n } else {\n throw new Error(`Element not found with CSS selector: ${elementSelector} ${iframeSelector ? `in iframe: ${iframeSelector}` : ''} after ${locator_timeout}ms`);\n }\n }\n \n if (action === PlaywrightAction.HOVER) {\n const visibleLocator = await findClosestVisibleElement(locator);\n if (visibleLocator) {\n locator = visibleLocator;\n }\n }\n \n // 5. Capture screenshots if screenshot function is provided\n const screenshotUrls: ScreenshotUrls = {\n base_screenshot_url: baseScreenshotUrl\n };\n if (params.takeScreenshot) {\n try {\n // Candidate elements screenshot: find and highlight candidates based on action type\n // Only capture candidate screenshot during apply-ai, skip during replay\n if (params.isApplyAIContext) {\n try {\n const elementTags = resolveElementTag(action);\n proboLogger.debug(`Finding candidate elements for action ${action} with tags: ${elementTags}`);\n \n await this.highlighter.findAndCacheCandidateElements(this.page, elementTags);\n await this.highlighter.highlightCachedElements(this.page, 'candidates');\n \n // Wait for highlight timeout to ensure highlights are visible\n // if (this.timeoutConfig.highlightTimeout > 0) {\n // await this.page.waitForTimeout(this.timeoutConfig.highlightTimeout);\n // }\n \n screenshotUrls.candidates_screenshot_url = await params.takeScreenshot(this.page, 'candidates');\n proboLogger.debug(`Candidates screenshot uploaded: ${screenshotUrls.candidates_screenshot_url}`);\n \n // Unhighlight candidates\n await this.highlighter.unhighlightCached(this.page);\n } catch (candidateError) {\n proboLogger.warn(`Failed to capture candidates screenshot: ${candidateError}`);\n // Continue even if candidate screenshot fails\n }\n }\n \n // Actual element screenshot: highlight the actual element\n // Always capture actual screenshot for both apply-ai and replay\n try {\n await this.highlight(locator, annotation);\n // Wait for highlight timeout to ensure highlights are visible\n if (this.timeoutConfig.highlightTimeout > 0) {\n await this.page.waitForTimeout(this.timeoutConfig.highlightTimeout);\n }\n screenshotUrls.actual_interaction_screenshot_url = await params.takeScreenshot(this.page, 'actual');\n proboLogger.debug(`Actual element screenshot uploaded: ${screenshotUrls.actual_interaction_screenshot_url}`);\n \n // Unhighlight before performing action\n await this.unhighlight(locator);\n } catch (actualError) {\n proboLogger.warn(`Failed to capture actual element screenshot: ${actualError}`);\n // Try to unhighlight even if screenshot failed\n try {\n await this.unhighlight(locator);\n } catch (unhighlightError) {\n proboLogger.warn(`Failed to unhighlight: ${unhighlightError}`);\n }\n }\n \n // Call the callback with screenshot URLs\n if (params.onScreenshots) {\n params.onScreenshots(screenshotUrls);\n }\n } catch (screenshotError) {\n proboLogger.warn(`Screenshot capture failed: ${screenshotError}`);\n // Continue with action even if screenshots fail\n }\n } else {\n // 5. Highlight, wait, unhighlight if highlightTimeout > 0 (original behavior when no screenshots)\n if (this.timeoutConfig.highlightTimeout > 0) {\n await this.highlight(locator, annotation);\n await this.page.waitForTimeout(this.timeoutConfig.highlightTimeout);\n await this.unhighlight(locator);\n }\n }\n \n // 6. Action logic\n switch (action) {\n case PlaywrightAction.CLICK:\n case PlaywrightAction.CHECK_CHECKBOX:\n case PlaywrightAction.SELECT_RADIO:\n await this.robustMouseAction(locator, 'click');\n break;\n case PlaywrightAction.FILL_IN:\n await this.robustFill(locator, argument as string);\n break; \n case PlaywrightAction.SELECT_DROPDOWN:\n await locator.selectOption(argument, { timeout: this.timeoutConfig.playwrightActionTimeout });\n break; \n case PlaywrightAction.SET_SLIDER:\n await this.setSliderValue(locator, argument as string);\n break;\n case PlaywrightAction.WAIT_FOR_OTP:\n {\n const waitForOtpArgs = params as any;\n const otpInbox = typeof argument === 'string' && argument.trim() ? argument.trim() : undefined;\n const otpTimeout = waitForOtpArgs?.timeout as number | undefined;\n const otpCheckInterval = waitForOtpArgs?.checkInterval as number | undefined;\n const otpLookback = waitForOtpArgs?.checkRecentMessagesSinceMs as number | undefined;\n\n const otp = await OTP.waitForOTP({\n inbox: otpInbox,\n timeout: otpTimeout,\n checkInterval: otpCheckInterval,\n checkRecentMessagesSinceMs: otpLookback ?? 600_000,\n });\n\n if (otp) {\n proboLogger.log(`✅ OTP found: ${otp}`);\n await locator.fill(otp, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } else {\n proboLogger.log(`❌ OTP not found`);\n }\n }\n break;\n case PlaywrightAction.GEN_TOTP:\n // Use secret from argument (interpolated above) and auxiliary config (digits/algorithm) from totpConfig\n // If totpConfig is not provided, use defaults (digits: 6, algorithm: 'SHA1')\n const totpAux = (params as any).totpConfig;\n const secretArg = argument as string;\n if (secretArg) {\n try {\n // Use provided config or defaults\n const digits = totpAux?.digits || 6;\n const algorithm = totpAux?.algorithm || 'SHA1';\n const totpCode = this.generateOTP(secretArg, digits, algorithm);\n proboLogger.log(`✅ TOTP generated (digits: ${digits}, algorithm: ${algorithm})`);\n await locator.fill(totpCode, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } catch (error) {\n proboLogger.error(`❌ TOTP generation failed: ${error}`);\n throw new Error(`TOTP generation failed: ${error}`);\n }\n } else {\n proboLogger.log(`❌ Missing TOTP argument`);\n throw new Error(`Missing TOTP argument`);\n }\n break;\n \n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\n const containerText = await this.getTextValue(locator);\n if (!matchRegex(containerText, argument as string)) {\n throw new Error(`Validation failed. Expected text \"${containerText}\" to match \"${argument}\".`);\n }\n break;\n case PlaywrightAction.ASSERT_EXACT_VALUE:\n const actualText = await this.getTextValue(locator);\n \n if (actualText !== argument) {\n throw new Error(`Validation failed. Expected text \"${argument}\", but got \"${actualText}\".`);\n }\n break;\n case PlaywrightAction.HOVER: \n if (locator) {\n await this.robustMouseAction(locator, 'hover');\n } else {\n throw new Error('not executing HOVER because no visible ancestor found');\n }\n break;\n case PlaywrightAction.SCROLL_TO_ELEMENT:\n // Restore exact scroll positions from recording\n const scrollData = JSON.parse(argument as string);\n const desiredScrollTop = scrollData.scrollTop;\n const desiredScrollLeft = scrollData.scrollLeft;\n const maxAttempts = 100;\n \n try {\n proboLogger.log('🔄 Restoring scroll position for container:', locator, 'scrollTop:', desiredScrollTop, 'scrollLeft:', desiredScrollLeft);\n \n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n // Perform scroll\n await locator.evaluate((el: HTMLElement, scrollData: { scrollTop: number; scrollLeft: number }) => {\n el.scrollTo({left: scrollData.scrollLeft, top: scrollData.scrollTop, behavior: 'smooth'});\n }, { scrollTop: desiredScrollTop, scrollLeft: desiredScrollLeft }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n \n // Wait for scroll to complete\n await this.page.waitForTimeout(50);\n \n // Get actual scroll positions\n const actualScroll = await locator.evaluate((el: HTMLElement) => {\n return { scrollTop: el.scrollTop, scrollLeft: el.scrollLeft };\n }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n \n // Compare actual vs desired\n const scrollTopMatch = Math.abs(actualScroll.scrollTop - desiredScrollTop) < 1;\n const scrollLeftMatch = Math.abs(actualScroll.scrollLeft - desiredScrollLeft) < 1;\n \n if (scrollTopMatch && scrollLeftMatch) {\n proboLogger.log(`🔄 Scroll position restored successfully on attempt ${attempt}`);\n break;\n }\n \n if (attempt < maxAttempts) {\n proboLogger.log(`🔄 Scroll position mismatch on attempt ${attempt}. Desired: (${desiredScrollTop}, ${desiredScrollLeft}), Actual: (${actualScroll.scrollTop}, ${actualScroll.scrollLeft}). Retrying...`);\n } else {\n proboLogger.warn(`🔄 Scroll position mismatch after ${maxAttempts} attempts. Desired: (${desiredScrollTop}, ${desiredScrollLeft}), Final: (${actualScroll.scrollTop}, ${actualScroll.scrollLeft})`);\n }\n }\n } catch (e) {\n proboLogger.error('🔄 Failed to restore scroll position for container:', locator, 'scrollTop:', desiredScrollTop, 'scrollLeft:', desiredScrollLeft, 'error:', e);\n }\n break;\n case PlaywrightAction.UPLOAD_FILES:\n await locator.setInputFiles(argument as string[], { timeout: this.timeoutConfig.playwrightActionTimeout });\n break;\n case PlaywrightAction.EXTRACT_VALUE:\n let extractedText = await this.getTextValue(locator);\n return extractedText;\n case PlaywrightAction.WAIT_FOR: \n const expectedText = argument as string;\n // Use smaller polling interval for better precision (can detect changes sooner)\n const pollingInterval = (params.pollingInterval as number) || 100; // Default 100ms for better precision\n const timeout = (params.timeout as number) || 10000; // Default 10 seconds\n \n // Create a cancellation promise that rejects when cancellation is detected\n // This allows us to cancel the text polling loop at any time\n const createCancellationPromise = () => {\n const cancellationCheckInterval = 50; // Check for cancellation every 50ms\n return new Promise<never>((_, reject) => {\n const checkCancellation = () => {\n if (this.isCanceled && this.isCanceled()) {\n reject(new Error('Replay execution was cancelled'));\n return;\n }\n setTimeout(checkCancellation, cancellationCheckInterval);\n };\n checkCancellation();\n });\n };\n \n let textMatches = false; \n let currentText = ''; \n const waitStartTime = Date.now();\n const cancellationPromise = createCancellationPromise();\n \n while (!textMatches && (Date.now() - waitStartTime) < timeout) {\n try {\n // Check if element is visible first\n const isVisible = await locator.isVisible();\n \n if (isVisible) {\n // Get the current text content only if element is visible\n currentText = await this.getTextValue(locator);\n \n // Check if the text matches (using the same logic as ASSERT_CONTAINS_VALUE)\n if (matchRegex(currentText, expectedText)) {\n textMatches = true;\n proboLogger.log(`✅ Wait for text completed successfully. Found: \"${currentText}\"`);\n break;\n }\n }\n \n // Text doesn't match yet or element not visible, wait for the polling interval\n // Use Promise.race() to allow cancellation during the wait (consistent with element attachment logic)\n if ((Date.now() - waitStartTime) < timeout) {\n const remainingTime = timeout - (Date.now() - waitStartTime);\n const actualPollInterval = Math.min(pollingInterval, remainingTime);\n \n if (actualPollInterval > 0) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n // Race between the timeout and cancellation check\n await Promise.race([\n this.page.waitForTimeout(actualPollInterval),\n cancellationPromise\n ]);\n }\n }\n } catch (e) {\n // If it's a cancellation error, re-throw it\n if (e instanceof Error && e.message === 'Replay execution was cancelled') {\n throw e;\n }\n throw new Error(`Wait for text failed while trying to extract text from selector: ${elementSelector}${iframeSelector ? ` in iframe: ${iframeSelector}` : ''}`);\n }\n }\n \n // Final cancellation check\n if (this.isCanceled && this.isCanceled()) {\n throw new Error('Replay execution was cancelled');\n }\n \n // Timeout reached without a match\n if (!textMatches) { \n throw new Error(`Wait for text failed. Expected \"${expectedText}\" to match \"${currentText}\" after ${timeout}ms of polling every ${pollingInterval}ms`);\n } \n break;\n default:\n throw new Error(`Unhandled action: ${action}`);\n }\n }\n\n /**\n * Public method to generate TOTP code using the provided secret, digits, and algorithm\n * @param secret - The TOTP secret (base32 encoded)\n * @param digits - Number of digits in the TOTP code (default: 6)\n * @param algorithm - Hash algorithm to use (default: 'SHA1')\n * @returns The generated TOTP code\n */\n public generateOTP(secret: string, digits: number = 6, algorithm: string = 'SHA1'): string {\n const otp = new OTPAuth.TOTP({\n algorithm,\n digits, \n secret,\n });\n return otp.generate();\n }\n \n private async getLocator(elementSelector: string, smartSelector: SmartSelector | null, getIFrameLocator: boolean = false, frameLocator: FrameLocator | null = null) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n if (this.enableSmartSelectors && smartSelector && Object.keys(smartSelector).length > 0) {\n const { strategy, selector, index, label_selector } = smartSelector; \n proboLogger.debug(`getLocator: smartSelector=${JSON.stringify(smartSelector)}`);\n let labelLocator: Locator;\n let combinedSelector: string;\n let id;\n const mainStrategy = smartSelector.strategy.split(' ')[0]; //extract the main strategy from the full strategy string\n switch(mainStrategy) {\n case 'role': \n case 'placeholder':\n case 'name':\n case 'data-testid':\n case 'id':\n case 'css':\n case 'class':\n proboLogger.debug(`getLocator: strategy=${mainStrategy}, index=${index}`);\n if (typeof index === 'number') { \n const matchedLocators: Locator|FrameLocator = await this.getLocatorOrFrame(selector, getIFrameLocator, frameLocator);\n if (!getIFrameLocator) {\n proboLogger.debug(`getLocator: matched ${await (matchedLocators as Locator).count()} elements`);\n for (const [index, element] of (await (matchedLocators as Locator).all()).entries()) {\n // Get outerHTML\n const html = await element.evaluate(el => el.outerHTML);\n proboLogger.debug(`[${index}] ${html}`);\n }\n }\n return matchedLocators.nth(index);\n }\n else {\n return this.getLocatorOrFrame(selector, getIFrameLocator, frameLocator);\n } \n case 'label':\n if (smartSelector.strategy === 'label for') {\n proboLogger.debug(`getLocator: strategy=${smartSelector.strategy}, label_selector=${label_selector}`);\n labelLocator = this.getLocatorOrFrame(label_selector as string, false,frameLocator) as Locator;\n id = await labelLocator.getAttribute('for');\n proboLogger.debug(`getLocator: labelLocator.getAttribute('for')=${id}`);\n combinedSelector = selector ? `#${id} > ${selector}` : `#${id}`;\n proboLogger.debug(`getLocator: combinedSelector=${combinedSelector}`);\n return this.getLocatorOrFrame(combinedSelector, getIFrameLocator, frameLocator);\n }\n else if (smartSelector.strategy === 'label by') {\n proboLogger.debug(`getLocator: strategy=${smartSelector.strategy}, label_selector=${label_selector}`);\n labelLocator = this.getLocatorOrFrame(label_selector as string, false, frameLocator) as Locator;\n id = await labelLocator.getAttribute('id');\n proboLogger.debug(`getLocator: labelLocator.getAttribute('id')=${id}`);\n combinedSelector = selector ? `[aria-labelledby=\"${id}\"] > ${selector}` : `[aria-labelledby=\"${id}\"]`;\n proboLogger.debug(`getLocator: combinedSelector=${combinedSelector}`);\n return this.getLocatorOrFrame(combinedSelector, getIFrameLocator, frameLocator);\n }\n else {\n throw new Error(`Unsupported label strategy: ${smartSelector.strategy}`); \n }\n default:\n throw new Error(`Unsupported smart selector strategy: ${strategy}`);\n }\n }\n // fallback to standard locator\n return this.getLocatorOrFrame(elementSelector, getIFrameLocator, frameLocator);\n }\n \n private getLocatorOrFrame(selector: string, getIFrameLocator: boolean, frameLocator: FrameLocator | null = null) : Locator | FrameLocator {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n if (getIFrameLocator) {\n proboLogger.debug(`getLocatorOrFrame: getting frame locator for selector=${selector}`);\n if (frameLocator) {\n throw new Error(`getLocatorOrFrame: frameLocator must be null when getIFrameLocator is true`);\n }\n return this.page.frameLocator(selector);\n }\n proboLogger.debug(`getLocatorOrFrame: ${frameLocator ? `frameLocator.locator(\"${selector}\")` : `page.locator(\"${selector}\")`}`);\n return frameLocator ? frameLocator.locator(selector) : this.page.locator(selector);\n }\n\n\n /**\n * Creates a visual highlight overlay on the target element with optional annotation text.\n * The highlight appears as a red border around the element and can include descriptive text.\n * \n * @param locator - The Playwright locator for the element to highlight\n * @param annotation - Optional text annotation to display above/below the highlighted element\n */\n private async highlight(locator: Locator, annotation: string | null = null) {\n try {\n await locator.evaluate((el: HTMLElement) => {\n const overlay = el.ownerDocument.createElement('div');\n overlay.id = 'highlight-overlay';\n overlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 2147483647;\n `;\n el.ownerDocument.body.appendChild(overlay);\n const bbox = el.getBoundingClientRect();\n const highlight = el.ownerDocument.createElement('div');\n highlight.style.cssText = `\n position: fixed;\n left: ${bbox.x}px;\n top: ${bbox.y}px;\n width: ${bbox.width}px;\n height: ${bbox.height}px;\n border: 2px solid rgb(255, 0, 0);\n transition: all 0.2s ease-in-out;\n `;\n overlay.appendChild(highlight);\n }, { timeout: 500 });\n } catch (e) {\n proboLogger.log('highlight: failed to run locator.evaluate()', e);\n }\n if (annotation) {\n await locator.evaluate((el: HTMLElement, annotation: string) => {\n const overlay = el.ownerDocument.getElementById('highlight-overlay');\n if (overlay) {\n const bbox = el.getBoundingClientRect();\n const annotationEl = el.ownerDocument.createElement('div');\n annotationEl.style.cssText = `\n position: fixed;\n left: ${bbox.x}px;\n top: ${bbox.y - 25}px;\n padding: 2px 6px;\n background-color: rgba(255, 255, 0, 0.6);\n color: black;\n font-size: 16px;\n font-family: 'Courier New', Courier, monospace;\n font-weight: bold;\n border-radius: 3px;\n pointer-events: none;\n z-index: 2147483647;\n `;\n annotationEl.textContent = annotation;\n \n // If element is too close to top of window, position annotation below\n if (bbox.y < 30) {\n annotationEl.style.top = `${bbox.y + bbox.height + 5}px`;\n }\n \n overlay.appendChild(annotationEl);\n }\n }, annotation, { timeout: 500 });\n }\n };\n \n /**\n * Removes the highlight overlay from the target element.\n * Cleans up the visual highlighting created by the highlight method.\n * \n * @param locator - The Playwright locator for the element to unhighlight\n */\n private async unhighlight(locator: Locator) {\n try {\n await locator.evaluate((el: HTMLElement) => {\n const overlay = el.ownerDocument.getElementById('highlight-overlay');\n if (overlay) {\n overlay.remove();\n }\n }, { timeout: 500 });\n } catch (e) {\n proboLogger.log('unhighlight: failed to run locator.evaluate()', e);\n }\n };\n \n /**\n * Attempts to fill a form field with the specified value using multiple fallback strategies.\n * First tries the standard fill method, then falls back to click + type if needed.\n * \n * @param locator - The Playwright locator for the input element\n * @param value - The text value to fill into the input field\n */\n private async robustFill(locator: Locator, value: string) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n try {\n await locator.fill(value, { timeout: this.timeoutConfig.playwrightActionTimeout });\n return;\n } catch (err) {\n proboLogger.warn('robustFill: failed to run locator.fill(), trying fallback', err);\n }\n // fallback: click and type\n try {\n await locator.focus({ timeout: this.timeoutConfig.playwrightActionTimeout });\n await this.page.keyboard.type(value);\n return;\n } catch (err) {\n proboLogger.warn('robustFill: failed to run locator.focus() and page.keyboard.type()', err);\n };\n };\n \n private async robustTypeKeys(value: string) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n /* try {\n await locator.press(value);\n return;\n } catch (err) {\n proboLogger.warn('robustTypeKeys: failed to run locator.type()', err);\n } */\n // fallback: click and type\n try {\n // await locator.focus(); \n await this.page.keyboard.press(value);\n return;\n } catch (err) {\n proboLogger.warn('robustTypeKeys: failed to run page.keyboard.type()', err);\n }\n }\n \n /**\n * Performs a robust mouse action (click or hover) using multiple fallback strategies.\n * Attempts standard click first, then mouse click at center coordinates, and finally native DOM events.\n * \n * @param locator - The Playwright locator for the element to click\n * @param action - The mouse action to perform ('click' or 'hover')\n * @throws Error if all mouse action methods fail\n */\n private async robustMouseAction(locator: Locator, action: 'click' | 'hover') {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n // start with a standard click\n try {\n if (action === 'click') { \n await locator.click({ noWaitAfter: true, timeout: this.timeoutConfig.playwrightActionTimeout });\n const navTracker = await NavTracker.getInstance(this.page,{ \n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout, \n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n await navTracker.waitForNavigationToStabilize();\n /* const old_url = this.page.url();\n await locator.click({ noWaitAfter: false, timeout: this.timeoutConfig.playwrightActionTimeout });\n await this.page.waitForTimeout(50); // just enough time to detect SPA router changes\n if (old_url !== this.page.url()) {\n await this.page.waitForLoadState('networkidle', { timeout: this.timeoutConfig.playwrightNavigationTimeout });\n } */\n } else if (action === 'hover') {\n await locator.hover({ timeout: this.timeoutConfig.playwrightActionTimeout });\n } else {\n throw new Error(`Unsupported mouse action: ${action}`);\n }\n return;\n } catch (err) {\n proboLogger.warn(`robustMouseAction: failed to run locator.${action}(), trying mouse.${action}()`);\n }\n // try clicking using mouse at the center of the element\n try {\n const bbox = await locator.boundingBox({ timeout: this.timeoutConfig.playwrightLocatorTimeout });\n if (bbox) {\n if (action === 'click') {\n // Move the mouse to the bottom right corner of the page before clicking\n const viewportSize = this.page.viewportSize();\n if (viewportSize) {\n proboLogger.log(`robustMouseAction: moving mouse to the bottom right corner of the page (${viewportSize.width - 1}, ${viewportSize.height - 1})`);\n await this.page.mouse.move(viewportSize.width - 1, viewportSize.height - 1);\n } else {\n proboLogger.warn('robustMouseAction: viewportSize not available, moving mouse to element top left corner');\n await this.page.mouse.move(bbox.x, bbox.y);\n }\n await this.page.waitForTimeout(100);\n await this.page.mouse.click(bbox.x, bbox.y);\n } else if (action === 'hover') {\n await this.page.mouse.move(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2);\n }\n return;\n } else {\n proboLogger.warn('robustMouseAction: bounding box not found');\n }\n } catch (err2) {\n proboLogger.warn(`robustMouseAction: failed to run page.mouse.${action}(), trying dispatching an event`);\n }\n // fallback: dispatch native mouse events manually\n try {\n if (action === 'click') {\n await locator.evaluate((el) => {\n ['mousedown', 'mouseup', 'click'].forEach(type => {\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window\n });\n el.dispatchEvent(event);\n });\n }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } else if (action === 'hover') {\n await locator.evaluate((el) => {\n ['mouseenter', 'mouseover', 'focusin', 'focus'].forEach(type => {\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window\n });\n el.dispatchEvent(event);\n });\n }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n }\n } catch (err3) {\n proboLogger.error(`robustMouseAction: all ${action} methods failed:`);\n // not re-throwing playwright errors as they are long and not useful for the user\n throw new Error(`robustMouseAction: all ${action} methods failed`);\n }\n };\n \n /**\n * Extracts text content from an element using multiple strategies.\n * Tries textContent first, then inputValue, and finally looks for nested input elements.\n * Returns normalized and trimmed text for consistent comparison.\n * \n * @param locator - The Playwright locator for the element to extract text from\n * @returns Normalized text content with consistent whitespace handling\n */\n private async getTextValue(locator: Locator) {\n let textValue = await locator.textContent();\n if (!textValue) {\n try {\n textValue = await locator.inputValue();\n } catch (err) {\n // proboLogger.warn('getTextValue: failed to run locator.inputValue()', err);\n }\n }\n if (!textValue) {\n try {\n textValue = await locator.locator('input').inputValue();\n } catch (err) {\n // proboLogger.warn('getTextValue: failed to run locator.locator(\"input\").inputValue()', err);\n }\n }\n if (!textValue) {\n textValue = '';\n }\n // Trim and normalize whitespace to make comparison more robust\n return textValue.trim().replace(/\\s+/g, ' ');\n };\n \n private async setSliderValue(locator: Locator, value: string) {\n try {\n await locator.fill(value, { timeout: this.timeoutConfig.playwrightActionTimeout });\n return;\n } catch (err) {\n proboLogger.warn('setSliderValue: failed to run locator.fill(), trying fallback', err);\n }\n // fallback \n try {\n await locator.focus();\n await locator.evaluate((el: HTMLInputElement, value: string) => {\n el.value = value;\n el.dispatchEvent(new Event('input', { bubbles: true }));\n el.dispatchEvent(new Event('change', { bubbles: true })); \n }, value, { timeout: this.timeoutConfig.playwrightActionTimeout }); \n } catch (err) {\n proboLogger.error('setSliderValue: failed to run locator.evaluate()', err);\n }\n }\n} /* class ProboPlaywright */\n","// --- Code generation API utilities for Probo Labs Playwright scripts ---\nimport { \n ApiClient, \n Interaction, \n ElementInfo,\n RecorderSettings,\n DEFAULT_RECORDER_SETTINGS,\n generateCode,\n CodeGeneratorOptions,\n PlaywrightAction,\n ServerResponse,\n ApplyAIStatus,\n ScrollableContainer,\n WaitForConfig,\n TotpConfig,\n SmartSelector\n} from '@probolabs/probo-shared';\n\n/**\n * Options for code generation\n */\nexport interface CodeGenOptions {\n useDefaultSettings?: boolean;\n recorderSettings?: RecorderSettings;\n viewPort?: { width: number; height: number };\n}\n\n/**\n * Result of generating code for a test suite\n */\nexport interface TestSuiteCodeGenResult {\n testSuiteId: number;\n testSuiteName: string;\n scenarios: Array<{\n scenarioId: number;\n scenarioName: string;\n code: string;\n }>;\n}\n\n/**\n * Result of generating code for a project (all scenarios)\n */\nexport interface ProjectCodeGenResult {\n projectId: number;\n projectName: string;\n scenarios: Array<{\n scenarioId: number;\n scenarioName: string;\n code: string;\n }>;\n}\n\n/**\n * Backend API response format for scenario interactions\n */\ninterface BackendScenarioResponse {\n id: number;\n name: string;\n interactions: BackendInteraction[];\n parameterTable?: Record<string, string>[];\n viewPort?: { width: number; height: number };\n}\n\n/**\n * Backend API response format for test suite\n */\ninterface BackendTestSuiteResponse {\n id: number;\n name: string;\n scenarios: Array<{\n id: number;\n name: string;\n }>;\n}\n\n/**\n * Backend API response format for project scenarios\n */\ninterface BackendProjectScenario {\n id: number;\n name: string;\n}\n\n/**\n * Backend API response format for project\n */\ninterface BackendProjectResponse {\n id: number;\n name: string;\n}\n\n/**\n * Backend interaction format (from RecorderInteractionSerializer)\n */\ninterface BackendInteraction {\n interactionId: string;\n nativeDescription: string;\n isNativeDescriptionElaborate: boolean;\n action: string;\n argument: string | string[] | null;\n text?: string;\n css_selector?: string;\n iframe_selector?: string;\n smart_selector?: SmartSelector | null;\n smart_iframe_selector?: SmartSelector | null;\n nativeName: string;\n parameterName: string;\n elementInfo?: ElementInfo | null;\n stepId: number;\n base_screenshot_url?: string | null;\n candidates_screenshot_url?: string | null;\n actual_interaction_screenshot_url?: string | null;\n url: string;\n candidate_elements?: ElementInfo[];\n html?: string;\n replay_status?: string | null;\n apply_ai_status?: string | null;\n syncStatus: string;\n recordingId?: string | null;\n last_replay_timestamp?: number | null;\n index?: number;\n serverResponse?: ServerResponse | null;\n annotation?: string;\n scrollableContainers?: ScrollableContainer[];\n waitForConfig?: WaitForConfig;\n totpConfig?: TotpConfig;\n isSecret?: boolean;\n}\n\n/**\n * ProboCodeGenerator - Handles fetching test suite/scenario data and generating Playwright code\n */\nexport class ProboCodeGenerator {\n /**\n * Normalize API URL by removing trailing slash\n */\n private static normalizeApiUrl(apiUrl: string): string {\n return apiUrl.replace(/\\/+$/, '');\n }\n\n private static async readResponseErrorText(response: Response): Promise<string> {\n try {\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n const errorData: any = await response.json();\n return errorData.error || errorData.detail || JSON.stringify(errorData);\n }\n\n let errorText = await response.text();\n // Truncate HTML error pages to first 200 chars\n if (errorText.length > 200) {\n errorText = errorText.substring(0, 200) + '...';\n }\n return errorText;\n } catch (e) {\n // Best-effort fallback\n return `HTTP ${response.status}`;\n }\n }\n\n /**\n * Fetch scenario data from the backend API\n */\n private static async fetchScenarioData(\n scenarioId: number,\n apiToken: string,\n apiUrl: string\n ): Promise<BackendScenarioResponse> {\n const normalizedUrl = this.normalizeApiUrl(apiUrl);\n // Scenario interactions endpoint is under /api/ (special endpoint)\n const url = `${normalizedUrl}/api/scenarios/${scenarioId}/interactions`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await this.readResponseErrorText(response);\n throw new Error(`Failed to fetch scenario ${scenarioId}: ${response.status} ${errorText}`);\n }\n\n return response.json();\n }\n\n /**\n * Fetch test suite data from the backend API\n */\n private static async fetchTestSuiteData(\n testSuiteId: number,\n apiToken: string,\n apiUrl: string\n ): Promise<BackendTestSuiteResponse> {\n const normalizedUrl = this.normalizeApiUrl(apiUrl);\n // Note: test-suites endpoint doesn't have /api/ prefix (it's from the router at root level)\n const url = `${normalizedUrl}/test-suites/${testSuiteId}/`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await this.readResponseErrorText(response);\n throw new Error(`Failed to fetch test suite ${testSuiteId}: ${response.status} ${errorText}`);\n }\n\n return response.json();\n }\n\n /**\n * Fetch project data from the backend API\n */\n private static async fetchProjectData(\n projectId: number,\n apiToken: string,\n apiUrl: string\n ): Promise<BackendProjectResponse> {\n const normalizedUrl = this.normalizeApiUrl(apiUrl);\n // Projects endpoint is at root level, not under /api/\n const url = `${normalizedUrl}/projects/${projectId}/`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await this.readResponseErrorText(response);\n throw new Error(`Failed to fetch project ${projectId}: ${response.status} ${errorText}`);\n }\n\n return response.json();\n }\n\n /**\n * Fetch all scenarios for a project from the backend API\n */\n private static async fetchProjectScenarios(\n projectId: number,\n apiToken: string,\n apiUrl: string\n ): Promise<BackendProjectScenario[]> {\n const normalizedUrl = this.normalizeApiUrl(apiUrl);\n // Scenarios endpoint is at root level, not under /api/\n const url = `${normalizedUrl}/scenarios/?project_id=${projectId}`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await this.readResponseErrorText(response);\n throw new Error(`Failed to fetch scenarios for project ${projectId}: ${response.status} ${errorText}`);\n }\n\n const data = await response.json();\n // Handle both array and paginated responses\n if (Array.isArray(data)) {\n return data;\n }\n if (data.results && Array.isArray(data.results)) {\n return data.results;\n }\n return [];\n }\n\n /**\n * Convert backend interaction format to Interaction[] format\n */\n private static convertBackendInteractionsToInteractionFormat(\n backendInteractions: BackendInteraction[]\n ): Interaction[] {\n return backendInteractions.map((backendInteraction) => {\n // Convert action string to PlaywrightAction enum\n const action = backendInteraction.action as PlaywrightAction;\n \n // Convert apply_ai_status string to enum if present\n let applyAiStatus: ApplyAIStatus | null = null;\n if (backendInteraction.apply_ai_status) {\n applyAiStatus = backendInteraction.apply_ai_status as ApplyAIStatus;\n }\n\n // Build elementInfo from backend data\n const elementInfo: ElementInfo | null = backendInteraction.elementInfo || null;\n\n // Build interaction object\n // localId is the primary key for IndexedDB - always generate unique ID to support duplicated sequences\n const interaction: Interaction = {\n localId: crypto.randomUUID(), // Generate unique localId for each interaction\n interactionId: backendInteraction.interactionId,\n action: action,\n argument: backendInteraction.argument || '',\n elementInfo: elementInfo,\n iframe_selector: backendInteraction.iframe_selector,\n css_selector: backendInteraction.css_selector,\n smart_selector: backendInteraction.smart_selector || undefined,\n smart_iframe_selector: backendInteraction.smart_iframe_selector || undefined,\n url: backendInteraction.url,\n timestamp: backendInteraction.last_replay_timestamp || Date.now(),\n base_screenshot_url: backendInteraction.base_screenshot_url,\n actual_interaction_screenshot_url: backendInteraction.actual_interaction_screenshot_url,\n candidates_screenshot_url: backendInteraction.candidates_screenshot_url,\n candidate_elements: backendInteraction.candidate_elements || [],\n recordingId: backendInteraction.recordingId,\n syncStatus: backendInteraction.syncStatus,\n serverResponse: backendInteraction.serverResponse || null,\n nativeName: backendInteraction.nativeName,\n nativeDescription: backendInteraction.nativeDescription,\n isNativeDescriptionElaborate: backendInteraction.isNativeDescriptionElaborate,\n parameterName: backendInteraction.parameterName,\n annotation: backendInteraction.annotation,\n last_replay_timestamp: backendInteraction.last_replay_timestamp,\n replay_status: backendInteraction.replay_status,\n apply_ai_status: applyAiStatus,\n error: null,\n index: backendInteraction.index,\n html: backendInteraction.html,\n stepId: backendInteraction.stepId,\n scrollableContainers: backendInteraction.scrollableContainers,\n stdout: undefined,\n waitForConfig: backendInteraction.waitForConfig,\n totpConfig: backendInteraction.totpConfig,\n isSecret: backendInteraction.isSecret || false,\n };\n\n return interaction;\n });\n }\n\n /**\n * Get default recorder settings for code generation\n */\n private static getDefaultRecorderSettings(): RecorderSettings {\n return {\n ...DEFAULT_RECORDER_SETTINGS,\n // Override with sensible defaults for code generation\n enableSmartSelectors: true,\n debugLevel: 'INFO',\n enableConsoleLogs: false,\n };\n }\n\n /**\n * Get default viewport dimensions\n */\n private static getDefaultViewPort(): { width: number; height: number } {\n return { width: 1280, height: 720 };\n }\n\n /**\n * Validate and normalize viewport dimensions\n * Returns a valid viewport object with numeric width and height, falling back to defaults if invalid\n */\n private static normalizeViewPort(viewPort?: { width?: number; height?: number } | null): { width: number; height: number } {\n const defaultViewPort = this.getDefaultViewPort();\n \n if (!viewPort) {\n return defaultViewPort;\n }\n \n const width = typeof viewPort.width === 'number' && !isNaN(viewPort.width) ? viewPort.width : defaultViewPort.width;\n const height = typeof viewPort.height === 'number' && !isNaN(viewPort.height) ? viewPort.height : defaultViewPort.height;\n \n return { width, height };\n }\n\n /**\n * Generate code for a single scenario\n * Fetches scenario data, converts to Interaction[], generates code\n */\n static async generateCodeForScenario(\n scenarioId: number,\n apiToken: string,\n apiUrl: string,\n options?: CodeGenOptions\n ): Promise<string> {\n // Validate inputs\n if (!apiToken) {\n throw new Error('API token is required');\n }\n if (!apiUrl) {\n throw new Error('API URL is required');\n }\n\n // Fetch scenario data\n const scenarioData = await this.fetchScenarioData(scenarioId, apiToken, apiUrl);\n\n // Convert backend interactions to Interaction[] format\n const interactions = this.convertBackendInteractionsToInteractionFormat(scenarioData.interactions || []);\n\n // Get settings and viewport\n const settings = options?.recorderSettings || this.getDefaultRecorderSettings();\n const viewPort = this.normalizeViewPort(options?.viewPort || scenarioData.viewPort);\n\n // Get parameter table rows\n const rows = scenarioData.parameterTable || [];\n\n // Generate code\n const codeOptions: CodeGeneratorOptions = {\n scenarioName: scenarioData.name,\n interactions: interactions,\n rows: rows,\n };\n\n return generateCode(codeOptions, settings, viewPort);\n }\n\n /**\n * Generate code for all scenarios in a test suite\n * Returns map of scenario names to generated code\n */\n static async generateCodeForTestSuite(\n testSuiteId: number,\n apiToken: string,\n apiUrl: string,\n options?: CodeGenOptions\n ): Promise<TestSuiteCodeGenResult> {\n // Validate inputs\n if (!apiToken) {\n throw new Error('API token is required');\n }\n if (!apiUrl) {\n throw new Error('API URL is required');\n }\n\n // Fetch test suite data\n const testSuiteData = await this.fetchTestSuiteData(testSuiteId, apiToken, apiUrl);\n\n // Generate code for each scenario\n const scenarioResults = await Promise.all(\n testSuiteData.scenarios.map(async (scenario) => {\n try {\n const code = await this.generateCodeForScenario(\n scenario.id,\n apiToken,\n apiUrl,\n options\n );\n return {\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n code: code,\n };\n } catch (error: any) {\n // Log error but continue with other scenarios\n console.error(`Failed to generate code for scenario ${scenario.id}: ${error.message}`);\n throw error; // Re-throw to fail fast for now\n }\n })\n );\n\n return {\n testSuiteId: testSuiteData.id,\n testSuiteName: testSuiteData.name,\n scenarios: scenarioResults,\n };\n }\n\n /**\n * Generate code for all scenarios in a project\n * Returns map of scenario names to generated code\n */\n static async generateCodeForProject(\n projectId: number,\n apiToken: string,\n apiUrl: string,\n options?: CodeGenOptions\n ): Promise<ProjectCodeGenResult> {\n // Validate inputs\n if (!apiToken) {\n throw new Error('API token is required');\n }\n if (!apiUrl) {\n throw new Error('API URL is required');\n }\n\n // Fetch project data and scenarios\n const [projectData, scenarios] = await Promise.all([\n this.fetchProjectData(projectId, apiToken, apiUrl),\n this.fetchProjectScenarios(projectId, apiToken, apiUrl),\n ]);\n\n if (scenarios.length === 0) {\n throw new Error(`No scenarios found in project \"${projectData.name}\" (ID: ${projectId})`);\n }\n\n // Generate code for each scenario\n const scenarioResults = await Promise.all(\n scenarios.map(async (scenario) => {\n try {\n const code = await this.generateCodeForScenario(\n scenario.id,\n apiToken,\n apiUrl,\n options\n );\n return {\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n code: code,\n };\n } catch (error: any) {\n // Log error but continue with other scenarios\n console.error(`Failed to generate code for scenario ${scenario.id}: ${error.message}`);\n throw error; // Re-throw to fail fast for now\n }\n })\n );\n\n return {\n projectId: projectData.id,\n projectName: projectData.name,\n scenarios: scenarioResults,\n };\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { exec, spawn } from 'child_process';\nimport { promisify } from 'util';\nimport AdmZip from 'adm-zip';\nimport fetch from 'node-fetch';\nimport { ProboCodeGenerator, TestSuiteCodeGenResult, ProjectCodeGenResult } from './codegen-api.js';\nimport { generatePackageJson, generatePlaywrightConfig, generateProboReporter, slugify } from '@probolabs/probo-shared';\n\nconst execAsync = promisify(exec);\n\n/**\n * Result of running a test suite\n */\nexport interface TestSuiteRunResult {\n success: boolean;\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: string;\n runId?: number;\n}\n\n/**\n * Test statistics parsed from Playwright output\n */\nexport interface TestStatistics {\n passed: number;\n failed: number;\n skipped: number;\n}\n\n/**\n * Options for running a test suite\n */\nexport interface TestSuiteRunOptions {\n outputDir?: string;\n includeReporter?: boolean;\n playwrightArgs?: string[];\n skipRunCreation?: boolean; // When true, skip creating/updating run records in database\n onStatusUpdate?: (updates: Partial<{\n status: string;\n exit_code: number;\n error_message: string;\n stdout: string;\n stderr: string;\n tests_total: number;\n tests_passed: number;\n tests_failed: number;\n tests_skipped: number;\n }>) => void | Promise<void>;\n onStdout?: (chunk: string) => void | Promise<void>;\n onStderr?: (chunk: string) => void | Promise<void>;\n onReporterEvent?: (event: any) => void | Promise<void>;\n}\n\n/**\n * Ensures a directory exists, creating it recursively if needed\n */\nfunction ensureDirectoryExists(dir: string): void {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n}\n\n/**\n * Gets the default test suite directory path\n */\nfunction getDefaultTestSuiteDir(testSuiteId: number, testSuiteName?: string): string {\n const baseDir = path.join(os.homedir(), '.probium', 'test-suites');\n if (testSuiteName) {\n const sanitizedName = slugify(testSuiteName);\n return path.join(baseDir, `${testSuiteId}-${sanitizedName}`);\n }\n return path.join(baseDir, testSuiteId.toString());\n}\n\n/**\n * Count total tests by scanning spec files\n */\nfunction countTotalTests(testSuiteDir: string): number {\n const testsDir = path.join(testSuiteDir, 'tests');\n if (!fs.existsSync(testsDir)) {\n return 0;\n }\n\n let totalTests = 0;\n const specFiles = fs.readdirSync(testsDir).filter(f => f.endsWith('.spec.ts'));\n\n for (const specFile of specFiles) {\n const filePath = path.join(testsDir, specFile);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n // Count test() and it() calls\n const testMatches = content.match(/\\btest\\s*\\(/g);\n const itMatches = content.match(/\\bit\\s*\\(/g);\n\n if (testMatches) totalTests += testMatches.length;\n if (itMatches) totalTests += itMatches.length;\n\n // If no matches, assume at least 1 test per file\n if (!testMatches && !itMatches) {\n totalTests += 1;\n }\n }\n\n return totalTests;\n}\n\n/**\n * Parse Playwright statistics from stdout\n */\nfunction parsePlaywrightStatistics(stdout: string): TestStatistics {\n // Try to find final summary line: \"X passed\" or \"X passed, Y failed\" etc.\n const summaryMatch = stdout.match(/(\\d+)\\s+passed(?:,\\s*(\\d+)\\s+failed)?(?:,\\s*(\\d+)\\s+skipped)?/);\n\n if (summaryMatch) {\n return {\n passed: parseInt(summaryMatch[1]) || 0,\n failed: parseInt(summaryMatch[2]) || 0,\n skipped: parseInt(summaryMatch[3]) || 0,\n };\n }\n\n // Fallback: count individual test results\n const passed = (stdout.match(/✓/g) || []).length;\n const failed = (stdout.match(/✘/g) || []).length;\n const skipped = (stdout.match(/-\\s+test/g) || []).length;\n\n return { passed, failed, skipped };\n}\n\n/**\n * Parse statistics from Playwright HTML report metadata (most reliable)\n */\nfunction parseStatisticsFromMetadata(testSuiteDir: string): TestStatistics | null {\n try {\n const reportDir = path.join(testSuiteDir, 'playwright-report');\n const metadataPath = path.join(reportDir, 'data', 'metadata.json');\n if (!fs.existsSync(metadataPath)) {\n return null;\n }\n\n const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));\n return {\n passed: metadata.passed || 0,\n failed: metadata.failed || 0,\n skipped: metadata.skipped || 0,\n };\n } catch (error) {\n console.warn('⚠️ Could not parse metadata.json:', error);\n return null;\n }\n}\n\n/**\n * Zip a directory using adm-zip\n */\nasync function zipDirectory(sourceDir: string, outputPath: string): Promise<void> {\n try {\n const zip = new AdmZip();\n\n // Add all files from the source directory recursively\n zip.addLocalFolder(sourceDir);\n\n // Write zip file\n zip.writeZip(outputPath);\n\n const stats = fs.statSync(outputPath);\n console.log(`✅ Zipped ${stats.size} bytes`);\n } catch (error) {\n console.error(`❌ Error zipping directory: ${error}`);\n throw error;\n }\n}\n\n/**\n * Upload artifact to backend\n */\nasync function uploadArtifact(\n runId: number,\n testSuiteId: number,\n filePath: string,\n artifactType: string,\n name: string,\n apiToken: string,\n apiUrl: string\n): Promise<void> {\n const fileStats = fs.statSync(filePath);\n const fileSize = fileStats.size;\n\n // Determine content type\n const contentTypes: { [key: string]: string } = {\n 'html_report': 'application/zip',\n 'test_results': 'application/zip',\n 'log_file': 'text/plain',\n 'video': 'video/webm',\n 'screenshot': 'image/png',\n };\n const contentType = contentTypes[artifactType] || 'application/octet-stream';\n\n // Read file as buffer (like screenshot uploads)\n const fileBuffer = fs.readFileSync(filePath);\n\n // Upload directly to Django backend (like screenshots - raw binary)\n // FileUploadParser requires Content-Disposition header with filename\n const response = await fetch(`${apiUrl}/test-suites/${testSuiteId}/runs/${runId}/upload_artifact/`, {\n method: 'POST',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': contentType,\n 'Content-Disposition': `attachment; filename=\"${name}\"`,\n 'X-Artifact-Type': artifactType,\n 'X-Artifact-Name': name,\n },\n body: fileBuffer,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Failed to upload artifact: ${response.status} ${errorText}`);\n }\n\n console.log(`✅ Uploaded artifact: ${name} (${(fileSize / 1024 / 1024).toFixed(2)} MB)`);\n}\n\n/**\n * Update run status via API\n */\nasync function updateRunStatus(\n runId: number,\n testSuiteId: number,\n updates: Partial<{\n status: string;\n exit_code: number;\n error_message: string;\n stdout: string;\n stderr: string;\n steps: Array<{\n id: number;\n title: string;\n depth: number;\n status: 'running' | 'passed' | 'failed';\n error?: string | null;\n }>;\n tests_total: number;\n tests_passed: number;\n tests_failed: number;\n tests_skipped: number;\n }>,\n apiToken: string,\n apiUrl: string\n): Promise<void> {\n // Ensure apiUrl doesn't have trailing slash\n const baseUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl;\n const url = `${baseUrl}/test-suites/${testSuiteId}/runs/${runId}/`;\n const body = JSON.stringify(updates);\n\n const headers: Record<string, string> = {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n };\n\n try {\n const response = await fetch(url, {\n method: 'PATCH',\n headers: headers,\n body: body,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.warn(`⚠️ Failed to update run status: ${response.status} ${errorText}`);\n }\n } catch (error) {\n console.error(`❌ Error updating run status:`, error);\n }\n}\n\n/**\n * Find npm executable, preferring the one bundled with Node.js (for Electron compatibility)\n * Falls back to PATH for CI/CD environments\n */\nfunction findNpmExecutable(): string {\n const nodePath = process.execPath;\n const nodeDir = path.dirname(nodePath);\n \n // On Windows, npm might be npm.cmd\n const npmPaths = [\n path.join(nodeDir, 'npm'),\n path.join(nodeDir, 'npm.cmd'),\n ];\n \n for (const npmPath of npmPaths) {\n if (fs.existsSync(npmPath)) {\n return npmPath;\n }\n }\n \n // Fall back to PATH (works in CI/CD where npm is in PATH)\n return 'npm';\n}\n\n/**\n * Find npx executable, preferring the one bundled with Node.js (for Electron compatibility)\n * Falls back to PATH for CI/CD environments\n */\nfunction findNpxExecutable(): string {\n const nodePath = process.execPath;\n const nodeDir = path.dirname(nodePath);\n \n // On Windows, npx might be npx.cmd\n const npxPaths = [\n path.join(nodeDir, 'npx'),\n path.join(nodeDir, 'npx.cmd'),\n ];\n \n for (const npxPath of npxPaths) {\n if (fs.existsSync(npxPath)) {\n return npxPath;\n }\n }\n \n // Fall back to PATH (works in CI/CD where npx is in PATH)\n return 'npx';\n}\n\n/**\n * TestSuiteRunner - Handles test suite file generation and execution\n */\nexport class TestSuiteRunner {\n /**\n * Lookup project ID by name\n */\n static async lookupProjectByName(\n projectName: string,\n apiToken: string,\n apiUrl: string\n ): Promise<number> {\n const baseUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl;\n // Projects endpoint is at root level, not under /api/\n const url = `${baseUrl}/projects/?name=${encodeURIComponent(projectName)}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Failed to lookup project: ${response.status} ${errorText}`);\n }\n\n const data = await response.json();\n\n if (Array.isArray(data) && data.length > 0) {\n return data[0].id;\n }\n\n if (data.results && Array.isArray(data.results) && data.results.length > 0) {\n return data.results[0].id;\n }\n\n throw new Error(`Project \"${projectName}\" not found`);\n }\n\n /**\n * Lookup test suite ID by name and project\n */\n static async lookupTestSuiteByName(\n testSuiteName: string,\n projectName: string,\n apiToken: string,\n apiUrl: string\n ): Promise<number> {\n const baseUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl;\n const url = `${baseUrl}/test-suites/?name=${encodeURIComponent(testSuiteName)}&project=${encodeURIComponent(projectName)}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Failed to lookup test suite: ${response.status} ${errorText}`);\n }\n\n const data = await response.json();\n\n if (Array.isArray(data) && data.length > 0) {\n return data[0].id;\n }\n\n if (data.results && Array.isArray(data.results) && data.results.length > 0) {\n return data.results[0].id;\n }\n\n throw new Error(`Test suite \"${testSuiteName}\" not found in project \"${projectName}\"`);\n }\n\n /**\n * Generate all files for a test suite\n */\n static async generateTestSuiteFiles(\n testSuiteId: number,\n apiToken: string,\n apiUrl: string,\n outputDir?: string,\n testSuiteName?: string,\n includeReporter: boolean = true,\n runId?: number\n ): Promise<void> {\n const testSuiteDir = outputDir || getDefaultTestSuiteDir(testSuiteId, testSuiteName);\n\n // Generate code for all scenarios\n const codeGenResult = await ProboCodeGenerator.generateCodeForTestSuite(\n testSuiteId,\n apiToken,\n apiUrl\n );\n\n if (codeGenResult.scenarios.length === 0) {\n throw new Error(`No scenarios found in test suite ${testSuiteId}. Cannot generate test files.`);\n }\n\n // Delete everything in the test suite directory except node_modules\n // This ensures a clean state while preserving dependencies for faster subsequent runs\n if (fs.existsSync(testSuiteDir)) {\n try {\n const nodeModulesPath = path.join(testSuiteDir, 'node_modules');\n const hasNodeModules = fs.existsSync(nodeModulesPath);\n\n // Temporarily move node_modules out of the way if it exists\n let tempNodeModulesPath: string | null = null;\n if (hasNodeModules) {\n tempNodeModulesPath = path.join(testSuiteDir, '..', `node_modules.temp.${testSuiteId}`);\n // Remove temp directory if it exists from a previous failed run\n if (fs.existsSync(tempNodeModulesPath)) {\n fs.rmSync(tempNodeModulesPath, { recursive: true, force: true });\n }\n fs.renameSync(nodeModulesPath, tempNodeModulesPath);\n console.log(`📦 Preserved node_modules temporarily`);\n }\n\n // Delete everything in the directory\n const entries = fs.readdirSync(testSuiteDir, { withFileTypes: true });\n for (const entry of entries) {\n const entryPath = path.join(testSuiteDir, entry.name);\n try {\n if (entry.isDirectory()) {\n fs.rmSync(entryPath, { recursive: true, force: true });\n } else {\n fs.unlinkSync(entryPath);\n }\n } catch (error) {\n console.warn(`⚠️ Failed to delete ${entry.name}:`, error);\n }\n }\n console.log(`🗑️ Cleaned test suite directory (preserved node_modules)`);\n\n // Move node_modules back\n if (hasNodeModules && tempNodeModulesPath) {\n fs.renameSync(tempNodeModulesPath, nodeModulesPath);\n console.log(`📦 Restored node_modules`);\n }\n } catch (error) {\n console.warn(`⚠️ Failed to clean test suite directory ${testSuiteDir}:`, error);\n // Continue anyway - we'll overwrite files as needed\n }\n }\n\n // Ensure directories exist (will recreate after deletion)\n ensureDirectoryExists(testSuiteDir);\n const testsDir = path.join(testSuiteDir, 'tests');\n ensureDirectoryExists(testsDir);\n\n // Save each scenario's code to a .spec.ts file\n for (const scenario of codeGenResult.scenarios) {\n const fileName = `${slugify(scenario.scenarioName)}.spec.ts`;\n const filePath = path.join(testsDir, fileName);\n fs.writeFileSync(filePath, scenario.code, 'utf-8');\n console.log(`✅ Generated test file: ${filePath}`);\n }\n\n // Generate package.json\n await this.generatePackageJson(testSuiteDir, codeGenResult);\n\n // Generate playwright.config.ts with runId if available\n await this.generatePlaywrightConfig(testSuiteDir, includeReporter, runId);\n\n // Generate custom reporter file for live progress streaming (only if requested)\n if (includeReporter) {\n await this.generateProboReporter(testSuiteDir);\n }\n }\n\n /**\n * Generate package.json file\n */\n static async generatePackageJson(\n outputDir: string,\n codeGenResult: TestSuiteCodeGenResult | ProjectCodeGenResult\n ): Promise<void> {\n // Check if any scenario has secrets by examining the generated code\n // We'll check for dotenv imports in the generated code (check for multiple patterns to be robust)\n let hasSecrets = codeGenResult.scenarios.some(scenario => {\n const code = scenario.code;\n return code.includes(\"from 'dotenv'\") ||\n code.includes('from \"dotenv\"') ||\n code.includes(\"import { config } from 'dotenv'\") ||\n code.includes('import { config } from \"dotenv\"') ||\n code.includes(\"require('dotenv')\") ||\n code.includes('require(\"dotenv\")');\n });\n\n // Fallback: if not detected in codeGenResult, check the actual written files\n // This handles edge cases where the code might have been modified or generated differently\n if (!hasSecrets) {\n const testsDir = path.join(outputDir, 'tests');\n if (fs.existsSync(testsDir)) {\n const specFiles = fs.readdirSync(testsDir).filter(f => f.endsWith('.spec.ts'));\n for (const specFile of specFiles) {\n const filePath = path.join(testsDir, specFile);\n const content = fs.readFileSync(filePath, 'utf-8');\n if (content.includes(\"from 'dotenv'\") ||\n content.includes('from \"dotenv\"') ||\n content.includes(\"import { config } from 'dotenv'\") ||\n content.includes('import { config } from \"dotenv\"')) {\n hasSecrets = true;\n break;\n }\n }\n }\n }\n\n // Type guard: check for projectId to distinguish ProjectCodeGenResult from TestSuiteCodeGenResult\n const sanitizedName = 'projectId' in codeGenResult && 'projectName' in codeGenResult\n ? slugify((codeGenResult as ProjectCodeGenResult).projectName)\n : slugify((codeGenResult as TestSuiteCodeGenResult).testSuiteName);\n\n const packageJsonContent = generatePackageJson({\n name: sanitizedName,\n hasSecrets: hasSecrets,\n testScript: 'npx playwright test'\n });\n\n const filePath = path.join(outputDir, 'package.json');\n fs.writeFileSync(filePath, packageJsonContent, 'utf-8');\n console.log(`✅ Generated package.json: ${filePath}`);\n }\n\n /**\n * Generate playwright.config.ts file\n */\n static async generatePlaywrightConfig(outputDir: string, includeReporter: boolean = true, runId?: number): Promise<void> {\n const configContent = generatePlaywrightConfig(includeReporter, runId);\n\n const filePath = path.join(outputDir, 'playwright.config.ts');\n fs.writeFileSync(filePath, configContent, 'utf-8');\n console.log(`✅ Generated playwright.config.ts: ${filePath}`);\n }\n\n /**\n * Generate Probo custom Playwright reporter (for live step/test events)\n */\n static async generateProboReporter(outputDir: string): Promise<void> {\n const reporterContent = generateProboReporter();\n const filePath = path.join(outputDir, 'probo-reporter.ts');\n fs.writeFileSync(filePath, reporterContent, 'utf-8');\n console.log(`✅ Generated probo-reporter.ts: ${filePath}`);\n }\n\n /**\n * Run a test suite\n * Generates files, installs dependencies, and executes tests\n */\n static async runTestSuite(\n testSuiteId: number,\n apiToken: string,\n apiUrl: string,\n testSuiteName?: string,\n runId?: number,\n options: TestSuiteRunOptions = {}\n ): Promise<TestSuiteRunResult> {\n const {\n outputDir,\n includeReporter = true,\n playwrightArgs = [],\n skipRunCreation = false,\n onStatusUpdate,\n onStdout,\n onStderr,\n onReporterEvent,\n } = options;\n\n const testSuiteDir = outputDir || getDefaultTestSuiteDir(testSuiteId, testSuiteName);\n let currentRunId = runId;\n\n try {\n // Create run record if not provided and not skipping run creation\n if (!currentRunId && !skipRunCreation) {\n try {\n const createResponse = await fetch(`${apiUrl}/test-suites/${testSuiteId}/runs/`, {\n method: 'POST',\n headers: {\n 'Authorization': `Token ${apiToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (createResponse.ok) {\n const runData = await createResponse.json();\n currentRunId = runData.id;\n console.log(`✅ Created test suite run: ${currentRunId}`);\n } else {\n console.warn('⚠️ Failed to create run record, continuing without tracking');\n }\n } catch (error) {\n console.warn('⚠️ Failed to create run record:', error);\n }\n }\n\n // Generate all files (with runId if available for run-specific report directories)\n console.log(`📝 Generating test suite files for test suite ${testSuiteId}...`);\n await this.generateTestSuiteFiles(testSuiteId, apiToken, apiUrl, testSuiteDir, testSuiteName, includeReporter, currentRunId);\n\n // Count total tests\n const testsTotal = countTotalTests(testSuiteDir);\n if (currentRunId && testsTotal > 0) {\n await updateRunStatus(currentRunId, testSuiteId, { tests_total: testsTotal }, apiToken, apiUrl);\n if (onStatusUpdate) {\n await onStatusUpdate({ tests_total: testsTotal });\n }\n }\n\n // Install dependencies\n console.log(`📦 Installing dependencies in ${testSuiteDir}...`);\n try {\n const npmExecutable = findNpmExecutable();\n const { stdout: installStdout, stderr: installStderr } = await execAsync(\n `${npmExecutable} install`,\n { cwd: testSuiteDir, timeout: 300000 } // 5 minute timeout for install\n );\n console.log('✅ Dependencies installed successfully');\n if (installStdout) console.log(installStdout);\n if (installStderr) console.warn(installStderr);\n } catch (installError: any) {\n console.error('❌ Failed to install dependencies:', installError);\n const errorMsg = `Failed to install dependencies: ${installError.message}`;\n if (currentRunId) {\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n status: 'error',\n exit_code: installError.code || 1,\n error_message: errorMsg,\n stderr: installError.stderr || installError.message || '',\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n status: 'error',\n exit_code: installError.code || 1,\n error_message: errorMsg,\n stderr: installError.stderr || installError.message || '',\n });\n }\n }\n return {\n success: false,\n exitCode: installError.code || 1,\n stdout: installError.stdout || '',\n stderr: installError.stderr || installError.message || '',\n error: errorMsg,\n runId: currentRunId,\n };\n }\n\n // Install Playwright Chromium browser (required for test execution)\n console.log(`🌐 Installing Playwright Chromium browser...`);\n try {\n const npxExecutable = findNpxExecutable();\n const { stdout: browserStdout, stderr: browserStderr } = await execAsync(\n `${npxExecutable} playwright install chromium`,\n { cwd: testSuiteDir, timeout: 300000 } // 5 minute timeout for browser install\n );\n console.log('✅ Playwright Chromium browser installed successfully');\n if (browserStdout) console.log(browserStdout);\n if (browserStderr) console.warn(browserStderr);\n } catch (browserError: any) {\n console.warn('⚠️ Failed to install Playwright browsers:', browserError);\n // Don't fail the entire run if browser install fails - Playwright might handle it gracefully\n // or the error will be caught when trying to run tests\n }\n\n // Run Playwright tests with streaming output\n console.log(`🚀 Running Playwright tests in ${testSuiteDir}...`);\n if (playwrightArgs.length > 0) {\n console.log(`🧪 Playwright extra args: ${playwrightArgs.join(' ')}`);\n }\n\n return new Promise<TestSuiteRunResult>(async (resolve) => {\n let stdout = '';\n let stderr = '';\n let hasResolved = false;\n let lastStatsUpdate = 0;\n let stdoutLineBuffer = '';\n const PROBO_REPORTER_PREFIX = '__PROBO_REPORTER_EVENT__';\n const reporterStats: TestStatistics = { passed: 0, failed: 0, skipped: 0 };\n let lastReporterStatsUpdate = 0;\n const REPORTER_STATS_UPDATE_INTERVAL = 1500; // throttle API updates from reporter events\n const STATS_UPDATE_INTERVAL = 10000; // Update stats every 10 seconds\n const STEPS_UPDATE_INTERVAL = 2000; // Update steps every 2 seconds\n let lastStepsUpdate = 0;\n const collectedSteps: Array<{\n id: number;\n title: string;\n depth: number;\n status: 'running' | 'passed' | 'failed';\n error?: string | null;\n }> = [];\n\n // Use spawn for streaming output\n const npxExecutable = findNpxExecutable();\n const testProcess = spawn(npxExecutable, ['playwright', 'test', ...playwrightArgs], {\n cwd: testSuiteDir,\n shell: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n env: {\n ...process.env,\n PROBO_API_KEY: apiToken,\n PROBO_API_ENDPOINT: apiUrl,\n },\n });\n\n // Stream stdout line by line\n testProcess.stdout?.on('data', async (data: Buffer) => {\n const chunk = data.toString();\n stdoutLineBuffer += chunk;\n\n // Process complete lines so we can intercept reporter events without polluting logs.\n const parts = stdoutLineBuffer.split(/\\n/);\n stdoutLineBuffer = parts.pop() ?? '';\n\n let forwarded = '';\n\n for (const rawLine of parts) {\n const line = rawLine.endsWith('\\r') ? rawLine.slice(0, -1) : rawLine;\n if (line.startsWith(PROBO_REPORTER_PREFIX)) {\n const jsonPart = line.slice(PROBO_REPORTER_PREFIX.length);\n try {\n const reporterEvent = JSON.parse(jsonPart);\n\n // Call reporter event callback if provided\n if (onReporterEvent) {\n await onReporterEvent(reporterEvent);\n }\n\n // Collect steps from reporter events\n if (reporterEvent?.eventType === 'stepBegin') {\n const step = reporterEvent?.step;\n const id = typeof step?.id === 'number' ? step.id : null;\n const title = typeof step?.title === 'string' ? step.title : null;\n const depth = typeof step?.depth === 'number' ? step.depth : 0;\n if (id && title) {\n // Check if step already exists (update) or add new\n const existingIndex = collectedSteps.findIndex(s => s.id === id);\n if (existingIndex === -1) {\n collectedSteps.push({ id, title, depth, status: 'running' });\n }\n }\n }\n\n if (reporterEvent?.eventType === 'stepEnd') {\n const step = reporterEvent?.step;\n const id = typeof step?.id === 'number' ? step.id : null;\n if (id) {\n const error = typeof step?.error === 'string' ? step.error : null;\n const existingIndex = collectedSteps.findIndex(s => s.id === id);\n if (existingIndex !== -1) {\n // Update existing step with final status\n collectedSteps[existingIndex] = {\n ...collectedSteps[existingIndex],\n status: error ? 'failed' : 'passed',\n error: error || null,\n };\n }\n // If step doesn't exist, ignore (stepBegin should have been called first)\n }\n }\n\n // Save steps periodically\n if (currentRunId) {\n const now = Date.now();\n if (now - lastStepsUpdate > STEPS_UPDATE_INTERVAL) {\n lastStepsUpdate = now;\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n { steps: [...collectedSteps] },\n apiToken,\n apiUrl\n );\n }\n }\n\n // Keep a more reliable running tally than parsing stdout.\n if (currentRunId && reporterEvent?.eventType === 'testEnd' && reporterEvent?.result?.status) {\n const status = reporterEvent.result.status as string;\n if (status === 'passed') reporterStats.passed += 1;\n else if (status === 'failed' || status === 'timedout' || status === 'interrupted') reporterStats.failed += 1;\n else if (status === 'skipped') reporterStats.skipped += 1;\n\n const now = Date.now();\n if (now - lastReporterStatsUpdate > REPORTER_STATS_UPDATE_INTERVAL) {\n lastReporterStatsUpdate = now;\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n tests_passed: reporterStats.passed,\n tests_failed: reporterStats.failed,\n tests_skipped: reporterStats.skipped,\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n tests_passed: reporterStats.passed,\n tests_failed: reporterStats.failed,\n tests_skipped: reporterStats.skipped,\n });\n }\n }\n }\n } catch {\n // If parsing fails, ignore and don't forward to logs.\n }\n continue;\n }\n\n forwarded += rawLine + '\\n';\n }\n\n if (forwarded) {\n stdout += forwarded;\n // Call stdout callback if provided\n if (onStdout) {\n await onStdout(forwarded);\n }\n }\n\n // Parse and update statistics periodically\n if (currentRunId) {\n const now = Date.now();\n // Only use stdout parsing as a fallback (in case reporter isn't loaded).\n if (now - lastStatsUpdate > STATS_UPDATE_INTERVAL && now - lastReporterStatsUpdate > REPORTER_STATS_UPDATE_INTERVAL) {\n lastStatsUpdate = now;\n const stats = parsePlaywrightStatistics(stdout);\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n tests_passed: stats.passed,\n tests_failed: stats.failed,\n tests_skipped: stats.skipped,\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n tests_passed: stats.passed,\n tests_failed: stats.failed,\n tests_skipped: stats.skipped,\n });\n }\n }\n }\n });\n\n // Stream stderr line by line\n testProcess.stderr?.on('data', async (data: Buffer) => {\n const chunk = data.toString();\n stderr += chunk;\n // Call stderr callback if provided\n if (onStderr) {\n await onStderr(chunk);\n }\n });\n\n // Handle process completion\n testProcess.on('close', async (code) => {\n if (hasResolved) return;\n hasResolved = true;\n\n // Flush any remaining buffered stdout (may be a partial last line)\n if (stdoutLineBuffer) {\n const remaining = stdoutLineBuffer;\n stdoutLineBuffer = '';\n if (remaining.startsWith(PROBO_REPORTER_PREFIX)) {\n try {\n const reporterEvent = JSON.parse(remaining.slice(PROBO_REPORTER_PREFIX.length));\n if (onReporterEvent) {\n await onReporterEvent(reporterEvent);\n }\n if (currentRunId && reporterEvent?.eventType === 'testEnd' && reporterEvent?.result?.status) {\n const status = reporterEvent.result.status as string;\n if (status === 'passed') reporterStats.passed += 1;\n else if (status === 'failed' || status === 'timedout' || status === 'interrupted') reporterStats.failed += 1;\n else if (status === 'skipped') reporterStats.skipped += 1;\n }\n } catch {\n // ignore\n }\n } else {\n stdout += remaining;\n if (onStdout) {\n await onStdout(remaining);\n }\n }\n }\n\n const exitCode = code ?? 1;\n const success = exitCode === 0;\n // A test failure is when tests actually ran but some failed (exit code 1 with test results)\n // An execution error is when tests couldn't run (exit code 1 without test results, or with stderr errors)\n const hasTestResults = reporterStats.passed + reporterStats.failed + reporterStats.skipped > 0;\n const isTestFailure = exitCode === 1 && hasTestResults;\n const isExecutionError = exitCode !== 0 && !isTestFailure;\n\n console.log(success ? '✅ Tests completed successfully' : (isTestFailure ? '⚠️ Tests completed with failures' : '❌ Test execution failed'));\n\n // Parse final statistics from metadata/stdout as fallback\n let parsedStats: TestStatistics | null = null;\n if (fs.existsSync(path.join(testSuiteDir, 'playwright-report'))) {\n parsedStats = parseStatisticsFromMetadata(testSuiteDir);\n }\n if (!parsedStats) {\n parsedStats = parsePlaywrightStatistics(stdout);\n }\n\n // Use reporterStats as source of truth (tracked from real-time events)\n // Fall back to parsed stats only if reporterStats is empty\n const totalFromReporter = reporterStats.passed + reporterStats.failed + reporterStats.skipped;\n const finalStats = totalFromReporter > 0 ? reporterStats : (parsedStats || { passed: 0, failed: 0, skipped: 0 });\n\n // Build error message from stderr or stdout if it's an execution error\n let errorMessage: string | undefined = undefined;\n if (isExecutionError) {\n // Check both stderr and stdout for error messages (errors can appear in either)\n const stderrLines = stderr.trim().split('\\n').filter(line => line.trim().length > 0);\n const stdoutLines = stdout.trim().split('\\n').filter(line => line.trim().length > 0);\n const allErrorLines = [...stderrLines, ...stdoutLines].filter(line => \n line.includes('Error:') || \n line.includes('Missing') || \n line.includes('No tests found') ||\n line.includes('failed') ||\n line.includes('Failed')\n );\n \n if (allErrorLines.length > 0) {\n // Use the last error line found\n errorMessage = allErrorLines[allErrorLines.length - 1];\n } else if (stderrLines.length > 0) {\n // Fall back to last stderr line if no clear error pattern found\n errorMessage = stderrLines[stderrLines.length - 1];\n } else if (stdoutLines.length > 0 && stdoutLines.some(line => line.toLowerCase().includes('error'))) {\n // Check stdout for error messages\n const errorLines = stdoutLines.filter(line => line.toLowerCase().includes('error'));\n errorMessage = errorLines[errorLines.length - 1];\n } else {\n errorMessage = `Test execution failed with exit code ${exitCode}`;\n }\n }\n\n // Update run status with final steps\n if (currentRunId) {\n const finalStatus = success ? 'success' : 'error';\n // Ensure error message is set for execution errors\n const finalErrorMessage = isExecutionError ? (errorMessage || `Test execution failed with exit code ${exitCode}`) : errorMessage;\n \n console.log(`📊 [TestSuiteRunner] Updating run ${currentRunId} status: ${finalStatus}, exitCode: ${exitCode}, isExecutionError: ${isExecutionError}, errorMessage: ${finalErrorMessage || 'none'}`);\n \n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n status: finalStatus,\n exit_code: exitCode,\n stdout: stdout,\n stderr: stderr,\n steps: [...collectedSteps], // Save final steps state\n error_message: finalErrorMessage,\n tests_passed: finalStats.passed,\n tests_failed: finalStats.failed,\n tests_skipped: finalStats.skipped,\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n status: finalStatus,\n exit_code: exitCode,\n stdout: stdout,\n stderr: stderr,\n error_message: errorMessage,\n tests_passed: finalStats.passed,\n tests_failed: finalStats.failed,\n tests_skipped: finalStats.skipped,\n });\n }\n\n // Artifact uploads disabled - reports are now accessed locally via trace viewer\n // Upload artifacts functionality preserved but disabled\n // await this.uploadArtifacts(currentRunId, testSuiteId, testSuiteDir, apiToken, apiUrl);\n }\n\n // Ensure error message is set for execution errors even if extraction failed\n let finalError = errorMessage;\n if (isExecutionError && !finalError) {\n // Fallback: try to extract any error from stdout/stderr\n const allOutput = (stdout + '\\n' + stderr).trim();\n const errorMatch = allOutput.match(/Error:.*/);\n if (errorMatch) {\n finalError = errorMatch[0].split('\\n')[0]; // Take first line of error\n } else {\n finalError = `Test execution failed with exit code ${exitCode}`;\n }\n }\n\n resolve({\n success: success,\n exitCode: exitCode,\n stdout: stdout,\n stderr: stderr,\n // Set error message for execution errors (not test failures)\n error: finalError,\n runId: currentRunId,\n });\n });\n\n // Handle process errors\n testProcess.on('error', async (error: Error) => {\n if (hasResolved) return;\n hasResolved = true;\n\n const errorMessage = error.message || String(error);\n stderr += errorMessage;\n\n console.error('❌ Test execution failed:', error);\n\n // Update run status\n if (currentRunId) {\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n status: 'error',\n exit_code: 1,\n error_message: `Test execution failed: ${errorMessage}`,\n stderr: stderr,\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n status: 'error',\n exit_code: 1,\n error_message: `Test execution failed: ${errorMessage}`,\n stderr: stderr,\n });\n }\n }\n\n resolve({\n success: false,\n exitCode: 1,\n stdout: stdout,\n stderr: stderr,\n error: `Test execution failed: ${errorMessage}`,\n runId: currentRunId,\n });\n });\n\n // Set timeout (1 hour)\n setTimeout(async () => {\n if (!hasResolved) {\n hasResolved = true;\n testProcess.kill();\n\n const errorMessage = 'Test execution timed out after 1 hour';\n stderr += errorMessage;\n\n // Update run status\n if (currentRunId) {\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n status: 'error',\n exit_code: 1,\n error_message: errorMessage,\n stderr: stderr,\n },\n apiToken,\n apiUrl\n );\n if (onStatusUpdate) {\n await onStatusUpdate({\n status: 'error',\n exit_code: 1,\n error_message: errorMessage,\n stderr: stderr,\n });\n }\n }\n\n resolve({\n success: false,\n exitCode: 1,\n stdout: stdout,\n stderr: stderr,\n error: errorMessage,\n runId: currentRunId,\n });\n }\n }, 3600000); // 1 hour timeout\n });\n } catch (error: any) {\n console.error('❌ Error running test suite:', error);\n const errorMsg = error.message || String(error);\n if (currentRunId) {\n await updateRunStatus(\n currentRunId,\n testSuiteId,\n {\n status: 'error',\n exit_code: 1,\n error_message: errorMsg,\n },\n apiToken,\n apiUrl\n ).catch(() => { }); // Ignore errors updating status\n if (onStatusUpdate) {\n try {\n const result = onStatusUpdate({\n status: 'error',\n exit_code: 1,\n error_message: errorMsg,\n });\n if (result && typeof result.then === 'function') {\n await result.catch(() => { });\n }\n } catch {\n // Ignore errors in status update callback\n }\n }\n }\n return {\n success: false,\n exitCode: 1,\n stdout: '',\n stderr: errorMsg,\n error: errorMsg,\n runId: currentRunId,\n };\n }\n }\n\n /**\n * Generate all files for a project (all scenarios)\n */\n static async generateProjectFiles(\n projectId: number,\n apiToken: string,\n apiUrl: string,\n outputDir?: string,\n projectName?: string,\n includeReporter: boolean = true\n ): Promise<void> {\n const projectDir = outputDir || getDefaultTestSuiteDir(projectId, projectName || `project-${projectId}`);\n\n // Generate code for all scenarios\n const codeGenResult = await ProboCodeGenerator.generateCodeForProject(\n projectId,\n apiToken,\n apiUrl\n );\n\n if (codeGenResult.scenarios.length === 0) {\n throw new Error(`No scenarios found in project \"${codeGenResult.projectName}\" (ID: ${projectId}). Cannot generate test files.`);\n }\n\n // Delete everything in the project directory except node_modules\n if (fs.existsSync(projectDir)) {\n try {\n const nodeModulesPath = path.join(projectDir, 'node_modules');\n const hasNodeModules = fs.existsSync(nodeModulesPath);\n\n // Temporarily move node_modules out of the way if it exists\n let tempNodeModulesPath: string | null = null;\n if (hasNodeModules) {\n tempNodeModulesPath = path.join(projectDir, '..', `node_modules.temp.${projectId}`);\n // Remove temp directory if it exists from a previous failed run\n if (fs.existsSync(tempNodeModulesPath)) {\n fs.rmSync(tempNodeModulesPath, { recursive: true, force: true });\n }\n fs.renameSync(nodeModulesPath, tempNodeModulesPath);\n console.log(`📦 Preserved node_modules temporarily`);\n }\n\n // Delete everything in the directory\n const entries = fs.readdirSync(projectDir, { withFileTypes: true });\n for (const entry of entries) {\n const entryPath = path.join(projectDir, entry.name);\n try {\n if (entry.isDirectory()) {\n fs.rmSync(entryPath, { recursive: true, force: true });\n } else {\n fs.unlinkSync(entryPath);\n }\n } catch (error) {\n console.warn(`⚠️ Failed to delete ${entry.name}:`, error);\n }\n }\n console.log(`🗑️ Cleaned project directory (preserved node_modules)`);\n\n // Move node_modules back\n if (hasNodeModules && tempNodeModulesPath) {\n fs.renameSync(tempNodeModulesPath, nodeModulesPath);\n console.log(`📦 Restored node_modules`);\n }\n } catch (error) {\n console.warn(`⚠️ Failed to clean project directory ${projectDir}:`, error);\n // Continue anyway - we'll overwrite files as needed\n }\n }\n\n // Ensure directories exist (will recreate after deletion)\n ensureDirectoryExists(projectDir);\n const testsDir = path.join(projectDir, 'tests');\n ensureDirectoryExists(testsDir);\n\n // Save each scenario's code to a .spec.ts file\n for (const scenario of codeGenResult.scenarios) {\n const fileName = `${slugify(scenario.scenarioName)}.spec.ts`;\n const filePath = path.join(testsDir, fileName);\n fs.writeFileSync(filePath, scenario.code, 'utf-8');\n console.log(`✅ Generated test file: ${filePath}`);\n }\n\n // Generate package.json\n await this.generatePackageJson(projectDir, codeGenResult);\n\n // Generate playwright.config.ts (no runId for project runs)\n await this.generatePlaywrightConfig(projectDir, includeReporter, undefined);\n\n // Generate custom reporter file for live progress streaming (only if requested)\n if (includeReporter) {\n await this.generateProboReporter(projectDir);\n }\n }\n\n /**\n * Run all scenarios in a project\n * Generates files, installs dependencies, and executes tests\n * Does not create run records in the database (CLI mode)\n */\n static async runProjectScenarios(\n projectId: number,\n apiToken: string,\n apiUrl: string,\n projectName?: string,\n options: TestSuiteRunOptions = {}\n ): Promise<TestSuiteRunResult> {\n const {\n outputDir,\n includeReporter = false, // CLI mode - no custom reporter\n playwrightArgs = [],\n onStdout,\n onStderr,\n } = options;\n\n const projectDir = outputDir || getDefaultTestSuiteDir(projectId, projectName || `project-${projectId}`);\n\n try {\n // Generate all files\n console.log(`📝 Generating test files for project ${projectId}...`);\n await this.generateProjectFiles(projectId, apiToken, apiUrl, projectDir, projectName, includeReporter);\n\n // Count total tests\n const testsTotal = countTotalTests(projectDir);\n if (testsTotal === 0) {\n throw new Error(`No test files generated for project ${projectId}`);\n }\n\n // Install dependencies\n console.log(`📦 Installing dependencies in ${projectDir}...`);\n try {\n const npmExecutable = findNpmExecutable();\n const { stdout: installStdout, stderr: installStderr } = await execAsync(\n `${npmExecutable} install`,\n { cwd: projectDir, timeout: 300000 } // 5 minute timeout for install\n );\n console.log('✅ Dependencies installed successfully');\n if (installStdout) console.log(installStdout);\n if (installStderr) console.warn(installStderr);\n } catch (installError: any) {\n console.error('❌ Failed to install dependencies:', installError);\n const errorMsg = `Failed to install dependencies: ${installError.message}`;\n return {\n success: false,\n exitCode: installError.code || 1,\n stdout: installError.stdout || '',\n stderr: installError.stderr || installError.message || '',\n error: errorMsg,\n };\n }\n\n // Install Playwright Chromium browser (required for test execution)\n console.log(`🌐 Installing Playwright Chromium browser...`);\n try {\n const npxExecutable = findNpxExecutable();\n const { stdout: browserStdout, stderr: browserStderr } = await execAsync(\n `${npxExecutable} playwright install chromium`,\n { cwd: projectDir, timeout: 300000 } // 5 minute timeout for browser install\n );\n console.log('✅ Playwright Chromium browser installed successfully');\n if (browserStdout) console.log(browserStdout);\n if (browserStderr) console.warn(browserStderr);\n } catch (browserError: any) {\n console.warn('⚠️ Failed to install Playwright browsers:', browserError);\n // Don't fail the entire run if browser install fails - Playwright might handle it gracefully\n // or the error will be caught when trying to run tests\n }\n\n // Run Playwright tests with streaming output\n console.log(`🚀 Running Playwright tests in ${projectDir}...`);\n if (playwrightArgs.length > 0) {\n console.log(`🧪 Playwright extra args: ${playwrightArgs.join(' ')}`);\n }\n\n return new Promise<TestSuiteRunResult>(async (resolve) => {\n let stdout = '';\n let stderr = '';\n let hasResolved = false;\n let stdoutLineBuffer = '';\n\n // Use spawn for streaming output\n const npxExecutable = findNpxExecutable();\n const testProcess = spawn(npxExecutable, ['playwright', 'test', ...playwrightArgs], {\n cwd: projectDir,\n shell: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n env: {\n ...process.env,\n PROBO_API_KEY: apiToken,\n PROBO_API_ENDPOINT: apiUrl,\n },\n });\n\n // Stream stdout line by line\n testProcess.stdout?.on('data', async (data: Buffer) => {\n const chunk = data.toString();\n stdoutLineBuffer += chunk;\n\n // Process complete lines\n const parts = stdoutLineBuffer.split(/\\n/);\n stdoutLineBuffer = parts.pop() ?? '';\n\n for (const rawLine of parts) {\n const line = rawLine.endsWith('\\r') ? rawLine.slice(0, -1) : rawLine;\n stdout += rawLine + '\\n';\n // Call stdout callback if provided\n if (onStdout) {\n await onStdout(rawLine + '\\n');\n }\n }\n });\n\n // Stream stderr line by line\n testProcess.stderr?.on('data', async (data: Buffer) => {\n const chunk = data.toString();\n stderr += chunk;\n // Call stderr callback if provided\n if (onStderr) {\n await onStderr(chunk);\n }\n });\n\n // Handle process completion\n testProcess.on('close', async (code) => {\n if (hasResolved) return;\n hasResolved = true;\n\n // Flush any remaining buffered stdout\n if (stdoutLineBuffer) {\n stdout += stdoutLineBuffer;\n if (onStdout) {\n await onStdout(stdoutLineBuffer);\n }\n }\n\n const exitCode = code ?? 1;\n const success = exitCode === 0;\n // A test failure is when tests actually ran but some failed (exit code 1 with test results)\n // An execution error is when tests couldn't run (exit code 1 without test results)\n const isTestFailure = exitCode === 1 && stdout.length > 0 && stdout.includes('failed') || stdout.includes('passed');\n const isExecutionError = exitCode !== 0 && !isTestFailure;\n\n console.log(success ? '✅ Tests completed successfully' : (isTestFailure ? '⚠️ Tests completed with failures' : '❌ Test execution failed'));\n\n // Build error message from stderr or stdout if it's an execution error\n let errorMessage: string | undefined = undefined;\n if (isExecutionError) {\n // Check both stderr and stdout for error messages (errors can appear in either)\n const stderrLines = stderr.trim().split('\\n').filter(line => line.trim().length > 0);\n const stdoutLines = stdout.trim().split('\\n').filter(line => line.trim().length > 0);\n const allErrorLines = [...stderrLines, ...stdoutLines].filter(line => \n line.includes('Error:') || \n line.includes('Missing') || \n line.includes('No tests found') ||\n line.includes('failed') ||\n line.includes('Failed')\n );\n \n if (allErrorLines.length > 0) {\n // Use the last error line found\n errorMessage = allErrorLines[allErrorLines.length - 1];\n } else if (stderrLines.length > 0) {\n // Fall back to last stderr line if no clear error pattern found\n errorMessage = stderrLines[stderrLines.length - 1];\n } else if (stdoutLines.length > 0 && stdoutLines.some(line => line.toLowerCase().includes('error'))) {\n // Check stdout for error messages\n const errorLines = stdoutLines.filter(line => line.toLowerCase().includes('error'));\n errorMessage = errorLines[errorLines.length - 1];\n } else {\n errorMessage = `Test execution failed with exit code ${exitCode}`;\n }\n }\n\n resolve({\n success: success,\n exitCode: exitCode,\n stdout: stdout,\n stderr: stderr,\n error: errorMessage,\n });\n });\n\n // Handle process errors\n testProcess.on('error', async (error: Error) => {\n if (hasResolved) return;\n hasResolved = true;\n\n const errorMessage = error.message || String(error);\n stderr += errorMessage;\n\n console.error('❌ Test execution failed:', error);\n\n resolve({\n success: false,\n exitCode: 1,\n stdout: stdout,\n stderr: stderr,\n error: `Test execution failed: ${errorMessage}`,\n });\n });\n\n // Set timeout (1 hour)\n setTimeout(async () => {\n if (!hasResolved) {\n hasResolved = true;\n testProcess.kill();\n\n const errorMessage = 'Test execution timed out after 1 hour';\n stderr += errorMessage;\n\n resolve({\n success: false,\n exitCode: 1,\n stdout: stdout,\n stderr: stderr,\n error: errorMessage,\n });\n }\n }, 3600000); // 1 hour timeout\n });\n } catch (error: any) {\n console.error('❌ Error running project scenarios:', error);\n const errorMsg = error.message || String(error);\n return {\n success: false,\n exitCode: 1,\n stdout: '',\n stderr: errorMsg,\n error: errorMsg,\n };\n }\n }\n\n /**\n * Upload artifacts for a test suite run\n * \n * NOTE: This method is preserved for potential future use but is currently disabled.\n * Artifacts are now accessed locally via the trace viewer instead of being uploaded to the backend.\n */\n static async uploadArtifacts(\n runId: number,\n testSuiteId: number,\n testSuiteDir: string,\n apiToken: string,\n apiUrl: string\n ): Promise<void> {\n // Artifact uploads disabled - reports are now accessed locally via trace viewer\n // Method signature preserved for potential future re-enablement\n return;\n }\n}\n","import type { Page } from 'playwright';\nimport type { \n ElementInfo,\n ElementTag,\n InitialPageState,\n PlaywrightTimeoutConfig,\n ServerResponse, \n FindCandidateInput,\n StepMinimal,\n SmartSelector,\n} from '@probolabs/probo-shared';\nimport { ApiClient, \n apiLogger,\n Instruction, \n FindStepByPromptResult, \n PlaywrightAction,\n ProboLogger,\n ProboLogLevel,\n AIModel,\n DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n setupBrowserConsoleLogs,\n resolveElementTag\n } from '@probolabs/probo-shared';\nimport { interpolateWithParams } from './interpolation.js';\nimport {\n waitForMutationsToSettle,\n findClosestVisibleElement, \n} from './actions';\nimport { Highlighter, ElementTagType } from './highlight';\nimport pRetry, { FailedAttemptError } from 'p-retry';\nimport { proboLogger } from './probo-logger';\nimport { ProboPlaywright } from './replay-utils';\nimport { NavTracker } from './nav-tracker';\n\n\n/**\n * Configuration options for Probo client\n */\ninterface ProboConfig {\n scenarioName: string;\n token?: string;\n apiUrl?: string;\n enableSmartSelectors?: boolean;\n enableConsoleLogs?: boolean;\n logToConsole?: boolean;\n logToFile?: boolean;\n debugLevel?: ProboLogLevel;\n aiModel?: AIModel;\n timeoutConfig?: Partial<PlaywrightTimeoutConfig>;\n}\n\nexport interface RunStepOptions {\n aiModel?: AIModel;\n timeoutConfig?: PlaywrightTimeoutConfig;\n stepId?: number;\n}\n\nexport interface AskAIOptions {\n stepId?: number;\n createStep?: boolean;\n}\n\nconst retryOptions = {\n retries: 3,\n minTimeout: 1000,\n onFailedAttempt: (error: FailedAttemptError) => {\n proboLogger.warn(\n `Page operation failed, attempt ${error.attemptNumber} of ${\n error.retriesLeft +\n error.attemptNumber\n }...`\n );\n }\n};\n\nexport { AIModel };\nexport class Probo {\n private highlighter: Highlighter;\n private apiClient: ApiClient;\n private readonly debugLevel: ProboLogLevel;\n private readonly enableConsoleLogs: boolean;\n private readonly scenarioName: string;\n private readonly aiModel: AIModel;\n private readonly enableSmartSelectors: boolean;\n private readonly timeoutConfig: PlaywrightTimeoutConfig;\n private params: Record<string, any> = {};\n \n constructor({\n scenarioName,\n token = '',\n apiUrl = '',\n enableConsoleLogs = false,\n enableSmartSelectors = false,\n logToConsole = true,\n logToFile = false,\n debugLevel = ProboLogLevel.INFO,\n aiModel = AIModel.AZURE_GPT4_MINI,\n timeoutConfig = {}\n }: ProboConfig) {\n // Configure logger transports and level\n // configureLogger({ logToConsole, logToFile, level: debugLevel });\n proboLogger.setLogLevel(debugLevel);\n\n const apiKey = token || process.env.PROBO_API_KEY;\n if (!apiKey) {\n proboLogger.error(\n \"API key wasn't provided. Pass 'token' or set PROBO_API_KEY\"\n );\n throw new Error('Probo API key not provided');\n }\n\n const apiEndPoint = apiUrl || process.env.PROBO_API_ENDPOINT;\n if (!apiEndPoint) {\n proboLogger.error(\n \"API endpoint wasn't provided. Pass 'apiUrl' or set PROBO_API_ENDPOINT\"\n );\n throw new Error('Probo API endpoint not provided');\n }\n\n this.highlighter = new Highlighter(enableSmartSelectors, enableConsoleLogs);\n this.apiClient = new ApiClient(apiEndPoint, apiKey);\n this.debugLevel = debugLevel;\n this.enableConsoleLogs = enableConsoleLogs;\n this.scenarioName = scenarioName;\n this.aiModel = aiModel;\n this.enableSmartSelectors = enableSmartSelectors;\n this.timeoutConfig = { ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, ...timeoutConfig };\n // set the log level for the api client\n apiLogger.setLogLevel(this.debugLevel);\n\n proboLogger.info(\n `Initializing: scenario=${scenarioName}, apiUrl=${apiEndPoint}, ` +\n `enableConsoleLogs=${enableConsoleLogs}, debugLevel=${debugLevel}, aiModel=${aiModel}`\n );\n }\n\n /**\n * Sets the parameters object for template literal interpolation\n * Stores a reference to the params object so mutations are automatically reflected\n * @param params The parameters object containing values to use for interpolation\n */\n public setParams(params: Record<string, any>): void {\n this.params = params;\n }\n\n /**\n * Interpolates a string using the current params and optional additional context\n * @param str The string to interpolate (may contain ${variable} syntax)\n * @param additionalContext Optional additional context to merge with params\n * @returns The interpolated string\n */\n private interpolate(str: string, additionalContext: Record<string, any> = {}): string {\n return interpolateWithParams(str, this.params, additionalContext);\n }\n\n public async askAI(page: Page, question: string, options: AskAIOptions, assertAnswer: string = ''): Promise<any> {\n const response = await this.askAIHelper(page, question, options, assertAnswer);\n if (response?.result?.error) {\n throw new Error(response.result.error);\n }\n return response?.result?.answer;\n }\n\n public async runStep(\n page: Page, \n stepPrompt: string, \n argument: string|boolean|null = null,\n options: RunStepOptions = { aiModel: this.aiModel, timeoutConfig: this.timeoutConfig }\n ): Promise<string|boolean|void> {\n // Interpolate argument if it's a string with template literals\n argument = this.interpolate(argument as string);\n const runStepStartTime = Date.now();\n //trace message to help with debug\n proboLogger.info(`runStep(${stepPrompt}, ${argument})`);\n try {\n // Determine which AI model to use for this step\n const aiModelToUse = options.aiModel !== undefined ? options.aiModel : this.aiModel;\n let stepId = options.stepId;\n if (!stepId) {\n const stepByPrompt = await this.apiClient.findStepByPrompt(stepPrompt, this.scenarioName, page.url())\n if (!stepByPrompt?.step) {\n // Create new step before continuing\n stepId = Number(await this.apiClient.createStep({\n scenarioName: this.scenarioName,\n stepPrompt: stepPrompt,\n initial_screenshot_url: '',\n initial_html_content: '',\n argument: argument as string,\n use_cache: false,\n url: page.url(),\n }))\n } else {\n stepId = Number(stepByPrompt.step.id)\n }\n }\n\n proboLogger.log(`runStep: ${'#'+stepId+' - '}${stepPrompt}, aiModel: ${aiModelToUse}, pageUrl: ${page.url()}`);\n \n // Setup page monitoring and wait for navigation to stabilize\n this.setupConsoleLogs(page);\n proboLogger.debug(`🔍 [WaitForNavigationToStabilize] timeoutConfig values: quietTimeout=${this.timeoutConfig.waitForStabilityQuietTimeout}, initialDelay=${this.timeoutConfig.waitForStabilityInitialDelay}, globalTimeout=${this.timeoutConfig.waitForStabilityGlobalTimeout}, verbose=${this.timeoutConfig.waitForStabilityVerbose}`);\n const navTracker = await NavTracker.getInstance(page,{ \n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout, \n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n proboLogger.debug(`🔍 Calling waitForNavigationToStabilize: ${this.timeoutConfig.waitForStabilityQuietTimeout}ms, waitForStabilityInitialDelay: ${this.timeoutConfig.waitForStabilityInitialDelay}ms, waitForStabilityGlobalTimeout: ${this.timeoutConfig.waitForStabilityGlobalTimeout}ms, waitForStabilityVerbose: ${this.timeoutConfig.waitForStabilityVerbose}`);\n await navTracker.waitForNavigationToStabilize();\n\n // STEP 1: Check for cached step (if caching is enabled)\n let [isCachedStep, returnValue] = await this._handleCachedStep(page, stepId, stepPrompt, argument);\n if (isCachedStep) {\n const totalRunStepTime = Date.now() - runStepStartTime;\n proboLogger.debug(`⏱️ runStep total time: ${totalRunStepTime}ms (cached step)`);\n proboLogger.debug('Successfully executed cached step!');\n return returnValue;\n }\n\n // STEP 2: Create or update step in backend and capture initial page state\n proboLogger.log(`Execution failed or prompt changed, starting self-healing process...`);\n proboLogger.debug(`Taking initial screenshot from the page ${page.url()}`);\n const { base_screenshot_url, base_html_content } = await this.getInitialPageState(page);\n await this.apiClient.patchStep(stepId, {\n initial_screenshot: base_screenshot_url,\n pre_html_content: base_html_content !== '' ? base_html_content : undefined,\n prompt: stepPrompt\n });\n\n // STEP 4: Self-Healing Process - Get action from database or from AI\n const screenshotReasoningStartTime = Date.now();\n const action : PlaywrightAction = await this.apiClient.screenshotReasoning(stepId, stepPrompt, this.aiModel);\n const screenshotReasoningTime = Date.now() - screenshotReasoningStartTime;\n proboLogger.debug(`⏱️ screenshotReasoning took ${screenshotReasoningTime}ms`);\n\n // STEP 5: Find and highlight candidate elements based on reasoning\n const elementTags = resolveElementTag(action);\n const { candidates_screenshot_url, candidate_elements } = await this.findAndHighlightCandidateElements(page, elementTags);\n proboLogger.debug(`Found ${candidate_elements.length} candidate elements`);\n\n // STEP 6: Clean up highlighting\n await this.unhighlightElements(page);\n\n // STEP 7: Select the best candidate element\n const findBestCandidateStartTime = Date.now();\n const index : number = await this.apiClient.findBestCandidateElement(\n stepId,\n candidates_screenshot_url, \n candidate_elements, \n this.aiModel\n );\n const findBestCandidateTime = Date.now() - findBestCandidateStartTime;\n proboLogger.debug(`⏱️ findBestCandidateElement took ${findBestCandidateTime}ms`);\n proboLogger.debug(`AI selected candidate element at index: ${index}`);\n \n // STEP 8: Find the actual element object from the candidates\n const actualElement = candidate_elements.find(element => element.index === index);\n \n if (!actualElement) {\n throw new Error(`No candidate element found with index ${index}. Available indices: ${candidate_elements.map(e => e.index).join(', ')}`);\n }\n\n proboLogger.debug(`Selected element: ${actualElement.css_selector} (index: ${actualElement.index})`);\n\n // STEP 9: Execute the interaction with the selected element\n const actionResult = await this._handlePerformAction(page, stepId, actualElement, action, argument); \n \n const totalRunStepTime = Date.now() - runStepStartTime;\n proboLogger.debug(`⏱️ runStep total time: ${totalRunStepTime}ms (screenshotReasoning: ${screenshotReasoningTime}ms, findBestCandidateElement: ${findBestCandidateTime}ms)`);\n proboLogger.debug('Step execution completed successfully');\n return actionResult;\n\n } catch (error: any) {\n proboLogger.error(`Error in runStep: ${error.message}`);\n proboLogger.error(`Step prompt: \"${stepPrompt}\"`);\n proboLogger.error(`Page URL: ${page.url()}`);\n \n // Re-throw the error to maintain the existing error handling behavior\n throw error;\n }\n }\n \n private async _handleCachedStep(page: Page, stepId: number, stepPrompt: string, argument: string|boolean|null): Promise<[boolean, string|boolean|void]> {\n proboLogger.debug(`Checking if step exists in database: ${stepPrompt}`);\n const result: StepMinimal | null = await this.apiClient.findStepById(stepId)\n if (!result) {\n proboLogger.error(`Step not found in database`);\n throw Error(`Step #${stepId} not found in database`)\n } else if (result.action == '' || !result.action) {\n proboLogger.error(`Step action is missing`);\n throw Error(`Step #${stepId} action is missing`);\n }\n\n if(result.prompt !== stepPrompt) {\n proboLogger.debug(`Step prompt changed, skipping execution and going to start self-healing process...`);\n return [false, undefined];\n }\n\n const actionArgument = argument ?? result.argument;\n proboLogger.log(`Found existing step with ID: ${result.id} going to perform action: ${result.action} with value: ${actionArgument}`);\n \n try {\n // Create ProboPlaywright instance with the page\n const proboPlaywright = new ProboPlaywright({ \n enableSmartSelectors: this.enableSmartSelectors, \n debugLevel: this.debugLevel, \n timeoutConfig: this.timeoutConfig \n }, page);\n \n // Call runStep with the cached action\n const runStepResult = await proboPlaywright.runStep({\n iframeSelector: result.iframe_selector,\n elementSelector: result.element_css_selector,\n smartSelector: result.smart_selector,\n smartIFrameSelector: result.smart_iframe_selector,\n action: result.action as PlaywrightAction,\n argument: actionArgument as string,\n }); \n \n return [true, runStepResult];\n } catch (error: any) {\n return [false, undefined];\n }\n\n }\n\n private setupConsoleLogs(page: Page) {\n setupBrowserConsoleLogs(page, this.enableConsoleLogs, proboLogger);\n }\n\n public async getInitialPageState(page: Page): Promise<InitialPageState> {\n const baseScreenshot = await this.screenshot(page);\n proboLogger.debug(`🔍 baseScreenshot: ${baseScreenshot}`);\n const baseHtmlContent = '';\n return {\n base_screenshot_url: baseScreenshot,\n base_html_content: baseHtmlContent\n };\n \n }\n\n public async findAndHighlightCandidateElements(page: Page, elementTags: string[]): Promise<FindCandidateInput> {\n // 2. CANDIDATE ELEMENTS HANDLING: Find and cache candidates\n \n await this.highlighter.findAndCacheCandidateElements(page, elementTags as ElementTagType[]);\n proboLogger.debug(`🔍 after findAndCacheCandidateElements`);\n \n // 3. CANDIDATE ELEMENTS HANDLING: Highlight candidates and take screenshot\n await this.highlighter.highlightCachedElements(page, 'candidates');\n proboLogger.debug(`🔍 after highlightCachedElements candidates`);\n await page.waitForTimeout(200);\n const candidatesScreenshot = await this.screenshot(page);\n proboLogger.debug(`🔍 candidatesScreenshot: ${candidatesScreenshot}`);\n \n return {\n candidates_screenshot_url: candidatesScreenshot,\n candidate_elements: await this.highlighter.getCandidatesCached(page) ?? []\n };\n }\n\n\n \n \n public async highlightElements(page: Page, elementTags: [ElementTagType]) {\n return this.highlighter.highlightElements(page, elementTags);\n }\n\n public async unhighlightElements(page: Page) {\n return this.highlighter.unhighlightElements(page);\n }\n\n public async highlightElement(page: Page, element_css_selector: string, iframe_selector: string, smart_selector: SmartSelector|null, smart_iframe_selector: SmartSelector|null, element_index: number) {\n return this.highlighter.highlightElement(page, element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, element_index);\n }\n\n public async waitForMutationsToSettle(page: Page, timeout?: number, initTimeout?: number) {\n const mutationTimeout = timeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsTimeout;\n const mutationInitTimeout = initTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsInitTimeout;\n return waitForMutationsToSettle(page, mutationTimeout, mutationInitTimeout);\n }\n\n public async screenshot(page: Page) { \n proboLogger.debug(`taking screenshot of current page: ${page.url()}`);\n // await page.evaluate(() => document.fonts?.ready.catch(() => {}));\n \n const screenshot_bytes = await page.screenshot({ fullPage: true, animations: 'disabled', timeout: 10000 });\n // make an api call to upload the screenshot to cloud\n proboLogger.debug('uploading image data to cloud');\n const screenshot_url = await this.apiClient.uploadScreenshot(screenshot_bytes);\n return screenshot_url;\n \n }\n\n private async _handlePerformAction(page: Page, stepId: number, actualElement: ElementInfo, action: PlaywrightAction, argument: string|boolean|null) {\n const value = argument ?? '';\n const element_css_selector = actualElement.css_selector;\n const iframe_selector = actualElement.iframe_selector;\n const element_index = actualElement.index;\n const smart_selector = actualElement.smart_selector;\n const smart_iframe_selector = actualElement.smart_iframe_selector;\n proboLogger.debug('Handling perform action:', {action, element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, element_index});\n if(action !== PlaywrightAction.VISIT_URL) {\n await this.unhighlightElements(page);\n proboLogger.debug('Unhighlighted elements');\n await this.highlightElement(page, element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, element_index);\n proboLogger.debug('Highlighted element');\n }\n const pre_action_screenshot_url = await this.screenshot(page);\n const returnValue = await new ProboPlaywright({ \n enableSmartSelectors: this.enableSmartSelectors,\n debugLevel: this.debugLevel,\n timeoutConfig: this.timeoutConfig \n }, page).runStep({\n iframeSelector: iframe_selector,\n elementSelector: element_css_selector,\n smartSelector: smart_selector,\n smartIFrameSelector: smart_iframe_selector,\n action: action,\n argument: value as string,\n highlightTimeout: 0\n });\n\n await this.unhighlightElements(page);\n const post_action_screenshot_url = await this.screenshot(page);\n const post_html_content = '';\n \n await this.apiClient.patchStep(stepId, {\n pre_screenshot: pre_action_screenshot_url,\n post_screenshot: post_action_screenshot_url,\n post_html_content: post_html_content == '' ? null : post_html_content,\n });\n \n return returnValue;\n }\n\n public async askAIHelper(page: Page, question: string, options: AskAIOptions, assertAnswer: string = ''): Promise<ServerResponse> {\n // Set default value for createStep to true if not provided\n const createStep = options?.createStep !== undefined ? options.createStep : true;\n const stepId = options?.stepId;\n \n proboLogger.debug(`🔍 [askAI] Asking AI question: \"${question}\", scenarioName: ${this.scenarioName}, aiModel: ${this.aiModel}, createStep: ${createStep}`); \n try {\n // Get current page and capture screenshot\n const navTracker = await NavTracker.getInstance(page, {\n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout,\n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n await navTracker.waitForNavigationToStabilize();\n const screenshot = await this.screenshot(page);\n proboLogger.debug(`📸 [askAI] Screenshot captured: ${screenshot}`);\n \n \n proboLogger.debug(`📤 [askAI] Sending chat request to backend`);\n \n // Use ApiClient to send request to backend API \n const serverResponse = await this.apiClient.askAI(question, this.scenarioName, screenshot, this.aiModel);\n proboLogger.debug(`✅ [askAI] Chat response received successfully`);\n \n // Check assertion BEFORE any step update logic, so it always runs\n if (assertAnswer) {\n const actualAnswer = serverResponse?.result?.answer?.toString();\n const interpolatedAssertAnswer = this.interpolate(assertAnswer); \n if (actualAnswer !== interpolatedAssertAnswer) { \n proboLogger.error(`❌ [askAI] Expected answer to be ${interpolatedAssertAnswer}, but got ${actualAnswer}`);\n throw new Error(`Expected answer to be ${interpolatedAssertAnswer}, but got ${actualAnswer}`);\n }\n }\n \n // If stepId is provided, update the step\n if (stepId) {\n proboLogger.debug(`🔍 [askAI] Looking for step: ${stepId}`);\n const step = await this.apiClient.findStepById(stepId);\n if (!step) {\n proboLogger.error(`Step not found in database`);\n throw Error(`Step #${stepId} not found in database`)\n }\n\n if (step?.prompt === question) {\n proboLogger.debug(`✅ [askAI] Step already exists with question: ${question}, skipping update`);\n return serverResponse;\n }\n\n try {\n proboLogger.debug(`📝 [askAI] Updating step in backend for question: \"${question}\"`);\n \n // Get HTML content for the step\n const htmlContent = await page.content();\n\n await this.apiClient.patchStep(stepId, {\n stepPrompt: question,\n pre_html_content: htmlContent,\n initial_screenshot: screenshot,\n url: page.url(),\n action: PlaywrightAction.ASK_AI,\n vanilla_prompt: question,\n });\n \n proboLogger.debug(`✅ [askAI] Step updated successfully with ID: ${stepId}`);\n } catch (stepError) {\n proboLogger.error(`❌ [askAI] Error updating step: ${stepError}`);\n // Don't throw here, just log the error and continue\n }\n } else if (createStep) {\n proboLogger.debug(`🔍 [askAI] Creating new step in backend for question: \"${question}\"`);\n const stepId = await this.apiClient.createStep({\n scenarioName: this.scenarioName,\n stepPrompt: question,\n initial_screenshot_url: screenshot,\n argument: '',\n use_cache: false,\n url: page.url(),\n action: PlaywrightAction.ASK_AI,\n vanilla_prompt: question,\n is_vanilla_prompt_robust: true,\n target_element_name: 'AI Question',\n });\n proboLogger.debug(`✅ [askAI] Step created successfully with ID: ${stepId}`);\n }\n \n return serverResponse;\n \n } catch (error) {\n proboLogger.error(`❌ [askAI] Error in askAI: ${error}`);\n throw error;\n }\n }\n}\n\n// Re-export ElementTag for convenience\nexport { ElementTag, ProboLogLevel, Highlighter, ElementTagType, ElementInfo, PlaywrightAction, ProboPlaywright, findClosestVisibleElement, NavTracker };\n\n// Re-export OTP class\nexport { OTP, MailinatorMessage } from './otp';\n\n// Re-export code generation utilities from probo-shared\nexport { \n generateCode, \n getRequiredEnvVars, \n extractRequiredEnvVars, \n createUrlSlug,\n type CodeGeneratorOptions \n} from '@probolabs/probo-shared';\n\n// Export Node.js/Playwright-specific interpolation (uses process.env)\nexport { interpolateWithParams, buildInterpolationContext } from './interpolation.js';\n\n// Export ProboCodeGenerator and related types\nexport { \n ProboCodeGenerator,\n type CodeGenOptions,\n type TestSuiteCodeGenResult\n} from './codegen-api';\n\n// Export TestSuiteRunner and related types\nexport {\n TestSuiteRunner,\n type TestSuiteRunResult,\n type TestStatistics,\n type TestSuiteRunOptions\n} from './test-suite-runner';"],"names":["PlaywrightAction","ProboLogLevel","require$$0","retry","AIModel","OTPAuth.TOTP","promisify","exec","fs","path","os","fetch","spawn"],"mappings":"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CAAC,CAAC,CAAC;IAChD,KAAK;IACL;IACA,IAAI,MAAM,eAAe,GAAG,KAAK,KAAK,SAAS,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACrG,IAAI,OAAO,CAAC;AACZ;AACA;AACA;AACA;AACA,kBAAkB,EAAE,eAAe,CAAC;AACpC,+DAA+D,EAAE,eAAe,GAAG,qCAAqC,GAAG,EAAE,CAAC;AAC9H,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;IACF,CAAC;IACD;IACA;IACA;IACA;IACA;IACO,SAAS,qBAAqB,GAAG;IACxC;IACA;IACA,IAAI,OAAO,CAAC;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;IACF;;IC7rBA;;;;IAIG;IAGH;;;;;;;;IAQG;IACa,SAAA,yBAAyB,CACvC,MAA2B,EAC3B,iBAAuC,EAAA;QAEvC,OAAO;IACL,QAAA,GAAG,MAAM;IACT,QAAA,IAAI,iBAAiB,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,EAAE,OAAO,EAAE,CAAC;SACnD,CAAC;IACJ,CAAC;IAED;;;;;;;;;IASG;aACa,qBAAqB,CACnC,GAAW,EACX,MAA2B,EAC3B,iBAAuC,EAAA;QAEvC,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACrE,IAAA,OAAO,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3C;;IC1CA;IACO,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC;;ICyKtD;;IAEG;IACI,eAAe,wBAAwB,CAC5C,IAAU,EACV,eAA0B,GAAA,iCAAiC,CAAC,gBAAiB,EAC7E,WAAsB,GAAA,iCAAiC,CAAC,oBAAqB,EAAA;IAE7E,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,WAAW,CAAC,KAAK,CACf,CAAA,0CAAA,EAA6C,WAAW,C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AE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,E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","x_google_ignoreList":[6,7,8,9,10,22]}