sales-frontend-utils 0.0.44 → 0.0.46

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,"sources":["../src/utils/timing-utils.ts","../src/utils/cookie-utils.ts","../src/utils/environment-utils.ts","../src/utils/user-agent-utils.ts","../src/utils/event-handler-utils.ts","../src/utils/canvas-utils.ts","../src/utils/file-utils.ts","../src/utils/astx2/astx2.min.js","../src/utils/astx2/astx2_custom.js","../src/utils/astx2-utils.ts","../src/utils/date-utils.ts","../src/utils/ga/ga.js","../src/utils/ga/index.ts"],"names":["dayjs","customParseFormat"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * 쓰로틀\n * @param func\n * @param delay\n * @returns\n */\nexport function throttle<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let lastCall = 0;\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n const now = Date.now();\n\n if (now - lastCall >= delay) {\n // 마지막 호출로부터 delay 시간이 지났으면 즉시 실행\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n // 대기 중인 타이머가 없으면 새로운 타이머 설정\n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\n\n/**\n * 디바운스\n * @param func\n * @param delay\n * @returns\n */\nexport function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n","export const getCookie = (name: string): string => {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n};\n\nexport const setCookie = (\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, options: { path?: string; domain?: string } = {}): void => {\n setCookie(name, '', { ...options, expires: -1 });\n};\n","import { getCookie } from './cookie-utils';\n\n/**\n * 호스트명에서 서브도메인을 추출합니다.\n * @param hostname 호스트명\n * @returns 서브도메인 (예: nxl-dsp-dev)\n */\nexport const getSubdomain = (hostname: string): string => {\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\n return '';\n }\n\n const parts = hostname.split('.');\n\n // 최소 3개 부분이 있어야 서브도메인 존재 (subdomain.domain.com)\n if (parts.length < 3) {\n return '';\n }\n\n // 첫 번째 부분이 서브도메인\n return parts[0] ?? '';\n};\n\n/**\n * 호스트명을 기반으로 환경을 판단합니다.\n * @param hostname 호스트명\n * @returns 환경 구분 문자열 ('local' | 'dev' | 'stg' | 'prd')\n */\nexport const getEnvironmentFromHostname = (hostname: string): 'local' | 'dev' | 'stg' | 'prd' => {\n const debugModeEnv = getCookie('dsp-debug-mode-env')?.toLowerCase();\n if (debugModeEnv) {\n return debugModeEnv as 'local' | 'dev' | 'stg' | 'prd';\n }\n const subDomain = getSubdomain(hostname);\n\n // localhost 판단\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost')) {\n return 'local';\n }\n\n // dev 환경 판단\n if (subDomain.includes(`dev`)) {\n return 'dev';\n }\n\n // stg 환경 판단\n if (subDomain.includes('stg')) {\n return 'stg';\n }\n\n // 기본 운영\n return 'prd';\n};\n\n/**\n * @see https://github.com/storybookjs/storybook/issues/32028#issuecomment-3298982086\n * @note 스토리북에서 버그로인해 window객체를 정상적으로 탐지하지 못하는 이슈우회\n */\nexport const isClient = () => {\n try {\n return !!window;\n } catch {\n return false;\n }\n};\n\n// window.isStorybookEnv 접근을 위한 타입캐스팅\ndeclare const window: Window & { isStorybookEnv?: boolean };\n/**\n * 현재 실행 환경이 Storybook인지 확인하는 함수\n *\n * 사용 전, `viteFinal` 설정에서 `window.isStorybookEnv`를 `true`로 정의해야 정상 동작합니다.\n *\n * 예시:\n * ```ts\n * const config: StorybookConfig = {\n * viteFinal: (config) => {\n * // window.isStorybookEnv를 true로 설정 (boolean 값으로 처리됨)\n * config.define = {\n * ...config.define,\n * 'window.isStorybookEnv': 'true',\n * };\n *\n * return config;\n * },\n * };\n * ```\n */\nexport const isStorybookEnv = () => {\n try {\n return window.isStorybookEnv === true;\n } catch {\n // window가 존재하지 않는 등 예외 상황에서는 false 반환\n return false;\n }\n};\n\n/**\n * 현재 업무구분 코드 구하기\n * 원칙: pathname의 첫 번째가 업무구분코드를 사용할 경우 해당 값을 반환\n * @returns\n */\nexport const getBusinessWorkDivisionCode = () => {\n return location.pathname.split('/')[1] ?? '';\n};\n\n/**\n * @description storybook에서 동작을 고려하여 수정한 버전\n * @returns\n */\nexport const getServicePath = () => {\n if (typeof window.isStorybookEnv === 'boolean') {\n return '';\n } else {\n return `/${getBusinessWorkDivisionCode()}`;\n }\n};\n\n/**\n * 환경에 맞는 API 호스트명을 반환합니다.\n * 호스트명을 강제하고 싶으면 두 번째 파라미터로 넘기세요.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\n\nexport const getApiHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n switch (environment) {\n case 'dev':\n return `https://nxl-dsp-dev.hanwhalife.com`;\n\n case 'local':\n case 'stg':\n return `https://nxl-dsp-stg.hanwhalife.com`;\n\n case 'prd':\n return `https://nxl-dsp.hanwhalife.com`;\n\n default:\n console.warn('DSP API environment is not defined');\n\n return '';\n }\n};\n\n/**\n * 환경에 맞는 CDN 호스트명을 반환합니다.\n * 호스트명을 강제하고 싶으면 두 번째 파라미터로 넘기세요.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getCdnHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (!isClient()) {\n return '';\n }\n\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n switch (environment) {\n case 'dev':\n return `https://dev-dsp-static.hanwhalife.com`;\n\n case 'local':\n case 'stg':\n return `https://stg-dsp-static.hanwhalife.com`;\n\n case 'prd':\n return `https://dsp-static.hanwhalife.com'`;\n\n default:\n console.warn('DSP environment is not defined');\n\n return '';\n }\n};\n\n/**\n * @description\n * 환경에 맞는 비정형PI 호스트명을 반환합니다.\n * client side에서 사용하는 함수입니다.\n * @param serviceCode dea,dis,dcm\n * @param hostname window.location.hostname\n * @returns\n */\nexport const getDudApiBasePathFromEnvironment = (hostname?: string) => {\n if (!isClient()) {\n return '';\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n\n switch (environment) {\n /**\n * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.\n * (cors이슈 해결을 위해 필수)\n */\n case 'local':\n return `${getServicePath()}/api/dud`;\n /**\n * local 이 아닌 환경에서는 전체주소를 호출합니다.\n */\n case 'dev':\n return `https://dsp-dud-dev.hanwhalife.com:10101/api`;\n\n case 'stg':\n return `https://dsp-dud-stg.hanwhalife.com:10102/api`;\n\n case 'prd':\n return `https://dsp-dud.hanwhalife.com/api`;\n\n default:\n console.warn('DUD API environment is not defined');\n\n return '';\n }\n};\n\n/**\n * @description\n * 환경에 맞는 Dsp 호스트명을 반환합니다.\n * client side에서 사용하는 함수입니다.\n * @param serviceCodeTo dea,dis 같은 api서버명\n * @param hostname window.location.hostname\n * @returns\n */\nexport const getDspApiBasePathFromEnvironment = (serviceCodeTo: string, hostname?: string) => {\n if (!isClient()) {\n return '';\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n\n switch (environment) {\n /**\n * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.\n * (cors이슈 해결을 위해 필수)\n */\n case 'local':\n return `${getServicePath()}/api/${serviceCodeTo}`;\n /**\n * local 이 아닌 환경에서는 전체주소를 호출합니다.\n */\n case 'dev':\n return `https://nxl-dsp-dev.hanwhalife.com/api/${serviceCodeTo}`;\n\n case 'stg':\n return `https://nxl-dsp-stg.hanwhalife.com/api/${serviceCodeTo}`;\n\n case 'prd':\n return `https://nxl-dsp.hanwhalife.com/api/${serviceCodeTo}`;\n\n default:\n console.warn('DSP API environment is not defined');\n\n return '';\n }\n};\n\n\n/**\n * @description\n * 환경에 맞는 NLC 호스트명을 반환합니다.\n * client side에서 사용하는 함수입니다.\n * @param hostname window.location.hostname\n * @returns\n */\nexport const getNlcHostFromEnvironment = (hostname?: string) => {\n if (!isClient()) {\n return '';\n }\n\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n\n switch (environment) {\n case 'local':\n return `https://nxl-nlc-stg.hanwhalife.com`;\n\n case 'dev':\n return `https://nxl-nlc-dev.hanwhalife.com`;\n\n case 'stg':\n return `https://nxl-nlc-stg.hanwhalife.com`;\n\n case 'prd':\n return `https://nxl-nlc.hanwhalife.com`;\n\n default:\n console.warn('NLC environment is not defined');\n\n return '';\n }\n};\n\n","import { ExecutionEnvironment, OSName, BrowserName } from '../types/common.types';\n\nimport { isClient } from './environment-utils';\n/**\n * 한화생명 영업지원 웹 실행 환경 탐지\n * @returns\n */\nexport const getDspExecutionEnvironment = (): ExecutionEnvironment => {\n if (!isClient()) {\n return 'unknown';\n }\n\n if (window.n2Bridge) {\n return 'android-webview';\n }\n\n if (window.webkit?.messageHandlers?.n2Bridge) {\n return 'ios-webview';\n }\n\n if (window.self !== window.top) {\n return 'iframe';\n }\n\n return 'web';\n};\n\n/**\n * 한화생명 영업 앱 환경 여부 판단(DSP 앱 또는 FP 플래너 앱)\n * 운영 중인 프로덕션 앱에서 실행 중인지 확인\n * @returns\n */\nexport const isProductionApp = () => {\n if (!isClient()) {\n return false;\n }\n\n return isDspApp() || isFpPlannerApp();\n};\n\n/**\n * UserAgent에 SspApp 이 있는지 검사\n * 있으면, DSP 앱\n * @param userAgent\n * @returns\n */\nexport const checkUserAgentDspApp = (userAgent: string) => {\n return userAgent.toLowerCase().includes('sspapp');\n};\n\n/**\n * 한화생명 영업지원 웹뷰 환경 여부 판단\n * @returns 웹뷰(Android/iOS) 환경이면 true, 아니면 false\n */\nexport const isDspApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) && (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * FP 플래너 웹뷰 환경 여부 판단\n * @returns\n */\nexport const isFpPlannerApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) === false &&\n (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * 영업 포털 환경 여부 판단\n * @returns\n */\nexport const isSalesPortal = () => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return environment === 'iframe';\n};\n\n/**\n * 태블릿 여부 판단\n * @param userAgent\n * @returns\n */\nexport const isTablet = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple 태블릿\n ua.includes('ipad') ||\n // Android 태블릿 (Mobile 키워드 없음)\n (ua.includes('android') && !ua.includes('mobile')) ||\n // 명시적 태블릿 키워드\n ua.includes('tablet') ||\n // Amazon 태블릿\n ua.includes('kindle') ||\n ua.includes('silk') ||\n /kf[a-z]{2}wi|kftt/.test(ua) ||\n // BlackBerry 태블릿\n ua.includes('playbook') ||\n // 삼성 갤럭시 탭 (개선된 정규식)\n /gt-p\\d{4}|sm-[tp]\\d{3}/.test(ua) ||\n // 구글 넥서스/픽셀 태블릿\n /nexus (?:[789]|10)|pixel [cs]|pixel slate/.test(ua) ||\n // 기타 브랜드 태블릿\n /xoom|transformer|mediapad|mipad|tab\\s/.test(ua) ||\n // Windows 태블릿 (개선된 조건)\n (ua.includes('windows') && (ua.includes('touch') || ua.includes('tablet'))) ||\n ua.includes('surface')\n );\n};\n\n/**\n * 스마트폰 여부 판단\n * @param userAgent\n * @returns\n */\nexport const isPhone = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple 모바일\n ua.includes('iphone') ||\n ua.includes('ipod') ||\n // Android 스마트폰 (Mobile 키워드 있음)\n (ua.includes('android') && ua.includes('mobile')) ||\n // BlackBerry\n ua.includes('blackberry') ||\n ua.includes('bb10') ||\n // Windows Mobile\n ua.includes('windows phone') ||\n ua.includes('windows mobile') ||\n ua.includes('iemobile') ||\n // Opera Mobile\n ua.includes('opera mini') ||\n ua.includes('opera mobi') ||\n // 기타 모바일 브라우저\n (ua.includes('mobile') &&\n (ua.includes('firefox') || ua.includes('chrome') || ua.includes('safari') || ua.includes('edge'))) ||\n // 모바일 키워드 (태블릿 제외)\n (ua.includes('mobile') && !ua.includes('tablet')) ||\n // 삼성 갤럭시 폰 (개선)\n /sm-[a-z]\\d{3}[a-z]?|gt-[a-z]\\d{4}/.test(ua) ||\n // LG, HTC 폰\n /lg-[a-z]\\d{3,4}|htc[_\\s]/.test(ua) ||\n // 화웨이/샤오미 등 (개선)\n /huawei|honor|redmi|mi[\\s\\d]|oneplus|oppo|vivo/.test(ua)\n );\n};\n\n/**\n * 데스크톱 여부 판단\n * @param userAgent\n * @returns\n */\nexport const isPc = (userAgent: string) => {\n const ua = userAgent.toLowerCase();\n\n return !isPhone(ua) && !isTablet(ua);\n};\n\n/**\n * UserAgent에서 기기 타입 구분\n * @param userAgent\n * @returns\n */\nexport const getFormFactorFromUserAgent = (userAgent: string) => {\n if (!userAgent) {\n return 'pc';\n }\n\n const ua = userAgent.toLowerCase();\n\n if (isTablet(ua)) {\n return 'tablet';\n }\n\n if (isPhone(ua)) {\n return 'phone';\n }\n\n return 'pc';\n};\n\n/**\n * UserAgent에서 운영체제 이름을 추출\n * @param userAgent - 브라우저의 userAgent 문자열\n * @returns 운영체제 이름\n */\nexport const getOSName = (userAgent: string): OSName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS 체크 (iPhone, iPad, iPod)\n if (/iphone|ipad|ipod/.test(ua)) {\n return 'ios';\n }\n\n // Android 체크\n if (ua.includes('android')) {\n return 'android';\n }\n\n // Windows 체크\n if (ua.includes('windows') || ua.includes('win32') || ua.includes('win64')) {\n return 'windows';\n }\n\n // macOS 체크 (Mac OS X, macOS)\n if (ua.includes('mac os x') || ua.includes('macos') || ua.includes('macintosh')) {\n return 'mac';\n }\n\n // Linux 체크 (Android 제외)\n if (ua.includes('linux') && !ua.includes('android')) {\n return 'linux';\n }\n\n return 'unknown';\n};\n\n/**\n * 현재 브라우저의 운영체제 이름을 가져오기\n * @returns 현재 환경의 운영체제 이름\n */\nexport const getCurrentOSName = (): OSName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSName(navigator.userAgent);\n};\n\n/**\n * UserAgent에서 OS 버전을 추출\n * @param userAgent - 브라우저의 userAgent 문자열\n * @returns OS 버전 문자열\n */\nexport const getOSVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS 버전 (iPhone OS 15_0, iPad OS 15_0)\n const iosMatch = ua.match(/os (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (iosMatch && iosMatch.length >= 3) {\n const major = iosMatch[1];\n const minor = iosMatch[2];\n const patch = iosMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n // Android 버전\n const androidMatch = ua.match(/android (\\d+(?:\\.\\d+)*)/);\n if (androidMatch && androidMatch[1]) {\n return androidMatch[1];\n }\n\n // Windows 버전\n const windowsMatch = ua.match(/windows nt (\\d+\\.\\d+)/);\n if (windowsMatch && windowsMatch[1]) {\n const version = windowsMatch[1];\n // Windows NT 버전을 실제 Windows 버전으로 매핑\n const windowsVersionMap: Record<string, string> = {\n '10.0': '10/11',\n '6.3': '8.1',\n '6.2': '8',\n '6.1': '7',\n '6.0': 'Vista',\n '5.1': 'XP'\n };\n\n return windowsVersionMap[version] || version;\n }\n\n // macOS 버전\n const macMatch = ua.match(/mac os x (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (macMatch && macMatch.length >= 3) {\n const major = macMatch[1];\n const minor = macMatch[2];\n const patch = macMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent에서 브라우저 이름을 추출\n * @param userAgent - 브라우저의 userAgent 문자열\n * @returns 브라우저 이름\n */\nexport const getBrowserName = (userAgent: string): BrowserName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium 기반) - Chrome보다 먼저 체크해야 함\n if (ua.includes('edg/') || ua.includes('edge/')) {\n return 'edge';\n }\n\n // Samsung Internet\n if (ua.includes('samsungbrowser')) {\n return 'samsung';\n }\n\n // Opera - Chrome보다 먼저 체크해야 함\n if (ua.includes('opr/') || ua.includes('opera')) {\n return 'opera';\n }\n\n // Chrome (Chromium 기반 브라우저들보다 늦게 체크)\n if (ua.includes('chrome') && !ua.includes('edg')) {\n return 'chrome';\n }\n\n // Firefox\n if (ua.includes('firefox')) {\n return 'firefox';\n }\n\n // Safari (Chrome와 구분하기 위해 webkit 체크)\n if (ua.includes('safari') && !ua.includes('chrome')) {\n return 'safari';\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent에서 브라우저 버전을 추출\n * @param userAgent - 브라우저의 userAgent 문자열\n * @returns 브라우저 버전\n */\nexport const getBrowserVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium)\n const edgMatch = ua.match(/edg\\/(\\d+(?:\\.\\d+)*)/);\n if (edgMatch && edgMatch[1]) {\n return edgMatch[1];\n }\n\n // Samsung Internet\n const samsungMatch = ua.match(/samsungbrowser\\/(\\d+(?:\\.\\d+)*)/);\n if (samsungMatch && samsungMatch[1]) {\n return samsungMatch[1];\n }\n\n // Opera\n const operaMatch = ua.match(/(?:opr|opera)\\/(\\d+(?:\\.\\d+)*)/);\n if (operaMatch && operaMatch[1]) {\n return operaMatch[1];\n }\n\n // Chrome\n const chromeMatch = ua.match(/chrome\\/(\\d+(?:\\.\\d+)*)/);\n if (chromeMatch && chromeMatch[1] && !ua.includes('edg')) {\n return chromeMatch[1];\n }\n\n // Firefox\n const firefoxMatch = ua.match(/firefox\\/(\\d+(?:\\.\\d+)*)/);\n if (firefoxMatch && firefoxMatch[1]) {\n return firefoxMatch[1];\n }\n\n // Safari\n const safariMatch = ua.match(/version\\/(\\d+(?:\\.\\d+)*)/);\n if (safariMatch && safariMatch[1] && ua.includes('safari') && !ua.includes('chrome')) {\n return safariMatch[1];\n }\n\n return 'unknown';\n};\n/**\n * 현재 브라우저의 OS 버전을 가져오기\n * @returns 현재 환경의 OS 버전\n */\nexport const getCurrentOSVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSVersion(navigator.userAgent);\n};\n\n/**\n * 현재 브라우저의 이름을 가져오기\n * @returns 현재 환경의 브라우저 이름\n */\nexport const getCurrentBrowserName = (): BrowserName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserName(navigator.userAgent);\n};\n\n/**\n * 현재 브라우저의 버전을 가져오기\n * @returns 현재 환경의 브라우저 버전\n */\nexport const getCurrentBrowserVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserVersion(navigator.userAgent);\n};\n\n/**\n * 클라이언트용 디바이스 ID 생성 및 관리(임시값)\n */\nexport const getOrCreateDeviceId = (): string => {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const STORAGE_KEY = 'dsp_device_id';\n let deviceId = localStorage.getItem(STORAGE_KEY);\n\n if (!deviceId) {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 15);\n deviceId = `dsp-web-${timestamp}-${random}`;\n\n try {\n localStorage.setItem(STORAGE_KEY, deviceId);\n } catch (error) {\n console.warn('[DeviceId] localStorage 저장 실패:', error);\n }\n }\n\n return deviceId;\n};\n\n/**\n * 디바이스 모델 감지\n */\nexport const getDeviceModel = (): string => {\n if (!isClient()) {\n return '';\n }\n\n const ua = navigator.userAgent;\n\n // iOS\n if (/iPad/.test(ua)) {\n return 'iPad';\n }\n if (/iPhone/.test(ua)) {\n return 'iPhone';\n }\n if (/iPod/.test(ua)) {\n return 'iPod Touch';\n }\n\n // Android - 주요 브랜드\n if (/SM-[A-Z0-9]+/.test(ua)) {\n const match = ua.match(/SM-[A-Z0-9]+/);\n\n return match ? `Samsung ${match[0]}` : 'Samsung';\n }\n if (/Pixel/.test(ua)) {\n const match = ua.match(/Pixel [0-9]+[a-zA-Z]*/);\n\n return match ? `Google ${match[0]}` : 'Google Pixel';\n }\n if (/Mi\\s|Redmi|POCO/.test(ua)) {\n return 'Xiaomi';\n }\n if (/HUAWEI/.test(ua)) {\n return 'Huawei';\n }\n if (/OnePlus/.test(ua)) {\n return 'OnePlus';\n }\n\n // Desktop\n if (/Windows/.test(ua)) {\n return 'Windows PC';\n }\n if (/Mac OS X/.test(ua)) {\n return 'Mac';\n }\n if (/Linux/.test(ua)) {\n return 'Linux PC';\n }\n\n return 'Unknown';\n};\n","/**\n * Message 이벤트 헨들러를 관리하는 클래스입니다. (싱글턴)\n * 모든 message 핸들러는 여기를 통해 등록해야합니다.\n * window.addEventListener('message') 의 중복을 방지하기 위함입니다.\n */\nexport class MessageEventManager {\n private static instance: MessageEventManager;\n private handlers = new Map<string, (event: MessageEvent) => void>();\n\n static getInstance(): MessageEventManager {\n if (!MessageEventManager.instance) {\n MessageEventManager.instance = new MessageEventManager();\n }\n\n return MessageEventManager.instance;\n }\n\n private constructor() {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n\n /**\n *\n * @param event\n */\n private handleMessage(event: MessageEvent): void {\n // 모든 등록된 핸들러 실행\n for (const [key, handler] of this.handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error(`Message handler ${key} error:`, error);\n }\n }\n }\n\n /**\n * 이벤트 헨들러 함수를 등록합니다.\n * @param key\n * @param handler\n */\n registerHandler(key: string, handler: (event: MessageEvent) => void): void {\n this.handlers.set(key, handler);\n }\n\n /**\n * 이벤트 핸들러 함수를 삭제합니다.\n * @param key\n */\n unregisterHandler(key: string): void {\n this.handlers.delete(key);\n }\n}\n","interface ConvertTextToImgParams {\n /** 이미지로 변환할 문자열 */\n targetStr: string;\n /** 캔버스 너비 (지정하지 않으면 텍스트 길이에 따라 자동 계산) */\n canvasWidth?: number;\n /** 캔버스 높이 (지정하지 않으면 기본값 150px) */\n canvasHeight?: number;\n /** 배경색 (지정하지 않으면 투명) */\n backgroundColor?: string;\n /** 폰트 크기 (지정하지 않으면 기본값 75px) */\n fontSize?: number;\n /** 폰트 색상 (지정하지 않으면 기본값 검정색) */\n fontColor?: string;\n /** 폰트 두께 (지정하지 않으면 기본값 bold) */\n fontWeight?: string;\n /** 폰트 패밀리 (지정하지 않으면 기본값 ) */\n fontFamily?: string;\n}\n\n/**\n * 텍스트를 이미지(Base64)로 변환하는 함수\n * @param params - 변환에 필요한 파라미터 객체\n * @returns Base64로 인코딩된 이미지 데이터 URL\n */\nexport const convertTextToImg = ({\n targetStr,\n canvasWidth,\n canvasHeight,\n backgroundColor,\n fontColor,\n fontSize,\n fontWeight,\n fontFamily = `'Malgun Gothic', '맑은 고딕', 'sans-serif', 'Arial'`\n}: ConvertTextToImgParams): string => {\n // 1. 메모리에 캔버스 요소 생성\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n // 캔버스 컨텍스트를 가져올 수 없는 경우 에러 처리\n throw new Error('Canvas context를 가져올 수 없습니다.');\n }\n\n // 2. 캔버스 크기 설정\n const defaultHeight = 150;\n const calculatedWidth = targetStr.length * 70; // 글자 수 기반 너비 계산\n\n canvas.width = canvasWidth ?? calculatedWidth;\n canvas.height = canvasHeight ?? defaultHeight;\n\n // 3. 배경색 처리\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n // 4. 텍스트 그리기\n ctx.fillStyle = fontColor ?? 'black';\n ctx.textAlign = 'center';\n ctx.font = `${fontWeight ?? 'bold'} ${fontSize ?? 75}px ${fontFamily}`;\n\n console.log('font', `${fontWeight ?? 'bold'} ${fontSize ?? 75}px ${fontFamily}`);\n ctx.textBaseline = 'middle'; // 텍스트를 수직 중앙에 더 잘 맞추기 위해 추가\n\n // 텍스트를 캔버스 중앙에 그립니다.\n ctx.fillText(targetStr, canvas.width / 2, canvas.height / 2);\n\n // 5. Base64 이미지 데이터로 변환하여 반환\n return canvas.toDataURL(); // 기본적으로 'image/png'\n};\n\nexport function drawImageResizeCentered(base64: string, size: { canvasWidth: number; canvasHeight: number }) {\n return new Promise((resolve) => {\n const { canvasHeight, canvasWidth } = size;\n\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n const ctx = canvas.getContext('2d');\n\n const img = new Image();\n img.src = base64;\n img.onload = () => {\n const imageWidth = img.width;\n const imageHeight = img.height;\n\n const canvasRatio = canvasWidth / canvasHeight;\n const imageRatio = imageWidth / imageHeight;\n\n let newWidth;\n let newHeight;\n\n if (imageRatio > canvasRatio) {\n newWidth = canvasWidth;\n newHeight = newWidth / imageRatio;\n } else {\n newHeight = canvasHeight;\n newWidth = newHeight * imageRatio;\n }\n\n const x = (canvasWidth - newWidth) / 2;\n const y = (canvasHeight - newHeight) / 2;\n\n ctx?.clearRect(0, 0, canvasWidth, canvasHeight);\n ctx?.drawImage(img, x, y, newWidth, newHeight);\n\n resolve(canvas.toDataURL());\n };\n });\n}\n","export function base64ToBlob(base64String: string, contentType = '') {\n const regex = /^data:([a-zA-Z0-9/+.-]+);base64,/;\n const matches = base64String.match(regex);\n\n if (matches === null) {\n throw new Error('Invalid base64 string');\n }\n\n const contentTypeFinal = contentType || matches[1];\n const byteCharacters = atob(base64String.replace(regex, ''));\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n\n return new Blob([byteArray], { type: contentTypeFinal });\n}\n\nexport function base64ToFile(base64String: string, fileName: string, contentType = '') {\n const blob = base64ToBlob(base64String, contentType);\n\n if (!blob) {\n throw new Error('Invalid base64 string');\n }\n\n return blobToFile(blob, fileName);\n}\n\nexport function blobToFile(blob: Blob, fileName: string) {\n return new File([blob], fileName, {\n type: blob.type,\n lastModified: Date.now()\n });\n}\n\nexport async function fileToBase64(file: File | Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n if (typeof reader.result === 'string') {\n resolve(reader.result);\n } else {\n reject(new Error('Invalid file type'));\n }\n };\n\n reader.onerror = (error) => {\n reject(error);\n };\n\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * 파일확장자 리턴\n * @param data string File Blob\n */\nexport function getExt(data: string | File | Blob) {\n if (typeof data === 'string') {\n return data.split('.').pop();\n }\n\n if (data instanceof File) {\n return data.name.split('.').pop();\n }\n\n if (data instanceof Blob) {\n return data.type.split('/').pop();\n }\n}\n\nexport async function objectUrlToBlob(objectUrl: string) {\n try {\n const response = await fetch(objectUrl);\n const blob = await response.blob();\n\n return blob;\n } catch (error) {\n console.error('Error converting object URL to Blob:', error);\n throw error;\n }\n}\n\nexport async function objectUrlToBase64(objectUrl: string): Promise<string> {\n const blob = await objectUrlToBlob(objectUrl);\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n if (typeof reader.result === 'string') {\n resolve(reader.result);\n } else {\n reject(new Error('Invalid file type'));\n }\n };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\n\nexport function downloadBlob(blob: Blob, filename: string) {\n // 1. Create a temporary URL for the Blob object\n const url = URL.createObjectURL(blob);\n\n // 2. Create a hidden anchor element\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = url;\n\n // 3. Set the 'download' attribute with the desired file name\n // This attribute forces the browser to download the URL content instead of navigating to it\n link.download = `${filename}.${getExt(blob)}`;\n\n // 4. Append the link to the body (necessary for the click to work in some browsers)\n document.body.appendChild(link);\n\n // 5. Simulate a click on the link to trigger the download\n link.click();\n\n // 6. Clean up: Remove the link and revoke the object URL\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n\n/**\n * image url을 File Object로 변경.\n * @param imageUrl fileObject로 변경할 image url\n * @return file object\n */\nexport async function imageUrlToFile(imageUrl: string): Promise<File> {\n const headers = new Headers();\n headers.append('cache-control', 'no-cache');\n const resImage = await fetch(imageUrl, { headers });\n const blob = await resImage.blob();\n const { type } = blob;\n const name = type.split('/').join('.');\n const file = new File([blob], name, { type });\n\n return file;\n}\n","/* eslint-disable */\n/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 32070 $ */\nvar $ASTX2_CONST = {\n ERROR_SUCCESS: 0,\n ERROR_FAILED: 101,\n ERROR_NOINIT: 102,\n ERROR_NOTINST: 103,\n ERROR_NOTSUPPORTED: 104,\n ERROR_NOCONNECT: 105,\n ERROR_NCK: 106,\n ERROR_ERR: 107,\n ERROR_NSP: 108,\n ERROR_PARAM: 109,\n ERROR_EXCESS: 110,\n ERROR_NEEDUPDATE: 111,\n OPTION_NONE2E: 1,\n OPTION_AUTOFOCUS: 2,\n OPTION_AUTOSETTEXT: 4,\n OPTION_E2EFORM: 8,\n OPTION_E2EFORM_NOENC: 16,\n OPTION_E2EFORM_ALLTRIP: 32,\n OPTION_E2EFORM_ONLY: 64,\n OPTION_E2EFORM_TAGSET: 128,\n OPTION_NONE2E_ALG: 256,\n OPTION_NOSPTDUMMY: 512,\n OPTION_FIXEDTYPE: 1024,\n PROTECT_AK: 1,\n PROTECT_FW: 2,\n PROTECT_PB: 4,\n PROTECT_PCS: 8,\n SERVICE_AK: 1,\n REQUEST_JSONP: 1,\n REQUEST_AJAX: 2,\n DEBUG_NOALIVE: 1,\n INTERVAL_ALIVE: 5e3,\n E2ETYPE_EXCLUDE: -1,\n E2ETYPE_NONE: 0,\n E2ETYPE_CERT1: 1,\n E2ETYPE_CERT2: 2,\n E2ETYPE_SDK: 11,\n E2ETYPE_PLAIN1: 21,\n E2ETYPE_PLAIN2: 22,\n E2ETYPE_WIZVERA: 31,\n PAGEID: '',\n BROWSER_TYPE: '',\n BROWSER_VER: '',\n E2EFORM_TAIL: !0,\n E2EFORM_INIT: '_e2e_forminit',\n E2EFORM_TAG1: '_e2e_1__',\n E2EFORM_TAG2: '_e2e_2__',\n E2EFORM_TAG1_PWD: '_e2e_1_pwd__',\n E2EFORM_TAG2_PWD: '_e2e_2_pwd__',\n getErrno: function (a) {\n return 'NCK' == a ? this.ERROR_NCK : 'ERR' == a ? this.ERROR_ERR : 'NSP' == a ? this.ERROR_NSP : this.ERROR_FAILED;\n },\n _get_browser_version: function (a) {\n var b = 0;\n if (0 <= a.indexOf('Edge/') && ((b = parseInt(a.split('Edge/')[1])), 0 < b)) return 'EG' + b;\n if (0 <= a.indexOf('MSIE')) {\n if (((b = parseInt(a.split('MSIE')[1])), 0 < b)) return 'IE' + b;\n } else if (\n 0 <= a.indexOf('Trident') &&\n (0 <= a.indexOf('rv:')\n ? (b = parseInt(a.split('rv:')[1]))\n : 0 <= a.indexOf('IE') && (b = parseInt(a.split('IE')[1])),\n 0 < b)\n )\n return 'IE' + b;\n return 0 <= a.indexOf('OPR/') && ((b = parseInt(a.split('OPR/')[1])), 0 < b)\n ? 'OP' + b\n : 0 <= a.indexOf('Firefox/') && ((b = parseInt(a.split('Firefox/')[1])), 0 < b)\n ? 'FF' + b\n : 0 <= a.indexOf('Chrome/') && ((b = parseInt(a.split('Chrome/')[1])), 0 < b)\n ? 'CR' + b\n : 0 <= a.indexOf('AppleWebKit') &&\n 0 <= a.indexOf('Version/') &&\n ((b = parseInt(a.split('Version/')[1])), 0 < b)\n ? 'SF' + b\n : 'OT0';\n },\n init: function () {\n this.PAGEID = new Date().getTime();\n this.PAGEID -= Math.floor(100 * Math.random());\n this.BROWSER_VER = this._get_browser_version(navigator.userAgent);\n this.BROWSER_TYPE = this.BROWSER_VER.substring(0, 2);\n }\n};\n$ASTX2_CONST.init();\nvar $ASTX2_COMM = {\n mLocalServerURL: '',\n mClientPublicKey: '',\n mErrorAbortFlag: !1,\n mDegugFlags: 0,\n setDegugFlags: function (a) {\n this.mDegugFlags |= a;\n },\n getDegugFlags: function () {\n return this.mDegugFlags;\n },\n isEnable: function () {\n return 0 < this.mLocalServerURL.length ? !0 : !1;\n },\n uninit: function () {\n this.mLocalServerURL = '';\n },\n errorAbort: function (a) {\n 1 != this.mErrorAbortFlag && ((this.mErrorAbortFlag = !0), $ASTX2_CUST.errorAbort(a));\n }\n },\n $_astxu = {\n mJsonpSequence: 0,\n jsonQstr: function (a) {\n var b = [],\n c;\n for (c in a) a.hasOwnProperty(c) && b.push(encodeURIComponent(c) + '=' + encodeURIComponent(a[c]));\n return b.join('&');\n },\n jsonParse: function (a) {\n var b = a.indexOf('{'),\n c = a.indexOf('}');\n if (-1 == b || -1 == c) return {};\n a = a.substring(b, c + 1);\n return 'object' == typeof window.JSON && 'function' == typeof window.JSON.parse\n ? window.JSON.parse(a)\n : 'function' == typeof jQuery && 'function' == typeof jQuery.parseJSON\n ? jQuery.parseJSON(a)\n : eval('(' + a + ')');\n },\n _send_jsonp_jquery: function (a) {\n try {\n jQuery.ajax({\n url: a.src,\n timeout: a.timeout,\n cache: !1,\n crossDomain: !0,\n dataType: 'jsonp',\n contentType: 'application/javascript',\n success: function (b, d, e) {\n a.onSuccess(b);\n },\n error: function (b, d, e) {\n if (200 == b.status && 1 == a.nocallback) a.onSuccess();\n else a.onFailure();\n },\n complete: function (a, b) {}\n });\n } catch (b) {\n a.onFailure();\n }\n },\n _send_jsonp_dom: function (a) {\n var b = document.createElement('script');\n b.type = 'text/javascript';\n b.id = a.callback;\n b.async = a.async;\n b.src = a.src;\n var c = document.getElementsByTagName('body')[0];\n if (null == c && ((c = document.getElementsByTagName('head')[0]), null == c)) {\n a.onFailure();\n return;\n }\n var d = window.setTimeout(function () {\n window[a.callback] = function () {};\n try {\n var b = document.getElementById(a.callback);\n b && ((b.onerror = function () {}), c.removeChild(b));\n } catch (d) {}\n a.onFailure();\n }, a.timeout);\n 0 == a.nocallback\n ? (window[a.callback] = function (b) {\n window.clearTimeout(d);\n try {\n var f = document.getElementById(a.callback);\n f && c.removeChild(f);\n } catch (g) {}\n a.onSuccess(b);\n })\n : (b.onload = function () {\n window.clearTimeout(d);\n try {\n var b = document.getElementById(a.callback);\n b && c.removeChild(b);\n } catch (f) {}\n a.onSuccess();\n });\n b.onerror = function () {\n window.clearTimeout(d);\n window[a.callback] = function () {};\n try {\n var b = document.getElementById(a.callback);\n b && c.removeChild(b);\n } catch (f) {}\n a.onFailure();\n };\n c.appendChild(b);\n },\n sendJsonp: function (a) {\n null == a.data && (a.data = {});\n null == a.callback && (a.callback = 'jsonpCallback' + $_astxu.rnd());\n null == a.nocallback && (a.nocallback = !1);\n null == a.timeout && (a.timeout = 5e3);\n null == a.async && (a.async = !0);\n null == a.seq && (a.seq = !1);\n null == a.onSuccess && (a.onSuccess = function (a) {});\n null == a.onFailure && (a.onFailure = function () {});\n a.src = 1 == $ASTX2.mUseJQuery ? a.url + '?v=3' : a.url + '?v=2&callback=' + a.callback;\n if (1 == a.seq) {\n var b = ++this.mJsonpSequence;\n a.src += '&seq=' + b;\n 2147483647 <= this.mJsonpSequence && (this.mJsonpSequence = 0);\n }\n b = this.jsonQstr(a.data);\n 0 < b.length && (a.src += '&' + b);\n 1 == $ASTX2.mUseJQuery ? this._send_jsonp_jquery(a) : this._send_jsonp_dom(a);\n },\n _get_xhr_object: function () {\n if ('undefined' !== typeof XMLHttpRequest)\n try {\n return new XMLHttpRequest();\n } catch (a) {}\n try {\n return new ActiveXObject('Microsoft.XMLHTTP');\n } catch (b) {}\n return null;\n },\n sendAjax: function (a) {\n var b = this._get_xhr_object();\n if (null == b) $_astxu.msg('[sendAjax] _get_xhr_object failed');\n else {\n null == a.data && (a.data = {});\n null == a.type && (a.type = 'POST');\n null == a.async && (a.async = !0);\n null == a.onSuccess && (a.onSuccess = function (a) {});\n null == a.onFailure && (a.onFailure = function (a, b) {});\n var c = this.jsonQstr(a.data);\n b.open(a.type, 'GET' == a.type ? a.url + '&' + c : a.url, a.async);\n b.onreadystatechange = function () {\n if (4 == b.readyState)\n if (200 == b.status) a.onSuccess(b.responseText);\n else a.onFailure(b.status);\n };\n null != a.timeout && (b.timeout = a.timeout);\n b.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n b.send(c);\n }\n },\n sendAuthAjax: function (a) {\n var b = this._get_xhr_object();\n const stored = JSON.parse(sessionStorage.getItem('cust-mgmt-auth') || '{}');\n if (null == b) $_astxu.msg('[sendAjax] _get_xhr_object failed');\n else {\n null == a.data && (a.data = {});\n null == a.type && (a.type = 'POST');\n null == a.async && (a.async = !0);\n null == a.onSuccess && (a.onSuccess = function (a) {});\n null == a.onFailure && (a.onFailure = function (a, b) {});\n var c = this.jsonQstr(a.data);\n b.open(a.type, 'GET' == a.type ? a.url + '&' + c : a.url, a.async);\n b.onreadystatechange = function () {\n if (4 == b.readyState)\n if (200 == b.status) a.onSuccess(b.responseText);\n else a.onFailure(b.status);\n };\n null != a.timeout && (b.timeout = a.timeout);\n b.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n b.setRequestHeader('Authorization', stored.key);\n b.withCredentials = true;\n b.send(c);\n }\n },\n isACK: function (a) {\n return a && 'ACK' == a ? !0 : !1;\n },\n isWinOS: function () {\n return -1 != navigator.platform.indexOf('Win32') || -1 != navigator.platform.indexOf('Win64') ? !0 : !1;\n },\n isMacOS: function () {\n return -1 != navigator.platform.indexOf('Mac') ? !0 : !1;\n },\n isLinuxOS: function () {\n return -1 != navigator.platform.indexOf('Linux') ? !0 : !1;\n },\n isMacLinuxOS: function () {\n return 1 == this.isMacOS() || 1 == this.isLinuxOS() ? !0 : !1;\n },\n hasFocused: function () {\n var a = !1;\n try {\n a = document.hasFocus();\n } catch (b) {}\n return a;\n },\n addEvent: function (a, b, c) {\n a.addEventListener ? a.addEventListener(b, c, !1) : a.attachEvent('on' + b, c);\n },\n removeEvent: function (a, b, c) {\n a.removeEventListener ? a.removeEventListener(b, c) : a.detachEvent('on' + b, c);\n },\n getCreatedFormValue: function (a, b, c) {\n null == c && (c = !1);\n c = 1 == c ? document.getElementsByTagName('input') : a.getElementsByTagName('input');\n for (var d = 0; d < c.length; d++) {\n var e = c[d];\n if (e && this.getnc(e.name) == b) return e;\n }\n c = document.createElement('input');\n c.name = b;\n c.type = 'hidden';\n if ('function' === typeof $ASTX2_CUST.onCreatedFormValue) $ASTX2_CUST.onCreatedFormValue(c, b);\n a.appendChild(c);\n return c;\n },\n getHostPath: function () {\n var a = window.location.protocol + '//' + window.location.hostname;\n return (a += window.location.port ? ':' + window.location.port : '');\n },\n getnc: function (a, b) {\n null == b && (b = '');\n return null == a ? b : a;\n },\n getint: function (a, b) {\n null == b && (b = 0);\n return parseInt(a) || b;\n },\n rnd: function () {\n var a = new Date().getTime();\n return (a += new String(Math.floor(100 * Math.random())));\n },\n getKeyCode: function (a) {\n var b = null;\n a && (b = a.keyCode ? a.keyCode : a.which);\n return b;\n },\n xorEncode: function (a, b) {\n for (var c = '', d = new String(a), e = 0; e < d.length; e++) c += String.fromCharCode(b ^ d.charCodeAt(e));\n return c;\n },\n xorDecode: function (a, b) {\n for (var c = '', d = new String(a), e = 0; e < d.length; e++) c += String.fromCharCode(b ^ d.charCodeAt(e));\n return c;\n },\n ltrim: function (a, b) {\n for (b = this.getnc(b, ' '); a.substring(0, 1) == b; ) a = a.substring(1, a.length);\n return a;\n },\n rtrim: function (a, b) {\n for (b = this.getnc(b, ' '); a.substring(a.length - 1, a.length) == b; ) a = a.substring(0, a.length - 1);\n return a;\n },\n alltrim: function (a, b) {\n return this.ltrim(this.rtrim(a, b), b);\n },\n setInputFocus: function () {\n try {\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\n var c = a[b];\n if (c && 'hidden' != c.type) {\n c.focus();\n break;\n }\n }\n } catch (d) {}\n },\n log: function (a) {\n 'object' === typeof debuger && 'function' === typeof debuger.write\n ? debuger.write(a)\n : 'object' === typeof window.console && 'function' === typeof console.log && console.log(a);\n },\n msg: function (a) {\n this.log(a);\n }\n },\n $ASTX2_E2E = (function () {\n var a = null,\n b = function (a) {\n function b(a) {\n var c = a.target;\n null == c && (c = a.srcElement);\n return c;\n }\n function e(a) {\n if (null == a) return null;\n var b = a.getAttribute('e2e_inputid');\n if (null == b || 0 >= b) return null;\n var c = a.getAttribute('e2e_type');\n if (null == c || 0 >= c) return null;\n var d = a.getAttribute('e2e_inputtype');\n if (null == d || 0 >= d) d = '';\n var e = a.getAttribute('wizvera_key');\n null == e && (e = '');\n var f = {};\n f.e2e_inputid = b;\n f.e2e_type = c;\n f.e2e_inputtype = d;\n f.name = $_astxu.getnc(a.name);\n f.form = a.form ? $_astxu.getnc(a.form.name) : '';\n f.wizvera_key = e;\n return f;\n }\n function f(a) {\n var b = e(a);\n if (null == b) return null;\n b.type = $_astxu.getnc(a.type);\n b.maxlength = $_astxu.getnc(a.getAttribute('maxlength'));\n b.txtmsk = $_astxu.getnc(a.getAttribute('e2e_txtmsk'));\n return b;\n }\n function g(a, b) {\n a.getAttribute('e2e_type') != $ASTX2_CONST.E2ETYPE_PLAIN1 && (a.readOnly = b);\n }\n function h(a, b, c, d, e) {\n 1 == n && q(a, b, c, d, e);\n }\n function q(b, s, d, e, f) {\n var g = {};\n g.pageid = $ASTX2_CONST.PAGEID;\n if (null != s) for (var h in s) s.hasOwnProperty(h) && (g[h] = s[h]);\n a.send_e2e_cmd(b, g, d, e, f);\n }\n function l(a, b) {\n var c = '';\n return (c = 0 == $ASTX2_CONST.E2EFORM_TAIL ? b + a : a + b);\n }\n function m(a, b) {\n var c = '';\n return (c =\n 'password' == a.type\n ? b == $ASTX2_CONST.E2ETYPE_CERT2\n ? l(a.name, $ASTX2_CONST.E2EFORM_TAG2_PWD)\n : l(a.name, $ASTX2_CONST.E2EFORM_TAG1_PWD)\n : b == $ASTX2_CONST.E2ETYPE_CERT2\n ? l(a.name, $ASTX2_CONST.E2EFORM_TAG2)\n : l(a.name, $ASTX2_CONST.E2EFORM_TAG1));\n }\n function C() {\n if (0 != D)\n for (var a = document.getElementsByTagName('form'), b = 0; b < a.length; b++) {\n var c = a[b];\n if (null != c) {\n var d = !1;\n if (k & $ASTX2_CONST.OPTION_E2EFORM_TAGSET) {\n var e = c.getAttribute(E.e2eform_tagset);\n if (null == e || 0 >= e) d = !0;\n } else if (k & $ASTX2_CONST.OPTION_E2EFORM_ONLY) {\n if (null == c) e = !1;\n else\n for (var e = !1, f = c.getElementsByTagName('input'), g = 0; g < f.length; g++) {\n var h = f[g];\n if (null != h && ((h = h.getAttribute('e2e_type')), null != h && 0 < h)) {\n e = !0;\n break;\n }\n }\n 0 == e && (d = !0);\n }\n if (1 != d) {\n if ((d = $_astxu.getCreatedFormValue(c, l($ASTX2_CONST.E2EFORM_INIT, $ASTX2_CONST.E2EFORM_TAG1))))\n d.value = F;\n if ((d = $_astxu.getCreatedFormValue(c, l($ASTX2_CONST.E2EFORM_INIT, $ASTX2_CONST.E2EFORM_TAG2))))\n d.value = G;\n }\n }\n }\n }\n function V(a) {\n var b = 0;\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (b = 1);\n a = {\n ver: $_astxu.getint(a.ver),\n alg: $_astxu.getint(a.alg),\n svr: $_astxu.getnc(a.svr),\n norsa: $_astxu.getint(a.norsa),\n uniq: $_astxu.getnc(a.uniq),\n utime: $_astxu.getint(a.utime),\n ncert: $_astxu.getnc(a.ncert),\n pageid: $ASTX2_CONST.PAGEID,\n noenc: b\n };\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/e2e_forminit',\n data: a,\n onSuccess: function (a) {\n var b = $_astxu.getnc(a ? a.result : '');\n 0 == $_astxu.isACK(b)\n ? $_astxu.msg('[e2e_forminit] result=' + b)\n : ((D = !0), (F = $_astxu.getnc(a.e2e_form1)), (G = $_astxu.getnc(a.e2e_form2)), C());\n },\n onFailure: function () {\n $_astxu.msg('[e2e_forminit] failure.');\n }\n });\n }\n function W() {\n $_astxu.sendAuthAjax({\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\n onSuccess: function (a) {\n var b = $_astxu.jsonParse(a);\n a = $_astxu.getnc(b ? b.result : '');\n 0 == $_astxu.isACK(a)\n ? $_astxu.msg('[_init_e2eform] result=' + a)\n : $ASTX2.set_cert(\n function () {\n V(b);\n },\n function () {\n $_astxu.msg('[_init_e2eform] set_cert() failure');\n },\n b\n );\n },\n onFailure: function (a) {\n $_astxu.msg('[_init_e2eform] failure');\n }\n });\n }\n function H(a) {\n var b = $_astxu.getHostPath() + $_astxu.getnc(window.location.pathname),\n c = 0;\n k & $ASTX2_CONST.OPTION_NOSPTDUMMY && (c = 1);\n q(\n 'e2e_start',\n { browser: $ASTX2_CONST.BROWSER_VER, ver: a.ver, svr: a.svr, valg: a.valg, url: b, custcode: w, nospt: c },\n 5e3,\n function (a) {\n var b = $_astxu.getnc(a ? a.result : '');\n if ($_astxu.isACK(b)) {\n n = 1;\n I = $_astxu.getint(a.call_settext);\n t = $_astxu.getint(a.call_gettext);\n J = $_astxu.getint(a.vm_env);\n K = $_astxu.getint(a.ak_drv);\n try {\n var c = document.activeElement;\n c && x(c, !1);\n } catch (aa) {}\n k & $ASTX2_CONST.OPTION_E2EFORM &&\n (3 > $_astxu.getint(a.stsvr) ? $ASTX2_COMM.errorAbort($ASTX2_CONST.ERROR_NEEDUPDATE) : W());\n if (k & $ASTX2_CONST.OPTION_AUTOSETTEXT)\n for (var d in u) (a = u[d]), null != a && (0 >= $_astxu.getnc(a.value).length || y(a));\n } else n = 2;\n },\n function () {\n n = 2;\n }\n );\n }\n function L(a) {\n if (0 == $_astxu.hasFocused()) return !1;\n if (0 == n) return !0;\n if (1 == n) {\n if (!1 === a) return;\n try {\n var b = document.activeElement;\n b && x(b, !1);\n } catch (c) {}\n return !0;\n }\n n = 0;\n k & $ASTX2_CONST.OPTION_NONE2E\n ? ((a = 0),\n k & $ASTX2_CONST.OPTION_NONE2E_ALG && (a = $ASTX2.mOptionStrings.none2e_alg),\n H({ ver: 1, svr: '_none2e', valg: a }))\n : $_astxu.sendAuthAjax({\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_INIT),\n onSuccess: function (a) {\n a = $_astxu.jsonParse(a);\n var b = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(b) ? H(a) : (n = -1);\n },\n onFailure: function (a) {\n n = -1;\n }\n });\n return !0;\n }\n function r(a) {\n if (null != a && (a.getAttribute('e2e_type') != $ASTX2_CONST.E2ETYPE_PLAIN1 || 0 != t)) {\n try {\n if (a != document.activeElement) return;\n } catch (b) {}\n 'number' == typeof a.selectionStart\n ? (a.selectionStart = a.selectionEnd = a.value.length)\n : 'undefined' != typeof a.createTextRange && ((a = a.createTextRange()), a.collapse(!1), a.select());\n }\n }\n function x(a, b) {\n v = !1;\n if (k & $ASTX2_CONST.OPTION_FIXEDTYPE && a) {\n var c = a.getAttribute('e2e_inputid');\n null != c && 0 < c && z[c] != a.type && (a.type = z[c]);\n }\n c = f(a);\n null != c &&\n (!0 === b && L(!1),\n h(\n 'e2e_focus',\n c,\n null,\n function (b) {\n g(a, !1);\n window.setTimeout(function () {\n r(a);\n }, 1);\n },\n function () {}\n ));\n }\n function M(a) {\n var c = b(a);\n if (null != c) {\n if ('function' === typeof $ASTX2_CUST.onHandlerPreFocus) $ASTX2_CUST.onHandlerPreFocus(c, a);\n x(c, !0);\n }\n }\n function N(a) {\n a = b(a);\n if (null != a) {\n var c = e(a);\n if (null != c) {\n try {\n if (document.hasFocus() && a === document.activeElement) return;\n } catch (f) {}\n g(a, !0);\n h('e2e_blur', c);\n }\n }\n }\n function O(a) {\n var c = b(a);\n null != c &&\n window.setTimeout(function () {\n r(c);\n }, 1);\n }\n function y(a, b) {\n var c = f(a);\n if (null != c) {\n var d = $_astxu.getnc(a.value);\n c.text = d;\n k & $ASTX2_CONST.OPTION_E2EFORM && (c.e2eform = 1);\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (c.noenc = 1);\n h(\n 'e2e_settext',\n c,\n null,\n function (d) {\n var e = $_astxu.getnc(d ? d.result : '');\n if (0 == $_astxu.isACK(e)) b && b($ASTX2_CONST.ERROR_NCK);\n else {\n if (k & $ASTX2_CONST.OPTION_E2EFORM) {\n var e = m(a, c.e2e_type),\n f = !1;\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (f = !0);\n if ((e = $_astxu.getCreatedFormValue(a.form, e, f))) e.value = $_astxu.getnc(d.e2e_data);\n }\n b && b($ASTX2_CONST.ERROR_SUCCESS);\n }\n },\n function () {\n b && b($ASTX2_CONST.ERROR_FAILED);\n }\n );\n }\n }\n function A(a) {\n 'function' === typeof a.stopPropagation && a.stopPropagation();\n 'function' === typeof a.preventDefault ? a.preventDefault() : (a.returnValue = !1);\n }\n function X(a, b, c) {\n h(\n 'e2e_gettext',\n b,\n null,\n function (b) {\n var d = $_astxu.getnc(b ? b.result : '');\n $_astxu.isACK(d)\n ? ((b = $_astxu.getnc(b.text)), (a.value = b), c && c($ASTX2_CONST.ERROR_SUCCESS))\n : c && c($ASTX2_CONST.ERROR_NCK);\n },\n function () {\n c && c($ASTX2_CONST.ERROR_FAILED);\n }\n );\n }\n function Y(a, b) {\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (b.noenc = 1);\n h(\n 'e2e_formget',\n b,\n null,\n function (c) {\n var d = $_astxu.getnc(c ? c.result : '');\n if (0 == $_astxu.isACK(d)) $_astxu.msg('[e2e_formget] ' + b.name + ',result=' + d);\n else if (((d = a.form), null != d)) {\n var e = m(a, b.e2e_type),\n f = !1;\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (f = !0);\n if ((d = $_astxu.getCreatedFormValue(d, e, f))) d.value = $_astxu.getnc(c.e2e_data);\n }\n },\n function () {}\n );\n }\n function P(a) {\n var c = b(a);\n if (null != c) {\n var e = f(c);\n if (null != e) {\n r(c);\n var p = $_astxu.getKeyCode(a);\n 17 == p && (v = !0);\n if (1 == v)\n return (\n 86 == p &&\n h(\n 'e2e_clear',\n e,\n null,\n function (a) {\n c.value = '';\n },\n function () {}\n ),\n A(a),\n !1\n );\n if (1 == (16 == p || 17 == p || 18 == p ? !0 : !1)) return !0;\n var g = !0;\n k & $ASTX2_CONST.OPTION_E2EFORM &&\n ((e.e2e_type != $ASTX2_CONST.E2ETYPE_CERT1 && e.e2e_type != $ASTX2_CONST.E2ETYPE_CERT2) || Y(c, e));\n 'function' === typeof $ASTX2_CUST.onHandlerKeyDown &&\n 0 == $ASTX2_CUST.onHandlerKeyDown(c, a) &&\n (A(a), (g = !1));\n 1 != t ||\n ('password' == c.type && e.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN1) ||\n 0 != J ||\n (1 == g &&\n X(c, e, function () {\n 'password' != c.type &&\n 'dynamic' == c.getAttribute('e2e_txtmsk') &&\n (c.value = c.value.replace(/[^*]/g, '*').substring(0, c.value.length - 1) + c.value.slice(-1));\n }),\n 0 == (8 == p || 9 == p || 13 == p || 20 == p ? !0 : !1) && (A(a), (g = !1)));\n return g;\n }\n }\n }\n function Q(a) {\n var c = b(a);\n null != c &&\n (17 == $_astxu.getKeyCode(a) && (v = !1),\n 1 == I\n ? y(c)\n : 0 == t &&\n 'password' != c.type &&\n 'dynamic' == c.getAttribute('e2e_txtmsk') &&\n (c.value = c.value.replace(/[^*]/g, '*').substring(0, c.value.length - 1) + c.value.slice(-1)),\n window.setTimeout(function () {\n r(c);\n }, 1));\n }\n function R(a) {\n var c = b(a);\n null != c &&\n window.setTimeout(function () {\n r(c);\n }, 1);\n }\n function S(a) {\n if ('IE' == $ASTX2_CONST.BROWSER_TYPE || 'EG' == $ASTX2_CONST.BROWSER_TYPE) {\n var c = b(a);\n null != c &&\n '' != c.value &&\n setTimeout(function () {\n if ('' == c.value) {\n var a = e(c);\n null != a && h('e2e_clear', a);\n }\n }, 1);\n }\n }\n function T(a) {\n var c = b(a);\n null != c &&\n ('number' == typeof c.selectionStart\n ? (c.selectionStart < c.value.length || c.selectionEnd < c.value.length) &&\n window.setTimeout(function () {\n r(c);\n }, 1)\n : 'undefined' != typeof c.createTextRange &&\n document.selection &&\n ((a = document.selection.createRange()),\n a.moveStart('character', -c.value.length),\n a.text.length <= c.value.length &&\n window.setTimeout(function () {\n r(c);\n }, 1)));\n }\n function Z(a) {}\n function U(a) {\n h('e2e_unload');\n }\n var k = 0,\n E = [],\n $ = 0,\n B = !1,\n w = 0,\n n = -1,\n I = 0,\n t = 0,\n J = 0,\n K = 1,\n v = !1,\n u = [],\n z = [],\n D = !1,\n F = '',\n G = '';\n this.setOption = function (a) {\n k |= a;\n };\n this.setOptionStrings = function (a) {\n E = a;\n };\n this.attach = function (a, b) {\n null != a && (w = a);\n k & $ASTX2_CONST.OPTION_AUTOSETTEXT && (u = []);\n k & $ASTX2_CONST.OPTION_E2EFORM && C();\n for (var c = document.getElementsByTagName('input'), d = 0; d < c.length; d++) {\n var e = c[d];\n null != e && this.addObject(e);\n }\n q(\n 'e2e_init',\n null,\n null,\n function (a) {\n L();\n $_astxu.addEvent(window, 'blur', Z);\n $_astxu.addEvent(window, 'unload', U);\n $_astxu.addEvent(window, 'beforeunload', U);\n b && b(!0);\n },\n function () {\n b && b(!1);\n }\n );\n B = !0;\n };\n this.addObject = function (a) {\n if (null != a) {\n var b = a.getAttribute('e2e_inputid');\n if (!(null != b && 0 < b)) {\n var c = a.getAttribute('e2e_type');\n if (null == c || 0 >= c)\n if (((c = a.getAttribute('e2e')), 'true' == c || 'on' == c))\n (c = $ASTX2_CONST.E2ETYPE_CERT1), a.setAttribute('e2e_type', c);\n else {\n c = $ASTX2_CONST.E2ETYPE_NONE;\n try {\n if (\n ('function' === typeof $ASTX2_CUST.isE2EObject &&\n 1 == $ASTX2_CUST.isE2EObject(a) &&\n ((c = $ASTX2_CONST.E2ETYPE_CERT1), a.setAttribute('e2e_type', c)),\n 'function' === typeof $ASTX2_CUST.getE2Etype)\n ) {\n var d = $ASTX2_CUST.getE2Etype(a);\n d && ((c = d), a.setAttribute('e2e_type', c));\n }\n } catch (e) {}\n if (c == $ASTX2_CONST.E2ETYPE_NONE) return;\n }\n b = ++$;\n a.setAttribute('e2e_inputid', b);\n d = !0;\n k & $ASTX2_CONST.OPTION_AUTOSETTEXT && 0 < a.value.length && ((d = !1), u.push(a));\n 1 == d && (a.value = '');\n a.setAttribute('autocomplete', 'off');\n g(a, !0);\n z[b] = a.type;\n $_astxu.addEvent(a, 'focus', M);\n $_astxu.addEvent(a, 'blur', N);\n $_astxu.addEvent(a, 'click', O);\n $_astxu.addEvent(a, 'keyup', Q);\n $_astxu.addEvent(a, 'keydown', P);\n $_astxu.addEvent(a, 'select', T);\n $_astxu.addEvent(a, 'mouseup', S);\n $_astxu.addEvent(a, 'mousedown', R);\n k & $ASTX2_CONST.OPTION_E2EFORM &&\n (c == $ASTX2_CONST.E2ETYPE_CERT1 || c == $ASTX2_CONST.E2ETYPE_CERT2) &&\n ((b = a.form),\n null != b &&\n ((a = m(a, c)),\n (c = !1),\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (c = !0),\n $_astxu.getCreatedFormValue(b, a, c)));\n }\n }\n };\n this.subObject = function (a) {\n var b = e(a);\n if (null != b) {\n $_astxu.removeEvent(a, 'focus', M);\n $_astxu.removeEvent(a, 'blur', N);\n $_astxu.removeEvent(a, 'click', O);\n $_astxu.removeEvent(a, 'keyup', Q);\n $_astxu.removeEvent(a, 'keydown', P);\n $_astxu.removeEvent(a, 'select', T);\n $_astxu.removeEvent(a, 'mouseup', S);\n $_astxu.removeEvent(a, 'mousedown', R);\n try {\n a == document.activeElement && h('e2e_blur', b);\n } catch (c) {}\n a.value = '';\n a.setAttribute('e2e_inputid', -1);\n a.setAttribute('e2e_type', -1);\n g(a, !1);\n }\n };\n this.getE2EHash = function (a, b) {\n var c = e(a);\n null == c\n ? b(null, $ASTX2_CONST.ERROR_PARAM)\n : h(\n 'e2e_gethash',\n c,\n null,\n function (a) {\n var c = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(c)\n ? b($_astxu.getnc(a.hash), $ASTX2_CONST.ERROR_SUCCESS)\n : b(null, $ASTX2_CONST.ERROR_NCK);\n },\n function () {\n b(null, $ASTX2_CONST.ERROR_FAILED);\n }\n );\n };\n this.getEncText = function (a, b, c) {\n var d = e(a);\n d.customcode = w;\n d.random = b;\n null == d\n ? c(null, null, $ASTX2_CONST.ERROR_PARAM)\n : h(\n 'sdk_getenctext',\n d,\n null,\n function (a) {\n var b = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(b)\n ? c(d.name, $_astxu.getnc(a.getenctext), $ASTX2_CONST.ERROR_SUCCESS)\n : c(null, null, $ASTX2_CONST.ERROR_NCK);\n },\n function () {\n c(null, null, $ASTX2_CONST.ERROR_FAILED);\n }\n );\n };\n this.getE2EText = function (a, b) {\n var c = e(a);\n null == c\n ? b(null, null, $ASTX2_CONST.ERROR_PARAM)\n : c.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN2 && c.e2e_type != $ASTX2_CONST.E2ETYPE_WIZVERA\n ? b(null, null, $ASTX2_CONST.ERROR_PARAM)\n : h(\n 'e2e_gettext',\n c,\n null,\n function (a) {\n var d = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(d)\n ? b(c.name, $_astxu.getnc(a.text), $ASTX2_CONST.ERROR_SUCCESS)\n : b(null, null, $ASTX2_CONST.ERROR_NCK);\n },\n function () {\n b(null, null, $ASTX2_CONST.ERROR_FAILED);\n }\n );\n };\n this.setE2EText = function (a, b) {\n y(a, b);\n };\n this.clearE2EText = function (a, b) {\n var c = e(a);\n null != c &&\n h(\n 'e2e_clear',\n c,\n null,\n function (d) {\n d = $_astxu.getnc(d ? d.result : '');\n if (0 == $_astxu.isACK(d)) b && b($ASTX2_CONST.ERROR_NCK);\n else {\n a.value = '';\n if (k & $ASTX2_CONST.OPTION_E2EFORM) {\n d = m(a, c.e2e_type);\n var e = !1;\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (e = !0);\n if ((d = $_astxu.getCreatedFormValue(a.form, d, e))) d.value = '';\n }\n b && b($ASTX2_CONST.ERROR_SUCCESS);\n }\n },\n function () {\n b && b($ASTX2_CONST.ERROR_FAILED);\n }\n );\n };\n this.dettach = function () {\n h('e2e_uninit');\n B = !1;\n };\n this.isAttached = function () {\n return B;\n };\n this.isStarted = function () {\n return 1 == n ? !0 : !1;\n };\n this.checkService = function (a) {\n var b = {};\n b.service = $ASTX2_CONST.SERVICE_AK;\n b.result = $ASTX2_CONST.ERROR_SUCCESS;\n if (0 >= n) {\n var c = this;\n window.setTimeout(function () {\n c.checkService(a);\n }, 300);\n } else\n 1 == n && 0 == K\n ? (b.result = $ASTX2_CONST.ERROR_FAILED)\n : 2 == n && (b.result = $ASTX2_CONST.ERROR_FAILED),\n a(b);\n };\n this.getE2EelmsForm = function (a, b, c, d) {\n for (var f = document.getElementsByTagName('input'), g = 0; g < f.length; g++) {\n var h = f[g];\n if (null != h && ((h = e(h)), null != h && h.e2e_type == d)) {\n var k = !1;\n null == a ? (k = !0) : $_astxu.getnc(a.name) == h.form && (k = !0);\n 0 != k && (b.push(h.e2e_inputid), c.push(h.name));\n }\n }\n };\n this.getE2EelmsID = function (a, b, c, d) {\n for (var f = document.getElementsByTagName('input'), g = 0; g < f.length; g++) {\n var h = f[g];\n if (null != h) {\n var k = e(h);\n if (null != k && k.e2e_type == d) {\n for (var l = !1, h = $_astxu.getnc(h.id).toLowerCase(), m = 0; m < a.length; m++)\n if (a[m].toLowerCase() == h) {\n l = !0;\n break;\n }\n 0 != l && (b.push(k.e2e_inputid), c.push(k.name));\n }\n }\n }\n };\n this.resetE2Evalues = function (a, b) {\n for (var c = document.getElementsByTagName('input'), d = 0; d < c.length; d++) {\n var f = c[d];\n if (null != f) {\n var g = e(f);\n null != g &&\n g.form == a &&\n g.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN1 &&\n g.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN2 &&\n (f.value = b);\n }\n }\n };\n this.getE2Eattribute = function (a) {\n return e(a);\n };\n };\n return {\n getInstance: function (c) {\n null === a && (a = new b(c));\n return a;\n }\n };\n })(),\n $ASTX2 = {\n mUseJQuery: !0,\n mUseAjaxHello: !1,\n mUseAutoStart: !0,\n mOption: 0,\n mOptionStrings: [],\n mE2EInst: null,\n mLastError: $ASTX2_CONST.ERROR_SUCCESS,\n send_e2e_cmd: function (a, b, c, d, e, f) {\n if ('object' == typeof $ASTX2_COMM && 0 != $ASTX2_COMM.isEnable()) {\n var g = this;\n null == f && (f = 1);\n var h = !1;\n if ('e2e_focus' == a || 'e2e_blur' == a || 'e2e_gettext' == a || 'e2e_settext' == a) h = !0;\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/' + a,\n data: b,\n timeout: c || 5e3,\n async: !1,\n seq: h,\n onSuccess: function (a) {\n d && d(a);\n },\n onFailure: function () {\n 3 > f ? g.send_e2e_cmd(a, b, c, d, e, f + 1) : e && e();\n }\n });\n }\n },\n _send_alive: function () {\n var a = { pageid: $ASTX2_CONST.PAGEID, focus: $_astxu.hasFocused() ? 1 : 0 };\n $_astxu.sendJsonp({ url: $ASTX2_COMM.mLocalServerURL + '/alive', data: a });\n },\n send_alive_run: function () {\n if (!($ASTX2_COMM.getDegugFlags() & $ASTX2_CONST.DEBUG_NOALIVE)) {\n var a = this;\n setInterval(function () {\n a._send_alive();\n }, $ASTX2_CONST.INTERVAL_ALIVE);\n }\n },\n _hello_local_server: function (a, b, c, d, e) {\n var f = this;\n if (d >= c.length)\n f.setLastError($ASTX2_CONST.ERROR_NOTINST),\n 1 == $_astxu.isWinOS() &&\n 1 == f.mUseAutoStart &&\n ((f.mUseAutoStart = !1),\n 'IE' != $ASTX2_CONST.BROWSER_TYPE &&\n 'EG' != $ASTX2_CONST.BROWSER_TYPE &&\n (window.location.href = 'astx://start')),\n b();\n else {\n var g = e[d],\n h = c[d],\n q = 'https://' + (1 == $_astxu.isMacOS() ? 'lx.astxsvc.com' : '127.0.0.1') + ':' + h + '/ASTX2',\n h = '',\n l = document.getElementsByTagName('script');\n if (l) for (var m = 0; m < l.length; m++) l[m].src && 0 <= l[m].src.indexOf('astx2.min.js') && (h = l[m].src);\n l = '$Revision: 32070 $';\n l = l.substr(11, l.length - 13);\n m = !1;\n 0 == $ASTX2.mUseAjaxHello && 1 == d % 2 && (m = !0);\n 'IE' == $ASTX2_CONST.BROWSER_TYPE &&\n 'IE10' != $ASTX2_CONST.BROWSER_VER &&\n 'IE11' != $ASTX2_CONST.BROWSER_VER &&\n ((m = !0), 2e3 < g && (g = 2e3));\n d++;\n 1 == m\n ? $_astxu.sendJsonp({\n url: q + '/hello',\n data: { url: h, version: l },\n timeout: g,\n onSuccess: function (c) {\n var d = $_astxu.getnc(c ? c.result : '');\n c = $_astxu.getnc(c ? c.client_public_key : '');\n $_astxu.isACK(d)\n ? (($ASTX2_COMM.mLocalServerURL = q), ($ASTX2_COMM.mClientPublicKey = c), a())\n : (f.setLastError($ASTX2_CONST.ERROR_NOTINST), b());\n },\n onFailure: function () {\n f._hello_local_server(a, b, c, d, e);\n }\n })\n : $_astxu.sendAjax({\n url: q + '/hello?',\n type: 'POST',\n data: { url: h, version: l },\n timeout: g,\n onSuccess: function (c) {\n var d = $_astxu.jsonParse(c);\n c = $_astxu.getnc(d ? d.result : '');\n d = $_astxu.getnc(d ? d.client_public_key : '');\n $_astxu.isACK(c)\n ? (($ASTX2_COMM.mLocalServerURL = q), ($ASTX2_COMM.mClientPublicKey = d), a())\n : (f.setLastError($ASTX2_CONST.ERROR_NOTINST), b());\n },\n onFailure: function () {\n f._hello_local_server(a, b, c, d, e);\n }\n });\n }\n },\n setOption: function (a) {\n if (null != a) {\n !0 === a.autofocus && (this.mOption |= $ASTX2_CONST.OPTION_AUTOFOCUS);\n !0 === a.e2eform && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM);\n !1 === a.e2eform_enc && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_NOENC);\n !0 === a.e2eform_alltrip && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP);\n !0 === a.e2eform_only && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_ONLY);\n !0 === a.autosettext && (this.mOption |= $ASTX2_CONST.OPTION_AUTOSETTEXT);\n !0 === a.nospt && (this.mOption |= $ASTX2_CONST.OPTION_NOSPTDUMMY);\n !0 === a.fixedtype && (this.mOption |= $ASTX2_CONST.OPTION_FIXEDTYPE);\n var b = $_astxu.getnc(a.e2eform_tagset);\n 0 < b.length &&\n ((this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_TAGSET), (this.mOptionStrings.e2eform_tagset = b));\n b = $_astxu.getint(a.none2e_alg);\n 0 < b && ((this.mOption |= $ASTX2_CONST.OPTION_NONE2E_ALG), (this.mOptionStrings.none2e_alg = b));\n }\n },\n _get_custom_value: function () {\n 'undefined' !== typeof $ASTX2_CUST.mUseJQuery && ($ASTX2.mUseJQuery = $ASTX2_CUST.mUseJQuery);\n 'undefined' !== typeof $ASTX2_CUST.mUseAjaxHello && ($ASTX2.mUseAjaxHello = $ASTX2_CUST.mUseAjaxHello);\n 'undefined' !== typeof $ASTX2_CUST.mUseAutoStart &&\n ($ASTX2.mUseAutoStart = 1 == $ASTX2.mUseAutoStart ? $ASTX2_CUST.mUseAutoStart : !1);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAIL && ($ASTX2_CONST.E2EFORM_TAIL = $ASTX2_CUST.E2EFORM_TAIL);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_INIT && ($ASTX2_CONST.E2EFORM_INIT = $ASTX2_CUST.E2EFORM_INIT);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG1 && ($ASTX2_CONST.E2EFORM_TAG1 = $ASTX2_CUST.E2EFORM_TAG1);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG2 && ($ASTX2_CONST.E2EFORM_TAG2 = $ASTX2_CUST.E2EFORM_TAG2);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG1_PWD &&\n ($ASTX2_CONST.E2EFORM_TAG1_PWD = $ASTX2_CUST.E2EFORM_TAG1_PWD);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG2_PWD &&\n ($ASTX2_CONST.E2EFORM_TAG2_PWD = $ASTX2_CUST.E2EFORM_TAG2_PWD);\n },\n init: function (a, b, c, d) {\n function e() {\n a();\n if (1 == $_astxu.isMacLinuxOS()) {\n f.send_alive_run();\n try {\n $ASTX2_MLi.init();\n } catch (b) {}\n }\n }\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n if (1 == $ASTX2_COMM.isEnable()) a();\n else {\n this._get_custom_value();\n null != d && ($ASTX2.mUseAutoStart = 1 == d ? $ASTX2.mUseAutoStart : !1);\n 1 == $ASTX2.mUseJQuery && 'undefined' === typeof jQuery && ($ASTX2.mUseJQuery = !1);\n var f = this;\n this.mE2EInst = $ASTX2_E2E.getInstance(this);\n this.mE2EInst.setOption(this.mOption);\n this.mE2EInst.setOptionStrings(this.mOptionStrings);\n var g = [],\n h = [];\n null != c\n ? ((g = [55920, 55920, 55921, 55922]), (h = [c, c, c, c]))\n : ((g = [55920, 55920, 55921, 55922]), (h = [1e4, 1500, 750, 250]));\n setTimeout(function () {\n f._hello_local_server(e, b, g, 0, h);\n }, 200);\n }\n },\n _check_local_server_chk_stamp: function (a, b, c, d) {\n var e = this;\n $_astxu.sendAuthAjax({\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_CHK_STAMP),\n data: d,\n onSuccess: function (c) {\n c = $_astxu.jsonParse(c);\n c = $_astxu.getnc(c ? c.result : '');\n $_astxu.isACK(c) ? a() : (e.setLastError($ASTX2_CONST.ERROR_NCK), b());\n },\n onFailure: function (a) {\n b();\n }\n });\n },\n _check_local_server: function (a, b, c, d) {\n var e = this;\n null == d && (d = 1);\n 3 < d\n ? (e.setLastError($ASTX2_CONST.ERROR_NOCONNECT), b())\n : $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/check',\n data: { method: c, url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_STAMP), rnd: $_astxu.rnd() },\n onSuccess: function (f) {\n var g = $_astxu.getnc(f ? f.result : '');\n $_astxu.isACK(g)\n ? ((f.rnd = $_astxu.rnd()), e._check_local_server_chk_stamp(a, b, c, f))\n : e._check_local_server(a, b, c, d + 1);\n },\n onFailure: function () {\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\n e._check_local_server(a, b, c, d + 1);\n }\n });\n },\n checkServer: function (a, b, c) {\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n 0 == $ASTX2_COMM.isEnable()\n ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), b())\n : (0 == $_astxu.isWinOS() ? (c = 1) : null == c && (c = 1), this._check_local_server(a, b, c));\n },\n _e2e_enable: function () {\n return 0 == $_astxu.isWinOS()\n ? (this.setLastError($ASTX2_CONST.ERROR_NOTSUPPORTED), !1)\n : 0 == $ASTX2_COMM.isEnable()\n ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), !1)\n : !0;\n },\n resetE2E: function (a, b) {\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n if (0 == this._e2e_enable()) return !1;\n var c = this;\n window.setTimeout(function () {\n c.mE2EInst.attach(a, b);\n }, 100);\n return !0;\n },\n initE2E: function (a, b) {\n this.mOption & $ASTX2_CONST.OPTION_AUTOFOCUS && $_astxu.setInputFocus();\n return this.resetE2E(a, b);\n },\n resetNonE2E: function (a, b) {\n return this.initNonE2E(a, b);\n },\n initNonE2E: function (a, b) {\n this.mE2EInst.setOption($ASTX2_CONST.OPTION_NONE2E);\n this.mOption & $ASTX2_CONST.OPTION_AUTOFOCUS && $_astxu.setInputFocus();\n return this.resetE2E(a, b);\n },\n uninitE2E: function () {\n 1 == $_astxu.isWinOS() && 1 == $ASTX2_COMM.isEnable() && this.mE2EInst.dettach();\n },\n uninitNonE2E: function () {\n this.uninitE2E();\n },\n set_cert: function (a, b, c, d) {\n null == d && (d = 1);\n var e = new String($_astxu.getnc(c['cert' + d]));\n if (0 == e.length) 0 < d ? a() : b();\n else {\n var f = this;\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/set_cert',\n data: { step: d, cert: e, pageid: $ASTX2_CONST.PAGEID },\n onSuccess: function (e) {\n setTimeout(function () {\n f.set_cert(a, b, c, d + 1);\n }, 250);\n },\n onFailure: function () {\n b();\n }\n });\n }\n },\n _e2edata_get: function (a, b, c, d) {\n var e = this;\n a = {\n ver: $_astxu.getint(d.ver),\n alg: $_astxu.getint(d.alg),\n svr: $_astxu.getnc(d.svr),\n norsa: $_astxu.getint(d.norsa),\n uniq: $_astxu.getnc(d.uniq),\n utime: $_astxu.getint(d.utime),\n ncert: $_astxu.getnc(d.ncert),\n pageid: $ASTX2_CONST.PAGEID,\n ids1: a.ids1,\n names1: a.names1,\n ids2: a.ids2,\n names2: a.names2\n };\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/get_data',\n data: a,\n timeout: 1e4,\n onSuccess: function (a) {\n var d = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(d) ? b(a) : (e.setLastError($ASTX2_CONST.ERROR_NCK), c());\n },\n onFailure: function () {\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\n c();\n }\n });\n },\n _e2edata: function (a, b, c) {\n var d = this;\n $_astxu.sendAuthAjax({\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\n onSuccess: function (e) {\n var f = $_astxu.jsonParse(e);\n e = $_astxu.getnc(f ? f.result : '');\n 0 == $_astxu.isACK(e)\n ? (d.setLastError($ASTX2_CONST.ERROR_NCK), c())\n : d.set_cert(\n function () {\n d._e2edata_get(a, b, c, f);\n },\n function () {\n d.setLastError($ASTX2_CONST.ERROR_NOCONNECT);\n c();\n },\n f\n );\n },\n onFailure: function (a) {\n d.setLastError($ASTX2_CONST.ERROR_FAILED);\n c();\n }\n });\n },\n getE2EData: function (a, b, c) {\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n if (0 == this._e2e_enable()) c();\n else {\n var d = [],\n e = [],\n f = [],\n g = [];\n this.mE2EInst.getE2EelmsForm(a, d, e, 1);\n this.mE2EInst.getE2EelmsForm(a, f, g, 2);\n a = { ids1: d.join(','), names1: e.join(','), ids2: f.join(','), names2: g.join(',') };\n this._e2edata(a, b, c);\n }\n },\n getE2EDataRetry: function (a, b, c, d, e) {\n null == d && (d = 3);\n null == e && (e = 1e3);\n if (0 >= d) this.setLastError($ASTX2_CONST.ERROR_EXCESS), c();\n else {\n var f = this;\n this.getE2EData(\n a,\n function (a) {\n b(a);\n },\n function () {\n f.getLastError() == $ASTX2_CONST.ERROR_NOINIT\n ? window.setTimeout(function () {\n f.getE2EDataRetry(a, b, c, d - 1, e);\n }, e)\n : c();\n }\n );\n }\n },\n getE2EDataIDs: function (a, b, c) {\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n if (0 == this._e2e_enable()) c();\n else {\n null == a && (that.setLastError($ASTX2_CONST.ERROR_PARAM), c());\n var d = [],\n e = [],\n f = [],\n g = [];\n this.mE2EInst.getE2EelmsID(a, d, e, 1);\n this.mE2EInst.getE2EelmsID(a, f, g, 2);\n a = { ids1: d.join(','), names1: e.join(','), ids2: f.join(','), names2: g.join(',') };\n this._e2edata(a, b, c);\n }\n },\n setE2EData: function (a, b, c, d) {\n null == c && (c = !0);\n null == d && (d = '');\n var e = $_astxu.getnc(b.e2e_data1);\n 0 < e.length && ($_astxu.getCreatedFormValue(a, 'e2e_data1').value = e);\n b = $_astxu.getnc(b.e2e_data2);\n 0 < b.length && ($_astxu.getCreatedFormValue(a, 'e2e_data2').value = b);\n 1 == c && this.mE2EInst.resetE2Evalues($_astxu.getnc(a.name), d);\n },\n getE2EPageID: function () {\n return $ASTX2_CONST.PAGEID;\n },\n getE2EInputID: function (a) {\n a = this.mE2EInst.getE2Eattribute(a);\n return null == a ? null : a.e2e_inputid;\n },\n getE2EHash: function (a, b) {\n this.mE2EInst.getE2EHash(a, function (a, d) {\n b(a, d);\n });\n },\n getEncText: function (a, b, c) {\n this.mE2EInst.getEncText(a, b, function (a, b, f) {\n c(b, f);\n });\n },\n getE2EText: function (a, b) {\n this.mE2EInst.getE2EText(a, function (a, d, e) {\n b(d, e);\n });\n },\n getE2ETextS: function (a, b) {\n for (var c = 0, d = 0, e = [], f = 0; f < a.length; f++) {\n var g = a[f];\n null != g && ((g = g.getAttribute('e2e_type')), null != g && g == $ASTX2_CONST.E2ETYPE_PLAIN2 && c++);\n }\n if (0 == c || c != a.length) b(e, $ASTX2_CONST.ERROR_PARAM);\n else\n for (f = 0; f < a.length; f++)\n this.mE2EInst.getE2EText(a[f], function (a, f, g) {\n d >= c || (0 == g ? (e[a] = f) : (d = c), ++d >= c && b(e, g));\n });\n },\n setE2EText: function (a, b) {\n this.mE2EInst.setE2EText(a, b);\n },\n clearE2EText: function (a, b) {\n this.mE2EInst.clearE2EText(a, b);\n },\n clearE2EForm: function (a) {\n for (var b = document.getElementsByTagName('input'), c = 0; c < b.length; c++) {\n var d = b[c];\n null != d &&\n d.form.name == a &&\n 0 != ('text' == d.type || 'password' == d.type) &&\n null != d.getAttribute('e2e_type') &&\n this.mE2EInst.clearE2EText(d);\n }\n },\n addE2EObject: function (a, b) {\n null == b && (b = $ASTX2_CONST.E2ETYPE_CERT1);\n !a || ('text' != a.type && 'password' != a.type) || (a.setAttribute('e2e_type', b), this.mE2EInst.addObject(a));\n },\n subE2EObject: function (a) {\n a && this.mE2EInst.subObject(a);\n },\n setE2EAllExceptInputs: function () {\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\n var c = a[b];\n null != c &&\n 0 != ('text' == c.type || 'password' == c.type) &&\n null == c.getAttribute('e2e_type') &&\n c.setAttribute('e2e_type', $ASTX2_CONST.E2ETYPE_NONE);\n }\n },\n killFocusE2EAllInputs: function () {\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\n var c = a[b];\n null != c && 0 != ('text' == c.type || 'password' == c.type) && 0 < c.getAttribute('e2e_type') && c.blur();\n }\n },\n _pclogdata_get: function (a, b, c, d) {\n var e = this;\n c = {\n ver: $_astxu.getint(c.ver),\n alg: $_astxu.getint(c.alg),\n svr: $_astxu.getnc(c.svr),\n norsa: $_astxu.getint(c.norsa),\n uniq: $_astxu.getnc(c.uniq),\n utime: $_astxu.getint(c.utime),\n nlog: $_astxu.getnc(c.nlog),\n ipaddr: $_astxu.getnc(c.ipaddr),\n s2c_alg: $_astxu.getnc(c.s2c_alg),\n s2c_key: $_astxu.getnc(c.s2c_key),\n s2c_salt: $_astxu.getnc(c.s2c_salt),\n browser: $ASTX2_CONST.BROWSER_VER,\n pageid: $ASTX2_CONST.PAGEID,\n opt: d\n };\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/get_pclog',\n data: c,\n timeout: 1e4,\n onSuccess: function (c) {\n var d = $_astxu.getnc(c ? c.result : '');\n $_astxu.isACK(d) ? a(c) : (e.setLastError($ASTX2_CONST.ERROR_NCK), b());\n },\n onFailure: function () {\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\n b();\n }\n });\n },\n _pclogdata: function (a, b, c) {\n var d = this;\n $_astxu.sendAuthAjax({\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\n data: { pclog: 1, client_public_key: $ASTX2_COMM.mClientPublicKey },\n onSuccess: function (e) {\n var f = $_astxu.jsonParse(e);\n e = $_astxu.getnc(f ? f.result : '');\n 0 == $_astxu.isACK(e)\n ? (d.setLastError($ASTX2_CONST.ERROR_NCK), b())\n : d.set_cert(\n function () {\n d._pclogdata_get(a, b, f, c);\n },\n function () {\n d.setLastError($ASTX2_CONST.ERROR_NOCONNECT);\n b();\n },\n f\n );\n },\n onFailure: function (a) {\n d.setLastError($ASTX2_CONST.ERROR_FAILED);\n b();\n }\n });\n },\n getPCLOGData: function (a, b, c, d) {\n null == d && (d = '');\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n 0 == $ASTX2_COMM.isEnable() ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), c()) : this._pclogdata(b, c, d);\n },\n getPCLOGDataRetry: function (a, b, c, d, e) {\n null == d && (d = 3);\n null == e && (e = 1e3);\n if (0 >= d) this.setLastError($ASTX2_CONST.ERROR_EXCESS), c();\n else {\n var f = this;\n this.getPCLOGData(\n a,\n function (a) {\n b(a);\n },\n function () {\n f.getLastError() == $ASTX2_CONST.ERROR_NOINIT\n ? window.setTimeout(function () {\n f.getPCLOGDataRetry(a, b, c, d - 1, e);\n }, e)\n : c();\n }\n );\n }\n },\n setPCLOGData: function (a, b) {\n var c = $_astxu.getnc(b.pclog_data);\n 0 < c.length && ($_astxu.getCreatedFormValue(a, 'pclog_data').value = c);\n },\n isVmEnv: function (a, b) {\n 0 == $ASTX2_COMM.isEnable()\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\n : (null == b && (b = ''),\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/is_vm_env',\n data: { opts: b },\n onSuccess: function (b) {\n var d = $_astxu.getnc(b ? b.result : '');\n $_astxu.isACK(d) ? a(b.vm_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\n },\n onFailure: function () {\n a(null, $ASTX2_CONST.ERROR_FAILED);\n }\n }));\n },\n isRemoteEnv: function (a, b) {\n 0 == $ASTX2_COMM.isEnable()\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\n : (null == b && (b = ''),\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/is_remote_env',\n data: { opts: b },\n onSuccess: function (b) {\n var d = $_astxu.getnc(b ? b.result : '');\n $_astxu.isACK(d) ? a(b.remote_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\n },\n onFailure: function () {\n a(null, $ASTX2_CONST.ERROR_FAILED);\n }\n }));\n },\n isVmRemoteEnv: function (a, b) {\n 0 == $ASTX2_COMM.isEnable()\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\n : (null == b && (b = ''),\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/is_vm_remote_env',\n data: { opts: b },\n onSuccess: function (b) {\n var d = $_astxu.getnc(b ? b.result : '');\n $_astxu.isACK(d) ? a(b.vm_remote_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\n },\n onFailure: function () {\n a(null, $ASTX2_CONST.ERROR_FAILED);\n }\n }));\n },\n checkService: function (a, b) {\n a == $ASTX2_CONST.SERVICE_AK && this.mE2EInst.checkService(b);\n },\n setProtect: function (a, b) {\n if (0 == $ASTX2_COMM.isEnable()) b && b($ASTX2_CONST.ERROR_NOINIT);\n else {\n var c = {\n customerid: $_astxu.getnc($ASTX2_CUST.mCustomerID),\n ak: a & $ASTX2_CONST.PROTECT_AK ? 1 : -1,\n fw: a & $ASTX2_CONST.PROTECT_FW ? 1 : -1,\n pb: a & $ASTX2_CONST.PROTECT_PB ? 1 : -1,\n pcs: a & $ASTX2_CONST.PROTECT_PCS ? 1 : -1\n };\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/set_protect',\n data: c,\n onSuccess: function (a) {\n a = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(a) ? b && b($ASTX2_CONST.ERROR_SUCCESS) : b && b($ASTX2_CONST.ERROR_NCK);\n },\n onFailure: function () {\n b && b($ASTX2_CONST.ERROR_FAILED);\n }\n });\n }\n },\n isNotSupportOS: function (a, b) {\n 0 == $ASTX2_COMM.isEnable()\n ? b && b(null, $ASTX2_CONST.ERROR_NOINIT)\n : $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/is_not_support_os',\n data: {\n ak: a & $ASTX2_CONST.PROTECT_AK ? 1 : 0,\n fw: a & $ASTX2_CONST.PROTECT_FW ? 1 : 0,\n pb: a & $ASTX2_CONST.PROTECT_PB ? 1 : 0,\n pcs: a & $ASTX2_CONST.PROTECT_PCS ? 1 : 0\n },\n onSuccess: function (a) {\n var d = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(d) ? b && b(a, $ASTX2_CONST.ERROR_SUCCESS) : b && b(null, $ASTX2_CONST.ERROR_NCK);\n },\n onFailure: function () {\n b && b(null, $ASTX2_CONST.ERROR_FAILED);\n }\n });\n },\n isAccessible: function (a, b, c, d, e) {\n null == e && (e = 750);\n if (a == $ASTX2_CONST.REQUEST_JSONP)\n $_astxu.sendJsonp({\n url: b,\n nocallback: !0,\n timeout: e,\n onSuccess: function () {\n c && c(b);\n },\n onFailure: function () {\n d && d(b);\n }\n });\n else {\n if (\n 0 != b.indexOf(window.location.protocol + '//' + window.location.host) &&\n 'IE' == $ASTX2_CONST.BROWSER_TYPE\n ) {\n if ('IE10' != $ASTX2_CONST.BROWSER_VER && 'IE11' != $ASTX2_CONST.BROWSER_VER) {\n d && d(b, 'CORS, not allowed browser');\n return;\n }\n if (0 != b.indexOf('http:') && 0 != b.indexOf('https:')) {\n d && d(b, 'CORS, not allowed protocol');\n return;\n }\n }\n $_astxu.sendAjax({\n url: b,\n type: 'GET',\n timeout: e,\n onSuccess: function (a) {\n c && c(b);\n },\n onFailure: function (a) {\n d && d(b, a);\n }\n });\n }\n },\n uninit: function () {\n this.uninitE2E();\n $ASTX2_COMM.uninit();\n },\n setLastError: function (a) {\n this.mLastError = a;\n },\n getLastError: function () {\n return this.mLastError;\n }\n };\n$ASTX2_MLi = {\n init: function () {\n setTimeout(function () {\n var a = { pageid: $ASTX2_CONST.PAGEID, focus: $_astxu.hasFocused() ? 1 : 0 };\n $_astxu.sendJsonp({ url: $ASTX2_COMM.mLocalServerURL + '/initForML', timeout: 1e3, data: a });\n }, 200);\n }\n};\n\nwindow.$ASTX2 = {\n ...$ASTX2,\n $ASTX2_COMM,\n $_astxu,\n $ASTX2_E2E,\n $ASTX2_MLi\n};\n\n/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 30833 $ */\nconst getSubdomain = (hostname) => {\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\n return '';\n }\n\n const parts = hostname.split('.');\n\n // 최소 3개 부분이 있어야 서브도메인 존재 (subdomain.domain.com)\n if (parts.length < 3) {\n return '';\n }\n\n // 첫 번째 부분이 서브도메인\n return parts[0] ?? '';\n};\n\n/**\n * 호스트명을 기반으로 환경을 판단합니다.\n * @param hostname 호스트명\n * @returns 환경 구분 문자열 ('local' | 'dev' | 'stg' | 'prd')\n */\nconst getEnvironmentFromHostname = (hostname) => {\n const subDomain = getSubdomain(hostname);\n\n // localhost 판단\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost:')) {\n return 'local';\n }\n\n // dev 환경 판단\n if (subDomain.includes(`dev`)) {\n return 'dev';\n }\n\n // stg 환경 판단\n if (subDomain.includes('stg')) {\n return 'stg';\n }\n\n // 기본 운영\n return 'prd';\n};\n\nconst getServicePath = () => {\n if (typeof window.isStorybookEnv === 'boolean') {\n return '';\n } else {\n return `/${location.pathname.split('/')[1]}`;\n }\n};\n","/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 30833 $ */\r\n/* eslint-disable */\r\n\r\nlet $ASTX2_CUST = {\r\n // Customer option\r\n /*\r\n\tmUseJQuery: false, \t// Whether to use JQuery.\t\r\n\tmUseAjaxHello: false,\r\n\tmUseAutoStart: false, \r\n\tE2EFORM_TAIL: true,\r\n\tE2EFORM_INIT: '_e2e_forminit',\r\n\tE2EFORM_TAG1: '_e2e_1__',\r\n\tE2EFORM_TAG2: '_e2e_2__',\r\n\tE2EFORM_TAG1_PWD: '_e2e_1_pwd__',\r\n\tE2EFORM_TAG2_PWD: '_e2e_2_pwd__',\r\n\t*/\r\n\r\n mCustomerID: null, // Customer ID for setProtect.\r\n\r\n // ASTX2_CUST defined values\r\n URL_GET_INIT: 101,\r\n URL_GET_CERT: 102,\r\n URL_GET_STAMP: 103,\r\n URL_CHK_STAMP: 104,\r\n\r\n setCustomerID(customerID) {\r\n if (customerID !== null && customerID !== 'undefined') {\r\n this.mCustomerID = customerID;\r\n }\r\n },\r\n\r\n getURL(type) {\r\n let result = '';\r\n const timestamp = new Date().getTime();\r\n\r\n switch (type) {\r\n case this.URL_GET_INIT:\r\n result = `${getServicePath()}/api/dea/sltn/astx2/init/get`;\r\n break;\r\n case this.URL_GET_CERT:\r\n result = `${getServicePath()}/api/dea/sltn/astx2/cert/get?v=${timestamp}`; // WAF 차단 방지 (post 요청 시 값이 없는 경우 차단)\r\n break;\r\n case this.URL_GET_STAMP:\r\n result = `${getServicePath()}/api/dea/sltn/astx2/stamp/get`;\r\n break;\r\n case this.URL_CHK_STAMP:\r\n result = `${getServicePath()}/api/dea/sltn/astx2/stamp-chk/post`;\r\n break;\r\n } // end of switch\r\n\r\n return result;\r\n },\r\n\r\n isE2EObject(obj) {\r\n return false;\r\n },\r\n\r\n getE2Etype(obj) {\r\n return null;\r\n },\r\n\r\n onCreatedFormValue(obj, obj_name) {},\r\n\r\n onHandlerPreFocus(obj, event) {},\r\n\r\n onHandlerKeyDown(obj, event) {\r\n return true;\r\n },\r\n\r\n getErrorMessage(errno) {\r\n let message = '[ASTx] ';\r\n\r\n switch (errno) {\r\n case $ASTX2_CONST.ERROR_FAILED:\r\n message += '내부 오류가 발생하였습니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NOINIT:\r\n message += '초기화가 필요합니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NOTINST:\r\n message += '설치되어 있지 않습니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NOTSUPPORTED:\r\n message += '지원하지 않는 OS입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NOCONNECT:\r\n message += '서버(Web) 통신 실패입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NCK:\r\n message += '서버(Local) 응답 실패입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_ERR:\r\n message += '서버(Local) 내부 오류입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NSP:\r\n message += '지원하지 되지 않는 환경입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_PARAM:\r\n message += '잘못된 인자입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_EXCESS:\r\n message += '재시도 회수를 초과 하였습니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NEEDUPDATE:\r\n message += '제품 업데이트가 필요합니다.';\r\n break;\r\n default:\r\n message += `errno=${errno}`;\r\n break;\r\n } // end of switch\r\n\r\n return message;\r\n },\r\n\r\n errorAbort(errno) {\r\n alert(this.getErrorMessage(errno));\r\n }\r\n};\r\n","type ASTXWindow = Window & {\n $ASTX2: any;\n};\n\ndeclare const window: ASTXWindow;\n\nimport astx2ScriptContent from './astx2/astx2.min.js';\nimport astx2ScriptCustomContent from './astx2/astx2_custom.js';\n\n/**\n * element를 동적으로 추가하는 경우 사용.\n * @param el HTMLElement\n * @param e2e_type string\n */\nexport function addE2EObject(el: HTMLElement, e2e_type?: string) {\n if (window.$ASTX2) {\n window.$ASTX2.addE2EObject(el, e2e_type);\n window.$ASTX2.resetE2E();\n }\n}\n\nexport function hasAstx2() {\n return !!window.$ASTX2;\n}\n\ninterface Astx2Init {\n initSuccess?: () => void;\n initFailure?: () => void;\n checkServerSuccess?: () => void;\n checkServerFailure?: () => void;\n}\n\nexport const loadScript = (callback?: () => void) => {\n if (!window.$ASTX2) {\n console.log('dynamic load');\n const script = document.createElement('script');\n script.innerHTML = `\n ${astx2ScriptContent} \n ${astx2ScriptCustomContent}\n `;\n\n document.head.appendChild(script);\n\n script.onload = () => {\n callback && callback();\n };\n }\n};\n\nconst init = ({\n initSuccess = () => {\n /* empty */\n },\n initFailure = () => {\n /* empty */\n },\n checkServerSuccess = () => {\n /* empty */\n },\n checkServerFailure = () => {\n /* empty */\n }\n}: Astx2Init = {}) => {\n window.$ASTX2.init(\n () => {\n window.$ASTX2.initE2E();\n window.$ASTX2.checkServer(\n () => {\n checkServerSuccess();\n },\n () => {\n checkServerFailure();\n console.error(`ASTX.checkServer() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n );\n initSuccess();\n },\n () => {\n initFailure();\n if (window.$ASTX2.getLastError() === 103) {\n console.error('AhnLab Safe Transaction 클라이언트가 설치되지 않았습니다.');\n } else {\n console.error(`$ASTX2.init() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n }\n );\n};\n\n/**\n * @description 페이지진입후 최초 실행\n */\nexport const initASTX2 = ({\n initSuccess = () => {\n /* empty */\n },\n initFailure = () => {\n /* empty */\n },\n checkServerSuccess = () => {\n /* empty */\n },\n checkServerFailure = () => {\n /* empty */\n }\n}: Astx2Init = {}) => {\n if (window.$ASTX2) {\n init({\n initSuccess,\n initFailure,\n checkServerSuccess,\n checkServerFailure\n });\n }\n};\n\n/**\n * form객체로 감싸진 html input이 아닌 개별 input을 컨트롤\n * id기반으로 데이터접근\n * @param ids string[]\n * @param onSuccess\n * @param onFailure\n */\nexport function getE2EDataIDs(ids: string[], onSuccess: (astx_data: any) => void, onFailure: () => void = () => {}) {\n if (window.$ASTX2) {\n window.$ASTX2.getE2EDataIDs(\n ids,\n async (astx_data: any) => {\n /**\n * 성공시 데이터 세팅\n */\n onSuccess(astx_data);\n },\n () => {\n onFailure();\n console.log(`ASTX.getE2EData() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n );\n }\n}\n","\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\n\n/*****************************\n * 날짜 관련 유틸\n ******************************/\ndayjs.locale('ko');\ndayjs.extend(customParseFormat);\n\n/**\n *\n * @param year\n * @param month\n * @returns\n */\nexport function getLastDay(year: number, month: number) {\n switch (month) {\n case 2:\n return year % 4 === 0 ? 29 : 28;\n case 4:\n case 6:\n case 9:\n case 11:\n return 30;\n default:\n return 31;\n }\n}\n\n/**\n * 한달뒤 날짜를 포맷형태로 리턴\n * @param 20200101 or 2020.01.01\n * @param 'YYYY.MM.DD'\n * @returns\n */\nexport const getOneMonthLater = (value?: string, format?: string): string => {\n const str = value ? value.split('.').join('') : '';\n const date = value\n ? new Date(Number(str.substring(0, 4)), Number(str.substring(4, 6)) - 1, Number(str.substring(6, 8)))\n : new Date();\n try {\n return dayjs(new Date(date.setMonth(date.getMonth() + 1))).format(format || 'YYYY.MM.DD');\n } catch (err) {\n console.warn(err);\n\n return '';\n }\n};\n\n/**\n * 날짜 차이를 구한다. 포맷에 맞지 않으면 Not a Number 리턴\n * @param date1 (yyyymmdd or yyyy.mm.dd or yyyy-mm-dd)\n * @param date2 (yyyymmdd or yyyy.mm.dd or yyyy-mm-dd)\n * @returns date1 - date2\n */\nexport const getDateDiff = (date1: string | number | dayjs.Dayjs | Date, date2: string | number | dayjs.Dayjs | Date): number => {\n const diff1 = dayjs(date1);\n const diff2 = dayjs(date2);\n\n /** diff1 - diff2: 현재: 0 */\n return diff1.diff(diff2, 'day');\n};\n\n/**\n * 입력되어진 생년월일 값이 당일 기준으로 미래시점인 경우 false를 반환합니다. (회원체계 기준 9, 0 일 경우 오류)\n * @param front 주민등록번호 앞 6자리\n * @param back 주민등록번호 뒤 첫자리\n * @returns boolean\n */\nexport const validateBirthdate = (front: string, back: string) => {\n const year = parseInt(front.slice(0, 2));\n const month = parseInt(front.slice(2, 4));\n const day = parseInt(front.slice(4, 6));\n let birthYear = 0;\n\n switch (back) {\n case '1':\n case '2':\n case '5':\n case '6':\n birthYear = 1900 + year;\n break;\n case '3':\n case '4':\n case '7':\n case '8':\n birthYear = 2000 + year;\n break;\n case '9':\n case '0':\n // birthYear = 1800 + year;\n return false;\n default:\n return false;\n }\n\n const birthdate = new Date(birthYear, month - 1, day);\n const currdate = new Date();\n\n return birthdate < currdate;\n};\n\n/**\n * 목표 날짜가 비교 날짜 이후 인지 확인하는 함수 (YYYYMMDD 형식)\n * @param targetDate\n * @param compareDate\n * @returns boolean\n */\nexport function isDateAfter(targetDate: string | number | dayjs.Dayjs | Date, compareDate: string | number | dayjs.Dayjs | Date) {\n const targetDateTime = new Date(convertDateFormat(targetDate, 'YYYY-MM-DD')).getTime();\n const compareDateTime = new Date(convertDateFormat(compareDate, 'YYYY-MM-DD')).getTime();\n\n return targetDateTime > compareDateTime;\n}\n\n/**\n * 날짜를 포맷형태로 리턴\n * @param 20200101 string\n * @param 'YYYY.MM.DD\n * @returns 포맷화된 날짜\n */\nexport const convertDateFormat = (value?: string | number | dayjs.Dayjs | Date, format?: string): string => {\n if (!value) {\n return '';\n }\n\n return dayjs(value).format(format || 'YYYY.MM.DD');\n};\n\n/**\n * 주어진 날짜가 오늘 날짜 이후인지 확인합니다.\n *\n * @param {string} dateString - 확인할 날짜 문자열입니다.\n * @param {dayjs.OptionType} [format] - 날짜 문자열의 형식입니다.\n * @returns {boolean} - 주어진 날짜가 오늘 이후라면 true를 반환합니다.\n */\nexport const isFutureDate = (dateString?: string | number | dayjs.Dayjs | Date, format?: dayjs.OptionType) => {\n if (!dateString) {\n return false;\n }\n\n const today = dayjs().startOf('day');\n const date = dayjs(dateString, format || 'YYYYMMDD', true);\n\n return date.isValid() && date.isAfter(today);\n};\n\n\n\n/**\n * 자주 사용하는 타입들 추가해두었습니다. 필요하신 형태 있으면 추가해주세요.\n */\nexport type DateFormat =\n | 'YYYY-MM-DD'\n | 'YYYY.MM.DD'\n | 'YYYY-MM'\n | 'YYYY-MM-DD HH:mm:ss'\n | 'YYYY.MM.DD HH:mm:ss'\n | 'YYYY-MM-DD HH:mm'\n | 'YYYYMMDD'\n | 'YYYY.M.D'\n | 'YYYY.M'\n | 'YYYY.MM.DD(dd) HH:mm:ss'\n | 'HH:mm:ss'\n | 'YYYY.M.D(dd)'\n | 'HH:mm';\n\ninterface Props {\n /** 날짜 문자열 */\n dateString: string | number | Date | dayjs.Dayjs;\n /** 현재 날짜 포맷 */\n fromFormat?: string;\n /** 컨버팅할 날짜 포맷 */\n toFormat: string;\n}\n\n/**\n * date string 을 입력받고 패턴에 맞게 포맷팅을 변경하는 유틸 함수\n * fromFormat 현재 날짜 포맷\n * toFormat 리턴 날짜 포맷\n */\nexport const convertDateString = ({ dateString, fromFormat, toFormat }: Props) => {\n return dayjs(dateString, fromFormat).format(toFormat);\n};\n\nexport const isDate = (value: unknown) => {\n return value instanceof Date && !isNaN(+value);\n};\n\n\n/**\n * 날짜 유효성 검사\n *\n * @param {string} dateString - 검사할 날짜 문자열.\n * @param {dayjs.OptionType} [format] - 날짜 문자열의 형식입니다.\n * @returns {boolean} - 유효한 날짜이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.\n */\nexport const isValidDate = (dateString?: string | number | dayjs.Dayjs | Date, format?: dayjs.OptionType) => {\n if (!dateString) {\n return false;\n }\n\n const date = dayjs(dateString, format || 'YYYYMMDD', true);\n\n return date.isValid();\n};\n\n\nexport type PeriodType = 'thisWeek' | 'lastWeek' | 'last7Days' | 'thisMonth' | 'lastMonth' | 'last365Days' | 'week' | 'month' | 'today';\n/**\n * @description\n * today 당일\n * week 7일: 오늘 기준 7일 전\n * month 30: 오늘 기준 30일 전\n * thisWeek 이번 주 (일요일 ~ 토요일)\n * lastWeek 지난 주 (일요일 ~ 토요일)\n * last7Days 최근 7일 (오늘 포함)\n * thisMonth 이번 달 (1일 ~ 말일)\n * lastMonth 지난 달 (1일 ~ 말일)\n * last365Days 최근 365일 (오늘 포함)\n * @param periodType \n * @returns \n */\nexport const getPeriodDate = (periodType: PeriodType | 'today') => {\n\n const lastMonth = dayjs().subtract(1, 'M');\n\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const endDate = new Date(today);\n let startDate: Date;\n\n switch (periodType) {\n case 'today':\n // 당일\n startDate = new Date(today);\n\n return { startDate, endDate };\n\n case 'week':\n // 7일: 오늘 기준 7일 전\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 6);\n\n return { startDate, endDate };\n case 'month':\n // 30일: 오늘 기준 30일 전\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 29);\n\n return { startDate, endDate };\n\n case 'thisWeek':\n // 이번 주 (일요일 ~ 토요일)\n return ({ startDate: dayjs().day(0).toDate(), endDate: dayjs().day(6).toDate() });\n case 'lastWeek':\n // 지난 주 (일요일 ~ 토요일)\n return ({\n startDate: dayjs().subtract(1, 'w').day(0).toDate(),\n endDate: dayjs().subtract(1, 'w').day(6).toDate()\n });\n case 'last7Days':\n // 최근 7일 (오늘 포함)\n return ({ startDate: dayjs().subtract(7, 'd').toDate(), endDate: dayjs().toDate() });\n case 'thisMonth':\n // 이번 달 (1일 ~ 말일)\n return ({\n startDate: dayjs().date(1).toDate(),\n endDate: dayjs().date(dayjs().daysInMonth()).toDate()\n });\n case 'lastMonth':\n // 지난 달 (1일 ~ 말일)\n return ({\n startDate: lastMonth.date(1).toDate(),\n endDate: lastMonth.date(lastMonth.daysInMonth()).toDate()\n });\n case 'last365Days':\n // 최근 365일 (오늘 포함)\n return ({ startDate: dayjs().subtract(365, 'd').toDate(), endDate: dayjs().toDate() });\n default:\n return null;\n }\n\n\n};\n\n\n","(function (w, d, s, l, i) {\n w[l] = w[l] || [];\n w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });\n let f = d.getElementsByTagName(s)[0],\n j = d.createElement(s),\n dl = l !== 'dataLayer' ? `&l=${l}` : '';\n j.async = true;\n j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`;\n f.parentNode.insertBefore(j, f);\n})(window, document, 'script', 'dataLayer', 'GTM-PPT3LJ56');\n","import { isClient } from '../environment-utils.js';\n\nimport gaScript from './ga.js';\n\nexport const loadGaScript = () => {\n if (isClient()) {\n //이미 로드된 경우 return\n if (document.querySelector('script[src*=\"googletagmanager.com/gtm.js\"]')) {\n return;\n }\n console.log('ga script load dynamic');\n const script = document.createElement('script');\n script.innerHTML = `\n ${gaScript}\n `;\n document.head.appendChild(script);\n\n }\n}"]}
1
+ {"version":3,"sources":["../src/utils/timing-utils.ts","../src/utils/cookie-utils.ts","../src/utils/environment-utils.ts","../src/utils/user-agent-utils.ts","../src/utils/event-handler-utils.ts","../src/utils/canvas-utils.ts","../src/utils/file-utils.ts","../src/utils/astx2/astx2.min.js","../src/utils/astx2/astx2_custom.js","../src/utils/astx2-utils.ts","../src/utils/date-utils.ts","../src/utils/ga/ga.js","../src/utils/ga/index.ts"],"names":["dayjs","customParseFormat"],"mappings":";;;;;;;;;;;;;;;AAMO,SAAS,QAAA,CAA6C,MAAS,KAAiD,EAAA;AACrH,EAAA,IAAI,QAAW,GAAA,CAAA;AACf,EAAA,IAAI,OAAiC,GAAA,IAAA;AAErC,EAAA,OAAO,IAAI,IAAwB,KAAA;AACjC,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AAErB,IAAI,IAAA,GAAA,GAAM,YAAY,KAAO,EAAA;AAE3B,MAAW,QAAA,GAAA,GAAA;AACX,MAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,KACd,MAAA,IAAW,CAAC,OAAS,EAAA;AAEnB,MAAU,OAAA,GAAA,UAAA;AAAA,QACR,MAAM;AACJ,UAAA,QAAA,GAAW,KAAK,GAAI,EAAA;AACpB,UAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACZ,UAAU,OAAA,GAAA,IAAA;AAAA,SACZ;AAAA,QACA,SAAS,GAAM,GAAA,QAAA;AAAA,OACjB;AAAA;AACF,GACF;AACF;AAQO,SAAS,QAAA,CAA6C,MAAS,KAAiD,EAAA;AACrH,EAAA,IAAI,OAAiC,GAAA,IAAA;AAErC,EAAA,OAAO,IAAI,IAAwB,KAAA;AACjC,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA;AAEtB,IAAA,OAAA,GAAU,WAAW,MAAM;AACzB,MAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACZ,MAAU,OAAA,GAAA,IAAA;AAAA,OACT,KAAK,CAAA;AAAA,GACV;AACF;;;ACjDa,IAAA,SAAA,GAAY,CAAC,IAAyB,KAAA;AACjD,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAO,OAAA,EAAA;AAAA;AAET,EAAM,MAAA,KAAA,GAAQ,SAAS,MAAO,CAAA,KAAA,CAAM,IAAI,MAAO,CAAA,CAAA,OAAA,EAAU,IAAI,CAAA,QAAA,CAAU,CAAC,CAAA;AAExE,EAAA,OAAO,QAAQ,kBAAmB,CAAA,KAAA,CAAM,CAAC,CAAA,IAAK,EAAE,CAAI,GAAA,EAAA;AACtD;AAEO,IAAM,YAAY,CACvB,IAAA,EACA,KACA,EAAA,OAAA,GAKI,EACK,KAAA;AACT,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAA;AAAA;AAGF,EAAA,IAAI,eAAe,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAEvD,EAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,IAAI,IAAA,WAAA;AACJ,IAAI,IAAA,OAAO,OAAQ,CAAA,OAAA,KAAY,QAAU,EAAA;AACvC,MAAA,WAAA,uBAAkB,IAAK,EAAA;AACvB,MAAA,WAAA,CAAY,OAAQ,CAAA,WAAA,CAAY,OAAQ,EAAA,GAAI,QAAQ,OAAO,CAAA;AAAA,KACtD,MAAA;AACL,MAAA,WAAA,GAAc,OAAQ,CAAA,OAAA;AAAA;AAExB,IAAgB,YAAA,IAAA,CAAA,UAAA,EAAa,WAAY,CAAA,WAAA,EAAa,CAAA,CAAA;AAAA;AAGxD,EAAgB,YAAA,IAAA,CAAA,OAAA,EAAU,OAAQ,CAAA,IAAA,IAAQ,GAAG,CAAA,CAAA;AAE7C,EAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,IAAgB,YAAA,IAAA,CAAA,SAAA,EAAY,QAAQ,MAAM,CAAA,CAAA;AAAA;AAG5C,EAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,IAAgB,YAAA,IAAA,UAAA;AAAA;AAGlB,EAAA,QAAA,CAAS,MAAS,GAAA,YAAA;AACpB;AAEO,IAAM,YAAe,GAAA,CAAC,IAAc,EAAA,OAAA,GAA8C,EAAa,KAAA;AACpG,EAAA,SAAA,CAAU,MAAM,EAAI,EAAA,EAAE,GAAG,OAAS,EAAA,OAAA,EAAS,IAAI,CAAA;AACjD;;;AC5Ca,IAAA,YAAA,GAAe,CAAC,QAA6B,KAAA;AACxD,EAAA,IAAI,CAAC,QAAA,IAAY,QAAa,KAAA,WAAA,IAAe,aAAa,WAAa,EAAA;AACrE,IAAO,OAAA,EAAA;AAAA;AAGT,EAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,KAAA,CAAM,GAAG,CAAA;AAGhC,EAAI,IAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACpB,IAAO,OAAA,EAAA;AAAA;AAIT,EAAO,OAAA,KAAA,CAAM,CAAC,CAAK,IAAA,EAAA;AACrB;AAOa,IAAA,0BAAA,GAA6B,CAAC,QAAsD,KAAA;AAC/F,EAAA,MAAM,YAAe,GAAA,SAAA,CAAU,oBAAoB,CAAA,EAAG,WAAY,EAAA;AAClE,EAAA,IAAI,YAAc,EAAA;AAChB,IAAO,OAAA,YAAA;AAAA;AAET,EAAM,MAAA,SAAA,GAAY,aAAa,QAAQ,CAAA;AAGvC,EAAA,IAAI,aAAa,WAAe,IAAA,QAAA,KAAa,eAAe,QAAS,CAAA,UAAA,CAAW,WAAW,CAAG,EAAA;AAC5F,IAAO,OAAA,OAAA;AAAA;AAIT,EAAI,IAAA,SAAA,CAAU,QAAS,CAAA,CAAA,GAAA,CAAK,CAAG,EAAA;AAC7B,IAAO,OAAA,KAAA;AAAA;AAIT,EAAI,IAAA,SAAA,CAAU,QAAS,CAAA,KAAK,CAAG,EAAA;AAC7B,IAAO,OAAA,KAAA;AAAA;AAIT,EAAO,OAAA,KAAA;AACT;AAMO,IAAM,WAAW,MAAM;AAC5B,EAAI,IAAA;AACF,IAAA,OAAO,CAAC,CAAC,MAAA;AAAA,GACH,CAAA,MAAA;AACN,IAAO,OAAA,KAAA;AAAA;AAEX;AAwBO,IAAM,iBAAiB,MAAM;AAClC,EAAI,IAAA;AACF,IAAA,OAAO,OAAO,cAAmB,KAAA,IAAA;AAAA,GAC3B,CAAA,MAAA;AAEN,IAAO,OAAA,KAAA;AAAA;AAEX;AAOO,IAAM,8BAA8B,MAAM;AAC/C,EAAA,OAAO,SAAS,QAAS,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAK,IAAA,EAAA;AAC5C;AAMO,IAAM,iBAAiB,MAAM;AAClC,EAAI,IAAA,OAAO,MAAO,CAAA,cAAA,KAAmB,SAAW,EAAA;AAC9C,IAAO,OAAA,EAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,CAAA,CAAA,EAAI,6BAA6B,CAAA,CAAA;AAAA;AAE5C;AAUa,IAAA,6BAAA,GAAgC,CAAC,eAAA,EAAyB,gBAA8B,KAAA;AACnG,EAAA,IAAI,gBAAkB,EAAA;AACpB,IAAO,OAAA,gBAAA;AAAA;AAGT,EAAM,MAAA,WAAA,GAAc,2BAA2B,eAAe,CAAA;AAE9D,EAAA,QAAQ,WAAa;AAAA,IACnB,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,kCAAA,CAAA;AAAA,IAET,KAAK,OAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,kCAAA,CAAA;AAAA,IAET,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,8BAAA,CAAA;AAAA,IAET;AACE,MAAA,OAAA,CAAQ,KAAK,oCAAoC,CAAA;AAEjD,MAAO,OAAA,EAAA;AAAA;AAEb;AASa,IAAA,6BAAA,GAAgC,CAAC,eAAA,EAAyB,gBAA8B,KAAA;AACnG,EAAI,IAAA,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,EAAA;AAAA;AAGT,EAAA,IAAI,gBAAkB,EAAA;AACpB,IAAO,OAAA,gBAAA;AAAA;AAGT,EAAM,MAAA,WAAA,GAAc,2BAA2B,eAAe,CAAA;AAE9D,EAAA,QAAQ,WAAa;AAAA,IACnB,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,qCAAA,CAAA;AAAA,IAET,KAAK,OAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,qCAAA,CAAA;AAAA,IAET,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,kCAAA,CAAA;AAAA,IAET;AACE,MAAA,OAAA,CAAQ,KAAK,gCAAgC,CAAA;AAE7C,MAAO,OAAA,EAAA;AAAA;AAEb;AAUa,IAAA,gCAAA,GAAmC,CAAC,QAAsB,KAAA;AACrE,EAAI,IAAA,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,EAAA;AAAA;AAET,EAAA,MAAM,WAAc,GAAA,0BAAA,CAA2B,QAAY,IAAA,QAAA,CAAS,QAAQ,CAAA;AAE5E,EAAA,QAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnB,KAAK,OAAA;AACH,MAAO,OAAA,CAAA,EAAG,gBAAgB,CAAA,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA,IAI5B,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,4CAAA,CAAA;AAAA,IAET,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,4CAAA,CAAA;AAAA,IAET,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,kCAAA,CAAA;AAAA,IAET;AACE,MAAA,OAAA,CAAQ,KAAK,oCAAoC,CAAA;AAEjD,MAAO,OAAA,EAAA;AAAA;AAEb;AAUa,IAAA,gCAAA,GAAmC,CAAC,aAAA,EAAuB,QAAsB,KAAA;AAC5F,EAAI,IAAA,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,EAAA;AAAA;AAET,EAAA,MAAM,WAAc,GAAA,0BAAA,CAA2B,QAAY,IAAA,QAAA,CAAS,QAAQ,CAAA;AAE5E,EAAA,QAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnB,KAAK,OAAA;AACH,MAAA,OAAO,CAAG,EAAA,cAAA,EAAgB,CAAA,KAAA,EAAQ,aAAa,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA,IAIjD,KAAK,KAAA;AACH,MAAA,OAAO,0CAA0C,aAAa,CAAA,CAAA;AAAA,IAEhE,KAAK,KAAA;AACH,MAAA,OAAO,0CAA0C,aAAa,CAAA,CAAA;AAAA,IAEhE,KAAK,KAAA;AACH,MAAA,OAAO,sCAAsC,aAAa,CAAA,CAAA;AAAA,IAE5D;AACE,MAAA,OAAA,CAAQ,KAAK,oCAAoC,CAAA;AAEjD,MAAO,OAAA,EAAA;AAAA;AAEb;AAUa,IAAA,yBAAA,GAA4B,CAAC,QAAsB,KAAA;AAC9D,EAAI,IAAA,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,EAAA;AAAA;AAGT,EAAA,MAAM,WAAc,GAAA,0BAAA,CAA2B,QAAY,IAAA,QAAA,CAAS,QAAQ,CAAA;AAE5E,EAAA,QAAQ,WAAa;AAAA,IACnB,KAAK,OAAA;AACH,MAAO,OAAA,CAAA,kCAAA,CAAA;AAAA,IAET,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,kCAAA,CAAA;AAAA,IAET,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,kCAAA,CAAA;AAAA,IAET,KAAK,KAAA;AACH,MAAO,OAAA,CAAA,8BAAA,CAAA;AAAA,IAET;AACE,MAAA,OAAA,CAAQ,KAAK,gCAAgC,CAAA;AAE7C,MAAO,OAAA,EAAA;AAAA;AAEb;;;ACrSO,IAAM,6BAA6B,MAA4B;AACpE,EAAI,IAAA,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,SAAA;AAAA;AAGT,EAAA,IAAI,OAAO,QAAU,EAAA;AACnB,IAAO,OAAA,iBAAA;AAAA;AAGT,EAAI,IAAA,MAAA,CAAO,MAAQ,EAAA,eAAA,EAAiB,QAAU,EAAA;AAC5C,IAAO,OAAA,aAAA;AAAA;AAGT,EAAI,IAAA,MAAA,CAAO,IAAS,KAAA,MAAA,CAAO,GAAK,EAAA;AAC9B,IAAO,OAAA,QAAA;AAAA;AAGT,EAAO,OAAA,KAAA;AACT;AAOO,IAAM,kBAAkB,MAAM;AACnC,EAAI,IAAA,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,KAAA;AAAA;AAGT,EAAO,OAAA,QAAA,MAAc,cAAe,EAAA;AACtC;AAQa,IAAA,oBAAA,GAAuB,CAAC,SAAsB,KAAA;AACzD,EAAA,OAAO,SAAU,CAAA,WAAA,EAAc,CAAA,QAAA,CAAS,QAAQ,CAAA;AAClD;AAMO,IAAM,WAAW,MAAe;AACrC,EAAI,IAAA,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,MAAM,cAAc,0BAA2B,EAAA;AAE/C,EAAA,OACE,qBAAqB,SAAU,CAAA,SAAS,CAAM,KAAA,WAAA,KAAgB,qBAAqB,WAAgB,KAAA,aAAA,CAAA;AAEvG;AAMO,IAAM,iBAAiB,MAAe;AAC3C,EAAI,IAAA,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,MAAM,cAAc,0BAA2B,EAAA;AAE/C,EAAA,OACE,qBAAqB,SAAU,CAAA,SAAS,MAAM,KAC7C,KAAA,WAAA,KAAgB,qBAAqB,WAAgB,KAAA,aAAA,CAAA;AAE1D;AAMO,IAAM,gBAAgB,MAAM;AACjC,EAAI,IAAA,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,MAAM,cAAc,0BAA2B,EAAA;AAE/C,EAAA,OAAO,WAAgB,KAAA,QAAA;AACzB;AAOa,IAAA,QAAA,GAAW,CAAC,SAA+B,KAAA;AACtD,EAAM,MAAA,EAAA,GAAK,UAAU,WAAY,EAAA;AAEjC,EAAA;AAAA;AAAA,IAEE,EAAA,CAAG,SAAS,MAAM,CAAA;AAAA,IAEjB,GAAG,QAAS,CAAA,SAAS,KAAK,CAAC,EAAA,CAAG,SAAS,QAAQ,CAAA;AAAA,IAEhD,EAAA,CAAG,SAAS,QAAQ,CAAA;AAAA,IAEpB,EAAA,CAAG,QAAS,CAAA,QAAQ,CACpB,IAAA,EAAA,CAAG,SAAS,MAAM,CAAA,IAClB,mBAAoB,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,IAE3B,EAAA,CAAG,SAAS,UAAU,CAAA;AAAA,IAEtB,wBAAA,CAAyB,KAAK,EAAE,CAAA;AAAA,IAEhC,2CAAA,CAA4C,KAAK,EAAE,CAAA;AAAA,IAEnD,uCAAA,CAAwC,KAAK,EAAE,CAAA;AAAA,IAE9C,EAAG,CAAA,QAAA,CAAS,SAAS,CAAA,KAAM,GAAG,QAAS,CAAA,OAAO,CAAK,IAAA,EAAA,CAAG,QAAS,CAAA,QAAQ,CACxE,CAAA,IAAA,EAAA,CAAG,SAAS,SAAS;AAAA;AAEzB;AAOa,IAAA,OAAA,GAAU,CAAC,SAA+B,KAAA;AACrD,EAAM,MAAA,EAAA,GAAK,UAAU,WAAY,EAAA;AAEjC,EAAA;AAAA;AAAA,IAEE,GAAG,QAAS,CAAA,QAAQ,CACpB,IAAA,EAAA,CAAG,SAAS,MAAM,CAAA;AAAA,IAEjB,GAAG,QAAS,CAAA,SAAS,CAAK,IAAA,EAAA,CAAG,SAAS,QAAQ,CAAA;AAAA,IAE/C,GAAG,QAAS,CAAA,YAAY,CACxB,IAAA,EAAA,CAAG,SAAS,MAAM,CAAA;AAAA,IAElB,EAAA,CAAG,QAAS,CAAA,eAAe,CAC3B,IAAA,EAAA,CAAG,SAAS,gBAAgB,CAAA,IAC5B,EAAG,CAAA,QAAA,CAAS,UAAU,CAAA;AAAA,IAEtB,GAAG,QAAS,CAAA,YAAY,CACxB,IAAA,EAAA,CAAG,SAAS,YAAY,CAAA;AAAA,IAEvB,GAAG,QAAS,CAAA,QAAQ,MAClB,EAAG,CAAA,QAAA,CAAS,SAAS,CAAK,IAAA,EAAA,CAAG,QAAS,CAAA,QAAQ,KAAK,EAAG,CAAA,QAAA,CAAS,QAAQ,CAAK,IAAA,EAAA,CAAG,SAAS,MAAM,CAAA,CAAA;AAAA,IAEhG,GAAG,QAAS,CAAA,QAAQ,KAAK,CAAC,EAAA,CAAG,SAAS,QAAQ,CAAA;AAAA,IAE/C,mCAAA,CAAoC,KAAK,EAAE,CAAA;AAAA,IAE3C,0BAAA,CAA2B,KAAK,EAAE,CAAA;AAAA,IAElC,+CAAA,CAAgD,KAAK,EAAE;AAAA;AAE3D;AAOa,IAAA,IAAA,GAAO,CAAC,SAAsB,KAAA;AACzC,EAAM,MAAA,EAAA,GAAK,UAAU,WAAY,EAAA;AAEjC,EAAA,OAAO,CAAC,OAAQ,CAAA,EAAE,CAAK,IAAA,CAAC,SAAS,EAAE,CAAA;AACrC;AAOa,IAAA,0BAAA,GAA6B,CAAC,SAAsB,KAAA;AAC/D,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,IAAA;AAAA;AAGT,EAAM,MAAA,EAAA,GAAK,UAAU,WAAY,EAAA;AAEjC,EAAI,IAAA,QAAA,CAAS,EAAE,CAAG,EAAA;AAChB,IAAO,OAAA,QAAA;AAAA;AAGT,EAAI,IAAA,OAAA,CAAQ,EAAE,CAAG,EAAA;AACf,IAAO,OAAA,OAAA;AAAA;AAGT,EAAO,OAAA,IAAA;AACT;AAOa,IAAA,SAAA,GAAY,CAAC,SAA8B,KAAA;AACtD,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,SAAA;AAAA;AAGT,EAAM,MAAA,EAAA,GAAK,UAAU,WAAY,EAAA;AAGjC,EAAI,IAAA,kBAAA,CAAmB,IAAK,CAAA,EAAE,CAAG,EAAA;AAC/B,IAAO,OAAA,KAAA;AAAA;AAIT,EAAI,IAAA,EAAA,CAAG,QAAS,CAAA,SAAS,CAAG,EAAA;AAC1B,IAAO,OAAA,SAAA;AAAA;AAIT,EAAI,IAAA,EAAA,CAAG,QAAS,CAAA,SAAS,CAAK,IAAA,EAAA,CAAG,QAAS,CAAA,OAAO,CAAK,IAAA,EAAA,CAAG,QAAS,CAAA,OAAO,CAAG,EAAA;AAC1E,IAAO,OAAA,SAAA;AAAA;AAIT,EAAI,IAAA,EAAA,CAAG,QAAS,CAAA,UAAU,CAAK,IAAA,EAAA,CAAG,QAAS,CAAA,OAAO,CAAK,IAAA,EAAA,CAAG,QAAS,CAAA,WAAW,CAAG,EAAA;AAC/E,IAAO,OAAA,KAAA;AAAA;AAIT,EAAI,IAAA,EAAA,CAAG,SAAS,OAAO,CAAA,IAAK,CAAC,EAAG,CAAA,QAAA,CAAS,SAAS,CAAG,EAAA;AACnD,IAAO,OAAA,OAAA;AAAA;AAGT,EAAO,OAAA,SAAA;AACT;AAMO,IAAM,mBAAmB,MAAc;AAC5C,EAAA,IAAI,CAAC,QAAA,EAAc,IAAA,OAAO,cAAc,WAAa,EAAA;AACnD,IAAO,OAAA,SAAA;AAAA;AAGT,EAAO,OAAA,SAAA,CAAU,UAAU,SAAS,CAAA;AACtC;AAOa,IAAA,YAAA,GAAe,CAAC,SAA8B,KAAA;AACzD,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,SAAA;AAAA;AAGT,EAAM,MAAA,EAAA,GAAK,UAAU,WAAY,EAAA;AAGjC,EAAM,MAAA,QAAA,GAAW,EAAG,CAAA,KAAA,CAAM,2BAA2B,CAAA;AACrD,EAAI,IAAA,QAAA,IAAY,QAAS,CAAA,MAAA,IAAU,CAAG,EAAA;AACpC,IAAM,MAAA,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,IAAM,MAAA,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,IAAM,MAAA,KAAA,GAAQ,SAAS,CAAC,CAAA;AAExB,IAAO,OAAA,KAAA,GAAQ,CAAG,EAAA,KAAK,CAAI,CAAA,EAAA,KAAK,CAAI,CAAA,EAAA,KAAK,CAAK,CAAA,GAAA,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAAA;AAIjE,EAAM,MAAA,YAAA,GAAe,EAAG,CAAA,KAAA,CAAM,yBAAyB,CAAA;AACvD,EAAI,IAAA,YAAA,IAAgB,YAAa,CAAA,CAAC,CAAG,EAAA;AACnC,IAAA,OAAO,aAAa,CAAC,CAAA;AAAA;AAIvB,EAAM,MAAA,YAAA,GAAe,EAAG,CAAA,KAAA,CAAM,uBAAuB,CAAA;AACrD,EAAI,IAAA,YAAA,IAAgB,YAAa,CAAA,CAAC,CAAG,EAAA;AACnC,IAAM,MAAA,OAAA,GAAU,aAAa,CAAC,CAAA;AAE9B,IAAA,MAAM,iBAA4C,GAAA;AAAA,MAChD,MAAQ,EAAA,OAAA;AAAA,MACR,KAAO,EAAA,KAAA;AAAA,MACP,KAAO,EAAA,GAAA;AAAA,MACP,KAAO,EAAA,GAAA;AAAA,MACP,KAAO,EAAA,OAAA;AAAA,MACP,KAAO,EAAA;AAAA,KACT;AAEA,IAAO,OAAA,iBAAA,CAAkB,OAAO,CAAK,IAAA,OAAA;AAAA;AAIvC,EAAM,MAAA,QAAA,GAAW,EAAG,CAAA,KAAA,CAAM,iCAAiC,CAAA;AAC3D,EAAI,IAAA,QAAA,IAAY,QAAS,CAAA,MAAA,IAAU,CAAG,EAAA;AACpC,IAAM,MAAA,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,IAAM,MAAA,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,IAAM,MAAA,KAAA,GAAQ,SAAS,CAAC,CAAA;AAExB,IAAO,OAAA,KAAA,GAAQ,CAAG,EAAA,KAAK,CAAI,CAAA,EAAA,KAAK,CAAI,CAAA,EAAA,KAAK,CAAK,CAAA,GAAA,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAAA;AAGjE,EAAO,OAAA,SAAA;AACT;AAOa,IAAA,cAAA,GAAiB,CAAC,SAAmC,KAAA;AAChE,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,SAAA;AAAA;AAGT,EAAM,MAAA,EAAA,GAAK,UAAU,WAAY,EAAA;AAGjC,EAAA,IAAI,GAAG,QAAS,CAAA,MAAM,KAAK,EAAG,CAAA,QAAA,CAAS,OAAO,CAAG,EAAA;AAC/C,IAAO,OAAA,MAAA;AAAA;AAIT,EAAI,IAAA,EAAA,CAAG,QAAS,CAAA,gBAAgB,CAAG,EAAA;AACjC,IAAO,OAAA,SAAA;AAAA;AAIT,EAAA,IAAI,GAAG,QAAS,CAAA,MAAM,KAAK,EAAG,CAAA,QAAA,CAAS,OAAO,CAAG,EAAA;AAC/C,IAAO,OAAA,OAAA;AAAA;AAIT,EAAI,IAAA,EAAA,CAAG,SAAS,QAAQ,CAAA,IAAK,CAAC,EAAG,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AAChD,IAAO,OAAA,QAAA;AAAA;AAIT,EAAI,IAAA,EAAA,CAAG,QAAS,CAAA,SAAS,CAAG,EAAA;AAC1B,IAAO,OAAA,SAAA;AAAA;AAIT,EAAI,IAAA,EAAA,CAAG,SAAS,QAAQ,CAAA,IAAK,CAAC,EAAG,CAAA,QAAA,CAAS,QAAQ,CAAG,EAAA;AACnD,IAAO,OAAA,QAAA;AAAA;AAGT,EAAO,OAAA,SAAA;AACT;AAOa,IAAA,iBAAA,GAAoB,CAAC,SAA8B,KAAA;AAC9D,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,SAAA;AAAA;AAGT,EAAM,MAAA,EAAA,GAAK,UAAU,WAAY,EAAA;AAGjC,EAAM,MAAA,QAAA,GAAW,EAAG,CAAA,KAAA,CAAM,sBAAsB,CAAA;AAChD,EAAI,IAAA,QAAA,IAAY,QAAS,CAAA,CAAC,CAAG,EAAA;AAC3B,IAAA,OAAO,SAAS,CAAC,CAAA;AAAA;AAInB,EAAM,MAAA,YAAA,GAAe,EAAG,CAAA,KAAA,CAAM,iCAAiC,CAAA;AAC/D,EAAI,IAAA,YAAA,IAAgB,YAAa,CAAA,CAAC,CAAG,EAAA;AACnC,IAAA,OAAO,aAAa,CAAC,CAAA;AAAA;AAIvB,EAAM,MAAA,UAAA,GAAa,EAAG,CAAA,KAAA,CAAM,gCAAgC,CAAA;AAC5D,EAAI,IAAA,UAAA,IAAc,UAAW,CAAA,CAAC,CAAG,EAAA;AAC/B,IAAA,OAAO,WAAW,CAAC,CAAA;AAAA;AAIrB,EAAM,MAAA,WAAA,GAAc,EAAG,CAAA,KAAA,CAAM,yBAAyB,CAAA;AACtD,EAAI,IAAA,WAAA,IAAe,YAAY,CAAC,CAAA,IAAK,CAAC,EAAG,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACxD,IAAA,OAAO,YAAY,CAAC,CAAA;AAAA;AAItB,EAAM,MAAA,YAAA,GAAe,EAAG,CAAA,KAAA,CAAM,0BAA0B,CAAA;AACxD,EAAI,IAAA,YAAA,IAAgB,YAAa,CAAA,CAAC,CAAG,EAAA;AACnC,IAAA,OAAO,aAAa,CAAC,CAAA;AAAA;AAIvB,EAAM,MAAA,WAAA,GAAc,EAAG,CAAA,KAAA,CAAM,0BAA0B,CAAA;AACvD,EAAA,IAAI,WAAe,IAAA,WAAA,CAAY,CAAC,CAAA,IAAK,EAAG,CAAA,QAAA,CAAS,QAAQ,CAAA,IAAK,CAAC,EAAA,CAAG,QAAS,CAAA,QAAQ,CAAG,EAAA;AACpF,IAAA,OAAO,YAAY,CAAC,CAAA;AAAA;AAGtB,EAAO,OAAA,SAAA;AACT;AAKO,IAAM,sBAAsB,MAAc;AAC/C,EAAA,IAAI,CAAC,QAAA,EAAc,IAAA,OAAO,cAAc,WAAa,EAAA;AACnD,IAAO,OAAA,SAAA;AAAA;AAGT,EAAO,OAAA,YAAA,CAAa,UAAU,SAAS,CAAA;AACzC;AAMO,IAAM,wBAAwB,MAAmB;AACtD,EAAA,IAAI,CAAC,QAAA,EAAc,IAAA,OAAO,cAAc,WAAa,EAAA;AACnD,IAAO,OAAA,SAAA;AAAA;AAGT,EAAO,OAAA,cAAA,CAAe,UAAU,SAAS,CAAA;AAC3C;AAMO,IAAM,2BAA2B,MAAc;AACpD,EAAA,IAAI,CAAC,QAAA,EAAc,IAAA,OAAO,cAAc,WAAa,EAAA;AACnD,IAAO,OAAA,SAAA;AAAA;AAGT,EAAO,OAAA,iBAAA,CAAkB,UAAU,SAAS,CAAA;AAC9C;AAKO,IAAM,sBAAsB,MAAc;AAC/C,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,IAAO,OAAA,EAAA;AAAA;AAGT,EAAA,MAAM,WAAc,GAAA,eAAA;AACpB,EAAI,IAAA,QAAA,GAAW,YAAa,CAAA,OAAA,CAAQ,WAAW,CAAA;AAE/C,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,MAAM,SAAY,GAAA,IAAA,CAAK,GAAI,EAAA,CAAE,SAAS,EAAE,CAAA;AACxC,IAAM,MAAA,MAAA,GAAS,KAAK,MAAO,EAAA,CAAE,SAAS,EAAE,CAAA,CAAE,SAAU,CAAA,CAAA,EAAG,EAAE,CAAA;AACzD,IAAW,QAAA,GAAA,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAEzC,IAAI,IAAA;AACF,MAAa,YAAA,CAAA,OAAA,CAAQ,aAAa,QAAQ,CAAA;AAAA,aACnC,KAAO,EAAA;AACd,MAAQ,OAAA,CAAA,IAAA,CAAK,sDAAkC,KAAK,CAAA;AAAA;AACtD;AAGF,EAAO,OAAA,QAAA;AACT;AAKO,IAAM,iBAAiB,MAAc;AAC1C,EAAI,IAAA,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,EAAA;AAAA;AAGT,EAAA,MAAM,KAAK,SAAU,CAAA,SAAA;AAGrB,EAAI,IAAA,MAAA,CAAO,IAAK,CAAA,EAAE,CAAG,EAAA;AACnB,IAAO,OAAA,MAAA;AAAA;AAET,EAAI,IAAA,QAAA,CAAS,IAAK,CAAA,EAAE,CAAG,EAAA;AACrB,IAAO,OAAA,QAAA;AAAA;AAET,EAAI,IAAA,MAAA,CAAO,IAAK,CAAA,EAAE,CAAG,EAAA;AACnB,IAAO,OAAA,YAAA;AAAA;AAIT,EAAI,IAAA,cAAA,CAAe,IAAK,CAAA,EAAE,CAAG,EAAA;AAC3B,IAAM,MAAA,KAAA,GAAQ,EAAG,CAAA,KAAA,CAAM,cAAc,CAAA;AAErC,IAAA,OAAO,KAAQ,GAAA,CAAA,QAAA,EAAW,KAAM,CAAA,CAAC,CAAC,CAAK,CAAA,GAAA,SAAA;AAAA;AAEzC,EAAI,IAAA,OAAA,CAAQ,IAAK,CAAA,EAAE,CAAG,EAAA;AACpB,IAAM,MAAA,KAAA,GAAQ,EAAG,CAAA,KAAA,CAAM,uBAAuB,CAAA;AAE9C,IAAA,OAAO,KAAQ,GAAA,CAAA,OAAA,EAAU,KAAM,CAAA,CAAC,CAAC,CAAK,CAAA,GAAA,cAAA;AAAA;AAExC,EAAI,IAAA,iBAAA,CAAkB,IAAK,CAAA,EAAE,CAAG,EAAA;AAC9B,IAAO,OAAA,QAAA;AAAA;AAET,EAAI,IAAA,QAAA,CAAS,IAAK,CAAA,EAAE,CAAG,EAAA;AACrB,IAAO,OAAA,QAAA;AAAA;AAET,EAAI,IAAA,SAAA,CAAU,IAAK,CAAA,EAAE,CAAG,EAAA;AACtB,IAAO,OAAA,SAAA;AAAA;AAIT,EAAI,IAAA,SAAA,CAAU,IAAK,CAAA,EAAE,CAAG,EAAA;AACtB,IAAO,OAAA,YAAA;AAAA;AAET,EAAI,IAAA,UAAA,CAAW,IAAK,CAAA,EAAE,CAAG,EAAA;AACvB,IAAO,OAAA,KAAA;AAAA;AAET,EAAI,IAAA,OAAA,CAAQ,IAAK,CAAA,EAAE,CAAG,EAAA;AACpB,IAAO,OAAA,UAAA;AAAA;AAGT,EAAO,OAAA,SAAA;AACT;AAMO,IAAM,kBAAkB,MAAe;AAC5C,EAAI,IAAA,QAAA,OAAe,KAAO,EAAA;AACxB,IAAO,OAAA,KAAA;AAAA;AAGT,EAAO,OAAA,UAAA,CAAW,IAAK,CAAA,SAAA,CAAU,SAAS,CAAA;AAC5C;AAMO,IAAM,cAAc,MAAe;AACxC,EAAI,IAAA,QAAA,OAAe,KAAO,EAAA;AACxB,IAAO,OAAA,KAAA;AAAA;AAGT,EAAO,OAAA,mBAAA,CAAoB,IAAK,CAAA,SAAA,CAAU,SAAS,CAAA;AACrD;AAMO,IAAM,mBAAmB,MAAM;AACpC,EAAA,OAAO,4BAAiC,KAAA,iBAAA;AAC1C;AAMO,IAAM,eAAe,MAAM;AAChC,EAAA,OAAO,4BAAiC,KAAA,aAAA;AAC1C;;;AC9iBO,IAAM,oBAAA,GAAN,MAAM,oBAAoB,CAAA;AAAA,EAYvB,WAAc,GAAA;AAVtB,IAAQ,aAAA,CAAA,IAAA,EAAA,UAAA,sBAAe,GAA2C,EAAA,CAAA;AAWhE,IAAA,MAAA,CAAO,iBAAiB,SAAW,EAAA,IAAA,CAAK,aAAc,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAClE,EAVA,OAAO,WAAmC,GAAA;AACxC,IAAI,IAAA,CAAC,qBAAoB,QAAU,EAAA;AACjC,MAAoB,oBAAA,CAAA,QAAA,GAAW,IAAI,oBAAoB,EAAA;AAAA;AAGzD,IAAA,OAAO,oBAAoB,CAAA,QAAA;AAAA;AAC7B;AAAA;AAAA;AAAA;AAAA,EAUQ,cAAc,KAA2B,EAAA;AAE/C,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,CAAA,IAAK,KAAK,QAAU,EAAA;AAC1C,MAAI,IAAA;AACF,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,eACN,KAAO,EAAA;AACd,QAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,gBAAA,EAAmB,GAAG,CAAA,OAAA,CAAA,EAAW,KAAK,CAAA;AAAA;AACtD;AACF;AACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAA,CAAgB,KAAa,OAA8C,EAAA;AACzE,IAAK,IAAA,CAAA,QAAA,CAAS,GAAI,CAAA,GAAA,EAAK,OAAO,CAAA;AAAA;AAChC;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,GAAmB,EAAA;AACnC,IAAK,IAAA,CAAA,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA;AAE5B,CAAA;AA9CE,aAAA,CADW,oBACI,EAAA,UAAA,CAAA;AADV,IAAM,mBAAN,GAAA;;;ACmBA,IAAM,mBAAmB,CAAC;AAAA,EAC/B,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAa,GAAA,CAAA,mEAAA;AACf,CAAsC,KAAA;AAEpC,EAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAC9C,EAAM,MAAA,GAAA,GAAM,MAAO,CAAA,UAAA,CAAW,IAAI,CAAA;AAElC,EAAA,IAAI,CAAC,GAAK,EAAA;AAER,IAAM,MAAA,IAAI,MAAM,0EAA6B,CAAA;AAAA;AAI/C,EAAA,MAAM,aAAgB,GAAA,GAAA;AACtB,EAAM,MAAA,eAAA,GAAkB,UAAU,MAAS,GAAA,EAAA;AAE3C,EAAA,MAAA,CAAO,QAAQ,WAAe,IAAA,eAAA;AAC9B,EAAA,MAAA,CAAO,SAAS,YAAgB,IAAA,aAAA;AAGhC,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAA,GAAA,CAAI,SAAY,GAAA,eAAA;AAChB,IAAA,GAAA,CAAI,SAAS,CAAG,EAAA,CAAA,EAAG,MAAO,CAAA,KAAA,EAAO,OAAO,MAAM,CAAA;AAAA;AAIhD,EAAA,GAAA,CAAI,YAAY,SAAa,IAAA,OAAA;AAC7B,EAAA,GAAA,CAAI,SAAY,GAAA,QAAA;AAChB,EAAI,GAAA,CAAA,IAAA,GAAO,GAAG,UAAc,IAAA,MAAM,IAAI,QAAY,IAAA,EAAE,MAAM,UAAU,CAAA,CAAA;AAEpE,EAAQ,OAAA,CAAA,GAAA,CAAI,MAAQ,EAAA,CAAA,EAAG,UAAc,IAAA,MAAM,IAAI,QAAY,IAAA,EAAE,CAAM,GAAA,EAAA,UAAU,CAAE,CAAA,CAAA;AAC/E,EAAA,GAAA,CAAI,YAAe,GAAA,QAAA;AAGnB,EAAA,GAAA,CAAI,SAAS,SAAW,EAAA,MAAA,CAAO,QAAQ,CAAG,EAAA,MAAA,CAAO,SAAS,CAAC,CAAA;AAG3D,EAAA,OAAO,OAAO,SAAU,EAAA;AAC1B;AAEO,SAAS,uBAAA,CAAwB,QAAgB,IAAqD,EAAA;AAC3G,EAAO,OAAA,IAAI,OAAQ,CAAA,CAAC,OAAY,KAAA;AAC9B,IAAM,MAAA,EAAE,YAAc,EAAA,WAAA,EAAgB,GAAA,IAAA;AAEtC,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,KAAQ,GAAA,WAAA;AACf,IAAA,MAAA,CAAO,MAAS,GAAA,YAAA;AAChB,IAAM,MAAA,GAAA,GAAM,MAAO,CAAA,UAAA,CAAW,IAAI,CAAA;AAElC,IAAM,MAAA,GAAA,GAAM,IAAI,KAAM,EAAA;AACtB,IAAA,GAAA,CAAI,GAAM,GAAA,MAAA;AACV,IAAA,GAAA,CAAI,SAAS,MAAM;AACjB,MAAA,MAAM,aAAa,GAAI,CAAA,KAAA;AACvB,MAAA,MAAM,cAAc,GAAI,CAAA,MAAA;AAExB,MAAA,MAAM,cAAc,WAAc,GAAA,YAAA;AAClC,MAAA,MAAM,aAAa,UAAa,GAAA,WAAA;AAEhC,MAAI,IAAA,QAAA;AACJ,MAAI,IAAA,SAAA;AAEJ,MAAA,IAAI,aAAa,WAAa,EAAA;AAC5B,QAAW,QAAA,GAAA,WAAA;AACX,QAAA,SAAA,GAAY,QAAW,GAAA,UAAA;AAAA,OAClB,MAAA;AACL,QAAY,SAAA,GAAA,YAAA;AACZ,QAAA,QAAA,GAAW,SAAY,GAAA,UAAA;AAAA;AAGzB,MAAM,MAAA,CAAA,GAAA,CAAK,cAAc,QAAY,IAAA,CAAA;AACrC,MAAM,MAAA,CAAA,GAAA,CAAK,eAAe,SAAa,IAAA,CAAA;AAEvC,MAAA,GAAA,EAAK,SAAU,CAAA,CAAA,EAAG,CAAG,EAAA,WAAA,EAAa,YAAY,CAAA;AAC9C,MAAA,GAAA,EAAK,SAAU,CAAA,GAAA,EAAK,CAAG,EAAA,CAAA,EAAG,UAAU,SAAS,CAAA;AAE7C,MAAQ,OAAA,CAAA,MAAA,CAAO,WAAW,CAAA;AAAA,KAC5B;AAAA,GACD,CAAA;AACH;;;AC3GO,SAAS,YAAA,CAAa,YAAsB,EAAA,WAAA,GAAc,EAAI,EAAA;AACnE,EAAA,MAAM,KAAQ,GAAA,kCAAA;AACd,EAAM,MAAA,OAAA,GAAU,YAAa,CAAA,KAAA,CAAM,KAAK,CAAA;AAExC,EAAA,IAAI,YAAY,IAAM,EAAA;AACpB,IAAM,MAAA,IAAI,MAAM,uBAAuB,CAAA;AAAA;AAGzC,EAAM,MAAA,gBAAA,GAAmB,WAAe,IAAA,OAAA,CAAQ,CAAC,CAAA;AACjD,EAAA,MAAM,iBAAiB,IAAK,CAAA,YAAA,CAAa,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAC,CAAA;AAC3D,EAAA,MAAM,WAAc,GAAA,IAAI,KAAM,CAAA,cAAA,CAAe,MAAM,CAAA;AACnD,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,CAAe,QAAQ,CAAK,EAAA,EAAA;AAC9C,IAAA,WAAA,CAAY,CAAC,CAAA,GAAI,cAAe,CAAA,UAAA,CAAW,CAAC,CAAA;AAAA;AAG9C,EAAM,MAAA,SAAA,GAAY,IAAI,UAAA,CAAW,WAAW,CAAA;AAE5C,EAAO,OAAA,IAAI,KAAK,CAAC,SAAS,GAAG,EAAE,IAAA,EAAM,kBAAkB,CAAA;AACzD;AAEO,SAAS,YAAa,CAAA,YAAA,EAAsB,QAAkB,EAAA,WAAA,GAAc,EAAI,EAAA;AACrF,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,YAAA,EAAc,WAAW,CAAA;AAEnD,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAM,MAAA,IAAI,MAAM,uBAAuB,CAAA;AAAA;AAGzC,EAAO,OAAA,UAAA,CAAW,MAAM,QAAQ,CAAA;AAClC;AAEO,SAAS,UAAA,CAAW,MAAY,QAAkB,EAAA;AACvD,EAAA,OAAO,IAAI,IAAA,CAAK,CAAC,IAAI,GAAG,QAAU,EAAA;AAAA,IAChC,MAAM,IAAK,CAAA,IAAA;AAAA,IACX,YAAA,EAAc,KAAK,GAAI;AAAA,GACxB,CAAA;AACH;AAEA,eAAsB,aAAa,IAAoC,EAAA;AACrE,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA;AAE9B,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAI,IAAA,OAAO,MAAO,CAAA,MAAA,KAAW,QAAU,EAAA;AACrC,QAAA,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,OAChB,MAAA;AACL,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,mBAAmB,CAAC,CAAA;AAAA;AACvC,KACF;AAEA,IAAO,MAAA,CAAA,OAAA,GAAU,CAAC,KAAU,KAAA;AAC1B,MAAA,MAAA,CAAO,KAAK,CAAA;AAAA,KACd;AAEA,IAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,GAC1B,CAAA;AACH;AAMO,SAAS,OAAO,IAA4B,EAAA;AACjD,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,IAAA,OAAO,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAI,EAAA;AAAA;AAG7B,EAAA,IAAI,gBAAgB,IAAM,EAAA;AACxB,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,KAAM,CAAA,GAAG,EAAE,GAAI,EAAA;AAAA;AAGlC,EAAA,IAAI,gBAAgB,IAAM,EAAA;AACxB,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,KAAM,CAAA,GAAG,EAAE,GAAI,EAAA;AAAA;AAEpC;AAEA,eAAsB,gBAAgB,SAAmB,EAAA;AACvD,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,SAAS,CAAA;AACtC,IAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA;AAEjC,IAAO,OAAA,IAAA;AAAA,WACA,KAAO,EAAA;AACd,IAAQ,OAAA,CAAA,KAAA,CAAM,wCAAwC,KAAK,CAAA;AAC3D,IAAM,MAAA,KAAA;AAAA;AAEV;AAEA,eAAsB,kBAAkB,SAAoC,EAAA;AAC1E,EAAM,MAAA,IAAA,GAAO,MAAM,eAAA,CAAgB,SAAS,CAAA;AAE5C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA;AAC9B,IAAA,MAAA,CAAO,YAAY,MAAM;AACvB,MAAI,IAAA,OAAO,MAAO,CAAA,MAAA,KAAW,QAAU,EAAA;AACrC,QAAA,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,OAChB,MAAA;AACL,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,mBAAmB,CAAC,CAAA;AAAA;AACvC,KACF;AACA,IAAA,MAAA,CAAO,OAAU,GAAA,MAAA;AACjB,IAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,GAC1B,CAAA;AACH;AAEO,SAAS,YAAA,CAAa,MAAY,QAAkB,EAAA;AAEzD,EAAM,MAAA,GAAA,GAAM,GAAI,CAAA,eAAA,CAAgB,IAAI,CAAA;AAGpC,EAAM,MAAA,IAAA,GAAO,QAAS,CAAA,aAAA,CAAc,GAAG,CAAA;AACvC,EAAA,IAAA,CAAK,MAAM,OAAU,GAAA,MAAA;AACrB,EAAA,IAAA,CAAK,IAAO,GAAA,GAAA;AAIZ,EAAA,IAAA,CAAK,WAAW,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAG3C,EAAS,QAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAG9B,EAAA,IAAA,CAAK,KAAM,EAAA;AAGX,EAAS,QAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAC9B,EAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AACzB;AAQA,eAAsB,oBAAoB,QAAiC,EAAA;AAEzE,EAAM,MAAA,OAAA,GAAU,IAAI,OAAQ,EAAA;AAC5B,EAAQ,OAAA,CAAA,MAAA,CAAO,iBAAiB,UAAU,CAAA;AAC1C,EAAA,MAAM,WAAW,MAAM,KAAA,CAAM,QAAU,EAAA,EAAE,SAAS,CAAA;AAClD,EAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA;AACjC,EAAM,MAAA,EAAE,MAAS,GAAA,IAAA;AACjB,EAAA,MAAM,OAAO,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,KAAK,GAAG,CAAA;AACrC,EAAM,MAAA,IAAA,GAAO,IAAI,IAAK,CAAA,CAAC,IAAI,CAAG,EAAA,IAAA,EAAM,EAAE,IAAA,EAAM,CAAA;AAE5C,EAAO,OAAA,IAAA;AACT;AAEA,eAAsB,eAAe,QAAiC,EAAA;AACpE,EAAA,MAAM,wBAA2B,GAAA,kCAAA;AACjC,EAAM,MAAA,eAAA,GAAkB,UAAU,wBAAwB,CAAA;AAE1D,EAAA,IAAI,oBAAoB,OAAS,EAAA;AAC/B,IAAO,OAAA,MAAM,oBAAoB,QAAQ,CAAA;AAAA;AAG3C,EAAA,IAAI,oBAAoB,KAAO,EAAA;AAC7B,IAAO,OAAA,MAAM,iCAAiC,QAAQ,CAAA;AAAA;AAGxD,EAAO,OAAA,MAAM,yBAAyB,QAAQ,CAAA;AAChD;AAUA,eAAsB,yBAAyB,QAAiC,EAAA;AAC9E,EAAM,MAAA,QAAA,GAAW,IAAI,KAAM,EAAA;AAC3B,EAAA,QAAA,CAAS,GAAM,GAAA,QAAA;AACf,EAAA,QAAA,CAAS,WAAc,GAAA,WAAA;AAEvB,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAA,QAAA,CAAS,SAAS,MAAM;AACtB,MAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAC9C,MAAA,MAAA,CAAO,QAAQ,QAAS,CAAA,KAAA;AACxB,MAAA,MAAA,CAAO,SAAS,QAAS,CAAA,MAAA;AACzB,MAAM,MAAA,GAAA,GAAM,MAAO,CAAA,UAAA,CAAW,IAAI,CAAA;AAClC,MAAA,IAAI,GAAK,EAAA;AACP,QAAI,GAAA,CAAA,SAAA,CAAU,QAAU,EAAA,CAAA,EAAG,CAAC,CAAA;AAC5B,QAAO,MAAA,CAAA,MAAA,CAAO,CAAC,IAAS,KAAA;AACtB,UAAA,IAAI,IAAM,EAAA;AACR,YAAM,MAAA,GAAA,GAAM,OAAO,QAAQ,CAAA;AAC3B,YAAA,MAAM,IAAO,GAAA,IAAI,IAAK,CAAA,CAAC,IAAI,CAAA,EAAG,CAAS,MAAA,EAAA,GAAG,CAAI,CAAA,EAAA,EAAE,IAAM,EAAA,IAAA,CAAK,MAAM,CAAA;AACjE,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAA;AACd,SACD,CAAA;AAAA;AACH,KACF;AACA,IAAS,QAAA,CAAA,OAAA,GAAU,CAAC,CAAM,KAAA;AACxB,MAAO,MAAA,CAAA,IAAA,CAAK,SAAU,CAAA,CAAC,CAAC,CAAA;AAAA,KAC1B;AAAA,GACD,CAAA;AACH;AAEA,eAAsB,iCAAiC,QAAiC,EAAA;AACtF,EAAM,MAAA,GAAA,GAAM,IAAI,cAAe,EAAA;AAC/B,EAAI,GAAA,CAAA,IAAA,CAAK,KAAO,EAAA,QAAA,EAAU,IAAI,CAAA;AAC9B,EAAA,GAAA,CAAI,YAAe,GAAA,MAAA;AACnB,EAAA,GAAA,CAAI,IAAK,EAAA;AAET,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAA,GAAA,CAAI,SAAS,MAAM;AACjB,MAAI,IAAA,GAAA,CAAI,WAAW,GAAK,EAAA;AACtB,QAAA,MAAM,OAAO,GAAI,CAAA,QAAA;AACjB,QAAA,MAAM,IAAO,GAAA,IAAI,IAAK,CAAA,CAAC,IAAI,CAAG,EAAA,CAAA,MAAA,EAAS,MAAO,CAAA,QAAQ,CAAC,CAAI,CAAA,EAAA,EAAE,IAAM,EAAA,IAAA,CAAK,MAAM,CAAA;AAC9E,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,OACP,MAAA;AACL,QAAA,MAAA,CAAO,IAAI,KAAM,CAAA,CAAA,sBAAA,EAAyB,GAAI,CAAA,MAAM,EAAE,CAAC,CAAA;AAAA;AACzD,KACF;AACA,IAAI,GAAA,CAAA,OAAA,GAAU,CAAC,CAAM,KAAA;AACnB,MAAO,MAAA,CAAA,IAAA,CAAK,SAAU,CAAA,CAAC,CAAC,CAAA;AAAA,KAC1B;AAAA,GACD,CAAA;AACH;;;AC5NA,IAAA,iBAAA,GAAA,w8gEAAA;;;ACAA,IAAA,oBAAA,GAAA,qyHAAA;;;ACcO,SAAS,YAAA,CAAa,IAAiB,QAAmB,EAAA;AAC/D,EAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,IAAO,MAAA,CAAA,MAAA,CAAO,YAAa,CAAA,EAAA,EAAI,QAAQ,CAAA;AACvC,IAAA,MAAA,CAAO,OAAO,QAAS,EAAA;AAAA;AAE3B;AAEO,SAAS,QAAW,GAAA;AACzB,EAAO,OAAA,CAAC,CAAC,MAAO,CAAA,MAAA;AAClB;AASa,IAAA,UAAA,GAAa,CAAC,QAA0B,KAAA;AACnD,EAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AAClB,IAAA,OAAA,CAAQ,IAAI,cAAc,CAAA;AAC1B,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,SAAY,GAAA;AAAA,IAAA,EACjB,iBAAkB,CAAA;AAAA,IAAA,EAClB,oBAAwB;AAAA,IAAA,CAAA;AAG1B,IAAS,QAAA,CAAA,IAAA,CAAK,YAAY,MAAM,CAAA;AAEhC,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,QAAA,IAAY,QAAS,EAAA;AAAA,KACvB;AAAA;AAEJ;AAEA,IAAM,OAAO,CAAC;AAAA,EACZ,cAAc,MAAM;AAAA,GAEpB;AAAA,EACA,cAAc,MAAM;AAAA,GAEpB;AAAA,EACA,qBAAqB,MAAM;AAAA,GAE3B;AAAA,EACA,qBAAqB,MAAM;AAAA;AAG7B,CAAA,GAAe,EAAO,KAAA;AACpB,EAAA,MAAA,CAAO,MAAO,CAAA,IAAA;AAAA,IACZ,MAAM;AACJ,MAAA,MAAA,CAAO,OAAO,OAAQ,EAAA;AACtB,MAAA,MAAA,CAAO,MAAO,CAAA,WAAA;AAAA,QACZ,MAAM;AACJ,UAAmB,kBAAA,EAAA;AAAA,SACrB;AAAA,QACA,MAAM;AACJ,UAAmB,kBAAA,EAAA;AACnB,UAAA,OAAA,CAAQ,MAAM,CAAuC,oCAAA,EAAA,MAAA,CAAO,MAAO,CAAA,YAAA,EAAc,CAAE,CAAA,CAAA;AAAA;AACrF,OACF;AACA,MAAY,WAAA,EAAA;AAAA,KACd;AAAA,IACA,MAAM;AACJ,MAAY,WAAA,EAAA;AACZ,MAAA,IAAI,MAAO,CAAA,MAAA,CAAO,YAAa,EAAA,KAAM,GAAK,EAAA;AACxC,QAAA,OAAA,CAAQ,MAAM,uHAA4C,CAAA;AAAA,OACrD,MAAA;AACL,QAAA,OAAA,CAAQ,MAAM,CAAkC,+BAAA,EAAA,MAAA,CAAO,MAAO,CAAA,YAAA,EAAc,CAAE,CAAA,CAAA;AAAA;AAChF;AACF,GACF;AACF,CAAA;AAKO,IAAM,YAAY,CAAC;AAAA,EACxB,cAAc,MAAM;AAAA,GAEpB;AAAA,EACA,cAAc,MAAM;AAAA,GAEpB;AAAA,EACA,qBAAqB,MAAM;AAAA,GAE3B;AAAA,EACA,qBAAqB,MAAM;AAAA;AAG7B,CAAA,GAAe,EAAO,KAAA;AACpB,EAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,IAAK,IAAA,CAAA;AAAA,MACH,WAAA;AAAA,MACA,WAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AAEL;AASO,SAAS,aAAc,CAAA,GAAA,EAAe,SAAqC,EAAA,SAAA,GAAwB,MAAM;AAAC,CAAG,EAAA;AAClH,EAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,IAAA,MAAA,CAAO,MAAO,CAAA,aAAA;AAAA,MACZ,GAAA;AAAA,MACA,OAAO,SAAmB,KAAA;AAIxB,QAAA,SAAA,CAAU,SAAS,CAAA;AAAA,OACrB;AAAA,MACA,MAAM;AACJ,QAAU,SAAA,EAAA;AACV,QAAA,OAAA,CAAQ,IAAI,CAAsC,mCAAA,EAAA,MAAA,CAAO,MAAO,CAAA,YAAA,EAAc,CAAE,CAAA,CAAA;AAAA;AAClF,KACF;AAAA;AAEJ;ACpIAA,sBAAA,CAAM,OAAO,IAAI,CAAA;AACjBA,sBAAA,CAAM,OAAOC,kCAAiB,CAAA;AAQvB,SAAS,UAAA,CAAW,MAAc,KAAe,EAAA;AACtD,EAAA,QAAQ,KAAO;AAAA,IACb,KAAK,CAAA;AACH,MAAO,OAAA,IAAA,GAAO,CAAM,KAAA,CAAA,GAAI,EAAK,GAAA,EAAA;AAAA,IAC/B,KAAK,CAAA;AAAA,IACL,KAAK,CAAA;AAAA,IACL,KAAK,CAAA;AAAA,IACL,KAAK,EAAA;AACH,MAAO,OAAA,EAAA;AAAA,IACT;AACE,MAAO,OAAA,EAAA;AAAA;AAEb;AAQa,IAAA,gBAAA,GAAmB,CAAC,KAAA,EAAgB,MAA4B,KAAA;AAC3E,EAAM,MAAA,GAAA,GAAM,QAAQ,KAAM,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,CAAI,GAAA,EAAA;AAChD,EAAA,MAAM,IAAO,GAAA,KAAA,GACT,IAAI,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,SAAU,CAAA,CAAA,EAAG,CAAC,CAAC,CAAG,EAAA,MAAA,CAAO,GAAI,CAAA,SAAA,CAAU,CAAG,EAAA,CAAC,CAAC,CAAA,GAAI,CAAG,EAAA,MAAA,CAAO,GAAI,CAAA,SAAA,CAAU,CAAG,EAAA,CAAC,CAAC,CAAC,CAClG,mBAAA,IAAI,IAAK,EAAA;AACb,EAAI,IAAA;AACF,IAAA,OAAOD,sBAAM,CAAA,IAAI,IAAK,CAAA,IAAA,CAAK,SAAS,IAAK,CAAA,QAAA,EAAa,GAAA,CAAC,CAAC,CAAC,CAAE,CAAA,MAAA,CAAO,UAAU,YAAY,CAAA;AAAA,WACjF,GAAK,EAAA;AACZ,IAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAEhB,IAAO,OAAA,EAAA;AAAA;AAEX;AAQa,IAAA,WAAA,GAAc,CACzB,KAAA,EACA,KACW,KAAA;AACX,EAAM,MAAA,KAAA,GAAQA,uBAAM,KAAK,CAAA;AACzB,EAAM,MAAA,KAAA,GAAQA,uBAAM,KAAK,CAAA;AAGzB,EAAO,OAAA,KAAA,CAAM,IAAK,CAAA,KAAA,EAAO,KAAK,CAAA;AAChC;AAQa,IAAA,iBAAA,GAAoB,CAAC,KAAA,EAAe,IAAiB,KAAA;AAChE,EAAA,MAAM,OAAO,QAAS,CAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,CAAC,CAAC,CAAA;AACvC,EAAA,MAAM,QAAQ,QAAS,CAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,CAAC,CAAC,CAAA;AACxC,EAAA,MAAM,MAAM,QAAS,CAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,CAAC,CAAC,CAAA;AACtC,EAAA,IAAI,SAAY,GAAA,CAAA;AAEhB,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAA,SAAA,GAAY,IAAO,GAAA,IAAA;AACnB,MAAA;AAAA,IACF,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAA,SAAA,GAAY,GAAO,GAAA,IAAA;AACnB,MAAA;AAAA,IACF,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AAEH,MAAO,OAAA,KAAA;AAAA,IACT;AACE,MAAO,OAAA,KAAA;AAAA;AAGX,EAAA,MAAM,YAAY,IAAI,IAAA,CAAK,SAAW,EAAA,KAAA,GAAQ,GAAG,GAAG,CAAA;AACpD,EAAM,MAAA,QAAA,uBAAe,IAAK,EAAA;AAE1B,EAAA,OAAO,SAAY,GAAA,QAAA;AACrB;AAQO,SAAS,WAAA,CACd,YACA,WACA,EAAA;AACA,EAAM,MAAA,cAAA,GAAiB,IAAI,IAAK,CAAA,iBAAA,CAAkB,YAAY,YAAY,CAAC,EAAE,OAAQ,EAAA;AACrF,EAAM,MAAA,eAAA,GAAkB,IAAI,IAAK,CAAA,iBAAA,CAAkB,aAAa,YAAY,CAAC,EAAE,OAAQ,EAAA;AAEvF,EAAA,OAAO,cAAiB,GAAA,eAAA;AAC1B;AAQa,IAAA,iBAAA,GAAoB,CAAC,KAAA,EAA8C,MAA4B,KAAA;AAC1G,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,EAAA;AAAA;AAGT,EAAA,OAAOA,sBAAM,CAAA,KAAK,CAAE,CAAA,MAAA,CAAO,UAAU,YAAY,CAAA;AACnD;AASa,IAAA,YAAA,GAAe,CAAC,UAAA,EAAmD,MAA8B,KAAA;AAC5G,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,MAAM,KAAQ,GAAAA,sBAAA,EAAQ,CAAA,OAAA,CAAQ,KAAK,CAAA;AACnC,EAAA,MAAM,IAAO,GAAAA,sBAAA,CAAM,UAAY,EAAA,MAAA,IAAU,YAAY,IAAI,CAAA;AAEzD,EAAA,OAAO,IAAK,CAAA,OAAA,EAAa,IAAA,IAAA,CAAK,QAAQ,KAAK,CAAA;AAC7C;AAkCO,IAAM,oBAAoB,CAAC,EAAE,UAAY,EAAA,UAAA,EAAY,UAAsB,KAAA;AAChF,EAAA,OAAOA,sBAAM,CAAA,UAAA,EAAY,UAAU,CAAA,CAAE,OAAO,QAAQ,CAAA;AACtD;AAEa,IAAA,MAAA,GAAS,CAAC,KAAmB,KAAA;AACxC,EAAA,OAAO,KAAiB,YAAA,IAAA,IAAQ,CAAC,KAAA,CAAM,CAAC,KAAK,CAAA;AAC/C;AASa,IAAA,WAAA,GAAc,CAAC,UAAA,EAAmD,MAA8B,KAAA;AAC3G,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,MAAM,IAAO,GAAAA,sBAAA,CAAM,UAAY,EAAA,MAAA,IAAU,YAAY,IAAI,CAAA;AAEzD,EAAA,OAAO,KAAK,OAAQ,EAAA;AACtB;AA0Ba,IAAA,aAAA,GAAgB,CAAC,UAAqC,KAAA;AACjE,EAAA,MAAM,SAAY,GAAAA,sBAAA,EAAQ,CAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AAEzC,EAAM,MAAA,KAAA,uBAAY,IAAK,EAAA;AACvB,EAAA,KAAA,CAAM,QAAS,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAC,CAAA;AAEzB,EAAM,MAAA,OAAA,GAAU,IAAI,IAAA,CAAK,KAAK,CAAA;AAC9B,EAAI,IAAA,SAAA;AAEJ,EAAA,QAAQ,UAAY;AAAA,IAClB,KAAK,OAAA;AAEH,MAAY,SAAA,GAAA,IAAI,KAAK,KAAK,CAAA;AAE1B,MAAO,OAAA,EAAE,WAAW,OAAQ,EAAA;AAAA,IAE9B,KAAK,MAAA;AAEH,MAAY,SAAA,GAAA,IAAI,KAAK,KAAK,CAAA;AAC1B,MAAA,SAAA,CAAU,OAAQ,CAAA,SAAA,CAAU,OAAQ,EAAA,GAAI,CAAC,CAAA;AAEzC,MAAO,OAAA,EAAE,WAAW,OAAQ,EAAA;AAAA,IAC9B,KAAK,OAAA;AAEH,MAAY,SAAA,GAAA,IAAI,KAAK,KAAK,CAAA;AAC1B,MAAA,SAAA,CAAU,OAAQ,CAAA,SAAA,CAAU,OAAQ,EAAA,GAAI,EAAE,CAAA;AAE1C,MAAO,OAAA,EAAE,WAAW,OAAQ,EAAA;AAAA,IAE9B,KAAK,UAAA;AAEH,MAAA,OAAO,EAAE,SAAW,EAAAA,sBAAA,EAAQ,CAAA,GAAA,CAAI,CAAC,CAAE,CAAA,MAAA,EAAU,EAAA,OAAA,EAASA,wBAAQ,CAAA,GAAA,CAAI,CAAC,CAAA,CAAE,QAAS,EAAA;AAAA,IAChF,KAAK,UAAA;AAEH,MAAO,OAAA;AAAA,QACL,SAAA,EAAWA,sBAAM,EAAA,CAAE,QAAS,CAAA,CAAA,EAAG,GAAG,CAAE,CAAA,GAAA,CAAI,CAAC,CAAA,CAAE,MAAO,EAAA;AAAA,QAClD,OAAA,EAASA,sBAAM,EAAA,CAAE,QAAS,CAAA,CAAA,EAAG,GAAG,CAAE,CAAA,GAAA,CAAI,CAAC,CAAA,CAAE,MAAO;AAAA,OAClD;AAAA,IACF,KAAK,WAAA;AAEH,MAAA,OAAO,EAAE,SAAA,EAAWA,sBAAM,EAAA,CAAE,SAAS,CAAG,EAAA,GAAG,CAAE,CAAA,MAAA,EAAU,EAAA,OAAA,EAASA,sBAAM,EAAA,CAAE,QAAS,EAAA;AAAA,IACnF,KAAK,WAAA;AAEH,MAAO,OAAA;AAAA,QACL,WAAWA,sBAAM,EAAA,CAAE,IAAK,CAAA,CAAC,EAAE,MAAO,EAAA;AAAA,QAClC,OAAA,EAASA,wBAAQ,CAAA,IAAA,CAAKA,wBAAQ,CAAA,WAAA,EAAa,CAAA,CAAE,MAAO;AAAA,OACtD;AAAA,IACF,KAAK,WAAA;AAEH,MAAO,OAAA;AAAA,QACL,SAAW,EAAA,SAAA,CAAU,IAAK,CAAA,CAAC,EAAE,MAAO,EAAA;AAAA,QACpC,SAAS,SAAU,CAAA,IAAA,CAAK,UAAU,WAAY,EAAC,EAAE,MAAO;AAAA,OAC1D;AAAA,IACF,KAAK,aAAA;AAEH,MAAA,OAAO,EAAE,SAAA,EAAWA,sBAAM,EAAA,CAAE,SAAS,GAAK,EAAA,GAAG,CAAE,CAAA,MAAA,EAAU,EAAA,OAAA,EAASA,sBAAM,EAAA,CAAE,QAAS,EAAA;AAAA,IACrF;AACE,MAAO,OAAA,IAAA;AAAA;AAEb;;;ACrSA,IAAA,UAAA,GAAA,uaAAA;;;ACIO,IAAM,eAAe,MAAM;AAC9B,EAAA,IAAI,UAAY,EAAA;AAEZ,IAAI,IAAA,QAAA,CAAS,aAAc,CAAA,4CAA4C,CAAG,EAAA;AACtE,MAAA;AAAA;AAEJ,IAAA,OAAA,CAAQ,IAAI,wBAAwB,CAAA;AACpC,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,SAAY,GAAA;AAAA,QAAA,EACjB,UAAQ;AAAA,QAAA,CAAA;AAEV,IAAS,QAAA,CAAA,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA;AAGxC","file":"index.cjs","sourcesContent":["/**\n * 쓰로틀\n * @param func\n * @param delay\n * @returns\n */\nexport function throttle<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let lastCall = 0;\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n const now = Date.now();\n\n if (now - lastCall >= delay) {\n // 마지막 호출로부터 delay 시간이 지났으면 즉시 실행\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n // 대기 중인 타이머가 없으면 새로운 타이머 설정\n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\n\n/**\n * 디바운스\n * @param func\n * @param delay\n * @returns\n */\nexport function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n","export const getCookie = (name: string): string => {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n};\n\nexport const setCookie = (\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, options: { path?: string; domain?: string } = {}): void => {\n setCookie(name, '', { ...options, expires: -1 });\n};\n","import { getCookie } from './cookie-utils';\n\n/**\n * 호스트명에서 서브도메인을 추출합니다.\n * @param hostname 호스트명\n * @returns 서브도메인 (예: nxl-dsp-dev)\n */\nexport const getSubdomain = (hostname: string): string => {\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\n return '';\n }\n\n const parts = hostname.split('.');\n\n // 최소 3개 부분이 있어야 서브도메인 존재 (subdomain.domain.com)\n if (parts.length < 3) {\n return '';\n }\n\n // 첫 번째 부분이 서브도메인\n return parts[0] ?? '';\n};\n\n/**\n * 호스트명을 기반으로 환경을 판단합니다.\n * @param hostname 호스트명\n * @returns 환경 구분 문자열 ('local' | 'dev' | 'stg' | 'prd')\n */\nexport const getEnvironmentFromHostname = (hostname: string): 'local' | 'dev' | 'stg' | 'prd' => {\n const debugModeEnv = getCookie('dsp-debug-mode-env')?.toLowerCase();\n if (debugModeEnv) {\n return debugModeEnv as 'local' | 'dev' | 'stg' | 'prd';\n }\n const subDomain = getSubdomain(hostname);\n\n // localhost 판단\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost')) {\n return 'local';\n }\n\n // dev 환경 판단\n if (subDomain.includes(`dev`)) {\n return 'dev';\n }\n\n // stg 환경 판단\n if (subDomain.includes('stg')) {\n return 'stg';\n }\n\n // 기본 운영\n return 'prd';\n};\n\n/**\n * @see https://github.com/storybookjs/storybook/issues/32028#issuecomment-3298982086\n * @note 스토리북에서 버그로인해 window객체를 정상적으로 탐지하지 못하는 이슈우회\n */\nexport const isClient = () => {\n try {\n return !!window;\n } catch {\n return false;\n }\n};\n\n// window.isStorybookEnv 접근을 위한 타입캐스팅\ndeclare const window: Window & { isStorybookEnv?: boolean };\n/**\n * 현재 실행 환경이 Storybook인지 확인하는 함수\n *\n * 사용 전, `viteFinal` 설정에서 `window.isStorybookEnv`를 `true`로 정의해야 정상 동작합니다.\n *\n * 예시:\n * ```ts\n * const config: StorybookConfig = {\n * viteFinal: (config) => {\n * // window.isStorybookEnv를 true로 설정 (boolean 값으로 처리됨)\n * config.define = {\n * ...config.define,\n * 'window.isStorybookEnv': 'true',\n * };\n *\n * return config;\n * },\n * };\n * ```\n */\nexport const isStorybookEnv = () => {\n try {\n return window.isStorybookEnv === true;\n } catch {\n // window가 존재하지 않는 등 예외 상황에서는 false 반환\n return false;\n }\n};\n\n/**\n * 현재 업무구분 코드 구하기\n * 원칙: pathname의 첫 번째가 업무구분코드를 사용할 경우 해당 값을 반환\n * @returns\n */\nexport const getBusinessWorkDivisionCode = () => {\n return location.pathname.split('/')[1] ?? '';\n};\n\n/**\n * @description storybook에서 동작을 고려하여 수정한 버전\n * @returns\n */\nexport const getServicePath = () => {\n if (typeof window.isStorybookEnv === 'boolean') {\n return '';\n } else {\n return `/${getBusinessWorkDivisionCode()}`;\n }\n};\n\n/**\n * 환경에 맞는 API 호스트명을 반환합니다.\n * 호스트명을 강제하고 싶으면 두 번째 파라미터로 넘기세요.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\n\nexport const getApiHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n switch (environment) {\n case 'dev':\n return `https://nxl-dsp-dev.hanwhalife.com`;\n\n case 'local':\n case 'stg':\n return `https://nxl-dsp-stg.hanwhalife.com`;\n\n case 'prd':\n return `https://nxl-dsp.hanwhalife.com`;\n\n default:\n console.warn('DSP API environment is not defined');\n\n return '';\n }\n};\n\n/**\n * 환경에 맞는 CDN 호스트명을 반환합니다.\n * 호스트명을 강제하고 싶으면 두 번째 파라미터로 넘기세요.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getCdnHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (!isClient()) {\n return '';\n }\n\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n switch (environment) {\n case 'dev':\n return `https://dev-dsp-static.hanwhalife.com`;\n\n case 'local':\n case 'stg':\n return `https://stg-dsp-static.hanwhalife.com`;\n\n case 'prd':\n return `https://dsp-static.hanwhalife.com'`;\n\n default:\n console.warn('DSP environment is not defined');\n\n return '';\n }\n};\n\n/**\n * @description\n * 환경에 맞는 비정형PI 호스트명을 반환합니다.\n * client side에서 사용하는 함수입니다.\n * @param serviceCode dea,dis,dcm\n * @param hostname window.location.hostname\n * @returns\n */\nexport const getDudApiBasePathFromEnvironment = (hostname?: string) => {\n if (!isClient()) {\n return '';\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n\n switch (environment) {\n /**\n * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.\n * (cors이슈 해결을 위해 필수)\n */\n case 'local':\n return `${getServicePath()}/api/dud`;\n /**\n * local 이 아닌 환경에서는 전체주소를 호출합니다.\n */\n case 'dev':\n return `https://dsp-dud-dev.hanwhalife.com:10101/api`;\n\n case 'stg':\n return `https://dsp-dud-stg.hanwhalife.com:10102/api`;\n\n case 'prd':\n return `https://dsp-dud.hanwhalife.com/api`;\n\n default:\n console.warn('DUD API environment is not defined');\n\n return '';\n }\n};\n\n/**\n * @description\n * 환경에 맞는 Dsp 호스트명을 반환합니다.\n * client side에서 사용하는 함수입니다.\n * @param serviceCodeTo dea,dis 같은 api서버명\n * @param hostname window.location.hostname\n * @returns\n */\nexport const getDspApiBasePathFromEnvironment = (serviceCodeTo: string, hostname?: string) => {\n if (!isClient()) {\n return '';\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n\n switch (environment) {\n /**\n * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.\n * (cors이슈 해결을 위해 필수)\n */\n case 'local':\n return `${getServicePath()}/api/${serviceCodeTo}`;\n /**\n * local 이 아닌 환경에서는 전체주소를 호출합니다.\n */\n case 'dev':\n return `https://nxl-dsp-dev.hanwhalife.com/api/${serviceCodeTo}`;\n\n case 'stg':\n return `https://nxl-dsp-stg.hanwhalife.com/api/${serviceCodeTo}`;\n\n case 'prd':\n return `https://nxl-dsp.hanwhalife.com/api/${serviceCodeTo}`;\n\n default:\n console.warn('DSP API environment is not defined');\n\n return '';\n }\n};\n\n\n/**\n * @description\n * 환경에 맞는 NLC 호스트명을 반환합니다.\n * client side에서 사용하는 함수입니다.\n * @param hostname window.location.hostname\n * @returns\n */\nexport const getNlcHostFromEnvironment = (hostname?: string) => {\n if (!isClient()) {\n return '';\n }\n\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n\n switch (environment) {\n case 'local':\n return `https://nxl-nlc-stg.hanwhalife.com`;\n\n case 'dev':\n return `https://nxl-nlc-dev.hanwhalife.com`;\n\n case 'stg':\n return `https://nxl-nlc-stg.hanwhalife.com`;\n\n case 'prd':\n return `https://nxl-nlc.hanwhalife.com`;\n\n default:\n console.warn('NLC environment is not defined');\n\n return '';\n }\n};\n\n","import { ExecutionEnvironment, OSName, BrowserName } from '../types/common.types';\n\nimport { isClient } from './environment-utils';\n/**\n * 한화생명 영업지원 웹 실행 환경 탐지\n * @returns\n */\nexport const getDspExecutionEnvironment = (): ExecutionEnvironment => {\n if (!isClient()) {\n return 'unknown';\n }\n\n if (window.n2Bridge) {\n return 'android-webview';\n }\n\n if (window.webkit?.messageHandlers?.n2Bridge) {\n return 'ios-webview';\n }\n\n if (window.self !== window.top) {\n return 'iframe';\n }\n\n return 'web';\n};\n\n/**\n * 한화생명 영업 앱 환경 여부 판단(DSP 앱 또는 FP 플래너 앱)\n * 운영 중인 프로덕션 앱에서 실행 중인지 확인\n * @returns\n */\nexport const isProductionApp = () => {\n if (!isClient()) {\n return false;\n }\n\n return isDspApp() || isFpPlannerApp();\n};\n\n/**\n * UserAgent에 SspApp 이 있는지 검사\n * 있으면, DSP 앱\n * @param userAgent\n * @returns\n */\nexport const checkUserAgentDspApp = (userAgent: string) => {\n return userAgent.toLowerCase().includes('sspapp');\n};\n\n/**\n * 한화생명 영업지원 웹뷰 환경 여부 판단\n * @returns 웹뷰(Android/iOS) 환경이면 true, 아니면 false\n */\nexport const isDspApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) && (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * FP 플래너 웹뷰 환경 여부 판단\n * @returns\n */\nexport const isFpPlannerApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) === false &&\n (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * 영업 포털 환경 여부 판단\n * @returns\n */\nexport const isSalesPortal = () => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return environment === 'iframe';\n};\n\n/**\n * 태블릿 여부 판단\n * @param userAgent\n * @returns\n */\nexport const isTablet = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple 태블릿\n ua.includes('ipad') ||\n // Android 태블릿 (Mobile 키워드 없음)\n (ua.includes('android') && !ua.includes('mobile')) ||\n // 명시적 태블릿 키워드\n ua.includes('tablet') ||\n // Amazon 태블릿\n ua.includes('kindle') ||\n ua.includes('silk') ||\n /kf[a-z]{2}wi|kftt/.test(ua) ||\n // BlackBerry 태블릿\n ua.includes('playbook') ||\n // 삼성 갤럭시 탭 (개선된 정규식)\n /gt-p\\d{4}|sm-[tp]\\d{3}/.test(ua) ||\n // 구글 넥서스/픽셀 태블릿\n /nexus (?:[789]|10)|pixel [cs]|pixel slate/.test(ua) ||\n // 기타 브랜드 태블릿\n /xoom|transformer|mediapad|mipad|tab\\s/.test(ua) ||\n // Windows 태블릿 (개선된 조건)\n (ua.includes('windows') && (ua.includes('touch') || ua.includes('tablet'))) ||\n ua.includes('surface')\n );\n};\n\n/**\n * 스마트폰 여부 판단\n * @param userAgent\n * @returns\n */\nexport const isPhone = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple 모바일\n ua.includes('iphone') ||\n ua.includes('ipod') ||\n // Android 스마트폰 (Mobile 키워드 있음)\n (ua.includes('android') && ua.includes('mobile')) ||\n // BlackBerry\n ua.includes('blackberry') ||\n ua.includes('bb10') ||\n // Windows Mobile\n ua.includes('windows phone') ||\n ua.includes('windows mobile') ||\n ua.includes('iemobile') ||\n // Opera Mobile\n ua.includes('opera mini') ||\n ua.includes('opera mobi') ||\n // 기타 모바일 브라우저\n (ua.includes('mobile') &&\n (ua.includes('firefox') || ua.includes('chrome') || ua.includes('safari') || ua.includes('edge'))) ||\n // 모바일 키워드 (태블릿 제외)\n (ua.includes('mobile') && !ua.includes('tablet')) ||\n // 삼성 갤럭시 폰 (개선)\n /sm-[a-z]\\d{3}[a-z]?|gt-[a-z]\\d{4}/.test(ua) ||\n // LG, HTC 폰\n /lg-[a-z]\\d{3,4}|htc[_\\s]/.test(ua) ||\n // 화웨이/샤오미 등 (개선)\n /huawei|honor|redmi|mi[\\s\\d]|oneplus|oppo|vivo/.test(ua)\n );\n};\n\n/**\n * 데스크톱 여부 판단\n * @param userAgent\n * @returns\n */\nexport const isPc = (userAgent: string) => {\n const ua = userAgent.toLowerCase();\n\n return !isPhone(ua) && !isTablet(ua);\n};\n\n/**\n * UserAgent에서 기기 타입 구분\n * @param userAgent\n * @returns\n */\nexport const getFormFactorFromUserAgent = (userAgent: string) => {\n if (!userAgent) {\n return 'pc';\n }\n\n const ua = userAgent.toLowerCase();\n\n if (isTablet(ua)) {\n return 'tablet';\n }\n\n if (isPhone(ua)) {\n return 'phone';\n }\n\n return 'pc';\n};\n\n/**\n * UserAgent에서 운영체제 이름을 추출\n * @param userAgent - 브라우저의 userAgent 문자열\n * @returns 운영체제 이름\n */\nexport const getOSName = (userAgent: string): OSName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS 체크 (iPhone, iPad, iPod)\n if (/iphone|ipad|ipod/.test(ua)) {\n return 'ios';\n }\n\n // Android 체크\n if (ua.includes('android')) {\n return 'android';\n }\n\n // Windows 체크\n if (ua.includes('windows') || ua.includes('win32') || ua.includes('win64')) {\n return 'windows';\n }\n\n // macOS 체크 (Mac OS X, macOS)\n if (ua.includes('mac os x') || ua.includes('macos') || ua.includes('macintosh')) {\n return 'mac';\n }\n\n // Linux 체크 (Android 제외)\n if (ua.includes('linux') && !ua.includes('android')) {\n return 'linux';\n }\n\n return 'unknown';\n};\n\n/**\n * 현재 브라우저의 운영체제 이름을 가져오기\n * @returns 현재 환경의 운영체제 이름\n */\nexport const getCurrentOSName = (): OSName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSName(navigator.userAgent);\n};\n\n/**\n * UserAgent에서 OS 버전을 추출\n * @param userAgent - 브라우저의 userAgent 문자열\n * @returns OS 버전 문자열\n */\nexport const getOSVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS 버전 (iPhone OS 15_0, iPad OS 15_0)\n const iosMatch = ua.match(/os (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (iosMatch && iosMatch.length >= 3) {\n const major = iosMatch[1];\n const minor = iosMatch[2];\n const patch = iosMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n // Android 버전\n const androidMatch = ua.match(/android (\\d+(?:\\.\\d+)*)/);\n if (androidMatch && androidMatch[1]) {\n return androidMatch[1];\n }\n\n // Windows 버전\n const windowsMatch = ua.match(/windows nt (\\d+\\.\\d+)/);\n if (windowsMatch && windowsMatch[1]) {\n const version = windowsMatch[1];\n // Windows NT 버전을 실제 Windows 버전으로 매핑\n const windowsVersionMap: Record<string, string> = {\n '10.0': '10/11',\n '6.3': '8.1',\n '6.2': '8',\n '6.1': '7',\n '6.0': 'Vista',\n '5.1': 'XP'\n };\n\n return windowsVersionMap[version] || version;\n }\n\n // macOS 버전\n const macMatch = ua.match(/mac os x (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (macMatch && macMatch.length >= 3) {\n const major = macMatch[1];\n const minor = macMatch[2];\n const patch = macMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent에서 브라우저 이름을 추출\n * @param userAgent - 브라우저의 userAgent 문자열\n * @returns 브라우저 이름\n */\nexport const getBrowserName = (userAgent: string): BrowserName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium 기반) - Chrome보다 먼저 체크해야 함\n if (ua.includes('edg/') || ua.includes('edge/')) {\n return 'edge';\n }\n\n // Samsung Internet\n if (ua.includes('samsungbrowser')) {\n return 'samsung';\n }\n\n // Opera - Chrome보다 먼저 체크해야 함\n if (ua.includes('opr/') || ua.includes('opera')) {\n return 'opera';\n }\n\n // Chrome (Chromium 기반 브라우저들보다 늦게 체크)\n if (ua.includes('chrome') && !ua.includes('edg')) {\n return 'chrome';\n }\n\n // Firefox\n if (ua.includes('firefox')) {\n return 'firefox';\n }\n\n // Safari (Chrome와 구분하기 위해 webkit 체크)\n if (ua.includes('safari') && !ua.includes('chrome')) {\n return 'safari';\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent에서 브라우저 버전을 추출\n * @param userAgent - 브라우저의 userAgent 문자열\n * @returns 브라우저 버전\n */\nexport const getBrowserVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium)\n const edgMatch = ua.match(/edg\\/(\\d+(?:\\.\\d+)*)/);\n if (edgMatch && edgMatch[1]) {\n return edgMatch[1];\n }\n\n // Samsung Internet\n const samsungMatch = ua.match(/samsungbrowser\\/(\\d+(?:\\.\\d+)*)/);\n if (samsungMatch && samsungMatch[1]) {\n return samsungMatch[1];\n }\n\n // Opera\n const operaMatch = ua.match(/(?:opr|opera)\\/(\\d+(?:\\.\\d+)*)/);\n if (operaMatch && operaMatch[1]) {\n return operaMatch[1];\n }\n\n // Chrome\n const chromeMatch = ua.match(/chrome\\/(\\d+(?:\\.\\d+)*)/);\n if (chromeMatch && chromeMatch[1] && !ua.includes('edg')) {\n return chromeMatch[1];\n }\n\n // Firefox\n const firefoxMatch = ua.match(/firefox\\/(\\d+(?:\\.\\d+)*)/);\n if (firefoxMatch && firefoxMatch[1]) {\n return firefoxMatch[1];\n }\n\n // Safari\n const safariMatch = ua.match(/version\\/(\\d+(?:\\.\\d+)*)/);\n if (safariMatch && safariMatch[1] && ua.includes('safari') && !ua.includes('chrome')) {\n return safariMatch[1];\n }\n\n return 'unknown';\n};\n/**\n * 현재 브라우저의 OS 버전을 가져오기\n * @returns 현재 환경의 OS 버전\n */\nexport const getCurrentOSVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSVersion(navigator.userAgent);\n};\n\n/**\n * 현재 브라우저의 이름을 가져오기\n * @returns 현재 환경의 브라우저 이름\n */\nexport const getCurrentBrowserName = (): BrowserName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserName(navigator.userAgent);\n};\n\n/**\n * 현재 브라우저의 버전을 가져오기\n * @returns 현재 환경의 브라우저 버전\n */\nexport const getCurrentBrowserVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserVersion(navigator.userAgent);\n};\n\n/**\n * 클라이언트용 디바이스 ID 생성 및 관리(임시값)\n */\nexport const getOrCreateDeviceId = (): string => {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const STORAGE_KEY = 'dsp_device_id';\n let deviceId = localStorage.getItem(STORAGE_KEY);\n\n if (!deviceId) {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 15);\n deviceId = `dsp-web-${timestamp}-${random}`;\n\n try {\n localStorage.setItem(STORAGE_KEY, deviceId);\n } catch (error) {\n console.warn('[DeviceId] localStorage 저장 실패:', error);\n }\n }\n\n return deviceId;\n};\n\n/**\n * 디바이스 모델 감지\n */\nexport const getDeviceModel = (): string => {\n if (!isClient()) {\n return '';\n }\n\n const ua = navigator.userAgent;\n\n // iOS\n if (/iPad/.test(ua)) {\n return 'iPad';\n }\n if (/iPhone/.test(ua)) {\n return 'iPhone';\n }\n if (/iPod/.test(ua)) {\n return 'iPod Touch';\n }\n\n // Android - 주요 브랜드\n if (/SM-[A-Z0-9]+/.test(ua)) {\n const match = ua.match(/SM-[A-Z0-9]+/);\n\n return match ? `Samsung ${match[0]}` : 'Samsung';\n }\n if (/Pixel/.test(ua)) {\n const match = ua.match(/Pixel [0-9]+[a-zA-Z]*/);\n\n return match ? `Google ${match[0]}` : 'Google Pixel';\n }\n if (/Mi\\s|Redmi|POCO/.test(ua)) {\n return 'Xiaomi';\n }\n if (/HUAWEI/.test(ua)) {\n return 'Huawei';\n }\n if (/OnePlus/.test(ua)) {\n return 'OnePlus';\n }\n\n // Desktop\n if (/Windows/.test(ua)) {\n return 'Windows PC';\n }\n if (/Mac OS X/.test(ua)) {\n return 'Mac';\n }\n if (/Linux/.test(ua)) {\n return 'Linux PC';\n }\n\n return 'Unknown';\n};\n\n/**\n * Android 기기인지 확인\n * (클라이언트용)\n */\nexport const isAndroidDevice = (): boolean => {\n if (isClient() === false) {\n return false;\n }\n\n return /Android/i.test(navigator.userAgent);\n};\n\n/**\n * iOS 기기인지 확인 (iPhone, iPad, iPod)\n * (클라이언트용)\n */\nexport const isIosDevice = (): boolean => {\n if (isClient() === false) {\n return false;\n }\n\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n};\n\n/**\n * 영업지원 안드로이드 웹뷰 여부\n * @returns boolean\n */\nexport const isAndroidWebView = () => {\n return getDspExecutionEnvironment() === 'android-webview';\n};\n\n/**\n * 영업지원 iOS 웹뷰 여부(FP 플래너 포함)\n * @returns boolean\n */\nexport const isIosWebView = () => {\n return getDspExecutionEnvironment() === 'ios-webview';\n};\n","/**\n * Message 이벤트 헨들러를 관리하는 클래스입니다. (싱글턴)\n * 모든 message 핸들러는 여기를 통해 등록해야합니다.\n * window.addEventListener('message') 의 중복을 방지하기 위함입니다.\n */\nexport class MessageEventManager {\n private static instance: MessageEventManager;\n private handlers = new Map<string, (event: MessageEvent) => void>();\n\n static getInstance(): MessageEventManager {\n if (!MessageEventManager.instance) {\n MessageEventManager.instance = new MessageEventManager();\n }\n\n return MessageEventManager.instance;\n }\n\n private constructor() {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n\n /**\n *\n * @param event\n */\n private handleMessage(event: MessageEvent): void {\n // 모든 등록된 핸들러 실행\n for (const [key, handler] of this.handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error(`Message handler ${key} error:`, error);\n }\n }\n }\n\n /**\n * 이벤트 헨들러 함수를 등록합니다.\n * @param key\n * @param handler\n */\n registerHandler(key: string, handler: (event: MessageEvent) => void): void {\n this.handlers.set(key, handler);\n }\n\n /**\n * 이벤트 핸들러 함수를 삭제합니다.\n * @param key\n */\n unregisterHandler(key: string): void {\n this.handlers.delete(key);\n }\n}\n","interface ConvertTextToImgParams {\n /** 이미지로 변환할 문자열 */\n targetStr: string;\n /** 캔버스 너비 (지정하지 않으면 텍스트 길이에 따라 자동 계산) */\n canvasWidth?: number;\n /** 캔버스 높이 (지정하지 않으면 기본값 150px) */\n canvasHeight?: number;\n /** 배경색 (지정하지 않으면 투명) */\n backgroundColor?: string;\n /** 폰트 크기 (지정하지 않으면 기본값 75px) */\n fontSize?: number;\n /** 폰트 색상 (지정하지 않으면 기본값 검정색) */\n fontColor?: string;\n /** 폰트 두께 (지정하지 않으면 기본값 bold) */\n fontWeight?: string;\n /** 폰트 패밀리 (지정하지 않으면 기본값 ) */\n fontFamily?: string;\n}\n\n/**\n * 텍스트를 이미지(Base64)로 변환하는 함수\n * @param params - 변환에 필요한 파라미터 객체\n * @returns Base64로 인코딩된 이미지 데이터 URL\n */\nexport const convertTextToImg = ({\n targetStr,\n canvasWidth,\n canvasHeight,\n backgroundColor,\n fontColor,\n fontSize,\n fontWeight,\n fontFamily = `'Malgun Gothic', '맑은 고딕', 'sans-serif', 'Arial'`\n}: ConvertTextToImgParams): string => {\n // 1. 메모리에 캔버스 요소 생성\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n // 캔버스 컨텍스트를 가져올 수 없는 경우 에러 처리\n throw new Error('Canvas context를 가져올 수 없습니다.');\n }\n\n // 2. 캔버스 크기 설정\n const defaultHeight = 150;\n const calculatedWidth = targetStr.length * 70; // 글자 수 기반 너비 계산\n\n canvas.width = canvasWidth ?? calculatedWidth;\n canvas.height = canvasHeight ?? defaultHeight;\n\n // 3. 배경색 처리\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n // 4. 텍스트 그리기\n ctx.fillStyle = fontColor ?? 'black';\n ctx.textAlign = 'center';\n ctx.font = `${fontWeight ?? 'bold'} ${fontSize ?? 75}px ${fontFamily}`;\n\n console.log('font', `${fontWeight ?? 'bold'} ${fontSize ?? 75}px ${fontFamily}`);\n ctx.textBaseline = 'middle'; // 텍스트를 수직 중앙에 더 잘 맞추기 위해 추가\n\n // 텍스트를 캔버스 중앙에 그립니다.\n ctx.fillText(targetStr, canvas.width / 2, canvas.height / 2);\n\n // 5. Base64 이미지 데이터로 변환하여 반환\n return canvas.toDataURL(); // 기본적으로 'image/png'\n};\n\nexport function drawImageResizeCentered(base64: string, size: { canvasWidth: number; canvasHeight: number }) {\n return new Promise((resolve) => {\n const { canvasHeight, canvasWidth } = size;\n\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n const ctx = canvas.getContext('2d');\n\n const img = new Image();\n img.src = base64;\n img.onload = () => {\n const imageWidth = img.width;\n const imageHeight = img.height;\n\n const canvasRatio = canvasWidth / canvasHeight;\n const imageRatio = imageWidth / imageHeight;\n\n let newWidth;\n let newHeight;\n\n if (imageRatio > canvasRatio) {\n newWidth = canvasWidth;\n newHeight = newWidth / imageRatio;\n } else {\n newHeight = canvasHeight;\n newWidth = newHeight * imageRatio;\n }\n\n const x = (canvasWidth - newWidth) / 2;\n const y = (canvasHeight - newHeight) / 2;\n\n ctx?.clearRect(0, 0, canvasWidth, canvasHeight);\n ctx?.drawImage(img, x, y, newWidth, newHeight);\n\n resolve(canvas.toDataURL());\n };\n });\n}\n","import { getCookie } from \"./cookie-utils\";\n\nexport function base64ToBlob(base64String: string, contentType = '') {\n const regex = /^data:([a-zA-Z0-9/+.-]+);base64,/;\n const matches = base64String.match(regex);\n\n if (matches === null) {\n throw new Error('Invalid base64 string');\n }\n\n const contentTypeFinal = contentType || matches[1];\n const byteCharacters = atob(base64String.replace(regex, ''));\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n\n return new Blob([byteArray], { type: contentTypeFinal });\n}\n\nexport function base64ToFile(base64String: string, fileName: string, contentType = '') {\n const blob = base64ToBlob(base64String, contentType);\n\n if (!blob) {\n throw new Error('Invalid base64 string');\n }\n\n return blobToFile(blob, fileName);\n}\n\nexport function blobToFile(blob: Blob, fileName: string) {\n return new File([blob], fileName, {\n type: blob.type,\n lastModified: Date.now()\n });\n}\n\nexport async function fileToBase64(file: File | Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n if (typeof reader.result === 'string') {\n resolve(reader.result);\n } else {\n reject(new Error('Invalid file type'));\n }\n };\n\n reader.onerror = (error) => {\n reject(error);\n };\n\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * 파일확장자 리턴\n * @param data string File Blob\n */\nexport function getExt(data: string | File | Blob) {\n if (typeof data === 'string') {\n return data.split('.').pop();\n }\n\n if (data instanceof File) {\n return data.name.split('/').pop();\n }\n\n if (data instanceof Blob) {\n return data.type.split('/').pop();\n }\n}\n\nexport async function objectUrlToBlob(objectUrl: string) {\n try {\n const response = await fetch(objectUrl);\n const blob = await response.blob();\n\n return blob;\n } catch (error) {\n console.error('Error converting object URL to Blob:', error);\n throw error;\n }\n}\n\nexport async function objectUrlToBase64(objectUrl: string): Promise<string> {\n const blob = await objectUrlToBlob(objectUrl);\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n if (typeof reader.result === 'string') {\n resolve(reader.result);\n } else {\n reject(new Error('Invalid file type'));\n }\n };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\n\nexport function downloadBlob(blob: Blob, filename: string) {\n // 1. Create a temporary URL for the Blob object\n const url = URL.createObjectURL(blob);\n\n // 2. Create a hidden anchor element\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = url;\n\n // 3. Set the 'download' attribute with the desired file name\n // This attribute forces the browser to download the URL content instead of navigating to it\n link.download = `${filename}.${getExt(blob)}`;\n\n // 4. Append the link to the body (necessary for the click to work in some browsers)\n document.body.appendChild(link);\n\n // 5. Simulate a click on the link to trigger the download\n link.click();\n\n // 6. Clean up: Remove the link and revoke the object URL\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n\n/**\n * image url을 File Object로 변경.\n * @param imageUrl fileObject로 변경할 image url\n * @note fetch를 이용하여 변환하기때문에, 앱내 커스텀스킴을 사용하는경우는 처리불가. imageUrlToFileWithCanvas사용\n * @return file object\n */\nexport async function imageUrlToFileFetch(imageUrl: string): Promise<File> {\n\n const headers = new Headers();\n headers.append('cache-control', 'no-cache');\n const resImage = await fetch(imageUrl, { headers });\n const blob = await resImage.blob();\n const { type } = blob;\n const name = type.split('/').join('.');\n const file = new File([blob], name, { type });\n\n return file;\n}\n\nexport async function imageUrlToFile(imageUrl: string): Promise<File> {\n const fileConvertTypeCookieKey = 'dsp-debug-mode-file-convert-type';\n const fileConvertType = getCookie(fileConvertTypeCookieKey);\n\n if (fileConvertType === 'fetch') {\n return await imageUrlToFileFetch(imageUrl);\n }\n\n if (fileConvertType === 'xhr') {\n return await imageUrlToFileWithXMLHttpRequest(imageUrl);\n }\n\n return await imageUrlToFileWithCanvas(imageUrl);\n}\n\n\n/**\n * imageUrlToFile버전을 사용할수 없는경우 대체하여 사용.\n * 메모리소모가 증가하고, 이미지손실가능성이 있음.\n * 이미지원본에 대한 보존이 필수인경우 비추\n * @param imageUrl \n * @returns \n */\nexport async function imageUrlToFileWithCanvas(imageUrl: string): Promise<File> {\n const newImage = new Image();\n newImage.src = imageUrl;\n newImage.crossOrigin = 'Anonymous';\n\n return new Promise((resolve, reject) => {\n newImage.onload = () => {\n const canvas = document.createElement('canvas');\n canvas.width = newImage.width;\n canvas.height = newImage.height;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(newImage, 0, 0);\n canvas.toBlob((blob) => {\n if (blob) {\n const ext = getExt(imageUrl);\n const file = new File([blob], `image.${ext}`, { type: blob.type });\n resolve(file);\n }\n });\n }\n };\n newImage.onerror = (e) => {\n reject(JSON.stringify(e));\n };\n });\n}\n\nexport async function imageUrlToFileWithXMLHttpRequest(imageUrl: string): Promise<File> {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', imageUrl, true);\n xhr.responseType = 'blob';\n xhr.send();\n\n return new Promise((resolve, reject) => {\n xhr.onload = () => {\n if (xhr.status === 200) {\n const blob = xhr.response; ``\n const file = new File([blob], `image.${getExt(imageUrl)}`, { type: blob.type });\n resolve(file);\n } else {\n reject(new Error(`Failed to load image: ${xhr.status}`));\n }\n };\n xhr.onerror = (e) => {\n reject(JSON.stringify(e));\n };\n });\n};","/* eslint-disable */\n/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 32070 $ */\nvar $ASTX2_CONST = {\n ERROR_SUCCESS: 0,\n ERROR_FAILED: 101,\n ERROR_NOINIT: 102,\n ERROR_NOTINST: 103,\n ERROR_NOTSUPPORTED: 104,\n ERROR_NOCONNECT: 105,\n ERROR_NCK: 106,\n ERROR_ERR: 107,\n ERROR_NSP: 108,\n ERROR_PARAM: 109,\n ERROR_EXCESS: 110,\n ERROR_NEEDUPDATE: 111,\n OPTION_NONE2E: 1,\n OPTION_AUTOFOCUS: 2,\n OPTION_AUTOSETTEXT: 4,\n OPTION_E2EFORM: 8,\n OPTION_E2EFORM_NOENC: 16,\n OPTION_E2EFORM_ALLTRIP: 32,\n OPTION_E2EFORM_ONLY: 64,\n OPTION_E2EFORM_TAGSET: 128,\n OPTION_NONE2E_ALG: 256,\n OPTION_NOSPTDUMMY: 512,\n OPTION_FIXEDTYPE: 1024,\n PROTECT_AK: 1,\n PROTECT_FW: 2,\n PROTECT_PB: 4,\n PROTECT_PCS: 8,\n SERVICE_AK: 1,\n REQUEST_JSONP: 1,\n REQUEST_AJAX: 2,\n DEBUG_NOALIVE: 1,\n INTERVAL_ALIVE: 5e3,\n E2ETYPE_EXCLUDE: -1,\n E2ETYPE_NONE: 0,\n E2ETYPE_CERT1: 1,\n E2ETYPE_CERT2: 2,\n E2ETYPE_SDK: 11,\n E2ETYPE_PLAIN1: 21,\n E2ETYPE_PLAIN2: 22,\n E2ETYPE_WIZVERA: 31,\n PAGEID: '',\n BROWSER_TYPE: '',\n BROWSER_VER: '',\n E2EFORM_TAIL: !0,\n E2EFORM_INIT: '_e2e_forminit',\n E2EFORM_TAG1: '_e2e_1__',\n E2EFORM_TAG2: '_e2e_2__',\n E2EFORM_TAG1_PWD: '_e2e_1_pwd__',\n E2EFORM_TAG2_PWD: '_e2e_2_pwd__',\n getErrno: function (a) {\n return 'NCK' == a ? this.ERROR_NCK : 'ERR' == a ? this.ERROR_ERR : 'NSP' == a ? this.ERROR_NSP : this.ERROR_FAILED;\n },\n _get_browser_version: function (a) {\n var b = 0;\n if (0 <= a.indexOf('Edge/') && ((b = parseInt(a.split('Edge/')[1])), 0 < b)) return 'EG' + b;\n if (0 <= a.indexOf('MSIE')) {\n if (((b = parseInt(a.split('MSIE')[1])), 0 < b)) return 'IE' + b;\n } else if (\n 0 <= a.indexOf('Trident') &&\n (0 <= a.indexOf('rv:')\n ? (b = parseInt(a.split('rv:')[1]))\n : 0 <= a.indexOf('IE') && (b = parseInt(a.split('IE')[1])),\n 0 < b)\n )\n return 'IE' + b;\n return 0 <= a.indexOf('OPR/') && ((b = parseInt(a.split('OPR/')[1])), 0 < b)\n ? 'OP' + b\n : 0 <= a.indexOf('Firefox/') && ((b = parseInt(a.split('Firefox/')[1])), 0 < b)\n ? 'FF' + b\n : 0 <= a.indexOf('Chrome/') && ((b = parseInt(a.split('Chrome/')[1])), 0 < b)\n ? 'CR' + b\n : 0 <= a.indexOf('AppleWebKit') &&\n 0 <= a.indexOf('Version/') &&\n ((b = parseInt(a.split('Version/')[1])), 0 < b)\n ? 'SF' + b\n : 'OT0';\n },\n init: function () {\n this.PAGEID = new Date().getTime();\n this.PAGEID -= Math.floor(100 * Math.random());\n this.BROWSER_VER = this._get_browser_version(navigator.userAgent);\n this.BROWSER_TYPE = this.BROWSER_VER.substring(0, 2);\n }\n};\n$ASTX2_CONST.init();\nvar $ASTX2_COMM = {\n mLocalServerURL: '',\n mClientPublicKey: '',\n mErrorAbortFlag: !1,\n mDegugFlags: 0,\n setDegugFlags: function (a) {\n this.mDegugFlags |= a;\n },\n getDegugFlags: function () {\n return this.mDegugFlags;\n },\n isEnable: function () {\n return 0 < this.mLocalServerURL.length ? !0 : !1;\n },\n uninit: function () {\n this.mLocalServerURL = '';\n },\n errorAbort: function (a) {\n 1 != this.mErrorAbortFlag && ((this.mErrorAbortFlag = !0), $ASTX2_CUST.errorAbort(a));\n }\n },\n $_astxu = {\n mJsonpSequence: 0,\n jsonQstr: function (a) {\n var b = [],\n c;\n for (c in a) a.hasOwnProperty(c) && b.push(encodeURIComponent(c) + '=' + encodeURIComponent(a[c]));\n return b.join('&');\n },\n jsonParse: function (a) {\n var b = a.indexOf('{'),\n c = a.indexOf('}');\n if (-1 == b || -1 == c) return {};\n a = a.substring(b, c + 1);\n return 'object' == typeof window.JSON && 'function' == typeof window.JSON.parse\n ? window.JSON.parse(a)\n : 'function' == typeof jQuery && 'function' == typeof jQuery.parseJSON\n ? jQuery.parseJSON(a)\n : eval('(' + a + ')');\n },\n _send_jsonp_jquery: function (a) {\n try {\n jQuery.ajax({\n url: a.src,\n timeout: a.timeout,\n cache: !1,\n crossDomain: !0,\n dataType: 'jsonp',\n contentType: 'application/javascript',\n success: function (b, d, e) {\n a.onSuccess(b);\n },\n error: function (b, d, e) {\n if (200 == b.status && 1 == a.nocallback) a.onSuccess();\n else a.onFailure();\n },\n complete: function (a, b) {}\n });\n } catch (b) {\n a.onFailure();\n }\n },\n _send_jsonp_dom: function (a) {\n var b = document.createElement('script');\n b.type = 'text/javascript';\n b.id = a.callback;\n b.async = a.async;\n b.src = a.src;\n var c = document.getElementsByTagName('body')[0];\n if (null == c && ((c = document.getElementsByTagName('head')[0]), null == c)) {\n a.onFailure();\n return;\n }\n var d = window.setTimeout(function () {\n window[a.callback] = function () {};\n try {\n var b = document.getElementById(a.callback);\n b && ((b.onerror = function () {}), c.removeChild(b));\n } catch (d) {}\n a.onFailure();\n }, a.timeout);\n 0 == a.nocallback\n ? (window[a.callback] = function (b) {\n window.clearTimeout(d);\n try {\n var f = document.getElementById(a.callback);\n f && c.removeChild(f);\n } catch (g) {}\n a.onSuccess(b);\n })\n : (b.onload = function () {\n window.clearTimeout(d);\n try {\n var b = document.getElementById(a.callback);\n b && c.removeChild(b);\n } catch (f) {}\n a.onSuccess();\n });\n b.onerror = function () {\n window.clearTimeout(d);\n window[a.callback] = function () {};\n try {\n var b = document.getElementById(a.callback);\n b && c.removeChild(b);\n } catch (f) {}\n a.onFailure();\n };\n c.appendChild(b);\n },\n sendJsonp: function (a) {\n null == a.data && (a.data = {});\n null == a.callback && (a.callback = 'jsonpCallback' + $_astxu.rnd());\n null == a.nocallback && (a.nocallback = !1);\n null == a.timeout && (a.timeout = 5e3);\n null == a.async && (a.async = !0);\n null == a.seq && (a.seq = !1);\n null == a.onSuccess && (a.onSuccess = function (a) {});\n null == a.onFailure && (a.onFailure = function () {});\n a.src = 1 == $ASTX2.mUseJQuery ? a.url + '?v=3' : a.url + '?v=2&callback=' + a.callback;\n if (1 == a.seq) {\n var b = ++this.mJsonpSequence;\n a.src += '&seq=' + b;\n 2147483647 <= this.mJsonpSequence && (this.mJsonpSequence = 0);\n }\n b = this.jsonQstr(a.data);\n 0 < b.length && (a.src += '&' + b);\n 1 == $ASTX2.mUseJQuery ? this._send_jsonp_jquery(a) : this._send_jsonp_dom(a);\n },\n _get_xhr_object: function () {\n if ('undefined' !== typeof XMLHttpRequest)\n try {\n return new XMLHttpRequest();\n } catch (a) {}\n try {\n return new ActiveXObject('Microsoft.XMLHTTP');\n } catch (b) {}\n return null;\n },\n sendAjax: function (a) {\n var b = this._get_xhr_object();\n if (null == b) $_astxu.msg('[sendAjax] _get_xhr_object failed');\n else {\n null == a.data && (a.data = {});\n null == a.type && (a.type = 'POST');\n null == a.async && (a.async = !0);\n null == a.onSuccess && (a.onSuccess = function (a) {});\n null == a.onFailure && (a.onFailure = function (a, b) {});\n var c = this.jsonQstr(a.data);\n b.open(a.type, 'GET' == a.type ? a.url + '&' + c : a.url, a.async);\n b.onreadystatechange = function () {\n if (4 == b.readyState)\n if (200 == b.status) a.onSuccess(b.responseText);\n else a.onFailure(b.status);\n };\n null != a.timeout && (b.timeout = a.timeout);\n b.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n b.send(c);\n }\n },\n sendAuthAjax: function (a) {\n var b = this._get_xhr_object();\n const stored = JSON.parse(sessionStorage.getItem('cust-mgmt-auth') || '{}');\n if (null == b) $_astxu.msg('[sendAjax] _get_xhr_object failed');\n else {\n null == a.data && (a.data = {});\n null == a.type && (a.type = 'POST');\n null == a.async && (a.async = !0);\n null == a.onSuccess && (a.onSuccess = function (a) {});\n null == a.onFailure && (a.onFailure = function (a, b) {});\n var c = this.jsonQstr(a.data);\n b.open(a.type, 'GET' == a.type ? a.url + '&' + c : a.url, a.async);\n b.onreadystatechange = function () {\n if (4 == b.readyState)\n if (200 == b.status) a.onSuccess(b.responseText);\n else a.onFailure(b.status);\n };\n null != a.timeout && (b.timeout = a.timeout);\n b.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n b.setRequestHeader('Authorization', stored.key);\n b.withCredentials = true;\n b.send(c);\n }\n },\n isACK: function (a) {\n return a && 'ACK' == a ? !0 : !1;\n },\n isWinOS: function () {\n return -1 != navigator.platform.indexOf('Win32') || -1 != navigator.platform.indexOf('Win64') ? !0 : !1;\n },\n isMacOS: function () {\n return -1 != navigator.platform.indexOf('Mac') ? !0 : !1;\n },\n isLinuxOS: function () {\n return -1 != navigator.platform.indexOf('Linux') ? !0 : !1;\n },\n isMacLinuxOS: function () {\n return 1 == this.isMacOS() || 1 == this.isLinuxOS() ? !0 : !1;\n },\n hasFocused: function () {\n var a = !1;\n try {\n a = document.hasFocus();\n } catch (b) {}\n return a;\n },\n addEvent: function (a, b, c) {\n a.addEventListener ? a.addEventListener(b, c, !1) : a.attachEvent('on' + b, c);\n },\n removeEvent: function (a, b, c) {\n a.removeEventListener ? a.removeEventListener(b, c) : a.detachEvent('on' + b, c);\n },\n getCreatedFormValue: function (a, b, c) {\n null == c && (c = !1);\n c = 1 == c ? document.getElementsByTagName('input') : a.getElementsByTagName('input');\n for (var d = 0; d < c.length; d++) {\n var e = c[d];\n if (e && this.getnc(e.name) == b) return e;\n }\n c = document.createElement('input');\n c.name = b;\n c.type = 'hidden';\n if ('function' === typeof $ASTX2_CUST.onCreatedFormValue) $ASTX2_CUST.onCreatedFormValue(c, b);\n a.appendChild(c);\n return c;\n },\n getHostPath: function () {\n var a = window.location.protocol + '//' + window.location.hostname;\n return (a += window.location.port ? ':' + window.location.port : '');\n },\n getnc: function (a, b) {\n null == b && (b = '');\n return null == a ? b : a;\n },\n getint: function (a, b) {\n null == b && (b = 0);\n return parseInt(a) || b;\n },\n rnd: function () {\n var a = new Date().getTime();\n return (a += new String(Math.floor(100 * Math.random())));\n },\n getKeyCode: function (a) {\n var b = null;\n a && (b = a.keyCode ? a.keyCode : a.which);\n return b;\n },\n xorEncode: function (a, b) {\n for (var c = '', d = new String(a), e = 0; e < d.length; e++) c += String.fromCharCode(b ^ d.charCodeAt(e));\n return c;\n },\n xorDecode: function (a, b) {\n for (var c = '', d = new String(a), e = 0; e < d.length; e++) c += String.fromCharCode(b ^ d.charCodeAt(e));\n return c;\n },\n ltrim: function (a, b) {\n for (b = this.getnc(b, ' '); a.substring(0, 1) == b; ) a = a.substring(1, a.length);\n return a;\n },\n rtrim: function (a, b) {\n for (b = this.getnc(b, ' '); a.substring(a.length - 1, a.length) == b; ) a = a.substring(0, a.length - 1);\n return a;\n },\n alltrim: function (a, b) {\n return this.ltrim(this.rtrim(a, b), b);\n },\n setInputFocus: function () {\n try {\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\n var c = a[b];\n if (c && 'hidden' != c.type) {\n c.focus();\n break;\n }\n }\n } catch (d) {}\n },\n log: function (a) {\n 'object' === typeof debuger && 'function' === typeof debuger.write\n ? debuger.write(a)\n : 'object' === typeof window.console && 'function' === typeof console.log && console.log(a);\n },\n msg: function (a) {\n this.log(a);\n }\n },\n $ASTX2_E2E = (function () {\n var a = null,\n b = function (a) {\n function b(a) {\n var c = a.target;\n null == c && (c = a.srcElement);\n return c;\n }\n function e(a) {\n if (null == a) return null;\n var b = a.getAttribute('e2e_inputid');\n if (null == b || 0 >= b) return null;\n var c = a.getAttribute('e2e_type');\n if (null == c || 0 >= c) return null;\n var d = a.getAttribute('e2e_inputtype');\n if (null == d || 0 >= d) d = '';\n var e = a.getAttribute('wizvera_key');\n null == e && (e = '');\n var f = {};\n f.e2e_inputid = b;\n f.e2e_type = c;\n f.e2e_inputtype = d;\n f.name = $_astxu.getnc(a.name);\n f.form = a.form ? $_astxu.getnc(a.form.name) : '';\n f.wizvera_key = e;\n return f;\n }\n function f(a) {\n var b = e(a);\n if (null == b) return null;\n b.type = $_astxu.getnc(a.type);\n b.maxlength = $_astxu.getnc(a.getAttribute('maxlength'));\n b.txtmsk = $_astxu.getnc(a.getAttribute('e2e_txtmsk'));\n return b;\n }\n function g(a, b) {\n a.getAttribute('e2e_type') != $ASTX2_CONST.E2ETYPE_PLAIN1 && (a.readOnly = b);\n }\n function h(a, b, c, d, e) {\n 1 == n && q(a, b, c, d, e);\n }\n function q(b, s, d, e, f) {\n var g = {};\n g.pageid = $ASTX2_CONST.PAGEID;\n if (null != s) for (var h in s) s.hasOwnProperty(h) && (g[h] = s[h]);\n a.send_e2e_cmd(b, g, d, e, f);\n }\n function l(a, b) {\n var c = '';\n return (c = 0 == $ASTX2_CONST.E2EFORM_TAIL ? b + a : a + b);\n }\n function m(a, b) {\n var c = '';\n return (c =\n 'password' == a.type\n ? b == $ASTX2_CONST.E2ETYPE_CERT2\n ? l(a.name, $ASTX2_CONST.E2EFORM_TAG2_PWD)\n : l(a.name, $ASTX2_CONST.E2EFORM_TAG1_PWD)\n : b == $ASTX2_CONST.E2ETYPE_CERT2\n ? l(a.name, $ASTX2_CONST.E2EFORM_TAG2)\n : l(a.name, $ASTX2_CONST.E2EFORM_TAG1));\n }\n function C() {\n if (0 != D)\n for (var a = document.getElementsByTagName('form'), b = 0; b < a.length; b++) {\n var c = a[b];\n if (null != c) {\n var d = !1;\n if (k & $ASTX2_CONST.OPTION_E2EFORM_TAGSET) {\n var e = c.getAttribute(E.e2eform_tagset);\n if (null == e || 0 >= e) d = !0;\n } else if (k & $ASTX2_CONST.OPTION_E2EFORM_ONLY) {\n if (null == c) e = !1;\n else\n for (var e = !1, f = c.getElementsByTagName('input'), g = 0; g < f.length; g++) {\n var h = f[g];\n if (null != h && ((h = h.getAttribute('e2e_type')), null != h && 0 < h)) {\n e = !0;\n break;\n }\n }\n 0 == e && (d = !0);\n }\n if (1 != d) {\n if ((d = $_astxu.getCreatedFormValue(c, l($ASTX2_CONST.E2EFORM_INIT, $ASTX2_CONST.E2EFORM_TAG1))))\n d.value = F;\n if ((d = $_astxu.getCreatedFormValue(c, l($ASTX2_CONST.E2EFORM_INIT, $ASTX2_CONST.E2EFORM_TAG2))))\n d.value = G;\n }\n }\n }\n }\n function V(a) {\n var b = 0;\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (b = 1);\n a = {\n ver: $_astxu.getint(a.ver),\n alg: $_astxu.getint(a.alg),\n svr: $_astxu.getnc(a.svr),\n norsa: $_astxu.getint(a.norsa),\n uniq: $_astxu.getnc(a.uniq),\n utime: $_astxu.getint(a.utime),\n ncert: $_astxu.getnc(a.ncert),\n pageid: $ASTX2_CONST.PAGEID,\n noenc: b\n };\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/e2e_forminit',\n data: a,\n onSuccess: function (a) {\n var b = $_astxu.getnc(a ? a.result : '');\n 0 == $_astxu.isACK(b)\n ? $_astxu.msg('[e2e_forminit] result=' + b)\n : ((D = !0), (F = $_astxu.getnc(a.e2e_form1)), (G = $_astxu.getnc(a.e2e_form2)), C());\n },\n onFailure: function () {\n $_astxu.msg('[e2e_forminit] failure.');\n }\n });\n }\n function W() {\n $_astxu.sendAuthAjax({\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\n onSuccess: function (a) {\n var b = $_astxu.jsonParse(a);\n a = $_astxu.getnc(b ? b.result : '');\n 0 == $_astxu.isACK(a)\n ? $_astxu.msg('[_init_e2eform] result=' + a)\n : $ASTX2.set_cert(\n function () {\n V(b);\n },\n function () {\n $_astxu.msg('[_init_e2eform] set_cert() failure');\n },\n b\n );\n },\n onFailure: function (a) {\n $_astxu.msg('[_init_e2eform] failure');\n }\n });\n }\n function H(a) {\n var b = $_astxu.getHostPath() + $_astxu.getnc(window.location.pathname),\n c = 0;\n k & $ASTX2_CONST.OPTION_NOSPTDUMMY && (c = 1);\n q(\n 'e2e_start',\n { browser: $ASTX2_CONST.BROWSER_VER, ver: a.ver, svr: a.svr, valg: a.valg, url: b, custcode: w, nospt: c },\n 5e3,\n function (a) {\n var b = $_astxu.getnc(a ? a.result : '');\n if ($_astxu.isACK(b)) {\n n = 1;\n I = $_astxu.getint(a.call_settext);\n t = $_astxu.getint(a.call_gettext);\n J = $_astxu.getint(a.vm_env);\n K = $_astxu.getint(a.ak_drv);\n try {\n var c = document.activeElement;\n c && x(c, !1);\n } catch (aa) {}\n k & $ASTX2_CONST.OPTION_E2EFORM &&\n (3 > $_astxu.getint(a.stsvr) ? $ASTX2_COMM.errorAbort($ASTX2_CONST.ERROR_NEEDUPDATE) : W());\n if (k & $ASTX2_CONST.OPTION_AUTOSETTEXT)\n for (var d in u) (a = u[d]), null != a && (0 >= $_astxu.getnc(a.value).length || y(a));\n } else n = 2;\n },\n function () {\n n = 2;\n }\n );\n }\n function L(a) {\n if (0 == $_astxu.hasFocused()) return !1;\n if (0 == n) return !0;\n if (1 == n) {\n if (!1 === a) return;\n try {\n var b = document.activeElement;\n b && x(b, !1);\n } catch (c) {}\n return !0;\n }\n n = 0;\n k & $ASTX2_CONST.OPTION_NONE2E\n ? ((a = 0),\n k & $ASTX2_CONST.OPTION_NONE2E_ALG && (a = $ASTX2.mOptionStrings.none2e_alg),\n H({ ver: 1, svr: '_none2e', valg: a }))\n : $_astxu.sendAuthAjax({\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_INIT),\n onSuccess: function (a) {\n a = $_astxu.jsonParse(a);\n var b = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(b) ? H(a) : (n = -1);\n },\n onFailure: function (a) {\n n = -1;\n }\n });\n return !0;\n }\n function r(a) {\n if (null != a && (a.getAttribute('e2e_type') != $ASTX2_CONST.E2ETYPE_PLAIN1 || 0 != t)) {\n try {\n if (a != document.activeElement) return;\n } catch (b) {}\n 'number' == typeof a.selectionStart\n ? (a.selectionStart = a.selectionEnd = a.value.length)\n : 'undefined' != typeof a.createTextRange && ((a = a.createTextRange()), a.collapse(!1), a.select());\n }\n }\n function x(a, b) {\n v = !1;\n if (k & $ASTX2_CONST.OPTION_FIXEDTYPE && a) {\n var c = a.getAttribute('e2e_inputid');\n null != c && 0 < c && z[c] != a.type && (a.type = z[c]);\n }\n c = f(a);\n null != c &&\n (!0 === b && L(!1),\n h(\n 'e2e_focus',\n c,\n null,\n function (b) {\n g(a, !1);\n window.setTimeout(function () {\n r(a);\n }, 1);\n },\n function () {}\n ));\n }\n function M(a) {\n var c = b(a);\n if (null != c) {\n if ('function' === typeof $ASTX2_CUST.onHandlerPreFocus) $ASTX2_CUST.onHandlerPreFocus(c, a);\n x(c, !0);\n }\n }\n function N(a) {\n a = b(a);\n if (null != a) {\n var c = e(a);\n if (null != c) {\n try {\n if (document.hasFocus() && a === document.activeElement) return;\n } catch (f) {}\n g(a, !0);\n h('e2e_blur', c);\n }\n }\n }\n function O(a) {\n var c = b(a);\n null != c &&\n window.setTimeout(function () {\n r(c);\n }, 1);\n }\n function y(a, b) {\n var c = f(a);\n if (null != c) {\n var d = $_astxu.getnc(a.value);\n c.text = d;\n k & $ASTX2_CONST.OPTION_E2EFORM && (c.e2eform = 1);\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (c.noenc = 1);\n h(\n 'e2e_settext',\n c,\n null,\n function (d) {\n var e = $_astxu.getnc(d ? d.result : '');\n if (0 == $_astxu.isACK(e)) b && b($ASTX2_CONST.ERROR_NCK);\n else {\n if (k & $ASTX2_CONST.OPTION_E2EFORM) {\n var e = m(a, c.e2e_type),\n f = !1;\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (f = !0);\n if ((e = $_astxu.getCreatedFormValue(a.form, e, f))) e.value = $_astxu.getnc(d.e2e_data);\n }\n b && b($ASTX2_CONST.ERROR_SUCCESS);\n }\n },\n function () {\n b && b($ASTX2_CONST.ERROR_FAILED);\n }\n );\n }\n }\n function A(a) {\n 'function' === typeof a.stopPropagation && a.stopPropagation();\n 'function' === typeof a.preventDefault ? a.preventDefault() : (a.returnValue = !1);\n }\n function X(a, b, c) {\n h(\n 'e2e_gettext',\n b,\n null,\n function (b) {\n var d = $_astxu.getnc(b ? b.result : '');\n $_astxu.isACK(d)\n ? ((b = $_astxu.getnc(b.text)), (a.value = b), c && c($ASTX2_CONST.ERROR_SUCCESS))\n : c && c($ASTX2_CONST.ERROR_NCK);\n },\n function () {\n c && c($ASTX2_CONST.ERROR_FAILED);\n }\n );\n }\n function Y(a, b) {\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (b.noenc = 1);\n h(\n 'e2e_formget',\n b,\n null,\n function (c) {\n var d = $_astxu.getnc(c ? c.result : '');\n if (0 == $_astxu.isACK(d)) $_astxu.msg('[e2e_formget] ' + b.name + ',result=' + d);\n else if (((d = a.form), null != d)) {\n var e = m(a, b.e2e_type),\n f = !1;\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (f = !0);\n if ((d = $_astxu.getCreatedFormValue(d, e, f))) d.value = $_astxu.getnc(c.e2e_data);\n }\n },\n function () {}\n );\n }\n function P(a) {\n var c = b(a);\n if (null != c) {\n var e = f(c);\n if (null != e) {\n r(c);\n var p = $_astxu.getKeyCode(a);\n 17 == p && (v = !0);\n if (1 == v)\n return (\n 86 == p &&\n h(\n 'e2e_clear',\n e,\n null,\n function (a) {\n c.value = '';\n },\n function () {}\n ),\n A(a),\n !1\n );\n if (1 == (16 == p || 17 == p || 18 == p ? !0 : !1)) return !0;\n var g = !0;\n k & $ASTX2_CONST.OPTION_E2EFORM &&\n ((e.e2e_type != $ASTX2_CONST.E2ETYPE_CERT1 && e.e2e_type != $ASTX2_CONST.E2ETYPE_CERT2) || Y(c, e));\n 'function' === typeof $ASTX2_CUST.onHandlerKeyDown &&\n 0 == $ASTX2_CUST.onHandlerKeyDown(c, a) &&\n (A(a), (g = !1));\n 1 != t ||\n ('password' == c.type && e.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN1) ||\n 0 != J ||\n (1 == g &&\n X(c, e, function () {\n 'password' != c.type &&\n 'dynamic' == c.getAttribute('e2e_txtmsk') &&\n (c.value = c.value.replace(/[^*]/g, '*').substring(0, c.value.length - 1) + c.value.slice(-1));\n }),\n 0 == (8 == p || 9 == p || 13 == p || 20 == p ? !0 : !1) && (A(a), (g = !1)));\n return g;\n }\n }\n }\n function Q(a) {\n var c = b(a);\n null != c &&\n (17 == $_astxu.getKeyCode(a) && (v = !1),\n 1 == I\n ? y(c)\n : 0 == t &&\n 'password' != c.type &&\n 'dynamic' == c.getAttribute('e2e_txtmsk') &&\n (c.value = c.value.replace(/[^*]/g, '*').substring(0, c.value.length - 1) + c.value.slice(-1)),\n window.setTimeout(function () {\n r(c);\n }, 1));\n }\n function R(a) {\n var c = b(a);\n null != c &&\n window.setTimeout(function () {\n r(c);\n }, 1);\n }\n function S(a) {\n if ('IE' == $ASTX2_CONST.BROWSER_TYPE || 'EG' == $ASTX2_CONST.BROWSER_TYPE) {\n var c = b(a);\n null != c &&\n '' != c.value &&\n setTimeout(function () {\n if ('' == c.value) {\n var a = e(c);\n null != a && h('e2e_clear', a);\n }\n }, 1);\n }\n }\n function T(a) {\n var c = b(a);\n null != c &&\n ('number' == typeof c.selectionStart\n ? (c.selectionStart < c.value.length || c.selectionEnd < c.value.length) &&\n window.setTimeout(function () {\n r(c);\n }, 1)\n : 'undefined' != typeof c.createTextRange &&\n document.selection &&\n ((a = document.selection.createRange()),\n a.moveStart('character', -c.value.length),\n a.text.length <= c.value.length &&\n window.setTimeout(function () {\n r(c);\n }, 1)));\n }\n function Z(a) {}\n function U(a) {\n h('e2e_unload');\n }\n var k = 0,\n E = [],\n $ = 0,\n B = !1,\n w = 0,\n n = -1,\n I = 0,\n t = 0,\n J = 0,\n K = 1,\n v = !1,\n u = [],\n z = [],\n D = !1,\n F = '',\n G = '';\n this.setOption = function (a) {\n k |= a;\n };\n this.setOptionStrings = function (a) {\n E = a;\n };\n this.attach = function (a, b) {\n null != a && (w = a);\n k & $ASTX2_CONST.OPTION_AUTOSETTEXT && (u = []);\n k & $ASTX2_CONST.OPTION_E2EFORM && C();\n for (var c = document.getElementsByTagName('input'), d = 0; d < c.length; d++) {\n var e = c[d];\n null != e && this.addObject(e);\n }\n q(\n 'e2e_init',\n null,\n null,\n function (a) {\n L();\n $_astxu.addEvent(window, 'blur', Z);\n $_astxu.addEvent(window, 'unload', U);\n $_astxu.addEvent(window, 'beforeunload', U);\n b && b(!0);\n },\n function () {\n b && b(!1);\n }\n );\n B = !0;\n };\n this.addObject = function (a) {\n if (null != a) {\n var b = a.getAttribute('e2e_inputid');\n if (!(null != b && 0 < b)) {\n var c = a.getAttribute('e2e_type');\n if (null == c || 0 >= c)\n if (((c = a.getAttribute('e2e')), 'true' == c || 'on' == c))\n (c = $ASTX2_CONST.E2ETYPE_CERT1), a.setAttribute('e2e_type', c);\n else {\n c = $ASTX2_CONST.E2ETYPE_NONE;\n try {\n if (\n ('function' === typeof $ASTX2_CUST.isE2EObject &&\n 1 == $ASTX2_CUST.isE2EObject(a) &&\n ((c = $ASTX2_CONST.E2ETYPE_CERT1), a.setAttribute('e2e_type', c)),\n 'function' === typeof $ASTX2_CUST.getE2Etype)\n ) {\n var d = $ASTX2_CUST.getE2Etype(a);\n d && ((c = d), a.setAttribute('e2e_type', c));\n }\n } catch (e) {}\n if (c == $ASTX2_CONST.E2ETYPE_NONE) return;\n }\n b = ++$;\n a.setAttribute('e2e_inputid', b);\n d = !0;\n k & $ASTX2_CONST.OPTION_AUTOSETTEXT && 0 < a.value.length && ((d = !1), u.push(a));\n 1 == d && (a.value = '');\n a.setAttribute('autocomplete', 'off');\n g(a, !0);\n z[b] = a.type;\n $_astxu.addEvent(a, 'focus', M);\n $_astxu.addEvent(a, 'blur', N);\n $_astxu.addEvent(a, 'click', O);\n $_astxu.addEvent(a, 'keyup', Q);\n $_astxu.addEvent(a, 'keydown', P);\n $_astxu.addEvent(a, 'select', T);\n $_astxu.addEvent(a, 'mouseup', S);\n $_astxu.addEvent(a, 'mousedown', R);\n k & $ASTX2_CONST.OPTION_E2EFORM &&\n (c == $ASTX2_CONST.E2ETYPE_CERT1 || c == $ASTX2_CONST.E2ETYPE_CERT2) &&\n ((b = a.form),\n null != b &&\n ((a = m(a, c)),\n (c = !1),\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (c = !0),\n $_astxu.getCreatedFormValue(b, a, c)));\n }\n }\n };\n this.subObject = function (a) {\n var b = e(a);\n if (null != b) {\n $_astxu.removeEvent(a, 'focus', M);\n $_astxu.removeEvent(a, 'blur', N);\n $_astxu.removeEvent(a, 'click', O);\n $_astxu.removeEvent(a, 'keyup', Q);\n $_astxu.removeEvent(a, 'keydown', P);\n $_astxu.removeEvent(a, 'select', T);\n $_astxu.removeEvent(a, 'mouseup', S);\n $_astxu.removeEvent(a, 'mousedown', R);\n try {\n a == document.activeElement && h('e2e_blur', b);\n } catch (c) {}\n a.value = '';\n a.setAttribute('e2e_inputid', -1);\n a.setAttribute('e2e_type', -1);\n g(a, !1);\n }\n };\n this.getE2EHash = function (a, b) {\n var c = e(a);\n null == c\n ? b(null, $ASTX2_CONST.ERROR_PARAM)\n : h(\n 'e2e_gethash',\n c,\n null,\n function (a) {\n var c = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(c)\n ? b($_astxu.getnc(a.hash), $ASTX2_CONST.ERROR_SUCCESS)\n : b(null, $ASTX2_CONST.ERROR_NCK);\n },\n function () {\n b(null, $ASTX2_CONST.ERROR_FAILED);\n }\n );\n };\n this.getEncText = function (a, b, c) {\n var d = e(a);\n d.customcode = w;\n d.random = b;\n null == d\n ? c(null, null, $ASTX2_CONST.ERROR_PARAM)\n : h(\n 'sdk_getenctext',\n d,\n null,\n function (a) {\n var b = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(b)\n ? c(d.name, $_astxu.getnc(a.getenctext), $ASTX2_CONST.ERROR_SUCCESS)\n : c(null, null, $ASTX2_CONST.ERROR_NCK);\n },\n function () {\n c(null, null, $ASTX2_CONST.ERROR_FAILED);\n }\n );\n };\n this.getE2EText = function (a, b) {\n var c = e(a);\n null == c\n ? b(null, null, $ASTX2_CONST.ERROR_PARAM)\n : c.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN2 && c.e2e_type != $ASTX2_CONST.E2ETYPE_WIZVERA\n ? b(null, null, $ASTX2_CONST.ERROR_PARAM)\n : h(\n 'e2e_gettext',\n c,\n null,\n function (a) {\n var d = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(d)\n ? b(c.name, $_astxu.getnc(a.text), $ASTX2_CONST.ERROR_SUCCESS)\n : b(null, null, $ASTX2_CONST.ERROR_NCK);\n },\n function () {\n b(null, null, $ASTX2_CONST.ERROR_FAILED);\n }\n );\n };\n this.setE2EText = function (a, b) {\n y(a, b);\n };\n this.clearE2EText = function (a, b) {\n var c = e(a);\n null != c &&\n h(\n 'e2e_clear',\n c,\n null,\n function (d) {\n d = $_astxu.getnc(d ? d.result : '');\n if (0 == $_astxu.isACK(d)) b && b($ASTX2_CONST.ERROR_NCK);\n else {\n a.value = '';\n if (k & $ASTX2_CONST.OPTION_E2EFORM) {\n d = m(a, c.e2e_type);\n var e = !1;\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (e = !0);\n if ((d = $_astxu.getCreatedFormValue(a.form, d, e))) d.value = '';\n }\n b && b($ASTX2_CONST.ERROR_SUCCESS);\n }\n },\n function () {\n b && b($ASTX2_CONST.ERROR_FAILED);\n }\n );\n };\n this.dettach = function () {\n h('e2e_uninit');\n B = !1;\n };\n this.isAttached = function () {\n return B;\n };\n this.isStarted = function () {\n return 1 == n ? !0 : !1;\n };\n this.checkService = function (a) {\n var b = {};\n b.service = $ASTX2_CONST.SERVICE_AK;\n b.result = $ASTX2_CONST.ERROR_SUCCESS;\n if (0 >= n) {\n var c = this;\n window.setTimeout(function () {\n c.checkService(a);\n }, 300);\n } else\n 1 == n && 0 == K\n ? (b.result = $ASTX2_CONST.ERROR_FAILED)\n : 2 == n && (b.result = $ASTX2_CONST.ERROR_FAILED),\n a(b);\n };\n this.getE2EelmsForm = function (a, b, c, d) {\n for (var f = document.getElementsByTagName('input'), g = 0; g < f.length; g++) {\n var h = f[g];\n if (null != h && ((h = e(h)), null != h && h.e2e_type == d)) {\n var k = !1;\n null == a ? (k = !0) : $_astxu.getnc(a.name) == h.form && (k = !0);\n 0 != k && (b.push(h.e2e_inputid), c.push(h.name));\n }\n }\n };\n this.getE2EelmsID = function (a, b, c, d) {\n for (var f = document.getElementsByTagName('input'), g = 0; g < f.length; g++) {\n var h = f[g];\n if (null != h) {\n var k = e(h);\n if (null != k && k.e2e_type == d) {\n for (var l = !1, h = $_astxu.getnc(h.id).toLowerCase(), m = 0; m < a.length; m++)\n if (a[m].toLowerCase() == h) {\n l = !0;\n break;\n }\n 0 != l && (b.push(k.e2e_inputid), c.push(k.name));\n }\n }\n }\n };\n this.resetE2Evalues = function (a, b) {\n for (var c = document.getElementsByTagName('input'), d = 0; d < c.length; d++) {\n var f = c[d];\n if (null != f) {\n var g = e(f);\n null != g &&\n g.form == a &&\n g.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN1 &&\n g.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN2 &&\n (f.value = b);\n }\n }\n };\n this.getE2Eattribute = function (a) {\n return e(a);\n };\n };\n return {\n getInstance: function (c) {\n null === a && (a = new b(c));\n return a;\n }\n };\n })(),\n $ASTX2 = {\n mUseJQuery: !0,\n mUseAjaxHello: !1,\n mUseAutoStart: !0,\n mOption: 0,\n mOptionStrings: [],\n mE2EInst: null,\n mLastError: $ASTX2_CONST.ERROR_SUCCESS,\n send_e2e_cmd: function (a, b, c, d, e, f) {\n if ('object' == typeof $ASTX2_COMM && 0 != $ASTX2_COMM.isEnable()) {\n var g = this;\n null == f && (f = 1);\n var h = !1;\n if ('e2e_focus' == a || 'e2e_blur' == a || 'e2e_gettext' == a || 'e2e_settext' == a) h = !0;\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/' + a,\n data: b,\n timeout: c || 5e3,\n async: !1,\n seq: h,\n onSuccess: function (a) {\n d && d(a);\n },\n onFailure: function () {\n 3 > f ? g.send_e2e_cmd(a, b, c, d, e, f + 1) : e && e();\n }\n });\n }\n },\n _send_alive: function () {\n var a = { pageid: $ASTX2_CONST.PAGEID, focus: $_astxu.hasFocused() ? 1 : 0 };\n $_astxu.sendJsonp({ url: $ASTX2_COMM.mLocalServerURL + '/alive', data: a });\n },\n send_alive_run: function () {\n if (!($ASTX2_COMM.getDegugFlags() & $ASTX2_CONST.DEBUG_NOALIVE)) {\n var a = this;\n setInterval(function () {\n a._send_alive();\n }, $ASTX2_CONST.INTERVAL_ALIVE);\n }\n },\n _hello_local_server: function (a, b, c, d, e) {\n var f = this;\n if (d >= c.length)\n f.setLastError($ASTX2_CONST.ERROR_NOTINST),\n 1 == $_astxu.isWinOS() &&\n 1 == f.mUseAutoStart &&\n ((f.mUseAutoStart = !1),\n 'IE' != $ASTX2_CONST.BROWSER_TYPE &&\n 'EG' != $ASTX2_CONST.BROWSER_TYPE &&\n (window.location.href = 'astx://start')),\n b();\n else {\n var g = e[d],\n h = c[d],\n q = 'https://' + (1 == $_astxu.isMacOS() ? 'lx.astxsvc.com' : '127.0.0.1') + ':' + h + '/ASTX2',\n h = '',\n l = document.getElementsByTagName('script');\n if (l) for (var m = 0; m < l.length; m++) l[m].src && 0 <= l[m].src.indexOf('astx2.min.js') && (h = l[m].src);\n l = '$Revision: 32070 $';\n l = l.substr(11, l.length - 13);\n m = !1;\n 0 == $ASTX2.mUseAjaxHello && 1 == d % 2 && (m = !0);\n 'IE' == $ASTX2_CONST.BROWSER_TYPE &&\n 'IE10' != $ASTX2_CONST.BROWSER_VER &&\n 'IE11' != $ASTX2_CONST.BROWSER_VER &&\n ((m = !0), 2e3 < g && (g = 2e3));\n d++;\n 1 == m\n ? $_astxu.sendJsonp({\n url: q + '/hello',\n data: { url: h, version: l },\n timeout: g,\n onSuccess: function (c) {\n var d = $_astxu.getnc(c ? c.result : '');\n c = $_astxu.getnc(c ? c.client_public_key : '');\n $_astxu.isACK(d)\n ? (($ASTX2_COMM.mLocalServerURL = q), ($ASTX2_COMM.mClientPublicKey = c), a())\n : (f.setLastError($ASTX2_CONST.ERROR_NOTINST), b());\n },\n onFailure: function () {\n f._hello_local_server(a, b, c, d, e);\n }\n })\n : $_astxu.sendAjax({\n url: q + '/hello?',\n type: 'POST',\n data: { url: h, version: l },\n timeout: g,\n onSuccess: function (c) {\n var d = $_astxu.jsonParse(c);\n c = $_astxu.getnc(d ? d.result : '');\n d = $_astxu.getnc(d ? d.client_public_key : '');\n $_astxu.isACK(c)\n ? (($ASTX2_COMM.mLocalServerURL = q), ($ASTX2_COMM.mClientPublicKey = d), a())\n : (f.setLastError($ASTX2_CONST.ERROR_NOTINST), b());\n },\n onFailure: function () {\n f._hello_local_server(a, b, c, d, e);\n }\n });\n }\n },\n setOption: function (a) {\n if (null != a) {\n !0 === a.autofocus && (this.mOption |= $ASTX2_CONST.OPTION_AUTOFOCUS);\n !0 === a.e2eform && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM);\n !1 === a.e2eform_enc && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_NOENC);\n !0 === a.e2eform_alltrip && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP);\n !0 === a.e2eform_only && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_ONLY);\n !0 === a.autosettext && (this.mOption |= $ASTX2_CONST.OPTION_AUTOSETTEXT);\n !0 === a.nospt && (this.mOption |= $ASTX2_CONST.OPTION_NOSPTDUMMY);\n !0 === a.fixedtype && (this.mOption |= $ASTX2_CONST.OPTION_FIXEDTYPE);\n var b = $_astxu.getnc(a.e2eform_tagset);\n 0 < b.length &&\n ((this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_TAGSET), (this.mOptionStrings.e2eform_tagset = b));\n b = $_astxu.getint(a.none2e_alg);\n 0 < b && ((this.mOption |= $ASTX2_CONST.OPTION_NONE2E_ALG), (this.mOptionStrings.none2e_alg = b));\n }\n },\n _get_custom_value: function () {\n 'undefined' !== typeof $ASTX2_CUST.mUseJQuery && ($ASTX2.mUseJQuery = $ASTX2_CUST.mUseJQuery);\n 'undefined' !== typeof $ASTX2_CUST.mUseAjaxHello && ($ASTX2.mUseAjaxHello = $ASTX2_CUST.mUseAjaxHello);\n 'undefined' !== typeof $ASTX2_CUST.mUseAutoStart &&\n ($ASTX2.mUseAutoStart = 1 == $ASTX2.mUseAutoStart ? $ASTX2_CUST.mUseAutoStart : !1);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAIL && ($ASTX2_CONST.E2EFORM_TAIL = $ASTX2_CUST.E2EFORM_TAIL);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_INIT && ($ASTX2_CONST.E2EFORM_INIT = $ASTX2_CUST.E2EFORM_INIT);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG1 && ($ASTX2_CONST.E2EFORM_TAG1 = $ASTX2_CUST.E2EFORM_TAG1);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG2 && ($ASTX2_CONST.E2EFORM_TAG2 = $ASTX2_CUST.E2EFORM_TAG2);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG1_PWD &&\n ($ASTX2_CONST.E2EFORM_TAG1_PWD = $ASTX2_CUST.E2EFORM_TAG1_PWD);\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG2_PWD &&\n ($ASTX2_CONST.E2EFORM_TAG2_PWD = $ASTX2_CUST.E2EFORM_TAG2_PWD);\n },\n init: function (a, b, c, d) {\n function e() {\n a();\n if (1 == $_astxu.isMacLinuxOS()) {\n f.send_alive_run();\n try {\n $ASTX2_MLi.init();\n } catch (b) {}\n }\n }\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n if (1 == $ASTX2_COMM.isEnable()) a();\n else {\n this._get_custom_value();\n null != d && ($ASTX2.mUseAutoStart = 1 == d ? $ASTX2.mUseAutoStart : !1);\n 1 == $ASTX2.mUseJQuery && 'undefined' === typeof jQuery && ($ASTX2.mUseJQuery = !1);\n var f = this;\n this.mE2EInst = $ASTX2_E2E.getInstance(this);\n this.mE2EInst.setOption(this.mOption);\n this.mE2EInst.setOptionStrings(this.mOptionStrings);\n var g = [],\n h = [];\n null != c\n ? ((g = [55920, 55920, 55921, 55922]), (h = [c, c, c, c]))\n : ((g = [55920, 55920, 55921, 55922]), (h = [1e4, 1500, 750, 250]));\n setTimeout(function () {\n f._hello_local_server(e, b, g, 0, h);\n }, 200);\n }\n },\n _check_local_server_chk_stamp: function (a, b, c, d) {\n var e = this;\n $_astxu.sendAuthAjax({\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_CHK_STAMP),\n data: d,\n onSuccess: function (c) {\n c = $_astxu.jsonParse(c);\n c = $_astxu.getnc(c ? c.result : '');\n $_astxu.isACK(c) ? a() : (e.setLastError($ASTX2_CONST.ERROR_NCK), b());\n },\n onFailure: function (a) {\n b();\n }\n });\n },\n _check_local_server: function (a, b, c, d) {\n var e = this;\n null == d && (d = 1);\n 3 < d\n ? (e.setLastError($ASTX2_CONST.ERROR_NOCONNECT), b())\n : $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/check',\n data: { method: c, url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_STAMP), rnd: $_astxu.rnd() },\n onSuccess: function (f) {\n var g = $_astxu.getnc(f ? f.result : '');\n $_astxu.isACK(g)\n ? ((f.rnd = $_astxu.rnd()), e._check_local_server_chk_stamp(a, b, c, f))\n : e._check_local_server(a, b, c, d + 1);\n },\n onFailure: function () {\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\n e._check_local_server(a, b, c, d + 1);\n }\n });\n },\n checkServer: function (a, b, c) {\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n 0 == $ASTX2_COMM.isEnable()\n ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), b())\n : (0 == $_astxu.isWinOS() ? (c = 1) : null == c && (c = 1), this._check_local_server(a, b, c));\n },\n _e2e_enable: function () {\n return 0 == $_astxu.isWinOS()\n ? (this.setLastError($ASTX2_CONST.ERROR_NOTSUPPORTED), !1)\n : 0 == $ASTX2_COMM.isEnable()\n ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), !1)\n : !0;\n },\n resetE2E: function (a, b) {\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n if (0 == this._e2e_enable()) return !1;\n var c = this;\n window.setTimeout(function () {\n c.mE2EInst.attach(a, b);\n }, 100);\n return !0;\n },\n initE2E: function (a, b) {\n this.mOption & $ASTX2_CONST.OPTION_AUTOFOCUS && $_astxu.setInputFocus();\n return this.resetE2E(a, b);\n },\n resetNonE2E: function (a, b) {\n return this.initNonE2E(a, b);\n },\n initNonE2E: function (a, b) {\n this.mE2EInst.setOption($ASTX2_CONST.OPTION_NONE2E);\n this.mOption & $ASTX2_CONST.OPTION_AUTOFOCUS && $_astxu.setInputFocus();\n return this.resetE2E(a, b);\n },\n uninitE2E: function () {\n 1 == $_astxu.isWinOS() && 1 == $ASTX2_COMM.isEnable() && this.mE2EInst.dettach();\n },\n uninitNonE2E: function () {\n this.uninitE2E();\n },\n set_cert: function (a, b, c, d) {\n null == d && (d = 1);\n var e = new String($_astxu.getnc(c['cert' + d]));\n if (0 == e.length) 0 < d ? a() : b();\n else {\n var f = this;\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/set_cert',\n data: { step: d, cert: e, pageid: $ASTX2_CONST.PAGEID },\n onSuccess: function (e) {\n setTimeout(function () {\n f.set_cert(a, b, c, d + 1);\n }, 250);\n },\n onFailure: function () {\n b();\n }\n });\n }\n },\n _e2edata_get: function (a, b, c, d) {\n var e = this;\n a = {\n ver: $_astxu.getint(d.ver),\n alg: $_astxu.getint(d.alg),\n svr: $_astxu.getnc(d.svr),\n norsa: $_astxu.getint(d.norsa),\n uniq: $_astxu.getnc(d.uniq),\n utime: $_astxu.getint(d.utime),\n ncert: $_astxu.getnc(d.ncert),\n pageid: $ASTX2_CONST.PAGEID,\n ids1: a.ids1,\n names1: a.names1,\n ids2: a.ids2,\n names2: a.names2\n };\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/get_data',\n data: a,\n timeout: 1e4,\n onSuccess: function (a) {\n var d = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(d) ? b(a) : (e.setLastError($ASTX2_CONST.ERROR_NCK), c());\n },\n onFailure: function () {\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\n c();\n }\n });\n },\n _e2edata: function (a, b, c) {\n var d = this;\n $_astxu.sendAuthAjax({\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\n onSuccess: function (e) {\n var f = $_astxu.jsonParse(e);\n e = $_astxu.getnc(f ? f.result : '');\n 0 == $_astxu.isACK(e)\n ? (d.setLastError($ASTX2_CONST.ERROR_NCK), c())\n : d.set_cert(\n function () {\n d._e2edata_get(a, b, c, f);\n },\n function () {\n d.setLastError($ASTX2_CONST.ERROR_NOCONNECT);\n c();\n },\n f\n );\n },\n onFailure: function (a) {\n d.setLastError($ASTX2_CONST.ERROR_FAILED);\n c();\n }\n });\n },\n getE2EData: function (a, b, c) {\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n if (0 == this._e2e_enable()) c();\n else {\n var d = [],\n e = [],\n f = [],\n g = [];\n this.mE2EInst.getE2EelmsForm(a, d, e, 1);\n this.mE2EInst.getE2EelmsForm(a, f, g, 2);\n a = { ids1: d.join(','), names1: e.join(','), ids2: f.join(','), names2: g.join(',') };\n this._e2edata(a, b, c);\n }\n },\n getE2EDataRetry: function (a, b, c, d, e) {\n null == d && (d = 3);\n null == e && (e = 1e3);\n if (0 >= d) this.setLastError($ASTX2_CONST.ERROR_EXCESS), c();\n else {\n var f = this;\n this.getE2EData(\n a,\n function (a) {\n b(a);\n },\n function () {\n f.getLastError() == $ASTX2_CONST.ERROR_NOINIT\n ? window.setTimeout(function () {\n f.getE2EDataRetry(a, b, c, d - 1, e);\n }, e)\n : c();\n }\n );\n }\n },\n getE2EDataIDs: function (a, b, c) {\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n if (0 == this._e2e_enable()) c();\n else {\n null == a && (that.setLastError($ASTX2_CONST.ERROR_PARAM), c());\n var d = [],\n e = [],\n f = [],\n g = [];\n this.mE2EInst.getE2EelmsID(a, d, e, 1);\n this.mE2EInst.getE2EelmsID(a, f, g, 2);\n a = { ids1: d.join(','), names1: e.join(','), ids2: f.join(','), names2: g.join(',') };\n this._e2edata(a, b, c);\n }\n },\n setE2EData: function (a, b, c, d) {\n null == c && (c = !0);\n null == d && (d = '');\n var e = $_astxu.getnc(b.e2e_data1);\n 0 < e.length && ($_astxu.getCreatedFormValue(a, 'e2e_data1').value = e);\n b = $_astxu.getnc(b.e2e_data2);\n 0 < b.length && ($_astxu.getCreatedFormValue(a, 'e2e_data2').value = b);\n 1 == c && this.mE2EInst.resetE2Evalues($_astxu.getnc(a.name), d);\n },\n getE2EPageID: function () {\n return $ASTX2_CONST.PAGEID;\n },\n getE2EInputID: function (a) {\n a = this.mE2EInst.getE2Eattribute(a);\n return null == a ? null : a.e2e_inputid;\n },\n getE2EHash: function (a, b) {\n this.mE2EInst.getE2EHash(a, function (a, d) {\n b(a, d);\n });\n },\n getEncText: function (a, b, c) {\n this.mE2EInst.getEncText(a, b, function (a, b, f) {\n c(b, f);\n });\n },\n getE2EText: function (a, b) {\n this.mE2EInst.getE2EText(a, function (a, d, e) {\n b(d, e);\n });\n },\n getE2ETextS: function (a, b) {\n for (var c = 0, d = 0, e = [], f = 0; f < a.length; f++) {\n var g = a[f];\n null != g && ((g = g.getAttribute('e2e_type')), null != g && g == $ASTX2_CONST.E2ETYPE_PLAIN2 && c++);\n }\n if (0 == c || c != a.length) b(e, $ASTX2_CONST.ERROR_PARAM);\n else\n for (f = 0; f < a.length; f++)\n this.mE2EInst.getE2EText(a[f], function (a, f, g) {\n d >= c || (0 == g ? (e[a] = f) : (d = c), ++d >= c && b(e, g));\n });\n },\n setE2EText: function (a, b) {\n this.mE2EInst.setE2EText(a, b);\n },\n clearE2EText: function (a, b) {\n this.mE2EInst.clearE2EText(a, b);\n },\n clearE2EForm: function (a) {\n for (var b = document.getElementsByTagName('input'), c = 0; c < b.length; c++) {\n var d = b[c];\n null != d &&\n d.form.name == a &&\n 0 != ('text' == d.type || 'password' == d.type) &&\n null != d.getAttribute('e2e_type') &&\n this.mE2EInst.clearE2EText(d);\n }\n },\n addE2EObject: function (a, b) {\n null == b && (b = $ASTX2_CONST.E2ETYPE_CERT1);\n !a || ('text' != a.type && 'password' != a.type) || (a.setAttribute('e2e_type', b), this.mE2EInst.addObject(a));\n },\n subE2EObject: function (a) {\n a && this.mE2EInst.subObject(a);\n },\n setE2EAllExceptInputs: function () {\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\n var c = a[b];\n null != c &&\n 0 != ('text' == c.type || 'password' == c.type) &&\n null == c.getAttribute('e2e_type') &&\n c.setAttribute('e2e_type', $ASTX2_CONST.E2ETYPE_NONE);\n }\n },\n killFocusE2EAllInputs: function () {\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\n var c = a[b];\n null != c && 0 != ('text' == c.type || 'password' == c.type) && 0 < c.getAttribute('e2e_type') && c.blur();\n }\n },\n _pclogdata_get: function (a, b, c, d) {\n var e = this;\n c = {\n ver: $_astxu.getint(c.ver),\n alg: $_astxu.getint(c.alg),\n svr: $_astxu.getnc(c.svr),\n norsa: $_astxu.getint(c.norsa),\n uniq: $_astxu.getnc(c.uniq),\n utime: $_astxu.getint(c.utime),\n nlog: $_astxu.getnc(c.nlog),\n ipaddr: $_astxu.getnc(c.ipaddr),\n s2c_alg: $_astxu.getnc(c.s2c_alg),\n s2c_key: $_astxu.getnc(c.s2c_key),\n s2c_salt: $_astxu.getnc(c.s2c_salt),\n browser: $ASTX2_CONST.BROWSER_VER,\n pageid: $ASTX2_CONST.PAGEID,\n opt: d\n };\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/get_pclog',\n data: c,\n timeout: 1e4,\n onSuccess: function (c) {\n var d = $_astxu.getnc(c ? c.result : '');\n $_astxu.isACK(d) ? a(c) : (e.setLastError($ASTX2_CONST.ERROR_NCK), b());\n },\n onFailure: function () {\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\n b();\n }\n });\n },\n _pclogdata: function (a, b, c) {\n var d = this;\n $_astxu.sendAuthAjax({\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\n data: { pclog: 1, client_public_key: $ASTX2_COMM.mClientPublicKey },\n onSuccess: function (e) {\n var f = $_astxu.jsonParse(e);\n e = $_astxu.getnc(f ? f.result : '');\n 0 == $_astxu.isACK(e)\n ? (d.setLastError($ASTX2_CONST.ERROR_NCK), b())\n : d.set_cert(\n function () {\n d._pclogdata_get(a, b, f, c);\n },\n function () {\n d.setLastError($ASTX2_CONST.ERROR_NOCONNECT);\n b();\n },\n f\n );\n },\n onFailure: function (a) {\n d.setLastError($ASTX2_CONST.ERROR_FAILED);\n b();\n }\n });\n },\n getPCLOGData: function (a, b, c, d) {\n null == d && (d = '');\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\n 0 == $ASTX2_COMM.isEnable() ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), c()) : this._pclogdata(b, c, d);\n },\n getPCLOGDataRetry: function (a, b, c, d, e) {\n null == d && (d = 3);\n null == e && (e = 1e3);\n if (0 >= d) this.setLastError($ASTX2_CONST.ERROR_EXCESS), c();\n else {\n var f = this;\n this.getPCLOGData(\n a,\n function (a) {\n b(a);\n },\n function () {\n f.getLastError() == $ASTX2_CONST.ERROR_NOINIT\n ? window.setTimeout(function () {\n f.getPCLOGDataRetry(a, b, c, d - 1, e);\n }, e)\n : c();\n }\n );\n }\n },\n setPCLOGData: function (a, b) {\n var c = $_astxu.getnc(b.pclog_data);\n 0 < c.length && ($_astxu.getCreatedFormValue(a, 'pclog_data').value = c);\n },\n isVmEnv: function (a, b) {\n 0 == $ASTX2_COMM.isEnable()\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\n : (null == b && (b = ''),\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/is_vm_env',\n data: { opts: b },\n onSuccess: function (b) {\n var d = $_astxu.getnc(b ? b.result : '');\n $_astxu.isACK(d) ? a(b.vm_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\n },\n onFailure: function () {\n a(null, $ASTX2_CONST.ERROR_FAILED);\n }\n }));\n },\n isRemoteEnv: function (a, b) {\n 0 == $ASTX2_COMM.isEnable()\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\n : (null == b && (b = ''),\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/is_remote_env',\n data: { opts: b },\n onSuccess: function (b) {\n var d = $_astxu.getnc(b ? b.result : '');\n $_astxu.isACK(d) ? a(b.remote_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\n },\n onFailure: function () {\n a(null, $ASTX2_CONST.ERROR_FAILED);\n }\n }));\n },\n isVmRemoteEnv: function (a, b) {\n 0 == $ASTX2_COMM.isEnable()\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\n : (null == b && (b = ''),\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/is_vm_remote_env',\n data: { opts: b },\n onSuccess: function (b) {\n var d = $_astxu.getnc(b ? b.result : '');\n $_astxu.isACK(d) ? a(b.vm_remote_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\n },\n onFailure: function () {\n a(null, $ASTX2_CONST.ERROR_FAILED);\n }\n }));\n },\n checkService: function (a, b) {\n a == $ASTX2_CONST.SERVICE_AK && this.mE2EInst.checkService(b);\n },\n setProtect: function (a, b) {\n if (0 == $ASTX2_COMM.isEnable()) b && b($ASTX2_CONST.ERROR_NOINIT);\n else {\n var c = {\n customerid: $_astxu.getnc($ASTX2_CUST.mCustomerID),\n ak: a & $ASTX2_CONST.PROTECT_AK ? 1 : -1,\n fw: a & $ASTX2_CONST.PROTECT_FW ? 1 : -1,\n pb: a & $ASTX2_CONST.PROTECT_PB ? 1 : -1,\n pcs: a & $ASTX2_CONST.PROTECT_PCS ? 1 : -1\n };\n $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/set_protect',\n data: c,\n onSuccess: function (a) {\n a = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(a) ? b && b($ASTX2_CONST.ERROR_SUCCESS) : b && b($ASTX2_CONST.ERROR_NCK);\n },\n onFailure: function () {\n b && b($ASTX2_CONST.ERROR_FAILED);\n }\n });\n }\n },\n isNotSupportOS: function (a, b) {\n 0 == $ASTX2_COMM.isEnable()\n ? b && b(null, $ASTX2_CONST.ERROR_NOINIT)\n : $_astxu.sendJsonp({\n url: $ASTX2_COMM.mLocalServerURL + '/is_not_support_os',\n data: {\n ak: a & $ASTX2_CONST.PROTECT_AK ? 1 : 0,\n fw: a & $ASTX2_CONST.PROTECT_FW ? 1 : 0,\n pb: a & $ASTX2_CONST.PROTECT_PB ? 1 : 0,\n pcs: a & $ASTX2_CONST.PROTECT_PCS ? 1 : 0\n },\n onSuccess: function (a) {\n var d = $_astxu.getnc(a ? a.result : '');\n $_astxu.isACK(d) ? b && b(a, $ASTX2_CONST.ERROR_SUCCESS) : b && b(null, $ASTX2_CONST.ERROR_NCK);\n },\n onFailure: function () {\n b && b(null, $ASTX2_CONST.ERROR_FAILED);\n }\n });\n },\n isAccessible: function (a, b, c, d, e) {\n null == e && (e = 750);\n if (a == $ASTX2_CONST.REQUEST_JSONP)\n $_astxu.sendJsonp({\n url: b,\n nocallback: !0,\n timeout: e,\n onSuccess: function () {\n c && c(b);\n },\n onFailure: function () {\n d && d(b);\n }\n });\n else {\n if (\n 0 != b.indexOf(window.location.protocol + '//' + window.location.host) &&\n 'IE' == $ASTX2_CONST.BROWSER_TYPE\n ) {\n if ('IE10' != $ASTX2_CONST.BROWSER_VER && 'IE11' != $ASTX2_CONST.BROWSER_VER) {\n d && d(b, 'CORS, not allowed browser');\n return;\n }\n if (0 != b.indexOf('http:') && 0 != b.indexOf('https:')) {\n d && d(b, 'CORS, not allowed protocol');\n return;\n }\n }\n $_astxu.sendAjax({\n url: b,\n type: 'GET',\n timeout: e,\n onSuccess: function (a) {\n c && c(b);\n },\n onFailure: function (a) {\n d && d(b, a);\n }\n });\n }\n },\n uninit: function () {\n this.uninitE2E();\n $ASTX2_COMM.uninit();\n },\n setLastError: function (a) {\n this.mLastError = a;\n },\n getLastError: function () {\n return this.mLastError;\n }\n };\n$ASTX2_MLi = {\n init: function () {\n setTimeout(function () {\n var a = { pageid: $ASTX2_CONST.PAGEID, focus: $_astxu.hasFocused() ? 1 : 0 };\n $_astxu.sendJsonp({ url: $ASTX2_COMM.mLocalServerURL + '/initForML', timeout: 1e3, data: a });\n }, 200);\n }\n};\n\nwindow.$ASTX2 = {\n ...$ASTX2,\n $ASTX2_COMM,\n $_astxu,\n $ASTX2_E2E,\n $ASTX2_MLi\n};\n\n/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 30833 $ */\nconst getSubdomain = (hostname) => {\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\n return '';\n }\n\n const parts = hostname.split('.');\n\n // 최소 3개 부분이 있어야 서브도메인 존재 (subdomain.domain.com)\n if (parts.length < 3) {\n return '';\n }\n\n // 첫 번째 부분이 서브도메인\n return parts[0] ?? '';\n};\n\n/**\n * 호스트명을 기반으로 환경을 판단합니다.\n * @param hostname 호스트명\n * @returns 환경 구분 문자열 ('local' | 'dev' | 'stg' | 'prd')\n */\nconst getEnvironmentFromHostname = (hostname) => {\n const subDomain = getSubdomain(hostname);\n\n // localhost 판단\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost:')) {\n return 'local';\n }\n\n // dev 환경 판단\n if (subDomain.includes(`dev`)) {\n return 'dev';\n }\n\n // stg 환경 판단\n if (subDomain.includes('stg')) {\n return 'stg';\n }\n\n // 기본 운영\n return 'prd';\n};\n\nconst getServicePath = () => {\n if (typeof window.isStorybookEnv === 'boolean') {\n return '';\n } else {\n return `/${location.pathname.split('/')[1]}`;\n }\n};\n","/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 30833 $ */\r\n/* eslint-disable */\r\n\r\nlet $ASTX2_CUST = {\r\n // Customer option\r\n /*\r\n\tmUseJQuery: false, \t// Whether to use JQuery.\t\r\n\tmUseAjaxHello: false,\r\n\tmUseAutoStart: false, \r\n\tE2EFORM_TAIL: true,\r\n\tE2EFORM_INIT: '_e2e_forminit',\r\n\tE2EFORM_TAG1: '_e2e_1__',\r\n\tE2EFORM_TAG2: '_e2e_2__',\r\n\tE2EFORM_TAG1_PWD: '_e2e_1_pwd__',\r\n\tE2EFORM_TAG2_PWD: '_e2e_2_pwd__',\r\n\t*/\r\n\r\n mCustomerID: null, // Customer ID for setProtect.\r\n\r\n // ASTX2_CUST defined values\r\n URL_GET_INIT: 101,\r\n URL_GET_CERT: 102,\r\n URL_GET_STAMP: 103,\r\n URL_CHK_STAMP: 104,\r\n\r\n setCustomerID(customerID) {\r\n if (customerID !== null && customerID !== 'undefined') {\r\n this.mCustomerID = customerID;\r\n }\r\n },\r\n\r\n getURL(type) {\r\n let result = '';\r\n const timestamp = new Date().getTime();\r\n\r\n switch (type) {\r\n case this.URL_GET_INIT:\r\n result = `${getServicePath()}/api/dea/sltn/astx2/init/get`;\r\n break;\r\n case this.URL_GET_CERT:\r\n result = `${getServicePath()}/api/dea/sltn/astx2/cert/get?v=${timestamp}`; // WAF 차단 방지 (post 요청 시 값이 없는 경우 차단)\r\n break;\r\n case this.URL_GET_STAMP:\r\n result = `${getServicePath()}/api/dea/sltn/astx2/stamp/get`;\r\n break;\r\n case this.URL_CHK_STAMP:\r\n result = `${getServicePath()}/api/dea/sltn/astx2/stamp-chk/post`;\r\n break;\r\n } // end of switch\r\n\r\n return result;\r\n },\r\n\r\n isE2EObject(obj) {\r\n return false;\r\n },\r\n\r\n getE2Etype(obj) {\r\n return null;\r\n },\r\n\r\n onCreatedFormValue(obj, obj_name) {},\r\n\r\n onHandlerPreFocus(obj, event) {},\r\n\r\n onHandlerKeyDown(obj, event) {\r\n return true;\r\n },\r\n\r\n getErrorMessage(errno) {\r\n let message = '[ASTx] ';\r\n\r\n switch (errno) {\r\n case $ASTX2_CONST.ERROR_FAILED:\r\n message += '내부 오류가 발생하였습니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NOINIT:\r\n message += '초기화가 필요합니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NOTINST:\r\n message += '설치되어 있지 않습니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NOTSUPPORTED:\r\n message += '지원하지 않는 OS입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NOCONNECT:\r\n message += '서버(Web) 통신 실패입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NCK:\r\n message += '서버(Local) 응답 실패입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_ERR:\r\n message += '서버(Local) 내부 오류입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NSP:\r\n message += '지원하지 되지 않는 환경입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_PARAM:\r\n message += '잘못된 인자입니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_EXCESS:\r\n message += '재시도 회수를 초과 하였습니다.';\r\n break;\r\n case $ASTX2_CONST.ERROR_NEEDUPDATE:\r\n message += '제품 업데이트가 필요합니다.';\r\n break;\r\n default:\r\n message += `errno=${errno}`;\r\n break;\r\n } // end of switch\r\n\r\n return message;\r\n },\r\n\r\n errorAbort(errno) {\r\n alert(this.getErrorMessage(errno));\r\n }\r\n};\r\n","type ASTXWindow = Window & {\n $ASTX2: any;\n};\n\ndeclare const window: ASTXWindow;\n\nimport astx2ScriptContent from './astx2/astx2.min.js';\nimport astx2ScriptCustomContent from './astx2/astx2_custom.js';\n\n/**\n * element를 동적으로 추가하는 경우 사용.\n * @param el HTMLElement\n * @param e2e_type string\n */\nexport function addE2EObject(el: HTMLElement, e2e_type?: string) {\n if (window.$ASTX2) {\n window.$ASTX2.addE2EObject(el, e2e_type);\n window.$ASTX2.resetE2E();\n }\n}\n\nexport function hasAstx2() {\n return !!window.$ASTX2;\n}\n\ninterface Astx2Init {\n initSuccess?: () => void;\n initFailure?: () => void;\n checkServerSuccess?: () => void;\n checkServerFailure?: () => void;\n}\n\nexport const loadScript = (callback?: () => void) => {\n if (!window.$ASTX2) {\n console.log('dynamic load');\n const script = document.createElement('script');\n script.innerHTML = `\n ${astx2ScriptContent} \n ${astx2ScriptCustomContent}\n `;\n\n document.head.appendChild(script);\n\n script.onload = () => {\n callback && callback();\n };\n }\n};\n\nconst init = ({\n initSuccess = () => {\n /* empty */\n },\n initFailure = () => {\n /* empty */\n },\n checkServerSuccess = () => {\n /* empty */\n },\n checkServerFailure = () => {\n /* empty */\n }\n}: Astx2Init = {}) => {\n window.$ASTX2.init(\n () => {\n window.$ASTX2.initE2E();\n window.$ASTX2.checkServer(\n () => {\n checkServerSuccess();\n },\n () => {\n checkServerFailure();\n console.error(`ASTX.checkServer() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n );\n initSuccess();\n },\n () => {\n initFailure();\n if (window.$ASTX2.getLastError() === 103) {\n console.error('AhnLab Safe Transaction 클라이언트가 설치되지 않았습니다.');\n } else {\n console.error(`$ASTX2.init() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n }\n );\n};\n\n/**\n * @description 페이지진입후 최초 실행\n */\nexport const initASTX2 = ({\n initSuccess = () => {\n /* empty */\n },\n initFailure = () => {\n /* empty */\n },\n checkServerSuccess = () => {\n /* empty */\n },\n checkServerFailure = () => {\n /* empty */\n }\n}: Astx2Init = {}) => {\n if (window.$ASTX2) {\n init({\n initSuccess,\n initFailure,\n checkServerSuccess,\n checkServerFailure\n });\n }\n};\n\n/**\n * form객체로 감싸진 html input이 아닌 개별 input을 컨트롤\n * id기반으로 데이터접근\n * @param ids string[]\n * @param onSuccess\n * @param onFailure\n */\nexport function getE2EDataIDs(ids: string[], onSuccess: (astx_data: any) => void, onFailure: () => void = () => {}) {\n if (window.$ASTX2) {\n window.$ASTX2.getE2EDataIDs(\n ids,\n async (astx_data: any) => {\n /**\n * 성공시 데이터 세팅\n */\n onSuccess(astx_data);\n },\n () => {\n onFailure();\n console.log(`ASTX.getE2EData() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n );\n }\n}\n","import dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\n\n/*****************************\n * 날짜 관련 유틸\n ******************************/\ndayjs.locale('ko');\ndayjs.extend(customParseFormat);\n\n/**\n *\n * @param year\n * @param month\n * @returns\n */\nexport function getLastDay(year: number, month: number) {\n switch (month) {\n case 2:\n return year % 4 === 0 ? 29 : 28;\n case 4:\n case 6:\n case 9:\n case 11:\n return 30;\n default:\n return 31;\n }\n}\n\n/**\n * 한달뒤 날짜를 포맷형태로 리턴\n * @param 20200101 or 2020.01.01\n * @param 'YYYY.MM.DD'\n * @returns\n */\nexport const getOneMonthLater = (value?: string, format?: string): string => {\n const str = value ? value.split('.').join('') : '';\n const date = value\n ? new Date(Number(str.substring(0, 4)), Number(str.substring(4, 6)) - 1, Number(str.substring(6, 8)))\n : new Date();\n try {\n return dayjs(new Date(date.setMonth(date.getMonth() + 1))).format(format || 'YYYY.MM.DD');\n } catch (err) {\n console.warn(err);\n\n return '';\n }\n};\n\n/**\n * 날짜 차이를 구한다. 포맷에 맞지 않으면 Not a Number 리턴\n * @param date1 (yyyymmdd or yyyy.mm.dd or yyyy-mm-dd)\n * @param date2 (yyyymmdd or yyyy.mm.dd or yyyy-mm-dd)\n * @returns date1 - date2\n */\nexport const getDateDiff = (\n date1: string | number | dayjs.Dayjs | Date,\n date2: string | number | dayjs.Dayjs | Date\n): number => {\n const diff1 = dayjs(date1);\n const diff2 = dayjs(date2);\n\n /** diff1 - diff2: 현재: 0 */\n return diff1.diff(diff2, 'day');\n};\n\n/**\n * 입력되어진 생년월일 값이 당일 기준으로 미래시점인 경우 false를 반환합니다. (회원체계 기준 9, 0 일 경우 오류)\n * @param front 주민등록번호 앞 6자리\n * @param back 주민등록번호 뒤 첫자리\n * @returns boolean\n */\nexport const validateBirthdate = (front: string, back: string) => {\n const year = parseInt(front.slice(0, 2));\n const month = parseInt(front.slice(2, 4));\n const day = parseInt(front.slice(4, 6));\n let birthYear = 0;\n\n switch (back) {\n case '1':\n case '2':\n case '5':\n case '6':\n birthYear = 1900 + year;\n break;\n case '3':\n case '4':\n case '7':\n case '8':\n birthYear = 2000 + year;\n break;\n case '9':\n case '0':\n // birthYear = 1800 + year;\n return false;\n default:\n return false;\n }\n\n const birthdate = new Date(birthYear, month - 1, day);\n const currdate = new Date();\n\n return birthdate < currdate;\n};\n\n/**\n * 목표 날짜가 비교 날짜 이후 인지 확인하는 함수 (YYYYMMDD 형식)\n * @param targetDate\n * @param compareDate\n * @returns boolean\n */\nexport function isDateAfter(\n targetDate: string | number | dayjs.Dayjs | Date,\n compareDate: string | number | dayjs.Dayjs | Date\n) {\n const targetDateTime = new Date(convertDateFormat(targetDate, 'YYYY-MM-DD')).getTime();\n const compareDateTime = new Date(convertDateFormat(compareDate, 'YYYY-MM-DD')).getTime();\n\n return targetDateTime > compareDateTime;\n}\n\n/**\n * 날짜를 포맷형태로 리턴\n * @param 20200101 string\n * @param 'YYYY.MM.DD\n * @returns 포맷화된 날짜\n */\nexport const convertDateFormat = (value?: string | number | dayjs.Dayjs | Date, format?: string): string => {\n if (!value) {\n return '';\n }\n\n return dayjs(value).format(format || 'YYYY.MM.DD');\n};\n\n/**\n * 주어진 날짜가 오늘 날짜 이후인지 확인합니다.\n *\n * @param {string} dateString - 확인할 날짜 문자열입니다.\n * @param {dayjs.OptionType} [format] - 날짜 문자열의 형식입니다.\n * @returns {boolean} - 주어진 날짜가 오늘 이후라면 true를 반환합니다.\n */\nexport const isFutureDate = (dateString?: string | number | dayjs.Dayjs | Date, format?: dayjs.OptionType) => {\n if (!dateString) {\n return false;\n }\n\n const today = dayjs().startOf('day');\n const date = dayjs(dateString, format || 'YYYYMMDD', true);\n\n return date.isValid() && date.isAfter(today);\n};\n\n/**\n * 자주 사용하는 타입들 추가해두었습니다. 필요하신 형태 있으면 추가해주세요.\n */\nexport type DateFormat =\n | 'YYYY-MM-DD'\n | 'YYYY.MM.DD'\n | 'YYYY-MM'\n | 'YYYY-MM-DD HH:mm:ss'\n | 'YYYY.MM.DD HH:mm:ss'\n | 'YYYY-MM-DD HH:mm'\n | 'YYYYMMDD'\n | 'YYYY.M.D'\n | 'YYYY.M'\n | 'YYYY.MM.DD(dd) HH:mm:ss'\n | 'HH:mm:ss'\n | 'YYYY.M.D(dd)'\n | 'HH:mm';\n\ninterface Props {\n /** 날짜 문자열 */\n dateString: string | number | Date | dayjs.Dayjs;\n /** 현재 날짜 포맷 */\n fromFormat?: string;\n /** 컨버팅할 날짜 포맷 */\n toFormat: string;\n}\n\n/**\n * date string 을 입력받고 패턴에 맞게 포맷팅을 변경하는 유틸 함수\n * fromFormat 현재 날짜 포맷\n * toFormat 리턴 날짜 포맷\n */\nexport const convertDateString = ({ dateString, fromFormat, toFormat }: Props) => {\n return dayjs(dateString, fromFormat).format(toFormat);\n};\n\nexport const isDate = (value: unknown) => {\n return value instanceof Date && !isNaN(+value);\n};\n\n/**\n * 날짜 유효성 검사\n *\n * @param {string} dateString - 검사할 날짜 문자열.\n * @param {dayjs.OptionType} [format] - 날짜 문자열의 형식입니다.\n * @returns {boolean} - 유효한 날짜이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.\n */\nexport const isValidDate = (dateString?: string | number | dayjs.Dayjs | Date, format?: dayjs.OptionType) => {\n if (!dateString) {\n return false;\n }\n\n const date = dayjs(dateString, format || 'YYYYMMDD', true);\n\n return date.isValid();\n};\n\nexport type PeriodType =\n | 'thisWeek'\n | 'lastWeek'\n | 'last7Days'\n | 'thisMonth'\n | 'lastMonth'\n | 'last365Days'\n | 'week'\n | 'month'\n | 'today';\n/**\n * @description\n * today 당일\n * week 7일: 오늘 기준 7일 전\n * month 30: 오늘 기준 30일 전\n * thisWeek 이번 주 (일요일 ~ 토요일)\n * lastWeek 지난 주 (일요일 ~ 토요일)\n * last7Days 최근 7일 (오늘 포함)\n * thisMonth 이번 달 (1일 ~ 말일)\n * lastMonth 지난 달 (1일 ~ 말일)\n * last365Days 최근 365일 (오늘 포함)\n * @param periodType\n * @returns\n */\nexport const getPeriodDate = (periodType: PeriodType | 'today') => {\n const lastMonth = dayjs().subtract(1, 'M');\n\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const endDate = new Date(today);\n let startDate: Date;\n\n switch (periodType) {\n case 'today':\n // 당일\n startDate = new Date(today);\n\n return { startDate, endDate };\n\n case 'week':\n // 7일: 오늘 기준 7일 전\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 6);\n\n return { startDate, endDate };\n case 'month':\n // 30일: 오늘 기준 30일 전\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 29);\n\n return { startDate, endDate };\n\n case 'thisWeek':\n // 이번 주 (일요일 ~ 토요일)\n return { startDate: dayjs().day(0).toDate(), endDate: dayjs().day(6).toDate() };\n case 'lastWeek':\n // 지난 주 (일요일 ~ 토요일)\n return {\n startDate: dayjs().subtract(1, 'w').day(0).toDate(),\n endDate: dayjs().subtract(1, 'w').day(6).toDate()\n };\n case 'last7Days':\n // 최근 7일 (오늘 포함)\n return { startDate: dayjs().subtract(7, 'd').toDate(), endDate: dayjs().toDate() };\n case 'thisMonth':\n // 이번 달 (1일 ~ 말일)\n return {\n startDate: dayjs().date(1).toDate(),\n endDate: dayjs().date(dayjs().daysInMonth()).toDate()\n };\n case 'lastMonth':\n // 지난 달 (1일 ~ 말일)\n return {\n startDate: lastMonth.date(1).toDate(),\n endDate: lastMonth.date(lastMonth.daysInMonth()).toDate()\n };\n case 'last365Days':\n // 최근 365일 (오늘 포함)\n return { startDate: dayjs().subtract(365, 'd').toDate(), endDate: dayjs().toDate() };\n default:\n return null;\n }\n};\n","(function (w, d, s, l, i) {\n w[l] = w[l] || [];\n w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });\n let f = d.getElementsByTagName(s)[0],\n j = d.createElement(s),\n dl = l !== 'dataLayer' ? `&l=${l}` : '';\n j.async = true;\n j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`;\n f.parentNode.insertBefore(j, f);\n})(window, document, 'script', 'dataLayer', 'GTM-PPT3LJ56');\n","import { isClient } from '../environment-utils.js';\n\nimport gaScript from './ga.js';\n\nexport const loadGaScript = () => {\n if (isClient()) {\n //이미 로드된 경우 return\n if (document.querySelector('script[src*=\"googletagmanager.com/gtm.js\"]')) {\n return;\n }\n console.log('ga script load dynamic');\n const script = document.createElement('script');\n script.innerHTML = `\n ${gaScript}\n `;\n document.head.appendChild(script);\n\n }\n}"]}