{"version":3,"sources":["../src/stores/address.store.ts","../src/stores/buzzebeess-app.store.ts","../src/stores/alert.store.ts","../src/stores/analytics.store.ts","../src/stores/auth.store.ts","../src/stores/locale.store.ts","../src/utils/locale.ts","../src/utils/analytics.ts","../src/providers/analytics_provider.tsx","../src/utils/string_utils.ts","../src/constant.tsx","../src/utils/purchase_utils.tsx","../src/stores/user.store.ts","../src/service/bzbs_service.ts","../src/stores/campaign-detail.store.ts","../src/stores/campaigns.store.ts","../src/stores/cart.store.ts","../src/stores/categories.store.ts","../src/stores/confirm.store.ts","../src/stores/consent.store.ts","../src/stores/coupon.store.ts","../src/stores/dashboard.store.ts","../src/stores/loading-indicator.store.ts","../src/stores/maintenance.store.ts","../src/stores/notification.store.ts","../src/stores/point-log.store.ts","../src/stores/popup.store.ts","../src/stores/purchase.store.ts","../src/stores/registration.store.ts","../src/stores/zipcode.store.ts"],"sourcesContent":["import { Address, ServiceResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\n\nexport type AddressState = {\n  data: Address[];\n  selectedAddress: Address | null;\n  isLoading: boolean;\n  error: ServiceResponse<unknown> | null;\n};\n\nexport type AddressActions = {\n  setSelectedAddress: (address: Address | null) => void;\n  fetchData: () => Promise<ServiceResponse<Address[]>>;\n  createAddress: (address: AddressUpdateParams) => Promise<ServiceResponse<Address>>;\n  updateAddress: (address: AddressUpdateParams) => Promise<ServiceResponse<Address>>;\n  deleteAddress: (rowKey: string) => Promise<ServiceResponse<unknown>>;\n  clear: () => void;\n};\n\nexport type AddressStore = AddressState & AddressActions;\n\nexport type AddressUpdateParams = {\n  name?: string;\n  addressName?: string;\n  firstName?: string;\n  lastName?: string;\n  address?: string;\n  zipcode?: string;\n  provinceCode?: string;\n  provinceName?: string;\n  districtCode?: string;\n  districtName?: string;\n  subDistrictCode?: string;\n  subDistrictName?: string;\n  contactNumber?: string;\n  countryCode?: string;\n  countryName?: string;\n  isDefault?: boolean;\n  rowKey?: string;\n};\n\nexport const useAddressStore = create<AddressStore>((set, get) => ({\n  // Initial state\n  data: [],\n  selectedAddress: null,\n  isLoading: false,\n  error: null,\n\n  setSelectedAddress: (address: Address | null) => set({ selectedAddress: address }),\n\n  fetchData: async () => {\n    const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n    if (!bzbsService) {\n      return { type: 'client-error', message: 'Service not configured' };\n    }\n\n    set({ isLoading: true });\n    const response = await bzbsService.addressApi.userAddresses();\n    set({ isLoading: false });\n\n    if (response.type === 'success') {\n      set({\n        data: response.model,\n        error: null,\n      });\n    } else {\n      set({ error: response });\n    }\n\n    return response;\n  },\n\n  createAddress: async (address: AddressUpdateParams) => {\n    const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n    if (!bzbsService) {\n      return { type: 'client-error', message: 'Service not configured' };\n    }\n\n    set({ isLoading: true });\n    const response = await bzbsService.addressApi.updateAddress({\n      ...address,\n      rowKey: '',\n    });\n    set({ isLoading: false });\n\n    if (response.type === 'success') {\n      // Refresh address list\n      get().fetchData();\n      set({ error: null });\n    } else {\n      set({ error: response });\n    }\n\n    return response;\n  },\n\n  updateAddress: async (address: AddressUpdateParams) => {\n    const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n    if (!bzbsService) {\n      return { type: 'client-error', message: 'Service not configured' };\n    }\n\n    set({ isLoading: true });\n    const response = await bzbsService.addressApi.updateAddress({\n      ...address,\n      rowKey: address.rowKey || '',\n    });\n    set({ isLoading: false });\n\n    if (response.type === 'success') {\n      // Refresh address list\n      get().fetchData();\n      set({ error: null });\n    } else {\n      set({ error: response });\n    }\n\n    return response;\n  },\n\n  deleteAddress: async (rowKey: string) => {\n    const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n    if (!bzbsService) {\n      return { type: 'client-error', message: 'Service not configured' };\n    }\n\n    set({ isLoading: true });\n    const response = await bzbsService.addressApi.deleteAddress({ rowKey });\n    set({ isLoading: false });\n\n    if (response.type === 'success') {\n      // Refresh address list\n      get().fetchData();\n      set({ error: null });\n    } else {\n      set({ error: response });\n    }\n\n    return response;\n  },\n\n  clear: () => {\n    set({\n      data: [],\n      selectedAddress: null,\n      isLoading: false,\n      error: null,\n    });\n  },\n}));\n","import { BzbsService } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\n\nexport type AuthTokenType = 'jwt' | 'auth_token';\n\ntype getTokenFunction = () => Promise<string | null>;\ntype setTokenFunction = (token: string) => void;\ntype removeTokenFunction = () => void;\n\nexport type TokenFunctions = {\n  getToken: getTokenFunction;\n  setToken: setTokenFunction;\n  removeToken: removeTokenFunction;\n};\n\nexport type BuzzebeesAppState = {\n  appId: string;\n  appName: string;\n  bzbsService: BzbsService | null;\n  uuid: string;\n  macAddress: string;\n  clientVersion: string;\n  os: string;\n  platform: string;\n  fcmToken: string;\n  deviceNotificationEnabled: boolean;\n  urls: {\n    webCallback: string;\n    cart: string;\n  };\n  tokenFunctions: TokenFunctions | null;\n  tokenType: AuthTokenType;\n  config: {\n    defaultDashboardConfig: string;\n    defaultDashboardMode: 'main' | 'sub';\n    defaultMenuConfig: string;\n    defaultCampaignConfig: string;\n  };\n};\n\nexport type BuzzebeesAppActions = {\n  setAppId: (appId: string) => void;\n  setAppName: (appName: string) => void;\n  setBzbsService: (service: BzbsService) => void;\n  setUuid: (uuid: string) => void;\n  setMacAddress: (macAddress: string) => void;\n  setClientVersion: (clientVersion: string) => void;\n  setOs: (os: string) => void;\n  setPlatform: (platform: string) => void;\n  setFcmToken: (fcmToken: string) => void;\n  setDeviceNotificationEnabled: (deviceNotificationEnabled: boolean) => void;\n  setUrls: (urls: { webCallback: string; cart: string }) => void;\n  setTokenType: (tokenType: AuthTokenType) => void;\n  setTokenFunctions: (tokenFunctions: TokenFunctions) => void;\n  configure: (config: {\n    appId: string;\n    appName: string;\n    bzbsService: BzbsService;\n    uuid: string;\n    clientVersion: string;\n    os: string;\n    platform: string;\n    fcmToken: string;\n    deviceNotificationEnabled: boolean;\n    urls: { webCallback: string; cart: string };\n    tokenFunctions: TokenFunctions;\n    tokenType: AuthTokenType;\n    defaultDashboardConfig: string;\n    defaultDashboardMode: 'main' | 'sub';\n    defaultMenuConfig: string;\n    defaultCampaignConfig: string;\n  }) => void;\n};\n\nexport type BuzzebeesAppStore = BuzzebeesAppState & BuzzebeesAppActions;\n\nexport const useBuzzebeesAppStore = create<BuzzebeesAppStore>((set) => ({\n  appId: '',\n  appName: '',\n  bzbsService: null,\n  uuid: '',\n  macAddress: '',\n  clientVersion: '',\n  os: '',\n  platform: '',\n  fcmToken: '',\n  deviceNotificationEnabled: false,\n  urls: {\n    webCallback: '',\n    cart: '',\n  },\n  tokenFunctions: null,\n  tokenType: 'auth_token',\n  config: {\n    defaultDashboardConfig: '',\n    defaultDashboardMode: 'main',\n    defaultMenuConfig: '',\n    defaultCampaignConfig: '',\n  },\n  setAppId: (appId: string) => set({ appId }),\n  setAppName: (appName: string) => set({ appName }),\n  setBzbsService: (service: BzbsService) => set({ bzbsService: service }),\n  setUuid: (uuid: string) => set({ uuid }),\n  setMacAddress: (macAddress: string) => set({ macAddress }),\n  setClientVersion: (clientVersion: string) => set({ clientVersion }),\n  setOs: (os: string) => set({ os }),\n  setPlatform: (platform: string) => set({ platform }),\n  setFcmToken: (fcmToken: string) => set({ fcmToken }),\n  setDeviceNotificationEnabled: (deviceNotificationEnabled: boolean) => set({ deviceNotificationEnabled }),\n  setUrls: (urls: { webCallback: string; cart: string }) => set({ urls }),\n  setTokenFunctions: (tokenFunctions: TokenFunctions) => set({ tokenFunctions }),\n  setTokenType: (tokenType: AuthTokenType) => set({ tokenType }),\n  configure: (config: {\n    appId: string;\n    appName: string;\n    bzbsService: BzbsService;\n    uuid: string;\n    clientVersion: string;\n    os: string;\n    platform: string;\n    fcmToken: string;\n    deviceNotificationEnabled: boolean;\n    urls: { webCallback: string; cart: string };\n    tokenFunctions: TokenFunctions;\n    tokenType: AuthTokenType;\n    defaultDashboardConfig: string;\n    defaultDashboardMode: 'main' | 'sub';\n    defaultMenuConfig: string;\n    defaultCampaignConfig: string;\n  }) => {\n    set({\n      appId: config.appId,\n      appName: config.appName,\n      bzbsService: config.bzbsService,\n      uuid: config.uuid,\n      clientVersion: config.clientVersion,\n      os: config.os,\n      platform: config.platform,\n      fcmToken: config.fcmToken,\n      deviceNotificationEnabled: config.deviceNotificationEnabled,\n      urls: config.urls,\n      tokenFunctions: config.tokenFunctions,\n      tokenType: config.tokenType,\n      config: {\n        defaultDashboardConfig: config.defaultDashboardConfig,\n        defaultDashboardMode: config.defaultDashboardMode,\n        defaultMenuConfig: config.defaultMenuConfig,\n        defaultCampaignConfig: config.defaultCampaignConfig,\n      },\n    });\n  },\n}));\n","import { create } from 'zustand';\n\nexport type AlertRequest = {\n  title: string;\n  content: string;\n  closeText?: string;\n  onClose: () => void;\n};\n\nexport type AlertState = {\n  isOpen: boolean;\n  alertRequest: AlertRequest;\n};\n\nexport type AlertActions = {\n  openAlert: (request: AlertRequest) => void;\n  closeAlert: () => void;\n};\n\nexport type AlertStore = AlertState & AlertActions;\n\nexport const useAlertStore = create<AlertStore>((set, get) => ({\n  isOpen: false,\n  alertRequest: {\n    title: '',\n    content: '',\n    onClose: () => {},\n  },\n\n  openAlert: (request: AlertRequest) => {\n    set({ alertRequest: request, isOpen: true });\n  },\n\n  closeAlert: () => {\n    const { alertRequest } = get();\n    alertRequest.onClose();\n    set({ isOpen: false });\n  },\n}));\n","import type { UserInfo } from 'matomo-tracker-react-native';\nimport MatomoTracker from 'matomo-tracker-react-native';\nimport { create } from 'zustand';\n\nexport type AnalyticsEventParams = {\n  action: string;\n  name?: string;\n  category?: string;\n  value?: number;\n  campaign?: string;\n  userInfo?: UserInfo;\n};\n\nexport type AnalyticsPageViewParams = {\n  name: string;\n  url?: string;\n  userInfo?: UserInfo;\n};\n\nexport type AnalyticsState = {\n  isInitialized: boolean;\n  isEnabled: boolean;\n  siteId?: number;\n  urlBase?: string;\n  trackerUrl?: string;\n  userId?: string;\n  disabled?: boolean;\n  log?: boolean;\n  matomoInstance?: MatomoTracker;\n  presetUserInfo?: UserInfo;\n};\n\nexport type AnalyticsActions = {\n  initialize: (config: {\n    siteId: number;\n    urlBase: string;\n    trackerUrl?: string;\n    userId?: string;\n    disabled?: boolean;\n    log?: boolean;\n  }) => void;\n  setEnabled: (enabled: boolean) => void;\n  setPresetUserInfo: (userInfo: UserInfo) => void;\n  clearPresetUserInfo: () => void;\n  trackAppStart: (userInfo?: UserInfo) => Promise<void>;\n  trackEvent: (params: AnalyticsEventParams) => Promise<void>;\n  trackScreenView: (params: AnalyticsPageViewParams) => Promise<void>;\n  trackAction: (params: AnalyticsPageViewParams) => Promise<void>;\n  trackSiteSearch: (params: {\n    keyword: string;\n    category?: string;\n    count?: number;\n    userInfo?: UserInfo;\n  }) => Promise<void>;\n  trackLink: (params: { link: string; userInfo?: UserInfo }) => Promise<void>;\n  trackDownload: (params: { download: string; userInfo?: UserInfo }) => Promise<void>;\n  setUserId: (userId: string | null) => void;\n  setCustomDimension: (id: number, value: string) => void;\n  reset: () => void;\n};\n\nexport type AnalyticsStore = AnalyticsState & AnalyticsActions;\n\nexport const useAnalyticsStore = create<AnalyticsStore>((set, get) => ({\n  isInitialized: false,\n  isEnabled: true,\n  siteId: undefined,\n  urlBase: undefined,\n  trackerUrl: undefined,\n  userId: undefined,\n  disabled: false,\n  log: false,\n  matomoInstance: undefined,\n  presetUserInfo: undefined,\n\n  initialize: (config) => {\n    try {\n      // Create Matomo tracker instance\n      const matomoInstance = new MatomoTracker({\n        urlBase: config.urlBase,\n        siteId: config.siteId,\n        trackerUrl: config.trackerUrl,\n        userId: config.userId,\n        disabled: config.disabled || false,\n        log: config.log || false,\n      });\n\n      set({\n        siteId: config.siteId,\n        urlBase: config.urlBase,\n        trackerUrl: config.trackerUrl,\n        userId: config.userId,\n        disabled: config.disabled || false,\n        log: config.log || false,\n        matomoInstance,\n        isInitialized: true,\n      });\n\n      console.log('Analytics: Matomo tracker initialized', config);\n    } catch (error) {\n      console.error('Analytics: Failed to initialize Matomo tracker', error);\n      set({\n        siteId: config.siteId,\n        urlBase: config.urlBase,\n        trackerUrl: config.trackerUrl,\n        userId: config.userId,\n        disabled: config.disabled || false,\n        log: config.log || false,\n        isInitialized: false,\n      });\n    }\n  },\n\n  setEnabled: (enabled: boolean) => {\n    set({ isEnabled: enabled });\n  },\n\n  setPresetUserInfo: (userInfo: UserInfo) => {\n    set({ presetUserInfo: userInfo });\n  },\n\n  clearPresetUserInfo: () => {\n    set({ presetUserInfo: undefined });\n  },\n\n  trackAppStart: async (userInfo?: UserInfo) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track App Start skipped - not initialized, disabled, or tracking disabled');\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...userInfo };\n\n      await state.matomoInstance.trackAppStart({\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: App start tracked successfully', { userInfo: mergedUserInfo });\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track app start', error);\n    }\n  },\n\n  trackEvent: async (params: AnalyticsEventParams) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Event skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackEvent({\n        category: params.category || 'User Action',\n        action: params.action,\n        name: params.name,\n        value: params.value,\n        campaign: params.campaign,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Event tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track event', error, params);\n    }\n  },\n\n  trackScreenView: async (params: AnalyticsPageViewParams) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Screen View skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackScreenView({\n        name: params.name,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Screen view tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track screen view', error, params);\n    }\n  },\n\n  trackAction: async (params: AnalyticsPageViewParams) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Action skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackAction({\n        name: params.name,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Action tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track action', error, params);\n    }\n  },\n\n  trackSiteSearch: async (params: { keyword: string; category?: string; count?: number; userInfo?: UserInfo }) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Site Search skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackSiteSearch({\n        keyword: params.keyword,\n        category: params.category,\n        count: params.count,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Site search tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track site search', error, params);\n    }\n  },\n\n  trackLink: async (params: { link: string; userInfo?: UserInfo }) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Link skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackLink({\n        link: params.link,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Link tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track link', error, params);\n    }\n  },\n\n  trackDownload: async (params: { download: string; userInfo?: UserInfo }) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Download skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackDownload({\n        download: params.download,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Download tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track download', error, params);\n    }\n  },\n\n  setUserId: (userId: string | null) => {\n    const state = get();\n\n    // Update both the userId state and the preset userInfo\n    if (userId) {\n      const updatedUserInfo = {\n        ...state.presetUserInfo,\n        uid: userId,\n      };\n      set({\n        userId: userId,\n        presetUserInfo: updatedUserInfo,\n      });\n    } else {\n      // Remove uid from preset userInfo if userId is null\n      const currentUserInfo = state.presetUserInfo || {};\n      if (currentUserInfo.uid) {\n        const updatedUserInfo = { ...currentUserInfo };\n        delete updatedUserInfo.uid;\n\n        set({\n          userId: undefined,\n          presetUserInfo: Object.keys(updatedUserInfo).length > 0 ? updatedUserInfo : undefined,\n        });\n      } else {\n        set({ userId: undefined });\n      }\n    }\n\n    if (state.log) {\n      console.debug('Analytics: User ID updated in preset userInfo', userId);\n    }\n  },\n\n  setCustomDimension: (id: number, value: string) => {\n    const state = get();\n    if (!state.presetUserInfo) {\n      set({ presetUserInfo: { [`dimension${id}`]: value } });\n    } else {\n      set({\n        presetUserInfo: {\n          ...state.presetUserInfo,\n          [`dimension${id}`]: value,\n        },\n      });\n    }\n\n    if (state.log) {\n      console.debug('Analytics: Custom dimension set in preset userInfo', { id, value });\n    }\n  },\n\n  reset: () => {\n    set({\n      isInitialized: false,\n      isEnabled: true,\n      siteId: undefined,\n      urlBase: undefined,\n      trackerUrl: undefined,\n      userId: undefined,\n      disabled: false,\n      log: false,\n      matomoInstance: undefined,\n      presetUserInfo: undefined,\n    });\n\n    console.debug('Analytics: Store reset successfully');\n  },\n}));\n","import {\n  ConfirmOtpResponse,\n  ErrorResponse,\n  ForgetPasswordResponse,\n  LoginResponse,\n  OtpResponse,\n  ResumeResponse,\n  ServiceResponse,\n  StatusResponse,\n  ValidateOtpResponse,\n  Version,\n} from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\nimport { trackCommonEvents } from '../utils';\nimport { useAnalyticsStore } from './analytics.store';\nimport { useUserStore } from './user.store';\n\nexport type AuthState = {\n  isInitialized: boolean;\n  versionData: Version | null;\n  rawVersionData: unknown | null;\n  data: LoginResponse | ResumeResponse | null;\n  isLoading: boolean;\n  isLoadingToken: boolean;\n  error: ErrorResponse | null;\n  token: string | null;\n  isLoggedIn: boolean;\n};\n\nexport type AuthActions = {\n  setIsLoading: (isLoading: boolean) => void;\n  setIsLoadingToken: (isLoadingToken: boolean) => void;\n  setError: (error: ErrorResponse | null) => void;\n  checkLoggedIn: () => Promise<void>;\n  loginWithUsernamePassword: (username: string, password: string) => Promise<ServiceResponse<LoginResponse>>;\n  loginWithGoogle: (token: string) => Promise<ServiceResponse<LoginResponse>>;\n  loginWithFacebook: (token: string) => Promise<ServiceResponse<LoginResponse>>;\n  loginWithApple: (token: string, refreshToken: string) => Promise<ServiceResponse<LoginResponse>>;\n  loginWithUUID: () => Promise<ServiceResponse<LoginResponse>>;\n  logout: () => Promise<ServiceResponse<unknown>>;\n  forgetPassword: (\n    contact: string,\n    type: 'email' | 'contact_number'\n  ) => Promise<ServiceResponse<ForgetPasswordResponse>>;\n  resetPassword: (\n    contact: string,\n    otp: string,\n    refCode: string,\n    password: string\n  ) => Promise<ServiceResponse<StatusResponse>>;\n  sendOtp: (contact: string, channel: string) => Promise<ServiceResponse<OtpResponse>>;\n  validateOtp: (\n    otp: string,\n    refCode: string,\n    contact: string,\n    channel: string\n  ) => Promise<ServiceResponse<ValidateOtpResponse>>;\n  confirmOtp: (otp: string, refCode: string, contact: string) => Promise<ServiceResponse<ConfirmOtpResponse>>;\n  resume: (clientVersion: string) => Promise<ServiceResponse<ResumeResponse>>;\n  version: (clientVersion: string) => Promise<ServiceResponse<Version>>;\n  clear: () => void;\n};\n\nexport type AuthStore = AuthState & AuthActions;\n\ntype LoginHandlerParams = {\n  loginFn: () => Promise<ServiceResponse<LoginResponse>>;\n};\n\nexport const useAuthStore = create<AuthStore>((set) => {\n  // Private helper function to handle common login logic\n  const handleLogin = async ({ loginFn }: LoginHandlerParams): Promise<ServiceResponse<LoginResponse>> => {\n    const { bzbsService, tokenFunctions, tokenType } = useBuzzebeesAppStore.getState();\n\n    if (!bzbsService || !tokenFunctions) {\n      return { type: 'client-error', message: 'Service or auth persistence not configured' };\n    }\n\n    set({ isLoading: true, error: null });\n    const response = await loginFn();\n    set({ isLoading: false });\n\n    if (response.type === 'success') {\n      const token = tokenType === 'jwt' ? response.model.jwt : response.model.token;\n      tokenFunctions.setToken(token);\n\n      set({\n        data: response.model,\n        token: response.model.token,\n        isLoggedIn: true,\n        error: null,\n      });\n      useAnalyticsStore.getState().setUserId(response.model.userId);\n      useAnalyticsStore.getState().setCustomDimension(1, useBuzzebeesAppStore.getState().clientVersion);\n      useAnalyticsStore.getState().setCustomDimension(2, useBuzzebeesAppStore.getState().appId);\n\n      const userResponse = await useUserStore.getState().fetchUser();\n      if (userResponse.type === 'success') {\n        useAnalyticsStore.getState().setCustomDimension(3, userResponse.model.Contact_Number ?? '');\n        useAnalyticsStore.getState().setCustomDimension(4, userResponse.model.Email ?? '');\n      }\n\n      trackCommonEvents.loginSuccess();\n    } else {\n      set({ error: response });\n    }\n\n    return response;\n  };\n\n  return {\n    isInitialized: false,\n    versionData: null,\n    rawVersionData: null,\n    data: null,\n    isLoading: false,\n    isLoadingToken: false,\n    error: null,\n    token: null,\n    isLoggedIn: false,\n\n    setIsLoading: (isLoading: boolean) => set({ isLoading }),\n    setIsLoadingToken: (isLoadingToken: boolean) => set({ isLoadingToken }),\n    setError: (error: ErrorResponse | null) => set({ error }),\n\n    checkLoggedIn: async () => {\n      const { tokenFunctions } = useBuzzebeesAppStore.getState();\n      if (!tokenFunctions) {\n        set({ isLoggedIn: false, isInitialized: true });\n        return;\n      }\n\n      try {\n        set({ isLoadingToken: true });\n        const token = await tokenFunctions.getToken();\n        if (token) {\n          set({ isLoggedIn: true, token });\n        } else {\n          set({ isLoggedIn: false, token: null });\n        }\n      } catch (error) {\n        set({ isLoggedIn: false, token: null });\n      } finally {\n        set({ isLoadingToken: false, isInitialized: true });\n      }\n    },\n\n    loginWithUsernamePassword: async (username: string, password: string) => {\n      const { appId, uuid, os, platform, deviceNotificationEnabled, clientVersion, fcmToken } =\n        useBuzzebeesAppStore.getState();\n      const localeId = useLocaleStore.getState().localeId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      return handleLogin({\n        loginFn: () =>\n          bzbsService.authApi.usernamePasswordLogin({\n            username,\n            password,\n            appId,\n            uuid,\n            deviceToken: fcmToken,\n            clientVersion,\n            os,\n            platform,\n            deviceLocale: localeId.toString(),\n            deviceNotificationEnabled,\n          }),\n      });\n    },\n\n    loginWithGoogle: async (token: string) => {\n      const { appId, uuid, os, platform, deviceNotificationEnabled, clientVersion, fcmToken } =\n        useBuzzebeesAppStore.getState();\n      const localeId = useLocaleStore.getState().localeId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      return handleLogin({\n        loginFn: () =>\n          bzbsService.authApi.googleLogin({\n            idToken: token,\n            appId,\n            uuid,\n            deviceToken: fcmToken,\n            clientVersion,\n            os,\n            platform,\n            deviceLocale: localeId.toString(),\n            deviceNotificationEnabled,\n          }),\n      });\n    },\n\n    loginWithFacebook: async (token: string) => {\n      const { appId, uuid, os, platform, deviceNotificationEnabled, clientVersion, fcmToken } =\n        useBuzzebeesAppStore.getState();\n      const localeId = useLocaleStore.getState().localeId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      return handleLogin({\n        loginFn: () =>\n          bzbsService.authApi.facebookLogin({\n            accessToken: token,\n            appId,\n            uuid,\n            deviceToken: fcmToken,\n            clientVersion,\n            os,\n            platform,\n            deviceLocale: localeId.toString(),\n            deviceNotificationEnabled,\n          }),\n      });\n    },\n\n    loginWithApple: async (token: string, refreshToken: string) => {\n      const { appId, uuid, os, platform, deviceNotificationEnabled, clientVersion, fcmToken } =\n        useBuzzebeesAppStore.getState();\n      const localeId = useLocaleStore.getState().localeId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      return handleLogin({\n        loginFn: () =>\n          bzbsService.authApi.appleLogin({\n            idToken: token,\n            refreshToken,\n            appId,\n            uuid,\n            deviceToken: fcmToken,\n            clientVersion,\n            os,\n            platform,\n            deviceLocale: localeId.toString(),\n            deviceNotificationEnabled,\n          }),\n      });\n    },\n\n    loginWithUUID: async () => {\n      const { appId, uuid, os, platform, deviceNotificationEnabled, clientVersion, fcmToken } =\n        useBuzzebeesAppStore.getState();\n      const localeId = useLocaleStore.getState().localeId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      return handleLogin({\n        loginFn: () =>\n          bzbsService.authApi.deviceLogin({\n            appId,\n            uuid,\n            deviceToken: fcmToken,\n            clientVersion,\n            os,\n            platform,\n            deviceLocale: localeId.toString(),\n            deviceNotificationEnabled,\n          }),\n      });\n    },\n\n    logout: async () => {\n      const { tokenFunctions } = useBuzzebeesAppStore.getState();\n      const uuid = useBuzzebeesAppStore.getState().uuid;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService || !tokenFunctions) {\n        return { type: 'client-error', message: 'Service or auth persistence not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.logout({ uuid });\n      set({ isLoading: false });\n\n      tokenFunctions.removeToken();\n      set({\n        data: null,\n        token: null,\n        isLoggedIn: false,\n        error: null,\n      });\n\n      return response;\n    },\n\n    forgetPassword: async (contact: string, type: 'email' | 'contact_number') => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.forgetPassword({ contact, type });\n      set({ isLoading: false });\n      return response;\n    },\n\n    resetPassword: async (contact: string, otp: string, refCode: string, password: string) => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.resetPassword({\n        contact,\n        otp,\n        refCode,\n        newPassword: password,\n      });\n      set({ isLoading: false });\n      return response;\n    },\n\n    sendOtp: async (contact: string, channel: string) => {\n      const uuid = useBuzzebeesAppStore.getState().uuid;\n      const appId = useBuzzebeesAppStore.getState().appId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.otp({\n        uuid,\n        appId,\n        contactNumber: contact,\n        channel,\n      });\n      set({ isLoading: false });\n      return response;\n    },\n\n    validateOtp: async (otp: string, refCode: string, contact: string, channel: string) => {\n      const appId = useBuzzebeesAppStore.getState().appId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.validateOtp({\n        appId,\n        otp,\n        refCode,\n        contactNumber: contact,\n        use: false,\n        channel,\n      });\n      set({ isLoading: false });\n      return response;\n    },\n\n    confirmOtp: async (otp: string, refCode: string, contact: string) => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.confirmOtp({\n        otp,\n        refCode,\n        contactNumber: contact,\n      });\n      set({ isLoading: false });\n      return response;\n    },\n\n    resume: async (clientVersion: string) => {\n      const { uuid, appId, fcmToken } = useBuzzebeesAppStore.getState();\n      const { tokenFunctions, tokenType } = useBuzzebeesAppStore.getState();\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService || !tokenFunctions) {\n        return { type: 'client-error', message: 'Service or auth persistence not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.resume({\n        uuid,\n        appId,\n        clientVersion,\n        deviceToken: fcmToken,\n      });\n      set({ isLoading: false });\n\n      if (response.type === 'success') {\n        const token = tokenType === 'jwt' ? response.model.jwt! : response.model.token!;\n        tokenFunctions.setToken(token);\n        set({\n          data: response.model,\n          error: null,\n        });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    version: async (clientVersion: string) => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.versionRaw(clientVersion);\n      set({ isLoading: false });\n\n      if (response.type === 'success') {\n        set({ versionData: response.model, rawVersionData: response.model });\n      }\n\n      return response;\n    },\n\n    clear: () => {\n      set({\n        data: null,\n        versionData: null,\n        isLoading: false,\n        error: null,\n        token: null,\n        isLoggedIn: false,\n      });\n    },\n  };\n});\n","import { create } from 'zustand';\nimport { findBestLocaleFromString } from '../utils/locale';\n\nexport type AppLocale = {\n  locale: string;\n  localeId: number;\n};\n\nexport const EN = { locale: 'en', localeId: 1033 };\nexport const TH = { locale: 'th', localeId: 1054 };\n\nexport type LocaleState = {\n  appLocale: AppLocale;\n  locale: string;\n  localeId: number;\n};\n\nexport type LocaleActions = {\n  setAppLocale: (locale: AppLocale | string) => void;\n};\n\nexport type LocaleStore = LocaleState & LocaleActions;\n\nexport const useLocaleStore = create<LocaleStore>((set) => ({\n  appLocale: EN,\n  locale: 'en',\n  localeId: 1033,\n\n  setAppLocale: (locale: AppLocale | string) => {\n    const newLocale = typeof locale === 'string' ? findBestLocaleFromString(locale) : locale;\n    set({\n      appLocale: newLocale,\n      locale: newLocale.locale,\n      localeId: newLocale.localeId,\n    });\n  },\n}));\n","export const localeToLCIDMap: { [key: string]: number } = {\n  'ar-SA': 1025,\n  'bg-BG': 1026,\n  'ca-ES': 1027,\n  'zh-TW': 1028,\n  'cs-CZ': 1029,\n  'da-DK': 1030,\n  'de-DE': 1031,\n  'el-GR': 1032,\n  'en-US': 1033,\n  'es-ES': 1034,\n  'fi-FI': 1035,\n  'fr-FR': 1036,\n  'he-IL': 1037,\n  'hu-HU': 1038,\n  'is-IS': 1039,\n  'it-IT': 1040,\n  'ja-JP': 1041,\n  'ko-KR': 1042,\n  'nl-NL': 1043,\n  'nb-NO': 1044,\n  'pl-PL': 1045,\n  'pt-BR': 1046,\n  'rm-CH': 1047,\n  'ro-RO': 1048,\n  'ru-RU': 1049,\n  'hr-HR': 1050,\n  'sk-SK': 1051,\n  'sq-AL': 1052,\n  'sv-SE': 1053,\n  'th-TH': 1054,\n  'tr-TR': 1055,\n  'ur-PK': 1056,\n  'id-ID': 1057,\n  'uk-UA': 1058,\n  'be-BY': 1059,\n  'sl-SI': 1060,\n  'et-EE': 1061,\n  'lv-LV': 1062,\n  'lt-LT': 1063,\n  'tg-Cyrl-TJ': 1064,\n  'fa-IR': 1065,\n  'vi-VN': 1066,\n  'hy-AM': 1067,\n  'az-Latn-AZ': 1068,\n  'eu-ES': 1069,\n  'wen-DE': 1070,\n  'mk-MK': 1071,\n  'st-ZA': 1072,\n  'ts-ZA': 1073,\n  'tn-ZA': 1074,\n  'ven-ZA': 1075,\n  'xh-ZA': 1076,\n  'zu-ZA': 1077,\n  'af-ZA': 1078,\n  'ka-GE': 1079,\n  'fo-FO': 1080,\n  'hi-IN': 1081,\n  'mt-MT': 1082,\n  'se-NO': 1083,\n  'gd-GB': 1084,\n  yi: 1085,\n  'ms-MY': 1086,\n  'kk-KZ': 1087,\n  'ky-KG': 1088,\n  'sw-KE': 1089,\n  'tk-TM': 1090,\n  'uz-Latn-UZ': 1091,\n  'tt-RU': 1092,\n  'bn-IN': 1093,\n  'pa-IN': 1094,\n  'gu-IN': 1095,\n  'or-IN': 1096,\n  'ta-IN': 1097,\n  'te-IN': 1098,\n  'kn-IN': 1099,\n  'ml-IN': 1100,\n  'as-IN': 1101,\n  'mr-IN': 1102,\n  'sa-IN': 1103,\n  'mn-MN': 1104,\n  'bo-CN': 1105,\n  'cy-GB': 1106,\n  'km-KH': 1107,\n  'lo-LA': 1108,\n  'my-MM': 1109,\n  'gl-ES': 1110,\n  'kok-IN': 1111,\n  mni: 1112,\n  'sd-IN': 1113,\n  'syr-SY': 1114,\n  'si-LK': 1115,\n  'chr-US': 1116,\n  'iu-Cans-CA': 1117,\n  'am-ET': 1118,\n  tmz: 1119,\n  'ks-Arab-IN': 1120,\n  'ne-NP': 1121,\n  'fy-NL': 1122,\n  'ps-AF': 1123,\n  'fil-PH': 1124,\n  'dv-MV': 1125,\n  'bin-NG': 1126,\n  'fuv-NG': 1127,\n  'ha-Latn-NG': 1128,\n  'ibb-NG': 1129,\n  'yo-NG': 1130,\n  'quz-BO': 1131,\n  'nso-ZA': 1132,\n  'ig-NG': 1136,\n  'kr-NG': 1137,\n  'gaz-ET': 1138,\n  'ti-ER': 1139,\n  'gn-PY': 1140,\n  'haw-US': 1141,\n  la: 1142,\n  'so-SO': 1143,\n  'ii-CN': 1144,\n  'pap-AN': 1145,\n  'ug-Arab-CN': 1152,\n  'mi-NZ': 1153,\n  'ar-IQ': 2049,\n  'zh-CN': 2052,\n  'de-CH': 2055,\n  'en-GB': 2057,\n  'es-MX': 2058,\n  'fr-BE': 2060,\n  'it-CH': 2064,\n  'nl-BE': 2067,\n  'nn-NO': 2068,\n  'pt-PT': 2070,\n  'ro-MD': 2072,\n  'ru-MD': 2073,\n  'sr-Latn-CS': 2074,\n  'sv-FI': 2077,\n  'ur-IN': 2080,\n  'az-Cyrl-AZ': 2092,\n  'ga-IE': 2108,\n  'ms-BN': 2110,\n  'uz-Cyrl-UZ': 2115,\n  'bn-BD': 2117,\n  'pa-PK': 2118,\n  'mn-Mong-CN': 2128,\n  'bo-BT': 2129,\n  'sd-PK': 2137,\n  'tzm-Latn-DZ': 2143,\n  'ks-Deva-IN': 2144,\n  'ne-IN': 2145,\n  'quz-EC': 2155,\n  'ti-ET': 2163,\n  'ar-EG': 3073,\n  'zh-HK': 3076,\n  'de-AT': 3079,\n  'en-AU': 3081,\n  'fr-CA': 3084,\n  'sr-Cyrl-CS': 3098,\n  'ar-LY': 4097,\n  'zh-SG': 4100,\n  'de-LU': 4103,\n  'en-CA': 4105,\n  'fr-CH': 4108,\n  'hr-BA': 4122,\n  'ar-DZ': 5121,\n  'zh-MO': 5124,\n  'de-LI': 5127,\n  'en-NZ': 5129,\n  'fr-LU': 5132,\n  'bs-Latn-BA': 5146,\n  'ar-MO': 6145,\n  'fr-MC': 6156,\n  'ar-TN': 7169,\n  'ar-OM': 8193,\n  'ar-YE': 9217,\n  'en-BZ': 10249,\n  'es-PE': 10250,\n  'fr-SN': 10252,\n  'ar-JO': 11265,\n  'fr-CM': 11276,\n  'en-ID': 14345,\n  'es-CL': 13322,\n  'en-HK': 15369,\n  'fr-MA': 14348,\n  'en-MY': 17417,\n  'es-SV': 17418,\n  'es-NI': 19466,\n  'es-PR': 20490,\n  'es-US': 21514,\n  'fr-015': 58380,\n};\n\nexport function findBestLocaleFromString(value: string): { locale: string; localeId: number } {\n  // Attempt to find an exact match in the map\n  if (localeToLCIDMap[value]) {\n    return {\n      locale: value,\n      localeId: localeToLCIDMap[value],\n    };\n  }\n\n  // Fallback: Check for a partial match (e.g., \"en\" in \"en-US\")\n  const partialMatch = Object.keys(localeToLCIDMap).find((key) => key.startsWith(value.split('-')[0]));\n\n  if (partialMatch) {\n    return {\n      locale: partialMatch,\n      localeId: localeToLCIDMap[partialMatch],\n    };\n  }\n\n  // Default result if no match is found\n  throw new Error(`Locale '${value}' is not supported.`);\n}\n","import type { UserInfo } from 'matomo-tracker-react-native';\nimport React, { useEffect } from 'react';\nimport { useAnalyticsContext } from '../providers/analytics_provider';\nimport { useAnalyticsStore } from '../stores/analytics.store';\n\n/**\n * Hook to automatically track page views when component mounts or dependencies change\n */\nexport const usePageTracking = (pageName?: string, dependencies: unknown[] = [], customUserInfo?: UserInfo) => {\n  const { actions, isInitialized, isEnabled } = useAnalyticsContext();\n\n  useEffect(() => {\n    if (isInitialized && isEnabled) {\n      actions.trackScreenView({\n        name: pageName || (typeof window !== 'undefined' ? window.location.pathname : '/'),\n        userInfo: customUserInfo,\n      });\n    }\n  }, [isInitialized, isEnabled, pageName, customUserInfo, ...dependencies]);\n};\n\n/**\n * Hook that returns analytics tracking functions\n */\nexport const useAnalytics = () => {\n  const { actions, isInitialized, isEnabled } = useAnalyticsContext();\n\n  return {\n    isInitialized,\n    isEnabled,\n    trackEvent: actions.trackEvent,\n    trackScreenView: actions.trackScreenView,\n    trackAction: actions.trackAction,\n    trackAppStart: actions.trackAppStart,\n    trackSiteSearch: actions.trackSiteSearch,\n    trackLink: actions.trackLink,\n    trackDownload: actions.trackDownload,\n    setUserId: actions.setUserId,\n    setCustomDimension: actions.setCustomDimension,\n    setEnabled: actions.setEnabled,\n    setPresetUserInfo: actions.setPresetUserInfo,\n    clearPresetUserInfo: actions.clearPresetUserInfo,\n  };\n};\n\n/**\n * Hook that provides access to the Zustand analytics store\n */\nexport const useAnalyticsState = () => {\n  return useAnalyticsStore();\n};\n\n/**\n * Utility function to track common events with immediate execution\n */\nexport const trackCommonEvents = {\n  /**\n   * Track register success event\n   * Screen: register, Category: register, Event: register_success\n   */\n  registerSuccess: async (userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category: 'register',\n        name: 'register_success',\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track login success event\n   * Screen: login, Category: login, Event: login_success\n   */\n  loginSuccess: async (userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category: 'login',\n        name: 'login_success',\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track view campaign event\n   * Screen: campaign, Category: campaign_list, Event: view_campaign\n   */\n  viewCampaign: async (userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category: 'campaign_list',\n        name: 'view_campaign',\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track redeem success event\n   * Screen: campaign, Category: campaign_redeem, Event: redeem_success\n   */\n  redeemSuccess: async (campaignId: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category: 'campaign_redeem',\n        name: 'redeem_success',\n        // Use campaign_id as label - can be passed in userInfo or as a separate dimension\n        userInfo: {\n          ...userInfo,\n          dimension3: campaignId, // Store campaign_id in dimension3\n        },\n      });\n    }\n  },\n\n  /**\n   * Track unconsent success event\n   * Screen: marketing, Category: marketing_unconsent, Event: unconsent_success\n   */\n  unconsentSuccess: async (userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category: 'marketing_unconsent',\n        name: 'unconsent_success',\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track button click event\n   */\n  buttonClick: async (buttonName: string, category: string = 'UI', userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category,\n        name: buttonName,\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track form submit event\n   */\n  formSubmit: async (formName: string, success: boolean = true, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'submit',\n        category: 'Form',\n        name: formName,\n        userInfo: {\n          ...userInfo,\n          dimension1: success ? 'success' : 'failure',\n        },\n      });\n    }\n  },\n\n  /**\n   * Track search event\n   */\n  search: async (keyword: string, resultCount?: number, category: string = 'Search', userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackSiteSearch({\n        keyword,\n        category,\n        count: resultCount,\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track purchase event\n   */\n  purchase: async (amount: number, currency: string = 'THB', productName?: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'purchase',\n        category: 'Commerce',\n        name: productName || 'Purchase',\n        value: amount,\n        userInfo: {\n          ...userInfo,\n          dimension1: currency,\n        },\n      });\n    }\n  },\n\n  /**\n   * Track user registration event\n   */\n  userRegistration: async (method: string = 'email', userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'register',\n        category: 'User',\n        name: `registration_${method}`,\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track user login event\n   */\n  userLogin: async (method: string = 'email', userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'login',\n        category: 'User',\n        name: `login_${method}`,\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track error event\n   */\n  error: async (errorType: string, errorMessage?: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'error',\n        category: 'Error',\n        name: errorType,\n        userInfo: {\n          ...userInfo,\n          dimension2: errorMessage,\n        },\n      });\n    }\n  },\n\n  /**\n   * Track custom event\n   */\n  custom: async (name: string, category: string, label?: string, value?: number, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'custom',\n        category,\n        name,\n        value,\n        userInfo: {\n          ...userInfo,\n          dimension1: label,\n        },\n      });\n    }\n  },\n};\n\n/**\n * Higher-order component to automatically track page views\n */\nexport const withPageTracking = <P extends object>(\n  Component: React.ComponentType<P>,\n  pageName?: string,\n  customUserInfo?: UserInfo\n): React.ComponentType<P> => {\n  const WrappedComponent = (props: P) => {\n    usePageTracking(pageName, [], customUserInfo);\n    return React.createElement(Component, props);\n  };\n\n  // Set display name for debugging\n  WrappedComponent.displayName = `withPageTracking(${Component.displayName || Component.name || 'Component'})`;\n\n  return WrappedComponent;\n};\n\n/**\n * Initialize analytics from anywhere in the app (useful for Zustand-only usage)\n */\nexport const initializeAnalytics = (config: {\n  siteId: number;\n  urlBase: string;\n  trackerUrl?: string;\n  userId?: string;\n  disabled?: boolean;\n  log?: boolean;\n}) => {\n  const store = useAnalyticsStore.getState();\n  store.initialize(config);\n};\n\n/**\n * Global analytics instance for direct usage without React hooks\n */\nexport const analytics = {\n  /**\n   * Initialize analytics (can be called outside React components)\n   */\n  init: (config: {\n    siteId: number;\n    urlBase: string;\n    trackerUrl?: string;\n    userId?: string;\n    disabled?: boolean;\n    log?: boolean;\n  }) => {\n    const store = useAnalyticsStore.getState();\n    store.initialize(config);\n  },\n\n  /**\n   * Track event (can be called outside React components)\n   */\n  trackEvent: async (params: {\n    action: string;\n    name?: string;\n    category?: string;\n    value?: number;\n    campaign?: string;\n    userInfo?: UserInfo;\n  }) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent(params);\n    }\n  },\n\n  /**\n   * Track screen view (can be called outside React components)\n   */\n  trackScreenView: async (name: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackScreenView({ name, userInfo });\n    }\n  },\n\n  /**\n   * Track app start (can be called outside React components)\n   */\n  trackAppStart: async (userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackAppStart(userInfo);\n    }\n  },\n\n  /**\n   * Track site search (can be called outside React components)\n   */\n  trackSiteSearch: async (keyword: string, category?: string, count?: number, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackSiteSearch({ keyword, category, count, userInfo });\n    }\n  },\n\n  /**\n   * Track link click (can be called outside React components)\n   */\n  trackLink: async (link: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackLink({ link, userInfo });\n    }\n  },\n\n  /**\n   * Track download (can be called outside React components)\n   */\n  trackDownload: async (download: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackDownload({ download, userInfo });\n    }\n  },\n\n  /**\n   * Set user ID and update preset userInfo (can be called outside React components)\n   */\n  setUserId: (userId: string | null) => {\n    const store = useAnalyticsStore.getState();\n    store.setUserId(userId);\n  },\n\n  /**\n   * Set custom dimension (can be called outside React components)\n   */\n  setCustomDimension: (id: number, value: string) => {\n    const store = useAnalyticsStore.getState();\n    store.setCustomDimension(id, value);\n  },\n\n  /**\n   * Set preset user info (can be called outside React components)\n   */\n  setPresetUserInfo: (userInfo: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    store.setPresetUserInfo(userInfo);\n  },\n\n  /**\n   * Clear preset user info (can be called outside React components)\n   */\n  clearPresetUserInfo: () => {\n    const store = useAnalyticsStore.getState();\n    store.clearPresetUserInfo();\n  },\n\n  /**\n   * Enable/disable analytics (can be called outside React components)\n   */\n  setEnabled: (enabled: boolean) => {\n    const store = useAnalyticsStore.getState();\n    store.setEnabled(enabled);\n  },\n\n  /**\n   * Reset analytics (can be called outside React components)\n   */\n  reset: () => {\n    const store = useAnalyticsStore.getState();\n    store.reset();\n  },\n};\n","import type { UserInfo } from 'matomo-tracker-react-native';\nimport MatomoTracker, { MatomoProvider, useMatomo } from 'matomo-tracker-react-native';\nimport React, { createContext, useContext, useState } from 'react';\n\nexport type AnalyticsEventParams = {\n  action: string;\n  name?: string;\n  category?: string;\n  value?: number;\n  campaign?: string;\n  userInfo?: UserInfo;\n};\n\nexport type AnalyticsPageViewParams = {\n  name: string;\n  url?: string;\n  userInfo?: UserInfo;\n};\n\nexport type AnalyticsContextType = {\n  isInitialized: boolean;\n  isEnabled: boolean;\n  userId?: string;\n  presetUserInfo?: UserInfo;\n  actions: {\n    setEnabled: (enabled: boolean) => void;\n    setPresetUserInfo: (userInfo: UserInfo) => void;\n    clearPresetUserInfo: () => void;\n    trackAppStart: (userInfo?: UserInfo) => Promise<void>;\n    trackEvent: (params: AnalyticsEventParams) => Promise<void>;\n    trackScreenView: (params: AnalyticsPageViewParams) => Promise<void>;\n    trackAction: (params: AnalyticsPageViewParams) => Promise<void>;\n    trackSiteSearch: (params: {\n      keyword: string;\n      category?: string;\n      count?: number;\n      userInfo?: UserInfo;\n    }) => Promise<void>;\n    trackLink: (params: { link: string; userInfo?: UserInfo }) => Promise<void>;\n    trackDownload: (params: { download: string; userInfo?: UserInfo }) => Promise<void>;\n    setUserId: (userId: string | null) => void;\n    setCustomDimension: (id: number, value: string) => void;\n    reset: () => void;\n  };\n};\n\nexport const AnalyticsContext = createContext<AnalyticsContextType>({\n  isInitialized: false,\n  isEnabled: true,\n  actions: {\n    setEnabled: () => {},\n    setPresetUserInfo: () => {},\n    clearPresetUserInfo: () => {},\n    trackAppStart: async () => {},\n    trackEvent: async () => {},\n    trackScreenView: async () => {},\n    trackAction: async () => {},\n    trackSiteSearch: async () => {},\n    trackLink: async () => {},\n    trackDownload: async () => {},\n    setUserId: () => {},\n    setCustomDimension: () => {},\n    reset: () => {},\n  },\n});\n\nexport function useAnalyticsContext() {\n  return useContext(AnalyticsContext);\n}\n\n// Inner component that has access to Matomo\nfunction AnalyticsInner({\n  children,\n  userId,\n  enableLogging,\n}: {\n  children: React.ReactNode;\n  userId?: string;\n  enableLogging?: boolean;\n}) {\n  const { trackEvent, trackScreenView, trackAppStart, trackAction, trackSiteSearch, trackLink, trackDownload } =\n    useMatomo();\n  const [isEnabled, setIsEnabled] = useState(true);\n  const [userIdState, setUserIdState] = useState<string | undefined>(userId);\n  const [presetUserInfo, setPresetUserInfoState] = useState<UserInfo | undefined>(undefined);\n  const [log] = useState(enableLogging || false);\n\n  const handleSetEnabled = (enabled: boolean) => {\n    setIsEnabled(enabled);\n  };\n\n  const handleSetPresetUserInfo = (userInfo: UserInfo) => {\n    setPresetUserInfoState(userInfo);\n  };\n\n  const handleClearPresetUserInfo = () => {\n    setPresetUserInfoState(undefined);\n  };\n\n  const handleTrackAppStart = async (userInfo?: UserInfo) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track App Start skipped - not initialized or disabled');\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...userInfo };\n\n      await trackAppStart({\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: App start tracked successfully', { userInfo: mergedUserInfo });\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track app start', error);\n    }\n  };\n\n  const handleTrackEvent = async (params: AnalyticsEventParams) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Event skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackEvent({\n        category: params.category || 'User Action',\n        action: params.action,\n        name: params.name,\n        value: params.value,\n        campaign: params.campaign,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Event tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track event', error, params);\n    }\n  };\n\n  const handleTrackScreenView = async (params: AnalyticsPageViewParams) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Screen View skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackScreenView({\n        name: params.name,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Screen view tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track screen view', error, params);\n    }\n  };\n\n  const handleTrackAction = async (params: AnalyticsPageViewParams) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Action skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackAction({\n        name: params.name,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Action tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track action', error, params);\n    }\n  };\n\n  const handleTrackSiteSearch = async (params: {\n    keyword: string;\n    category?: string;\n    count?: number;\n    userInfo?: UserInfo;\n  }) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Site Search skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackSiteSearch({\n        keyword: params.keyword,\n        category: params.category,\n        count: params.count,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Site search tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track site search', error, params);\n    }\n  };\n\n  const handleTrackLink = async (params: { link: string; userInfo?: UserInfo }) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Link skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackLink({\n        link: params.link,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Link tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track link', error, params);\n    }\n  };\n\n  const handleTrackDownload = async (params: { download: string; userInfo?: UserInfo }) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Download skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackDownload({\n        download: params.download,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Download tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track download', error, params);\n    }\n  };\n\n  const handleSetUserId = (userId: string | null) => {\n    setUserIdState(userId || undefined);\n\n    // Update preset userInfo with the new userId\n    if (userId) {\n      setPresetUserInfoState((prev) => ({\n        ...prev,\n        uid: userId,\n      }));\n    } else {\n      // Remove uid from preset userInfo if userId is null\n      setPresetUserInfoState((prev) => {\n        if (prev?.uid) {\n          const updatedUserInfo = { ...prev };\n          delete updatedUserInfo.uid;\n          return Object.keys(updatedUserInfo).length > 0 ? updatedUserInfo : undefined;\n        }\n        return prev;\n      });\n    }\n\n    if (log) {\n      console.debug('Analytics: User ID updated in preset userInfo', userId);\n    }\n  };\n\n  const handleSetCustomDimension = (id: number, value: string) => {\n    if (!presetUserInfo) {\n      setPresetUserInfoState({ [`dimension${id}`]: value });\n    } else {\n      setPresetUserInfoState({\n        ...presetUserInfo,\n        [`dimension${id}`]: value,\n      });\n    }\n\n    if (log) {\n      console.debug('Analytics: Custom dimension set in preset userInfo', { id, value });\n    }\n  };\n\n  const reset = () => {\n    setUserIdState(undefined);\n    setPresetUserInfoState(undefined);\n    setIsEnabled(true);\n\n    console.debug('Analytics: Provider reset successfully');\n  };\n\n  const contextValue: AnalyticsContextType = {\n    isInitialized: true, // Always true since initialization is handled by MatomoProvider\n    isEnabled,\n    userId: userIdState,\n    presetUserInfo,\n    actions: {\n      setEnabled: handleSetEnabled,\n      setPresetUserInfo: handleSetPresetUserInfo,\n      clearPresetUserInfo: handleClearPresetUserInfo,\n      trackAppStart: handleTrackAppStart,\n      trackEvent: handleTrackEvent,\n      trackScreenView: handleTrackScreenView,\n      trackAction: handleTrackAction,\n      trackSiteSearch: handleTrackSiteSearch,\n      trackLink: handleTrackLink,\n      trackDownload: handleTrackDownload,\n      setUserId: handleSetUserId,\n      setCustomDimension: handleSetCustomDimension,\n      reset,\n    },\n  };\n\n  return <AnalyticsContext.Provider value={contextValue}>{children}</AnalyticsContext.Provider>;\n}\n\nexport type AnalyticsProviderProps = {\n  children: React.ReactNode;\n  disabled?: boolean;\n  instance?: MatomoTracker;\n  userId?: string;\n  enableLogging?: boolean;\n};\n\nexport function AnalyticsProvider({\n  children,\n  disabled = false,\n  instance,\n  userId,\n  enableLogging = false,\n}: AnalyticsProviderProps) {\n  // If analytics is disabled, provide a no-op context\n  if (disabled) {\n    const noOpContextValue: AnalyticsContextType = {\n      isInitialized: false,\n      isEnabled: false,\n      actions: {\n        setEnabled: () => {},\n        setPresetUserInfo: () => {},\n        clearPresetUserInfo: () => {},\n        trackAppStart: async () => {},\n        trackEvent: async () => {},\n        trackScreenView: async () => {},\n        trackAction: async () => {},\n        trackSiteSearch: async () => {},\n        trackLink: async () => {},\n        trackDownload: async () => {},\n        setUserId: () => {},\n        setCustomDimension: () => {},\n        reset: () => {},\n      },\n    };\n\n    return <AnalyticsContext.Provider value={noOpContextValue}>{children}</AnalyticsContext.Provider>;\n  }\n\n  // Use provided instance or create a default placeholder\n  const matomoInstance =\n    instance ||\n    new MatomoTracker({\n      urlBase: 'https://placeholder.com',\n      siteId: 1,\n      disabled: true, // Disabled until properly initialized\n    });\n\n  return (\n    <MatomoProvider instance={matomoInstance}>\n      <AnalyticsInner userId={userId} enableLogging={enableLogging}>\n        {children}\n      </AnalyticsInner>\n    </MatomoProvider>\n  );\n}\n","function isValidEmail(email: string): boolean {\n  return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n}\n\nexport { isValidEmail };\n","export const campaignType = {\n  draw: 0,\n  free: 1,\n  deal: 2,\n  buy: 3,\n  bid: 4,\n  ads: 5,\n  install: 6,\n  booking: 7,\n  interface: 8,\n  event: 9,\n  media: 10,\n  ewalletTopUp: 11,\n  ewalletRedeem: 12,\n  ewalletTransfer: 13,\n  ewalletBanking: 14,\n  autofeed: 15,\n  news: 16,\n  reservation: 17,\n  ewalletBuy: 18,\n  pointRedemption: 19,\n  donate: 20,\n  pointFree: 21,\n  voucher: 22,\n  encrypt: 23,\n  encryptRedeem: 24,\n  giftCard: 25,\n  verifyCode: 26,\n  subscription: 27,\n  fillCode: 28,\n  subscriptionFood: 29,\n  buyEVoucher: 30,\n  uploadReceipt: 31,\n  payWithPoints: 32,\n  marketPlacePrivilege: 33,\n  topup2C2P: 34,\n  directTopup2C2P: 35,\n};\n\nexport const campaignPointType = {\n  use: 'use',\n  get: 'get',\n};\n\nexport const campaignInterfaceType = {\n  web: 'web',\n  survey: 'survey',\n  surveyApprove: 'surveyapprove',\n};\n","import { Purchase } from '@bzbs/react-api-client';\nimport { campaignType } from '../constant';\n\nexport type PurchaseItemInfo = {\n  title: string;\n  pointPerUnit: number;\n  expireDate: Date;\n  expiredIn?: number;\n  image: string;\n  showTracking: boolean;\n  showCode: boolean;\n  expired: boolean;\n  status: PurchaseItemStatus;\n};\n\nexport type PurchaseItemStatus =\n  | 'redeemed'\n  | 'used'\n  | 'expired'\n  | 'draw_win'\n  | 'draw_lose'\n  | 'draw_waiting'\n  | 'prepared_for_shipping'\n  | 'shipped';\n\nexport function getPurchaseItemStatus(item: Purchase): PurchaseItemInfo {\n  const title = item.Name ?? '';\n  const pointPerUnit = item.PointPerUnit ?? 0;\n  const image = item.FullImageUrl ?? '';\n  const showTracking = item.Delivered ?? false;\n  const expireDate = new Date((item.VoucherExpireDate ?? 0) * 1000);\n\n  let showCode = false;\n  let status: PurchaseItemStatus = 'used';\n\n  if (item.ArrangedDate) {\n    return { title, pointPerUnit, expireDate, image, showTracking, showCode: false, expired: false, status: 'used' };\n  }\n\n  if (item.IsExpired || (item.ExpireIn && item.ExpireIn <= 0)) {\n    return { title, pointPerUnit, expireDate, image, showTracking, showCode: false, expired: true, status: 'expired' };\n  }\n\n  if (item.VoucherExpireDate && item.VoucherExpireDate <= Date.now() / 1000) {\n    return { title, pointPerUnit, expireDate, image, showTracking, showCode: false, expired: true, status: 'expired' };\n  }\n\n  switch (item.Type) {\n    case campaignType.free:\n    case campaignType.deal:\n      status = 'redeemed';\n      showCode = true;\n      break;\n    case campaignType.draw:\n      if (item.HasWinner) {\n        status = item.IsWinner ? 'draw_win' : 'draw_lose';\n      } else {\n        status = 'draw_waiting';\n      }\n      break;\n  }\n\n  if (item.Delivered) {\n    showCode = false;\n    status = item.IsShipped ? 'shipped' : 'prepared_for_shipping';\n  }\n\n  return {\n    title,\n    pointPerUnit,\n    expireDate,\n    image,\n    showTracking,\n    showCode,\n    expired: false,\n    status,\n  };\n}\n","import {\n  Badge,\n  Buzzebees,\n  CartCountResponse,\n  ConfirmOtpResponse,\n  ErrorResponse,\n  ExpiringPoints,\n  ProfileResponse,\n  ServiceResponse,\n  StatusResponse,\n  Trace,\n  UpdatedPoints,\n} from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { eventEmitter } from '../service';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\n\nexport type UpdateProfileParams = {\n  profileImage?: File | { uri: string; name: string; type: string };\n  firstName?: string;\n  lastName?: string;\n  contactNumber?: string;\n  email?: string;\n  notification?: boolean;\n  locale?: number;\n  title?: string;\n  gender?: string;\n  birthDate?: number;\n  address?: string;\n  subdistrictCode?: number;\n  subdistrictName?: string;\n  districtCode?: number;\n  districtName?: string;\n  provinceCode?: number;\n  provinceName?: string;\n  countryCode?: string;\n  countryName?: string;\n  zipCode?: string;\n  idCard?: string;\n  passport?: string;\n  maritalStatus?: string;\n  village?: string;\n  building?: string;\n  number?: string;\n  moo?: string;\n  room?: string;\n  floor?: string;\n  soi?: string;\n  city?: string;\n  road?: string;\n  landmark?: string;\n  alternateContactNumber?: string;\n  homeContactNumber?: string;\n  nationality?: string;\n  religion?: string;\n  location?: string;\n  latitude?: number;\n  longitude?: number;\n  income?: string;\n  interests?: string;\n  region?: string;\n  phonepurchase?: number;\n  highestEducation?: string;\n  occupation?: string;\n  remark?: string;\n  displayName?: string;\n  options?: { [key: string]: any };\n};\n\nexport type UserState = {\n  user: ProfileResponse | null;\n  points: number;\n  recentPoints: number;\n  expiringPoints: UpdatedPoints[];\n  recentBadge: Badge | null;\n  recentTrace: Trace | null;\n  cartCount: number;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  badgeList: Badge[];\n  traceList: Trace[];\n};\n\nexport type UserActions = {\n  fetchUser: () => Promise<ServiceResponse<ProfileResponse>>;\n  fetchPoint: () => Promise<ServiceResponse<UpdatedPoints>>;\n  fetchExpiringPoints: () => Promise<ServiceResponse<ExpiringPoints>>;\n  fetchCartCount: () => Promise<ServiceResponse<CartCountResponse>>;\n  editUser: (data: UpdateProfileParams) => Promise<ServiceResponse<ProfileResponse>>;\n  changePassword: (oldPassword: string, newPassword: string) => Promise<ServiceResponse<StatusResponse>>;\n  changeContactNumber: (\n    contactNumber: string,\n    otp: string,\n    refCode: string\n  ) => Promise<ServiceResponse<ConfirmOtpResponse>>;\n  changeAvatar: (avatar: File) => Promise<ServiceResponse<ProfileResponse>>;\n  consumeRecentPoints: () => void;\n  consumeRecentBadge: () => void;\n  consumeRecentTrace: () => void;\n  deleteUser: () => Promise<ServiceResponse<any>>;\n  setError: (error: ErrorResponse | null) => void;\n  clear: () => void;\n  setupEventListeners: () => void;\n  cleanupEventListeners: () => void;\n};\n\nexport type UserStore = UserState & UserActions;\n\nexport const useUserStore = create<UserStore>((set, get) => {\n  return {\n    user: null,\n    points: 0,\n    recentPoints: 0,\n    expiringPoints: [],\n    recentBadge: null,\n    recentTrace: null,\n    cartCount: 0,\n    isLoading: false,\n    error: null,\n    badgeList: [],\n    traceList: [],\n\n    fetchUser: async () => {\n      set({ isLoading: true });\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      if (!bzbsService) {\n        set({ isLoading: false, error: { type: 'client-error', message: 'Service not configured' } as ErrorResponse });\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<ProfileResponse>;\n      }\n      const response = await bzbsService.profileApi.profile();\n      set({ isLoading: false });\n      if (response.type === 'success') {\n        set({ user: response.model, error: null });\n      } else {\n        set({ error: response });\n      }\n      return response;\n    },\n\n    fetchPoint: async () => {\n      set({ isLoading: true });\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      if (!bzbsService) {\n        set({ isLoading: false, error: { type: 'client-error', message: 'Service not configured' } as ErrorResponse });\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<UpdatedPoints>;\n      }\n      const response = await bzbsService.profileApi.points();\n      set({ isLoading: false });\n      if (response.type === 'success') {\n        set({ points: response.model.points ?? 0, error: null });\n      } else {\n        set({ error: response });\n      }\n      return response;\n    },\n\n    fetchExpiringPoints: async () => {\n      set({ isLoading: true });\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      if (!bzbsService) {\n        set({ isLoading: false, error: { type: 'client-error', message: 'Service not configured' } as ErrorResponse });\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<ExpiringPoints>;\n      }\n      const response = await bzbsService.profileApi.expiringPoints();\n      set({ isLoading: false });\n      if (response.type === 'success') {\n        set({ expiringPoints: response.model.expiring_points ?? [], error: null });\n      } else {\n        set({ error: response });\n      }\n      return response;\n    },\n\n    fetchCartCount: async () => {\n      set({ isLoading: true });\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      if (!bzbsService) {\n        set({ isLoading: false, error: { type: 'client-error', message: 'Service not configured' } as ErrorResponse });\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<CartCountResponse>;\n      }\n      const response = await bzbsService.cartApi.cartCount();\n      set({ isLoading: false });\n      if (response.type === 'success') {\n        set({ cartCount: response.model.cart_count ?? 0, error: null });\n      } else {\n        set({ error: response, cartCount: 0 });\n      }\n      return response;\n    },\n\n    editUser: async (data: UpdateProfileParams) => {\n      set({ isLoading: true });\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      if (!bzbsService) {\n        set({ isLoading: false, error: { type: 'client-error', message: 'Service not configured' } as ErrorResponse });\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<ProfileResponse>;\n      }\n      const response = await bzbsService.profileApi.updateProfile(data);\n      set({ isLoading: false });\n      if (response.type === 'success') {\n        set({ user: response.model, error: null });\n\n        const { tokenFunctions, tokenType } = useBuzzebeesAppStore.getState();\n        const token = tokenType === 'jwt' ? response.model.Jwt : response.model.Token;\n        if (token && tokenFunctions) {\n          tokenFunctions.setToken(token);\n        }\n      } else {\n        set({ error: response });\n      }\n      return response;\n    },\n\n    changePassword: async (oldPassword: string, newPassword: string) => {\n      set({ isLoading: true });\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      if (!bzbsService) {\n        set({ isLoading: false, error: { type: 'client-error', message: 'Service not configured' } as ErrorResponse });\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<StatusResponse>;\n      }\n      const response = await bzbsService.profileApi.changePassword({ current: oldPassword, change: newPassword });\n      set({ isLoading: false });\n      if (response.type === 'success') {\n        set({ error: null });\n      } else {\n        set({ error: response });\n      }\n      return response;\n    },\n\n    changeContactNumber: async (contactNumber: string, otp: string, refCode: string) => {\n      set({ isLoading: true });\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      if (!bzbsService) {\n        set({ isLoading: false, error: { type: 'client-error', message: 'Service not configured' } as ErrorResponse });\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<ConfirmOtpResponse>;\n      }\n      const response = await bzbsService.profileApi.changeContactNumber({ contactNumber, otp, refCode });\n      set({ isLoading: false });\n      if (response.type === 'success') {\n        set({ error: null });\n      } else {\n        set({ error: response });\n      }\n      return response;\n    },\n\n    changeAvatar: async (avatar: File) => {\n      set({ isLoading: true });\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      if (!bzbsService) {\n        set({ isLoading: false, error: { type: 'client-error', message: 'Service not configured' } as ErrorResponse });\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<ProfileResponse>;\n      }\n      const response = await bzbsService.profileApi.updateProfile({ profileImage: avatar });\n      set({ isLoading: false });\n      if (response.type === 'success') {\n        set({ user: response.model, error: null });\n      } else {\n        set({ error: response });\n      }\n      return response;\n    },\n\n    consumeRecentPoints: () => {\n      set({ recentPoints: 0 });\n    },\n\n    consumeRecentBadge: () => {\n      const { badgeList } = get();\n      set({ recentBadge: null });\n      if (badgeList.length > 0) {\n        const next = badgeList[0];\n        const remainingBadges = badgeList.slice(1);\n        set({ recentBadge: next, badgeList: remainingBadges });\n      }\n    },\n\n    consumeRecentTrace: () => {\n      const { traceList } = get();\n      set({ recentTrace: null });\n      if (traceList.length > 0) {\n        const next = traceList[0];\n        const remainingTraces = traceList.slice(1);\n        set({ recentTrace: next, traceList: remainingTraces });\n      }\n    },\n\n    deleteUser: async () => {\n      set({ isLoading: true });\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      if (!bzbsService) {\n        set({ isLoading: false, error: { type: 'client-error', message: 'Service not configured' } as ErrorResponse });\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<any>;\n      }\n      const response = await bzbsService.profileApi.deactivate();\n      set({ isLoading: false });\n      if (response.type === 'success') {\n        get().clear();\n      } else {\n        set({ error: response });\n      }\n      return response;\n    },\n\n    setError: (error: ErrorResponse | null) => {\n      set({ error });\n    },\n\n    clear: () => {\n      set({\n        user: null,\n        points: 0,\n        recentPoints: 0,\n        expiringPoints: [],\n        recentBadge: null,\n        recentTrace: null,\n        cartCount: 0,\n        isLoading: false,\n        error: null,\n        badgeList: [],\n        traceList: [],\n      });\n    },\n\n    setupEventListeners: () => {\n      eventEmitter.on('get_points', (buzzebees: Buzzebees) => {\n        console.log('get_points', buzzebees);\n        const points = buzzebees.points;\n        if (points) {\n          set({ recentPoints: points });\n        }\n\n        const traces = buzzebees.traces;\n        if (traces) {\n          if (traces.length > 0) {\n            const first = traces[0];\n            const remainingTraces = traces.slice(1);\n            set({ recentTrace: first, traceList: remainingTraces });\n          }\n        }\n      });\n\n      eventEmitter.on('get_badges', (badges: Badge[]) => {\n        if (badges.length > 0) {\n          const first = badges[0];\n          const remainingBadges = badges.slice(1);\n          set({ recentBadge: first, badgeList: remainingBadges });\n        }\n      });\n    },\n\n    cleanupEventListeners: () => {\n      console.log('UserStore cleanup');\n      eventEmitter.clearListeners(['get_points', 'get_badges']);\n    },\n  };\n});\n","import { AxiosInstance } from 'axios';\nimport * as blake from 'blakejs';\nimport Emittery from 'emittery';\nimport { v7 as uuidv7 } from 'uuid';\nimport { TokenFunctions } from '../providers';\n\nconst eventEmitter = new Emittery();\n\nfunction defaultCorelationIdGenerator(): string {\n  return uuidv7();\n}\n\nfunction isJWT(token: string): boolean {\n  return typeof token === 'string' && token.split('.').length === 3;\n}\n\nfunction addDefaultHeaderInterceptor(\n  axiosInstance: AxiosInstance,\n  appId: string,\n  subscriptionKey: string,\n  tokenFunctions: TokenFunctions,\n  apiVersion: string,\n  corelationIdGenerator: () => string = defaultCorelationIdGenerator\n) {\n  axiosInstance.interceptors.request.use(\n    async (config) => {\n      config.headers.set('App-Id', appId);\n\n      if (subscriptionKey) {\n        config.headers.set('Ocp-Apim-Subscription-Key', subscriptionKey);\n      }\n\n      if (apiVersion) {\n        config.headers.set('api-version', apiVersion);\n      }\n\n      config.headers.set('X-Corelation-Id', corelationIdGenerator());\n      const token = await tokenFunctions.getToken();\n\n      if (token) {\n        if (isJWT(token)) {\n          config.headers.set('Authorization', `Bearer ${token}`);\n        } else {\n          config.headers.set('Authorization', `token ${token}`);\n        }\n      }\n\n      return config;\n    },\n    (error) => {\n      return Promise.reject(error);\n    }\n  );\n  axiosInstance.interceptors.response.use(\n    (response) => {\n      const responseData = response.data;\n      const buzzebeesObj = responseData.buzzebees;\n      if (buzzebeesObj) {\n        const points = buzzebeesObj.points;\n        const badges = buzzebeesObj.badges;\n\n        if (typeof points === 'number') {\n          eventEmitter.emit('get_points', buzzebeesObj);\n        }\n\n        if (badges) {\n          eventEmitter.emit('get_badges', badges);\n        }\n      }\n\n      if (responseData.error) {\n        const id = responseData.error.id;\n        const code = responseData.error.code;\n\n        if (code === 409 && (id === 1905 || id === 2076)) {\n          eventEmitter.emit('session_expired', responseData.error);\n        }\n      }\n\n      return response;\n    },\n    (error) => {\n      return Promise.reject(error);\n    }\n  );\n}\n\nfunction generateShortLivedId(): string {\n  return Math.random().toString(36).substring(2, 15);\n}\n\nfunction avatarUrl(baseUrl: string, appId: string, userId: string, token: string | null) {\n  const url =\n    `${baseUrl}/profile/${userId}/picture?timestamp=${Date.now()}&type=large` +\n    `${token === null ? '' : `&token=${token}&device_app_id=${appId}`}`;\n  console.log(url);\n  return url;\n}\n\nfunction largeImage(url: string) {\n  if (!url) return '';\n  const result = url.replace('?', '-large?');\n  return result;\n}\n\nasync function fetchImage(axiosClient: AxiosInstance, imageUrl: string) {\n  try {\n    const response = await axiosClient.get(imageUrl, { responseType: 'blob' });\n    return response.data;\n  } catch (error) {\n    console.error('Error fetching image:', error);\n  }\n}\n\nfunction createInterfaceWebsiteUrl(\n  url: string,\n  token?: string,\n  returnUrl: string = '',\n  params?: { [key: string]: any }\n): string {\n  if (token) {\n    params = {\n      token: createInterfaceToken(token),\n      return_url: returnUrl,\n      ...params,\n    };\n  }\n  const searchParams = new URLSearchParams(params).toString();\n  const result = url.includes('?') ? `${url}&${searchParams}` : `${url}?${searchParams}`;\n  return result;\n}\n\nfunction createInterfaceToken(token: string): string {\n  if (token.length <= 5) {\n    return token;\n  }\n\n  const firstChar = token.substring(0, 1);\n  const last5Chars = token.substring(token.length - 5);\n  const remainingChars = token.substring(1, token.length - 5);\n\n  return firstChar === '.' ? `${last5Chars}${remainingChars}` : token;\n}\n\nfunction createCartUrl(cartUrl: string, appName: string, accessKey: string, params?: { [key: string]: any }) {\n  const newUrl = cartUrl.endsWith('/') ? `${cartUrl}landing/${appName}` : `${cartUrl}/landing/${appName}`;\n  const newParams = {\n    access_key: accessKey,\n    appname_config: appName,\n    ...params,\n  };\n  const searchParams = new URLSearchParams(newParams).toString();\n  return searchParams ? `${newUrl}?${searchParams}` : newUrl;\n}\n\nfunction generateBlake2bSignatureHex(data: string, key: string, encoder: TextEncoder): string {\n  const keyBytes = encoder.encode(key);\n  return blake.blake2bHex(data, keyBytes, 32);\n}\n\nfunction getOtpSignatureHeaders({\n  appId,\n  contactNumber,\n  channel,\n  encoder,\n  now = new Date(),\n}: {\n  appId: string;\n  contactNumber: string;\n  channel: string;\n  encoder: TextEncoder;\n  now?: Date;\n}) {\n  const dateTime = now.toISOString().split('.')[0] + 'Z'; // UTC, no ms\n  const timeStamp = Math.floor(now.getTime() / 1000);\n  const data = `${appId}|${contactNumber}|${channel}|${dateTime}`;\n  const signature = generateBlake2bSignatureHex(data, appId, encoder);\n  return {\n    'OTP-Signature': signature,\n    Timestamp: timeStamp,\n  };\n}\n\nfunction addBlake2OtpSignatureInterceptor(\n  axiosInstance: AxiosInstance,\n  paths: string[],\n  encoder: TextEncoder,\n  getCurrentDateTime: () => Date = () => new Date()\n) {\n  axiosInstance.interceptors.request.use((config) => {\n    // Only apply to matching paths\n    if (paths.some((path) => config.url && config.url.includes(path))) {\n      // Try to get appId, contactNumber, channel from query or data\n      const getParam = (key: string) => {\n        // Prefer query params\n        if (config.params && config.params[key]) return config.params[key];\n        // Fallback to data (for POST/PUT)\n        if (config.data && typeof config.data === 'object' && config.data[key]) return config.data[key];\n        return undefined;\n      };\n      const appId = getParam('app_id');\n      const contactNumber = getParam('contact_number');\n      const channel = getParam('channel');\n      if (appId && contactNumber && channel) {\n        const now = getCurrentDateTime();\n        const headers = getOtpSignatureHeaders({ appId, contactNumber, channel, now, encoder });\n        config.headers.set('OTP-Signature', headers['OTP-Signature']);\n        config.headers.set('Timestamp', headers['Timestamp']);\n      }\n    }\n    return config;\n  });\n}\n\nexport {\n  addBlake2OtpSignatureInterceptor, // Export the new interceptor\n  addDefaultHeaderInterceptor,\n  avatarUrl,\n  createCartUrl,\n  createInterfaceToken,\n  eventEmitter,\n  fetchImage,\n  generateBlake2bSignatureHex, // Export the new function\n  generateShortLivedId,\n  getOtpSignatureHeaders,\n  createInterfaceWebsiteUrl as interfaceWebsite,\n  largeImage,\n};\n","import {\n  Address,\n  CampaignDetail,\n  CartCountResponse,\n  ErrorResponse,\n  RedeemResponse,\n  ServiceResponse,\n  Style,\n  UseCampaignResponse,\n} from '@bzbs/react-api-client';\nimport { create, StoreApi, UseBoundStore } from 'zustand';\nimport { campaignInterfaceType, campaignPointType, campaignType } from '../constant';\nimport { trackCommonEvents } from '../utils';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useUserStore } from './user.store';\nimport { largeImage } from '../service/bzbs_service';\n\nexport type CampaignButtonType =\n  | 'redeem'\n  | 'get_points'\n  | 'add_to_cart'\n  | 'survey'\n  | 'website'\n  | 'draw'\n  | 'donate'\n  | 'delivery';\n\nexport type CampaignDetailButtonState = {\n  enabled: boolean;\n  type: CampaignButtonType;\n  display: boolean;\n};\n\nexport type CampaignState =\n  | 'redeemable'\n  | 'point_not_enough'\n  | 'expired'\n  | 'cool_down'\n  | 'fail_in_condition'\n  | 'sold_out'\n  | 'redeemed';\n\nexport type AfterRedeemDestination = 'delivery' | 'draw' | 'code' | 'get_points';\n\nexport type AfterRedeem = {\n  destination: AfterRedeemDestination;\n  redeemData: RedeemResponse;\n  clear: () => void;\n};\n\nexport type AfterUse = {\n  useData: UseCampaignResponse;\n  clear: () => void;\n};\n\nexport type CampaignDetailState = {\n  data: CampaignDetail | null;\n  style: Style | null;\n  subStyle: Style | null;\n  quantity: number;\n  totalPrice: number;\n  deliveryAddress: Address | null;\n  afterRedeem: AfterRedeem | null;\n  afterUse: AfterUse | null;\n  buttonState: CampaignDetailButtonState;\n  campaignState: CampaignState;\n  interfaceWebsite: string | null;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  campaignId: string | null;\n  pictures: string[];\n  customCaption?: string;\n};\n\nexport type CampaignDetailActions = {\n  setError: (error: ErrorResponse) => void;\n  fetchData: (id: string) => Promise<ServiceResponse<CampaignDetail>>;\n  redeem: (addressOverride?: Address, options?: { [key: string]: unknown }) => Promise<ServiceResponse<RedeemResponse>>;\n  use: () => Promise<ServiceResponse<UseCampaignResponse>>;\n  addToFavorite: () => Promise<ServiceResponse<unknown>>;\n  removeFromFavorite: () => Promise<ServiceResponse<unknown>>;\n  setStyle: (style: Style) => void;\n  setSubStyle: (style: Style) => void;\n  setQuantity: (quantity: number) => void;\n  setDeliveryAddress: (address: Address) => void;\n  addToCart: () => Promise<ServiceResponse<CartCountResponse>>;\n  clear: () => void;\n\n  updateButtonState: () => void;\n  checkCondition: () => void;\n  calculatePrice: () => void;\n};\n\nexport type CampaignDetailStore = CampaignDetailState & CampaignDetailActions;\n\nexport const createCampaignDetailStore = (): UseBoundStore<StoreApi<CampaignDetailStore>> => {\n  return create<CampaignDetailStore>((set, get) => {\n    return {\n      data: null,\n      style: null,\n      subStyle: null,\n      quantity: 1,\n      totalPrice: 0,\n      deliveryAddress: null,\n      afterRedeem: null,\n      afterUse: null,\n      buttonState: { enabled: false, type: 'redeem', display: false },\n      campaignState: 'redeemable',\n      interfaceWebsite: null,\n      isLoading: false,\n      error: null,\n      campaignId: null,\n      pictures: [],\n      customCaption: undefined,\n\n      setError: (error: ErrorResponse) => set({ error }),\n\n      fetchData: async (id: string) => {\n        set({ isLoading: true, campaignId: id });\n        const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n        if (!bzbsService) {\n          const errorResponse = { type: 'client-error', message: 'Service not configured' } as ErrorResponse;\n          set({ error: errorResponse, isLoading: false });\n          return errorResponse as ServiceResponse<CampaignDetail>;\n        }\n\n        try {\n          await useUserStore.getState().fetchUser();\n          await useUserStore.getState().fetchPoint();\n          await useUserStore.getState().fetchCartCount();\n\n          const response = await bzbsService.campaignApi.campaignDetails({ id });\n          if (response.type === 'success') {\n            const pictures = response.model.Pictures?.map((picture) => largeImage(picture.FullImageUrl ?? '')) ?? [];\n            if (pictures.length === 0) {\n              pictures.push(largeImage(response.model.FullImageUrl ?? ''));\n            }\n            set({\n              data: response.model,\n              error: null,\n              isLoading: false,\n              pictures,\n              customCaption: response.model.CustomCaption ?? undefined,\n            });\n            trackCommonEvents.viewCampaign();\n\n            get().calculatePrice();\n            get().updateButtonState();\n            get().checkCondition();\n          } else {\n            set({ error: response, isLoading: false });\n          }\n          return response;\n        } catch (error) {\n          const errorResponse = { type: 'client-error', message: 'Network error' } as ErrorResponse;\n          set({ error: errorResponse, isLoading: false });\n          return errorResponse as ServiceResponse<CampaignDetail>;\n        }\n      },\n\n      redeem: async (addressOverride?: Address, options?: { [key: string]: unknown }) => {\n        const { campaignId, style, subStyle, deliveryAddress, data } = get();\n\n        const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n        if (!bzbsService) {\n          return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<RedeemResponse>;\n        }\n\n        set({ isLoading: true });\n        const response = await bzbsService.campaignApi.redeem({\n          id: subStyle?.campaignId ?? style?.campaignId ?? campaignId!,\n          addressKey: addressOverride?.RowKey ?? deliveryAddress?.RowKey,\n          contactNumber: addressOverride?.ContactNumber ?? deliveryAddress?.ContactNumber,\n          options,\n        });\n        set({ isLoading: false });\n\n        if (response.type === 'success') {\n          let destination: AfterRedeemDestination = 'code';\n\n          if (response.model.PointType === campaignPointType.use) {\n            if (data?.Delivered) {\n              destination = 'delivery';\n            } else if (data?.Type === campaignType.draw) {\n              destination = 'draw';\n            }\n          } else if (response.model.PointType === campaignPointType.get) {\n            destination = 'get_points';\n          }\n\n          set({\n            afterRedeem: {\n              redeemData: response.model,\n              clear: () => set({ afterRedeem: null }),\n              destination,\n            },\n            error: null,\n          });\n          trackCommonEvents.redeemSuccess(campaignId ?? '');\n\n          get().fetchData(campaignId!);\n        } else {\n          set({ error: response });\n        }\n\n        return response;\n      },\n\n      use: async () => {\n        const { afterRedeem, campaignId } = get();\n\n        if (!afterRedeem?.redeemData || !afterRedeem.redeemData.RedeemKey) {\n          return { type: 'client-error', message: 'No redeem data' } as ServiceResponse<UseCampaignResponse>;\n        }\n\n        const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n        if (!bzbsService) {\n          return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<UseCampaignResponse>;\n        }\n\n        set({ isLoading: true });\n        const response = await bzbsService.historyApi.use({\n          redeemKey: afterRedeem.redeemData.RedeemKey,\n        });\n        set({ isLoading: false });\n\n        if (response.type === 'success') {\n          set({\n            afterUse: {\n              useData: response.model,\n              clear: () => set({ afterRedeem: null, afterUse: null }),\n            },\n            error: null,\n          });\n\n          if (campaignId) {\n            get().fetchData(campaignId);\n          }\n        } else {\n          set({ error: response });\n        }\n\n        return response;\n      },\n\n      addToFavorite: async () => {\n        const { campaignId } = get();\n        const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n        if (!bzbsService || !campaignId) {\n          return { type: 'client-error', message: 'Service not configured or no campaign selected' };\n        }\n\n        set({ isLoading: true });\n        const response = await bzbsService.campaignApi.addToFavorite(campaignId);\n        set({ isLoading: false });\n\n        if (response.type === 'success') {\n          set({ error: null });\n          get().fetchData(campaignId);\n        } else {\n          set({ error: response });\n        }\n\n        return response;\n      },\n\n      removeFromFavorite: async () => {\n        const { campaignId } = get();\n        const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n        if (!bzbsService || !campaignId) {\n          return { type: 'client-error', message: 'Service not configured or no campaign selected' };\n        }\n\n        set({ isLoading: true });\n        const response = await bzbsService.campaignApi.removeFromFavorite({ id: campaignId });\n        set({ isLoading: false });\n\n        if (response.type === 'success') {\n          set({ error: null });\n          get().fetchData(campaignId);\n        } else {\n          set({ error: response });\n        }\n\n        return response;\n      },\n\n      setStyle: (style: Style) => {\n        set({ style });\n        get().calculatePrice();\n        get().updateButtonState();\n      },\n\n      setSubStyle: (style: Style) => {\n        set({ subStyle: style });\n        get().calculatePrice();\n        get().updateButtonState();\n      },\n\n      setQuantity: (quantity: number) => {\n        set({ quantity });\n        get().calculatePrice();\n        get().updateButtonState();\n      },\n\n      setDeliveryAddress: (address: Address) => {\n        set({ deliveryAddress: address });\n      },\n\n      addToCart: async () => {\n        const { campaignId, style, subStyle, data, quantity } = get();\n\n        if (!data) {\n          return { type: 'client-error', message: 'No data' } as ServiceResponse<CartCountResponse>;\n        }\n\n        const type = data.Type ?? 0;\n        if (type !== campaignType.buy) {\n          return {\n            type: 'client-error',\n            message: 'This campaign is not add to cart type',\n          } as ServiceResponse<CartCountResponse>;\n        }\n\n        const id = subStyle?.campaignId ?? style?.campaignId ?? data.ID?.toString();\n        if (!id) {\n          return { type: 'client-error', message: 'No campaign id' } as ServiceResponse<CartCountResponse>;\n        }\n\n        const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n        if (!bzbsService) {\n          return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<CartCountResponse>;\n        }\n\n        const response = await bzbsService.cartApi.addCart({\n          id,\n          mode: 'add',\n          qty: quantity,\n        });\n\n        if (response.type === 'success') {\n          set({ error: null });\n          if (campaignId) {\n            get().fetchData(campaignId);\n          }\n        } else {\n          set({ error: response });\n        }\n\n        return response;\n      },\n\n      clear: () => {\n        set({\n          data: null,\n          style: null,\n          subStyle: null,\n          quantity: 1,\n          totalPrice: 0,\n          deliveryAddress: null,\n          afterRedeem: null,\n          afterUse: null,\n          buttonState: { enabled: false, type: 'redeem', display: false },\n          campaignState: 'redeemable',\n          interfaceWebsite: null,\n          error: null,\n          campaignId: null,\n          isLoading: false,\n        });\n      },\n\n      updateButtonState: () => {\n        const { data, style, subStyle } = get();\n        const userPoints = useUserStore.getState().points;\n\n        if (!data) {\n          set({ buttonState: { enabled: false, type: 'redeem', display: false } });\n          return;\n        }\n\n        const type = data.Type ?? campaignType.free;\n        const pointType = data.PointType ?? campaignPointType.use;\n\n        const pointPerUnit = data.PointPerUnit ?? 0;\n        let pointEnough = true;\n\n        if (pointType === campaignPointType.use && pointPerUnit > userPoints) {\n          pointEnough = false;\n        }\n\n        let buttonType: CampaignButtonType = 'redeem';\n        let display = true;\n        let canAddToCart = true;\n\n        const nonRedeemable = [campaignType.event, campaignType.media, campaignType.news];\n\n        switch (type) {\n          case campaignType.buy:\n            buttonType = 'add_to_cart';\n\n            if (data.SubCampaignStyles?.hasStyle) {\n              if (!style || (style.subitems?.length && !subStyle)) {\n                canAddToCart = false;\n              }\n            }\n            break;\n          case campaignType.interface:\n            switch (data.InterfaceDisplay) {\n              case campaignInterfaceType.survey:\n              case campaignInterfaceType.surveyApprove:\n                buttonType = 'survey';\n                break;\n              default:\n                buttonType = 'website';\n                break;\n            }\n            set({ interfaceWebsite: data.Website ?? null });\n            break;\n          case campaignType.draw:\n            if (data.Delivered) {\n              buttonType = 'delivery';\n            } else {\n              buttonType = 'draw';\n            }\n            break;\n          case campaignType.donate:\n            if (data.Delivered) {\n              buttonType = 'delivery';\n            } else {\n              buttonType = 'donate';\n            }\n            break;\n          default:\n            buttonType = pointType === campaignPointType.use ? 'redeem' : 'get_points';\n            if (data.Delivered) {\n              buttonType = 'delivery';\n            }\n            display = !nonRedeemable.includes(type);\n            break;\n        }\n\n        set({\n          buttonState: {\n            enabled: pointEnough && canAddToCart,\n            type: buttonType,\n            display,\n          },\n        });\n      },\n\n      checkCondition: () => {\n        const { data } = get();\n        const userPoints = useUserStore.getState().points;\n\n        if (!data) {\n          return;\n        }\n\n        let state: CampaignState = 'redeemable';\n\n        const today = new Date();\n        const timezoneOffsetMinutes = today.getTimezoneOffset();\n        const currentTimeLocal = Math.floor((Date.now() - timezoneOffsetMinutes * 60 * 1000) / 1000);\n\n        if (\n          data.Type !== campaignType.buy &&\n          data.PointType === campaignPointType.use &&\n          data.PointPerUnit &&\n          userPoints < data.PointPerUnit\n        ) {\n          state = 'point_not_enough';\n        } else if (data.ItemCountSold && data.Quantity && data.ItemCountSold >= data.Quantity) {\n          state = 'sold_out';\n        } else if (data.RedeemMostPerPerson && data.RedeemCount && data.RedeemCount >= data.RedeemMostPerPerson) {\n          state = 'redeemed';\n        } else if (data.ConditionAlertID === 2) {\n          state = 'redeemed';\n        } else if (data.NextRedeemDate && data.NextRedeemDate > currentTimeLocal) {\n          state = 'cool_down';\n        } else if (data.ExpireDate && data.ExpireDate < currentTimeLocal) {\n          state = 'expired';\n        } else if (data.IsConditionPass === false) {\n          state = 'fail_in_condition';\n        }\n\n        set({ campaignState: state });\n      },\n\n      calculatePrice: () => {\n        const { data, style, subStyle, quantity } = get();\n        if (!data) {\n          set({ totalPrice: 0 });\n          return;\n        }\n\n        const basePrice = subStyle?.price ?? style?.price ?? data?.PricePerUnit ?? 0;\n        set({ totalPrice: basePrice * quantity });\n      },\n    };\n  });\n};\n","import { Campaign, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\n\nexport interface CampaignsConfig {\n  itemsPerPage?: number;\n  defaultCampaignConfig?: string;\n}\n\nexport type CampaignsState = {\n  data: Campaign[];\n  isLoading: boolean;\n  hasMore: boolean;\n  error: ErrorResponse | null;\n  currentPage: number;\n  categoryId: string | null;\n  config: CampaignsConfig;  \n  options: {\n    [key: string]: unknown;\n  };\n};\n\nexport type CampaignsActions = {\n  fetchData: (categoryId?: string, options?: { [key: string]: unknown }) => Promise<ServiceResponse<Campaign[]>>;\n  loadMore: () => Promise<ServiceResponse<Campaign[]>>;\n  clear: () => void;\n  updateConfig: (config: Partial<CampaignsConfig>) => void;\n};\n\nexport type CampaignsStore = CampaignsState & CampaignsActions;\n\nexport const createCampaignsStore = (initialConfig: CampaignsConfig) => {\n  return create<CampaignsStore>((set, get) => ({\n    data: [],\n    isLoading: false,\n    hasMore: true,\n    error: null,\n    currentPage: 0,\n    categoryId: null,\n    config: {\n      ...initialConfig,\n      itemsPerPage: initialConfig.itemsPerPage || 25,\n    },\n    options: {},\n\n    updateConfig: (newConfig: Partial<CampaignsConfig>) => {\n      set((state) => ({\n        config: { ...state.config, ...newConfig },\n      }));\n    },\n\n    fetchData: async (categoryId?: string, options?: { [key: string]: unknown }) => {\n      const { config } = get();\n      const localeId = useLocaleStore.getState().localeId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService || !config.defaultCampaignConfig) {\n        return { type: 'client-error', message: 'Service not configured or missing config' };\n      }\n\n      set({\n        currentPage: 0,\n        data: [],\n        hasMore: true,\n        error: null,\n        isLoading: true,\n        categoryId: categoryId || null,\n        options: options || {},\n      });\n\n      const response = await bzbsService.campaignApi.campaigns({\n        config: config.defaultCampaignConfig,\n        deviceLocale: localeId,\n        top: config.itemsPerPage,\n        skip: 0,\n        byConfig: true,\n        cat: categoryId,\n        ...options,\n      });\n\n      if (response.type === 'success') {\n        set({\n          data: response.model,\n          hasMore: response.model.length === config.itemsPerPage,\n          isLoading: false,\n          error: null,\n          currentPage: get().currentPage + 1,\n        });\n      } else {\n        set({ error: response, isLoading: false });\n      }\n\n      return response;\n    },\n\n    loadMore: async () => {\n      const { config, data, hasMore, currentPage, categoryId, options } = get();\n      const localeId = useLocaleStore.getState().localeId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService || !config.defaultCampaignConfig || !hasMore) {\n        return { type: 'client-error', message: 'Service not configured or missing config' };\n      }\n\n      if (!hasMore) {\n        return { type: 'client-error', message: 'No more data available' };\n      }\n\n      set({ isLoading: true, error: null });\n      const response = await bzbsService.campaignApi.campaigns({\n        config: config.defaultCampaignConfig,\n        deviceLocale: localeId,\n        top: config.itemsPerPage,\n        skip: currentPage * (config.itemsPerPage || 25),\n        byConfig: true,\n        cat: categoryId || undefined,\n        ...options,\n      });\n\n      if (response.type === 'success') {\n        set({\n          data: [...data, ...response.model],\n          hasMore: response.model.length === config.itemsPerPage,\n          currentPage: currentPage + 1,\n          isLoading: false,\n          error: null,\n        });\n      } else {\n        set({ error: response, isLoading: false });\n      }\n\n      return response;\n    },\n\n    clear: () => {\n      set({\n        data: [],\n        isLoading: false,\n        hasMore: true,\n        error: null,\n        currentPage: 0,\n      });\n    },\n  }));\n};","import { CartCountResponse, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\n\nexport type CartState = {\n  count: number;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n};\n\nexport type CartActions = {\n  fetchCount: () => Promise<ServiceResponse<CartCountResponse>>;\n  clear: () => void;\n};\n\nexport type CartStore = CartState & CartActions;\n\nexport const useCartStore = create<CartStore>((set) => {\n  return {\n    count: 0,\n    isLoading: false,\n    error: null,\n\n    fetchCount: async () => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true, error: null });\n      const response = await bzbsService.cartApi.cartCount({\n        deviceLocale: useLocaleStore.getState().localeId,\n      });\n      set({ isLoading: false, error: null });\n\n      if (response.type === 'success') {\n        set({ count: response.model.cart_count });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    clear: () => {\n      set({\n        count: 0,\n        isLoading: false,\n        error: null,\n      });\n    },\n  };\n});\n","import { Category, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\n\nexport interface CategoriesConfig {\n  defaultMenuConfig?: string;\n}\n\nexport type CategoriesState = {\n  data: Category[];\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  config: CategoriesConfig;\n};\n\nexport type CategoriesActions = {\n  fetchData: () => Promise<ServiceResponse<Category[]>>;\n  clear: () => void;\n  updateConfig: (config: Partial<CategoriesConfig>) => void;\n};\n\nexport type CategoriesStore = CategoriesState & CategoriesActions;\n\nexport const createCategoriesStore = (initialConfig: CategoriesConfig) => {\n  return create<CategoriesStore>((set, get) => {\n    return {\n      data: [],\n      isLoading: false,\n      error: null,\n      config: initialConfig,\n\n      updateConfig: (newConfig: Partial<CategoriesConfig>) => {\n        set((state) => ({\n          config: { ...state.config, ...newConfig },\n        }));\n      },\n\n      fetchData: async () => {\n        const { config } = get();\n        const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n        if (!bzbsService || !config.defaultMenuConfig) {\n          return { type: 'client-error', message: 'Service not configured or missing config' };\n        }\n\n        set({ isLoading: true, error: null });\n        const response = await bzbsService.categoryApi.categories({\n          config: config.defaultMenuConfig,\n          byConfig: true,\n          options: {\n            device_locale: useLocaleStore.getState().localeId,\n          },\n        });\n        set({ isLoading: false, error: null });\n\n        if (response.type === 'success') {\n          set({ data: response.model });\n        } else {\n          set({ error: response });\n        }\n\n        return response;\n      },\n\n      clear: () => {\n        set({\n          data: [],\n          isLoading: false,\n          error: null,\n        });\n      },\n    };\n  });\n};\n","import { create } from 'zustand';\n\nexport type ConfirmRequest = {\n  title: string;\n  content: string;\n  confirmText?: string;\n  cancelText?: string;\n  onConfirm?: () => void;\n  onCancel?: () => void;\n};\n\nexport type ConfirmState = {\n  isOpen: boolean;\n  confirmRequest: ConfirmRequest;\n};\n\nexport type ConfirmActions = {\n  openConfirm: (request: ConfirmRequest) => void;\n  closeConfirm: () => void;\n};\n\nexport type ConfirmStore = ConfirmState & ConfirmActions;\n\nexport const useConfirmStore = create<ConfirmStore>((set) => ({\n  // Initial state\n  isOpen: false,\n  confirmRequest: {\n    title: '',\n    content: '',\n  },\n\n  // Actions\n  openConfirm: (request: ConfirmRequest) => {\n    set({ confirmRequest: request, isOpen: true });\n  },\n\n  closeConfirm: () => {\n    set({ isOpen: false });\n  },\n}));\n","import { Consent, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { trackCommonEvents } from '../utils';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\n\nexport type ConsentState = {\n  data: Consent | null;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n};\n\ntype UpdateConsentParams = {\n  termsAndConditions?: string;\n  dataPrivacy?: string;\n  marketingOption?: string;\n  email?: string;\n  sms?: string;\n  notification?: string;\n  line?: string;\n  analyticsBuzzebeesCookies?: string;\n  analyticsFirebaseCookies?: string;\n  analyticsGoogleCookies?: string;\n  analyticsMetaCookies?: string;\n  analyticsOtherCookies?: string;\n  functionalCookies?: string;\n  marketingCookies?: string;\n  necessaryCookies?: string;\n  options?: {\n    [key: string]: unknown;\n  };\n};\n\nexport type ConsentActions = {\n  fetchData: () => Promise<ServiceResponse<Consent>>;\n  updateConsent: (consent: UpdateConsentParams) => Promise<ServiceResponse<Consent>>;\n  clear: () => void;\n};\n\nexport type ConsentStore = ConsentState & ConsentActions;\n\nexport const useConsentStore = create<ConsentStore>((set) => {\n  return {\n    data: null,\n    isLoading: false,\n    error: null,\n\n    fetchData: async () => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true, error: null });\n      const response = await bzbsService.consentApi.consent({\n        options: {\n          device_locale: useLocaleStore.getState().localeId,\n        },\n      });\n      set({ isLoading: false, error: null });\n\n      if (response.type === 'success') {\n        set({ data: response.model });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    updateConsent: async (consent: UpdateConsentParams) => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true, error: null });\n      const response = await bzbsService.consentApi.updateConsent(consent);\n      set({ isLoading: false, error: null });\n\n      if (response.type === 'success') {\n        set({ data: response.model });\n        if (\n          response.model.EmailMarketing == 0 &&\n          response.model.SMSMarketing == 0 &&\n          response.model.NotificationMarketing == 0 &&\n          response.model.LineMarketing == 0\n        ) {\n          trackCommonEvents.unconsentSuccess();\n        }\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    clear: () => {\n      set({\n        data: null,\n        isLoading: false,\n        error: null,\n      });\n    },\n  };\n});\n","import { CouponResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\n\nexport type CouponState = {\n  data: CouponResponse | null;\n  isLoading: boolean;\n  error: ServiceResponse<unknown> | null;\n};\n\nexport type CouponActions = {\n  processCodes: (codes: string[]) => Promise<ServiceResponse<CouponResponse>>;\n  clear: () => void;\n};\n\nexport type CouponStore = CouponState & CouponActions;\n\nexport const useCouponStore = create<CouponStore>((set) => ({\n  data: null,\n  isLoading: false,\n  error: null,\n\n  processCodes: async (codes: string[]) => {\n    const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n    if (!bzbsService) {\n      return { type: 'client-error', message: 'Service not configured' };\n    }\n\n    set({ isLoading: true });\n    const response = await bzbsService.couponApi.processCodes({ codes: codes.join(','), options: { device_locale: useLocaleStore.getState().localeId } });\n    set({ isLoading: false });\n\n    if (response.type === 'success') {\n      set({\n        data: response.model,\n        error: null,\n      });\n    } else {\n      set({ error: response });\n    }\n\n    return response;\n  },\n\n  clear: () => {\n    set({\n      data: null,\n      isLoading: false,\n      error: null,\n    });\n  },\n}));\n","import { Dashboard, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\n\nexport interface DashboardConfig {\n  defaultDashboardMode?: 'main' | 'sub';\n  defaultDashboardConfig?: string;\n  appId?: string;\n}\n\nexport type DashboardState = {\n  data: Dashboard[];\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  config: DashboardConfig;\n  options?: {\n    [key: string]: unknown;\n  };\n};\n\nexport type DashboardActions = {\n  setIsLoading: (isLoading: boolean) => void;\n  setError: (error: ErrorResponse) => void;\n  fetchData: (options?: { [key: string]: unknown }) => Promise<ServiceResponse<Dashboard[]>>;\n  clear: () => void;\n  updateConfig: (config: Partial<DashboardConfig>) => void;\n};\n\nexport type DashboardStore = DashboardState & DashboardActions;\n\nexport const createDashboardStore = (initialConfig: DashboardConfig) => {\n  return create<DashboardStore>((set, get) => {\n    return {\n      data: [],\n      isLoading: false,\n      error: null,\n      config: initialConfig,\n      options: {},\n\n      setIsLoading: (isLoading: boolean) => set({ isLoading }),\n      setError: (error: ErrorResponse) => set({ error }),\n\n      updateConfig: (newConfig: Partial<DashboardConfig>) => {\n        set((state) => ({\n          config: { ...state.config, ...newConfig },\n        }));\n      },\n\n      fetchData: async (options?: { [key: string]: unknown }) => {\n        const { config } = get();\n        const { defaultDashboardMode, defaultDashboardConfig, appId } = config;\n        const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n        const localeId = useLocaleStore.getState().localeId;\n\n        if (!bzbsService) {\n          return { type: 'client-error', message: 'Service not configured' };\n        }\n\n        set({ options: options || {} });\n\n        set({ isLoading: true, error: null });\n        let response: ServiceResponse<Dashboard[]>;\n        if (defaultDashboardMode === 'main') {\n          if (!appId) {\n            return { type: 'client-error', message: 'App ID not configured' };\n          }\n          response = await bzbsService.dashboardApi.mainDashboard({\n            appName: appId,\n            locale: localeId,\n            options: { device_locale: localeId, ...options },\n          });\n        } else if (defaultDashboardMode === 'sub' && defaultDashboardConfig) {\n          response = await bzbsService.dashboardApi.subDashboard({\n            dashboardName: defaultDashboardConfig,\n            locale: localeId,\n            options: { device_locale: localeId, ...options },\n          });\n        } else {\n          if (!defaultDashboardConfig) {\n            return { type: 'client-error', message: 'Dashboard config not configured' };\n          }\n          response = await bzbsService.dashboardApi.subDashboard({\n            dashboardName: defaultDashboardConfig,\n            locale: localeId,\n            options: { device_locale: localeId, ...options },\n          });\n        }\n        set({ isLoading: false, error: null });\n\n        if (response.type === 'success') {\n          set({ data: response.model });\n        } else {\n          set({ error: response });\n        }\n        return response;\n      },\n\n      clear: () => {\n        set({\n          data: [],\n          isLoading: false,\n          error: null,\n        });\n      },\n    };\n  });\n};\n","import React from 'react';\nimport { create } from 'zustand';\n\nexport type LoadingIndicatorState = {\n  loading: boolean;\n};\n\nexport type LoadingIndicatorActions = {\n  show: () => void;\n  hide: () => void;\n};\n\nexport type LoadingIndicatorStore = LoadingIndicatorState & LoadingIndicatorActions;\n\nexport const useLoadingIndicatorStore = create<LoadingIndicatorStore>((set) => ({\n  loading: false,\n\n  show: () => set({ loading: true }),\n  hide: () => set({ loading: false }),\n}));\n\nexport const useLoading = (isLoading: boolean) => {\n  const { show, hide } = useLoadingIndicatorStore();\n\n  React.useEffect(() => {\n    if (isLoading) {\n      show();\n    } else {\n      hide();\n    }\n  }, [isLoading, show, hide]);\n};\n","import { Maintenance } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\n\nexport type MaintenanceState = {\n  isMaintenance: boolean | null;\n  maintenanceData: Maintenance | null;\n};\n\nexport type MaintenanceActions = {\n  checkMaintenance: () => Promise<void>;\n};\n\nexport type MaintenanceStore = MaintenanceState & MaintenanceActions;\n\nexport const useMaintenanceStore = create<MaintenanceStore>((set) => ({\n  isMaintenance: null,\n  maintenanceData: null,\n\n  checkMaintenance: async () => {\n    const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n    const appId = useBuzzebeesAppStore.getState().appId;\n\n    if (!bzbsService || !appId) {\n      return;\n    }\n\n    const result = await bzbsService.blob.maintenance(appId);\n    if (result.type === 'success') {\n      if (result.model.enabled === true) {\n        set({\n          isMaintenance: true,\n          maintenanceData: result.model,\n        });\n      } else {\n        set({\n          isMaintenance: false,\n          maintenanceData: null,\n        });\n      }\n    } else {\n      set({\n        isMaintenance: false,\n        maintenanceData: null,\n      });\n    }\n  },\n}));\n","import { ErrorResponse, Notification, ServiceResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\n\nexport type NotificationState = {\n  data: Notification[];\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  unreadCount: number;\n  hasMore: boolean;\n  currentPage: number;\n  pageSize: number;\n};\n\nexport type NotificationActions = {\n  fetchData: () => Promise<ServiceResponse<Notification[]>>;\n  loadMore: () => Promise<ServiceResponse<Notification[]>>;\n  markAsRead: (ids: string[]) => Promise<ServiceResponse<unknown>>;\n  setUnreadCount: (count: number) => void;\n  setPageSize: (size: number) => void;\n  clear: () => void;\n};\n\nexport type NotificationStore = NotificationState & NotificationActions;\n\nexport const useNotificationStore = create<NotificationStore>((set, get) => {\n  return {\n    data: [],\n    isLoading: false,\n    error: null,\n    unreadCount: 0,\n    hasMore: true,\n    currentPage: 0,\n    pageSize: 25,\n\n    // Actions\n    fetchData: async () => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<Notification[]>;\n      }\n\n      const localeId = useLocaleStore.getState().localeId;\n      const { pageSize } = get();\n\n      set({ isLoading: true, error: null, currentPage: 0, hasMore: true, data: [] });\n      const response = await bzbsService.notificationApi.notifications({\n        mode: 'all',\n        sortBy: 'createdate_desc',\n        top: pageSize,\n        skip: 0,\n        options: { device_locale: localeId },\n      });\n      set({ isLoading: false });\n\n      if (response.type === 'success') {\n        const unreadCount = response.model.filter((n) => n.IsRead == false).length;\n        set({\n          data: response.model,\n          unreadCount,\n          hasMore: response.model.length === pageSize,\n          currentPage: 1,\n          error: null,\n        });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    loadMore: async () => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<Notification[]>;\n      }\n\n      const { hasMore, currentPage, pageSize, data } = get();\n      const localeId = useLocaleStore.getState().localeId;\n\n      if (!hasMore) {\n        return { type: 'client-error', message: 'No more data available' } as ServiceResponse<Notification[]>;\n      }\n\n      set({ isLoading: true, error: null });\n      const response = await bzbsService.notificationApi.notifications({\n        mode: 'all',\n        sortBy: 'createdate_desc',\n        top: pageSize,\n        skip: currentPage * pageSize,\n        options: { device_locale: localeId },\n      });\n      set({ isLoading: false });\n\n      if (response.type === 'success') {\n        const merged = [...data, ...response.model];\n        const unreadCount = merged.filter((n) => n.IsRead == false).length;\n        set({\n          data: merged,\n          unreadCount,\n          hasMore: response.model.length === pageSize,\n          currentPage: currentPage + 1,\n          error: null,\n        });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    markAsRead: async (ids: string[]) => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      const response = await bzbsService.notificationApi.read({\n        ids: ids.join(','),\n        options: { device_locale: useLocaleStore.getState().localeId },\n      });\n      if (response.type === 'success') {\n        set({ data: get().data.map((n) => (ids.includes(n.RowKey || '') ? { ...n, IsRead: true } : n)) });\n        const unreadCount = get().data.filter((n) => n.IsRead == false).length;\n        set({ unreadCount });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    setUnreadCount: (count: number) => {\n      set({ unreadCount: count });\n    },\n\n    setPageSize: (size: number) => {\n      const next = size > 0 ? size : 25;\n      set({ pageSize: next });\n    },\n\n    clear: () => {\n      set({\n        data: [],\n        isLoading: false,\n        error: null,\n        unreadCount: 0,\n        hasMore: true,\n        currentPage: 0,\n      });\n    },\n  };\n});\n","import { ErrorResponse, PointLog, ServiceResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\n\nexport interface PointLogConfig {\n  defaultPageSize?: number;\n  type: 'earn' | 'burn';\n}\n\nexport type PointLogState = {\n  data: PointLog[];\n  isLoading: boolean;\n  hasMore: boolean;\n  error: ErrorResponse | null;\n  config: PointLogConfig;\n  lastRowKey?: string;\n  currentMonth?: string;\n};\n\nexport type PointLogActions = {\n  fetchData: (month?: string) => Promise<ServiceResponse<PointLog[]>>;\n  loadMore: () => Promise<ServiceResponse<PointLog[]>>;\n  clear: () => void;\n  updateConfig: (config: Partial<PointLogConfig>) => void;\n};\n\nexport type PointLogStore = PointLogState & PointLogActions;\n\nexport const createPointLogStore = (initialConfig: PointLogConfig) => {\n  return create<PointLogStore>((set, get) => ({\n    data: [],\n    isLoading: false,\n    hasMore: true,\n    error: null,\n    lastRowKey: undefined,\n    currentMonth: undefined,\n    config: {\n      ...initialConfig,\n      defaultPageSize: initialConfig.defaultPageSize || 10,\n    },\n\n    updateConfig: (newConfig: Partial<PointLogConfig>) => {\n      set((state) => ({\n        config: { ...state.config, ...newConfig },\n      }));\n    },\n\n    fetchData: async (month?: string) => {\n      const { config } = get();\n      const localeId = useLocaleStore.getState().localeId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      const targetMonth = month || new Date().toISOString().split('T')[0];\n\n      set({ isLoading: true });\n      const response = await bzbsService.pointLogApi.getPointLog({\n        month: targetMonth,\n        type: config.type,\n        top: config.defaultPageSize,\n        options: { device_locale: localeId },\n      });\n      set({ isLoading: false });\n\n      if (response.type === 'success') {\n        const lastItem = response.model[response.model.length - 1];\n        set({\n          data: response.model,\n          hasMore: response.model.length === config.defaultPageSize,\n          error: null,\n          lastRowKey: lastItem?.RowKey,\n          currentMonth: targetMonth,\n        });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    loadMore: async () => {\n      const { config, data, lastRowKey, currentMonth } = get();\n      const localeId = useLocaleStore.getState().localeId;\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      if (!lastRowKey) {\n        return { type: 'client-error', message: 'No more data to load' };\n      }\n\n      if (!currentMonth) {\n        return { type: 'client-error', message: 'No month specified, call fetchData first' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.pointLogApi.getPointLog({\n        month: currentMonth,\n        type: config.type,\n        top: config.defaultPageSize,\n        lastRowKey: lastRowKey,\n        options: { device_locale: localeId },\n      });\n      set({ isLoading: false });\n\n      if (response.type === 'success') {\n        const lastItem = response.model[response.model.length - 1];\n        set({\n          data: [...data, ...response.model],\n          hasMore: response.model.length === config.defaultPageSize,\n          error: null,\n          lastRowKey: lastItem?.RowKey,\n        });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    clear: () => {\n      set({\n        data: [],\n        isLoading: false,\n        hasMore: true,\n        error: null,\n        lastRowKey: undefined,\n        currentMonth: undefined,\n      });\n    },\n  }));\n};\n","import { create } from 'zustand';\n\nexport type PopupRequest = {\n  title?: string;\n  content: string;\n  closeText?: string;\n  onClose?: () => void;\n  closable?: boolean;\n};\n\nexport type PopupState = {\n  isOpen: boolean;\n  popupRequest: PopupRequest;\n};\n\nexport type PopupActions = {\n  openPopup: (request: PopupRequest) => void;\n  closePopup: () => void;\n};\n\nexport type PopupStore = PopupState & PopupActions;\n\nexport const usePopupStore = create<PopupStore>((set, get) => ({\n  isOpen: false,\n  popupRequest: {\n    content: '',\n    closable: true,\n  },\n\n  openPopup: (request: PopupRequest) => {\n    set({ popupRequest: request, isOpen: true });\n  },\n\n  closePopup: () => {\n    const { popupRequest } = get();\n    if (popupRequest.onClose) {\n      popupRequest.onClose();\n    }\n    set({ isOpen: false });\n  },\n}));\n","import { ErrorResponse, Purchase, ServiceResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\n\nexport interface PurchaseConfig {\n  defaultPageSize?: number;\n  defaultConfig?: string;\n}\n\nexport type PurchaseState = {\n  data: Purchase[];\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  config: PurchaseConfig & { defaultPageSize: number };\n  currentPage: number;\n  hasMore: boolean;\n  startDate?: string;\n  endDate?: string;\n};\n\nexport type PurchaseActions = {\n  fetchData: (startDate?: string, endDate?: string) => Promise<ServiceResponse<Purchase[]>>;\n  loadMore: () => Promise<ServiceResponse<Purchase[]>>;\n  clear: () => void;\n  updateConfig: (config: Partial<PurchaseConfig>) => void;\n};\n\nexport type PurchaseStore = PurchaseState & PurchaseActions;\n\nexport const createPurchaseStore = (initialConfig: PurchaseConfig) => {\n  return create<PurchaseStore>((set, get) => {\n    return {\n      data: [],\n      isLoading: false,\n      error: null,\n      currentPage: 0,\n      hasMore: true,\n      startDate: undefined,\n      endDate: undefined,\n      config: {\n        ...initialConfig,\n        defaultPageSize: initialConfig.defaultPageSize || 10,\n      },\n\n      updateConfig: (newConfig: Partial<PurchaseConfig>) => {\n        set((state) => ({\n          config: {\n            ...state.config,\n            ...newConfig,\n            defaultPageSize: newConfig.defaultPageSize || state.config.defaultPageSize,\n          },\n        }));\n      },\n\n      fetchData: async (startDate?: string, endDate?: string) => {\n        const { config } = get();\n        const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n        if (!bzbsService) {\n          return { type: 'client-error', message: 'Service not configured' };\n        }\n\n        // Always reset state when fetching with new date range\n        set({\n          currentPage: 0,\n          data: [],\n          hasMore: true,\n          error: null,\n          isLoading: true,\n          startDate,\n          endDate,\n        });\n\n        const response = await bzbsService.historyApi.redeemHistories({\n          byConfig: true,\n          config: config.defaultConfig || '',\n          skip: 0,\n          top: config.defaultPageSize,\n          startDate,\n          endDate,\n          options: { device_locale: useLocaleStore.getState().localeId },\n        });\n\n        if (response.type === 'success') {\n          set({\n            data: response.model,\n            hasMore: response.model.length === config.defaultPageSize,\n            isLoading: false,\n            error: null,\n          });\n        } else {\n          set({ error: response, isLoading: false });\n        }\n\n        return response;\n      },\n\n      loadMore: async () => {\n        const { config, data, currentPage, hasMore, startDate, endDate } = get();\n        const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n\n        if (!bzbsService) {\n          return { type: 'client-error', message: 'Service not configured' };\n        }\n\n        if (!hasMore) {\n          return { type: 'client-error', message: 'No more data to load' };\n        }\n\n        set({ isLoading: true, error: null });\n\n        const response = await bzbsService.historyApi.redeemHistories({\n          byConfig: true,\n          config: config.defaultConfig || '',\n          skip: currentPage * config.defaultPageSize,\n          top: config.defaultPageSize,\n          startDate,\n          endDate,\n          options: { device_locale: useLocaleStore.getState().localeId },\n        });\n\n        if (response.type === 'success') {\n          set({\n            data: [...data, ...response.model],\n            hasMore: response.model.length === config.defaultPageSize,\n            currentPage: currentPage + 1,\n            isLoading: false,\n            error: null,\n          });\n        } else {\n          set({ error: response, isLoading: false });\n        }\n\n        return response;\n      },\n\n      clear: () => {\n        set({\n          data: [],\n          isLoading: false,\n          error: null,\n          currentPage: 0,\n          hasMore: true,\n          startDate: undefined,\n          endDate: undefined,\n        });\n      },\n    };\n  });\n};\n","import { ErrorResponse, OtpResponse, RegistrationResponse, ServiceResponse, ValidateOtpResponse } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\nimport { useLocaleStore } from './locale.store';\nimport { trackCommonEvents } from '../utils';\n\nexport type RegistrationState = {\n  username: string;\n  password: string;\n  confirmPassword: string;\n  contactNumber: string;\n  firstName: string;\n  lastName: string;\n  otp: string;\n  refCode: string;\n  address?: string;\n  gender?: string;\n  birthDate?: number;\n  email?: string;\n  refUserCode?: string;\n  consentVersion: {\n    termAndCondition: string;\n    dataPrivacy: string;\n    marketingOptions: string;\n  } | null;\n  termAndConditionAccepted: boolean;\n  dataPrivacyAccepted: boolean;\n  marketingAccepted: boolean;\n  emailMarketingAccepted: boolean;\n  smsMarketingAccepted: boolean;\n  notificationMarketingAccepted: boolean;\n  lineMarketingAccepted: boolean;\n  phoneMarketingAccepted: boolean;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n};\n\nexport type RegistrationActions = {\n  setUsername: (value: string) => void;\n  setPassword: (value: string) => void;\n  setConfirmPassword: (value: string) => void;\n  setContactNumber: (value: string) => void;\n  setFirstName: (value: string) => void;\n  setLastName: (value: string) => void;\n  setOtp: (value: string) => void;\n  setRefCode: (value: string) => void;\n  setAddress: (value: string) => void;\n  setGender: (value: string) => void;\n  setBirthDate: (value: number) => void;\n  setEmail: (value: string) => void;\n  setRefUserCode: (value: string) => void;\n  setTermAndConditionAccepted: (value: boolean) => void;\n  setDataPrivacyAccepted: (value: boolean) => void;\n  setMarketingAccepted: (value: boolean) => void;\n  setEmailMarketingAccepted: (value: boolean) => void;\n  setSmsMarketingAccepted: (value: boolean) => void;\n  setNotificationMarketingAccepted: (value: boolean) => void;\n  setLineMarketingAccepted: (value: boolean) => void;\n  setPhoneMarketingAccepted: (value: boolean) => void;\n  setError: (value: ErrorResponse | null) => void;\n  setConsentVersion: (termAndCondition: string, dataPrivacy: string, marketingOptions: string) => void;\n  clearData: () => void;\n  sendOtp: () => Promise<ServiceResponse<OtpResponse>>;\n  validateOtp: () => Promise<ServiceResponse<ValidateOtpResponse>>;\n  register: () => Promise<ServiceResponse<RegistrationResponse>>;\n  requestOTP: () => Promise<ServiceResponse<unknown>>;\n  verifyOTP: () => Promise<ServiceResponse<unknown>>;\n  clear: () => void;\n};\n\nexport type RegistrationStore = RegistrationState & RegistrationActions;\n\nexport const useRegistrationStore = create<RegistrationStore>((set, get) => {\n\n  return {\n    username: '',\n    password: '',\n    confirmPassword: '',\n    contactNumber: '',\n    firstName: '',\n    lastName: '',\n    otp: '',\n    refCode: '',\n    address: undefined,\n    gender: undefined,\n    birthDate: undefined,\n    email: undefined,\n    refUserCode: undefined,\n    consentVersion: null,\n    termAndConditionAccepted: false,\n    dataPrivacyAccepted: false,\n    marketingAccepted: false,\n    emailMarketingAccepted: false,\n    smsMarketingAccepted: false,\n    notificationMarketingAccepted: false,\n    lineMarketingAccepted: false,\n    phoneMarketingAccepted: false,\n    isLoading: false,\n    error: null,\n\n    setUsername: (value: string) => set({ username: value }),\n    setPassword: (value: string) => set({ password: value }),\n    setConfirmPassword: (value: string) => set({ confirmPassword: value }),\n    setContactNumber: (value: string) => set({ contactNumber: value }),\n    setFirstName: (value: string) => set({ firstName: value }),\n    setLastName: (value: string) => set({ lastName: value }),\n    setOtp: (value: string) => set({ otp: value }),\n    setRefCode: (value: string) => set({ refCode: value }),\n    setAddress: (value: string) => set({ address: value }),\n    setGender: (value: string) => set({ gender: value }),\n    setBirthDate: (value: number) => set({ birthDate: value }),\n    setEmail: (value: string) => set({ email: value }),\n    setRefUserCode: (value: string) => set({ refUserCode: value }),\n    setTermAndConditionAccepted: (value: boolean) => set({ termAndConditionAccepted: value }),\n    setDataPrivacyAccepted: (value: boolean) => set({ dataPrivacyAccepted: value }),\n    setMarketingAccepted: (value: boolean) => {\n      set({ marketingAccepted: value });\n      if (!value) {\n        set({\n          emailMarketingAccepted: false,\n          smsMarketingAccepted: false,\n          notificationMarketingAccepted: false,\n          lineMarketingAccepted: false,\n          phoneMarketingAccepted: false,\n        });\n      }\n    },\n    setEmailMarketingAccepted: (value: boolean) => set({ emailMarketingAccepted: value }),\n    setSmsMarketingAccepted: (value: boolean) => set({ smsMarketingAccepted: value }),\n    setNotificationMarketingAccepted: (value: boolean) => set({ notificationMarketingAccepted: value }),\n    setLineMarketingAccepted: (value: boolean) => set({ lineMarketingAccepted: value }),\n    setPhoneMarketingAccepted: (value: boolean) => set({ phoneMarketingAccepted: value }),\n    setError: (value: ErrorResponse | null) => set({ error: value }),\n\n    setConsentVersion: (termAndCondition: string, dataPrivacy: string, marketingOptions: string) => {\n      set({\n        consentVersion: {\n          termAndCondition,\n          dataPrivacy,\n          marketingOptions,\n        },\n      });\n    },\n\n    clearData: () => {\n      set({\n        username: '',\n        password: '',\n        confirmPassword: '',\n        contactNumber: '',\n        firstName: '',\n        lastName: '',\n        otp: '',\n        refCode: '',\n        address: undefined,\n        gender: undefined,\n        birthDate: undefined,\n        email: undefined,\n        refUserCode: undefined,\n        consentVersion: null,\n        termAndConditionAccepted: false,\n        dataPrivacyAccepted: false,\n        marketingAccepted: false,\n        emailMarketingAccepted: false,\n        smsMarketingAccepted: false,\n        notificationMarketingAccepted: false,\n        lineMarketingAccepted: false,\n        phoneMarketingAccepted: false,\n        error: null,\n      });\n    },\n\n    sendOtp: async () => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      const uuid = useBuzzebeesAppStore.getState().uuid;\n      const appId = useBuzzebeesAppStore.getState().appId;\n      const contactNumber = get().contactNumber;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.otp({\n        uuid,\n        appId,\n        contactNumber: contactNumber.replace(/-/g, ''),\n        channel: 'register',\n      });\n      set({ isLoading: false });\n\n      if (response.type === 'success') {\n        set({ refCode: response.model.refcode ?? '', error: null });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    validateOtp: async () => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      const appId = useBuzzebeesAppStore.getState().appId;\n      const otp = get().otp;\n      const refCode = get().refCode;\n      const contactNumber = get().contactNumber;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.validateOtp({\n        appId,\n        otp,\n        refCode,\n        contactNumber: contactNumber.replace(/-/g, ''),\n        use: false,\n        channel: 'register',\n      });\n      set({ isLoading: false });\n\n      if (response.type === 'success') {\n        set({ error: null });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    register: async () => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      const uuid = useBuzzebeesAppStore.getState().uuid;\n      const appId = useBuzzebeesAppStore.getState().appId;\n      const macAddress = useBuzzebeesAppStore.getState().macAddress;\n      const os = useBuzzebeesAppStore.getState().os;\n      const platform = useBuzzebeesAppStore.getState().platform;\n      const clientVersion = useBuzzebeesAppStore.getState().clientVersion;\n      const deviceNotificationEnable = useBuzzebeesAppStore.getState().deviceNotificationEnabled;\n      const contactNumber = get().contactNumber;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' }; \n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.registerApi.register({\n        appId,\n        uuid,\n        macAddress,\n        os,\n        platform,\n        clientVersion,\n        deviceNotificationEnable,\n        username: get().username,\n        password: get().password,\n        confirmPassword: get().confirmPassword,\n        firstName: get().firstName,\n        lastName: get().lastName,\n        contactNumber: contactNumber.replace(/-/g, ''),\n        otp: get().otp,\n        refCode: get().refCode,\n        termAndConditionVersion: get().consentVersion?.termAndCondition,\n        dataPrivacyVersion: get().consentVersion?.dataPrivacy,\n        marketingOptionsVersion: get().consentVersion?.marketingOptions,\n        emailMarketing: get().emailMarketingAccepted ? '1' : '0',\n        smsMarketing: get().smsMarketingAccepted ? '1' : '0',\n        notificationMarketing: get().notificationMarketingAccepted ? '1' : '0',\n        lineMarketing: get().lineMarketingAccepted ? '1' : '0',\n        phoneMarketing: get().phoneMarketingAccepted ? '1' : '0',\n        options: { device_locale: useLocaleStore.getState().localeId },\n      }); \n      set({ isLoading: false });\n\n      if (response.type === 'success') {  \n        set({ error: null });\n        trackCommonEvents.registerSuccess();\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    requestOTP: async () => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      const uuid = useBuzzebeesAppStore.getState().uuid;\n      const appId = useBuzzebeesAppStore.getState().appId;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.otp({\n        uuid,\n        appId,\n        contactNumber: get().contactNumber.replace(/-/g, ''),\n        channel: 'register',\n      }); \n      set({ isLoading: false });\n\n      if (response.type === 'success') {\n        set({ error: null });\n      } else {\n        set({ error: response });\n      }\n\n      return response;  \n    },\n\n    verifyOTP: async () => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      const appId = useBuzzebeesAppStore.getState().appId;\n      const refCode = get().refCode;\n\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' };\n      }\n\n      set({ isLoading: true });\n      const response = await bzbsService.authApi.validateOtp({\n        appId,\n        otp: get().otp,\n        refCode,\n        contactNumber: get().contactNumber,\n        use: false,\n        channel: 'register',\n      });\n      set({ isLoading: false });\n\n      if (response.type === 'success') {\n        set({ error: null });\n      } else {\n        set({ error: response });\n      }\n\n      return response;\n    },\n\n    clear: () => {\n      set({\n        isLoading: false,\n        error: null,\n      });\n    },\n  };\n});\n","import { ErrorResponse, ServiceResponse, ZipCode } from '@bzbs/react-api-client';\nimport { create } from 'zustand';\nimport { useBuzzebeesAppStore } from './buzzebeess-app.store';\n\nexport type ZipcodeState = {\n  data: ZipCode[];\n  isLoading: boolean;\n  error: ErrorResponse | null;\n};\n\nexport type ZipcodeActions = {\n  fetchData: (zipcode: string) => Promise<ServiceResponse<ZipCode>>;\n  clear: () => void;\n};\n\nexport type ZipcodeStore = ZipcodeState & ZipcodeActions;\n\nexport const useZipcodeStore = create<ZipcodeStore>((set) => {\n  return {\n      data: [],\n    isLoading: false,\n    error: null,\n\n    fetchData: async (zipcode: string) => {\n      const bzbsService = useBuzzebeesAppStore.getState().bzbsService;\n      if (!bzbsService) {\n        return { type: 'client-error', message: 'Service not configured' } as ServiceResponse<ZipCode>;\n      }\n      const response = await bzbsService.addressApi.zipCodes({ zipCode: zipcode });\n      if (response.type === 'success') {\n        set({ data: response.model });\n      } else {\n        set({ error: response });\n      }\n      return response;\n    },\n\n    clear: () => {\n      set({\n        data: [],\n        isLoading: false,\n        error: null,\n      });\n    },\n  };\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,UAAAA,eAAc;;;ACAvB,SAAS,cAAc;AA2EhB,IAAM,uBAAuB,OAA0B,CAAC,SAAS;AAAA,EACtE,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,UAAU;AAAA,EACV,2BAA2B;AAAA,EAC3B,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,QAAQ;AAAA,IACN,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,EACzB;AAAA,EACA,UAAU,CAAC,UAAkB,IAAI,EAAE,MAAM,CAAC;AAAA,EAC1C,YAAY,CAAC,YAAoB,IAAI,EAAE,QAAQ,CAAC;AAAA,EAChD,gBAAgB,CAAC,YAAyB,IAAI,EAAE,aAAa,QAAQ,CAAC;AAAA,EACtE,SAAS,CAAC,SAAiB,IAAI,EAAE,KAAK,CAAC;AAAA,EACvC,eAAe,CAAC,eAAuB,IAAI,EAAE,WAAW,CAAC;AAAA,EACzD,kBAAkB,CAAC,kBAA0B,IAAI,EAAE,cAAc,CAAC;AAAA,EAClE,OAAO,CAAC,OAAe,IAAI,EAAE,GAAG,CAAC;AAAA,EACjC,aAAa,CAAC,aAAqB,IAAI,EAAE,SAAS,CAAC;AAAA,EACnD,aAAa,CAAC,aAAqB,IAAI,EAAE,SAAS,CAAC;AAAA,EACnD,8BAA8B,CAAC,8BAAuC,IAAI,EAAE,0BAA0B,CAAC;AAAA,EACvG,SAAS,CAAC,SAAgD,IAAI,EAAE,KAAK,CAAC;AAAA,EACtE,mBAAmB,CAAC,mBAAmC,IAAI,EAAE,eAAe,CAAC;AAAA,EAC7E,cAAc,CAAC,cAA6B,IAAI,EAAE,UAAU,CAAC;AAAA,EAC7D,WAAW,CAAC,WAiBN;AACJ,QAAI;AAAA,MACF,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,MAChB,aAAa,OAAO;AAAA,MACpB,MAAM,OAAO;AAAA,MACb,eAAe,OAAO;AAAA,MACtB,IAAI,OAAO;AAAA,MACX,UAAU,OAAO;AAAA,MACjB,UAAU,OAAO;AAAA,MACjB,2BAA2B,OAAO;AAAA,MAClC,MAAM,OAAO;AAAA,MACb,gBAAgB,OAAO;AAAA,MACvB,WAAW,OAAO;AAAA,MAClB,QAAQ;AAAA,QACN,wBAAwB,OAAO;AAAA,QAC/B,sBAAsB,OAAO;AAAA,QAC7B,mBAAmB,OAAO;AAAA,QAC1B,uBAAuB,OAAO;AAAA,MAChC;AAAA,IACF,CAAC;AAAA,EACH;AACF,EAAE;;;AD7GK,IAAM,kBAAkBC,QAAqB,CAAC,KAAK,SAAS;AAAA;AAAA,EAEjE,MAAM,CAAC;AAAA,EACP,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,OAAO;AAAA,EAEP,oBAAoB,CAAC,YAA4B,IAAI,EAAE,iBAAiB,QAAQ,CAAC;AAAA,EAEjF,WAAW,MAAY;AACrB,UAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,QAAI,CAAC,aAAa;AAChB,aAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,IACnE;AAEA,QAAI,EAAE,WAAW,KAAK,CAAC;AACvB,UAAM,WAAW,MAAM,YAAY,WAAW,cAAc;AAC5D,QAAI,EAAE,WAAW,MAAM,CAAC;AAExB,QAAI,SAAS,SAAS,WAAW;AAC/B,UAAI;AAAA,QACF,MAAM,SAAS;AAAA,QACf,OAAO;AAAA,MACT,CAAC;AAAA,IACH,OAAO;AACL,UAAI,EAAE,OAAO,SAAS,CAAC;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,CAAO,YAAiC;AACrD,UAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,QAAI,CAAC,aAAa;AAChB,aAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,IACnE;AAEA,QAAI,EAAE,WAAW,KAAK,CAAC;AACvB,UAAM,WAAW,MAAM,YAAY,WAAW,cAAc,iCACvD,UADuD;AAAA,MAE1D,QAAQ;AAAA,IACV,EAAC;AACD,QAAI,EAAE,WAAW,MAAM,CAAC;AAExB,QAAI,SAAS,SAAS,WAAW;AAE/B,UAAI,EAAE,UAAU;AAChB,UAAI,EAAE,OAAO,KAAK,CAAC;AAAA,IACrB,OAAO;AACL,UAAI,EAAE,OAAO,SAAS,CAAC;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,CAAO,YAAiC;AACrD,UAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,QAAI,CAAC,aAAa;AAChB,aAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,IACnE;AAEA,QAAI,EAAE,WAAW,KAAK,CAAC;AACvB,UAAM,WAAW,MAAM,YAAY,WAAW,cAAc,iCACvD,UADuD;AAAA,MAE1D,QAAQ,QAAQ,UAAU;AAAA,IAC5B,EAAC;AACD,QAAI,EAAE,WAAW,MAAM,CAAC;AAExB,QAAI,SAAS,SAAS,WAAW;AAE/B,UAAI,EAAE,UAAU;AAChB,UAAI,EAAE,OAAO,KAAK,CAAC;AAAA,IACrB,OAAO;AACL,UAAI,EAAE,OAAO,SAAS,CAAC;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,CAAO,WAAmB;AACvC,UAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,QAAI,CAAC,aAAa;AAChB,aAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,IACnE;AAEA,QAAI,EAAE,WAAW,KAAK,CAAC;AACvB,UAAM,WAAW,MAAM,YAAY,WAAW,cAAc,EAAE,OAAO,CAAC;AACtE,QAAI,EAAE,WAAW,MAAM,CAAC;AAExB,QAAI,SAAS,SAAS,WAAW;AAE/B,UAAI,EAAE,UAAU;AAChB,UAAI,EAAE,OAAO,KAAK,CAAC;AAAA,IACrB,OAAO;AACL,UAAI,EAAE,OAAO,SAAS,CAAC;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAM;AACX,QAAI;AAAA,MACF,MAAM,CAAC;AAAA,MACP,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF,EAAE;;;AE1JF,SAAS,UAAAC,eAAc;AAqBhB,IAAM,gBAAgBA,QAAmB,CAAC,KAAK,SAAS;AAAA,EAC7D,QAAQ;AAAA,EACR,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS,MAAM;AAAA,IAAC;AAAA,EAClB;AAAA,EAEA,WAAW,CAAC,YAA0B;AACpC,QAAI,EAAE,cAAc,SAAS,QAAQ,KAAK,CAAC;AAAA,EAC7C;AAAA,EAEA,YAAY,MAAM;AAChB,UAAM,EAAE,aAAa,IAAI,IAAI;AAC7B,iBAAa,QAAQ;AACrB,QAAI,EAAE,QAAQ,MAAM,CAAC;AAAA,EACvB;AACF,EAAE;;;ACrCF,OAAO,mBAAmB;AAC1B,SAAS,UAAAC,eAAc;AA6DhB,IAAM,oBAAoBC,QAAuB,CAAC,KAAK,SAAS;AAAA,EACrE,eAAe;AAAA,EACf,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,KAAK;AAAA,EACL,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAEhB,YAAY,CAAC,WAAW;AACtB,QAAI;AAEF,YAAM,iBAAiB,IAAI,cAAc;AAAA,QACvC,SAAS,OAAO;AAAA,QAChB,QAAQ,OAAO;AAAA,QACf,YAAY,OAAO;AAAA,QACnB,QAAQ,OAAO;AAAA,QACf,UAAU,OAAO,YAAY;AAAA,QAC7B,KAAK,OAAO,OAAO;AAAA,MACrB,CAAC;AAED,UAAI;AAAA,QACF,QAAQ,OAAO;AAAA,QACf,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,QAAQ,OAAO;AAAA,QACf,UAAU,OAAO,YAAY;AAAA,QAC7B,KAAK,OAAO,OAAO;AAAA,QACnB;AAAA,QACA,eAAe;AAAA,MACjB,CAAC;AAED,cAAQ,IAAI,yCAAyC,MAAM;AAAA,IAC7D,SAAS,OAAO;AACd,cAAQ,MAAM,kDAAkD,KAAK;AACrE,UAAI;AAAA,QACF,QAAQ,OAAO;AAAA,QACf,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,QAAQ,OAAO;AAAA,QACf,UAAU,OAAO,YAAY;AAAA,QAC7B,KAAK,OAAO,OAAO;AAAA,QACnB,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,YAAY,CAAC,YAAqB;AAChC,QAAI,EAAE,WAAW,QAAQ,CAAC;AAAA,EAC5B;AAAA,EAEA,mBAAmB,CAAC,aAAuB;AACzC,QAAI,EAAE,gBAAgB,SAAS,CAAC;AAAA,EAClC;AAAA,EAEA,qBAAqB,MAAM;AACzB,QAAI,EAAE,gBAAgB,OAAU,CAAC;AAAA,EACnC;AAAA,EAEA,eAAe,CAAO,aAAwB;AAC5C,UAAM,QAAQ,IAAI;AAClB,QAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa,CAAC,MAAM,kBAAkB,MAAM,UAAU;AACvF,cAAQ,MAAM,sFAAsF;AACpG;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,iBAAiB,kCAAK,MAAM,iBAAmB;AAErD,YAAM,MAAM,eAAe,cAAc;AAAA,QACvC,UAAU,OAAO,KAAK,cAAc,EAAE,SAAS,IAAI,iBAAiB;AAAA,MACtE,CAAC;AAED,UAAI,MAAM,KAAK;AACb,gBAAQ,MAAM,6CAA6C,EAAE,UAAU,eAAe,CAAC;AAAA,MACzF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,wCAAwC,KAAK;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,YAAY,CAAO,WAAiC;AAClD,UAAM,QAAQ,IAAI;AAClB,QAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa,CAAC,MAAM,kBAAkB,MAAM,UAAU;AACvF,cAAQ,MAAM,oFAAoF,MAAM;AACxG;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,iBAAiB,kCAAK,MAAM,iBAAmB,OAAO;AAE5D,YAAM,MAAM,eAAe,WAAW;AAAA,QACpC,UAAU,OAAO,YAAY;AAAA,QAC7B,QAAQ,OAAO;AAAA,QACf,MAAM,OAAO;AAAA,QACb,OAAO,OAAO;AAAA,QACd,UAAU,OAAO;AAAA,QACjB,UAAU,OAAO,KAAK,cAAc,EAAE,SAAS,IAAI,iBAAiB;AAAA,MACtE,CAAC;AAED,UAAI,MAAM,KAAK;AACb,gBAAQ,MAAM,yCAAyC,MAAM;AAAA,MAC/D;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,oCAAoC,OAAO,MAAM;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,iBAAiB,CAAO,WAAoC;AAC1D,UAAM,QAAQ,IAAI;AAClB,QAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa,CAAC,MAAM,kBAAkB,MAAM,UAAU;AACvF,cAAQ,MAAM,0FAA0F,MAAM;AAC9G;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,iBAAiB,kCAAK,MAAM,iBAAmB,OAAO;AAE5D,YAAM,MAAM,eAAe,gBAAgB;AAAA,QACzC,MAAM,OAAO;AAAA,QACb,UAAU,OAAO,KAAK,cAAc,EAAE,SAAS,IAAI,iBAAiB;AAAA,MACtE,CAAC;AAED,UAAI,MAAM,KAAK;AACb,gBAAQ,MAAM,+CAA+C,MAAM;AAAA,MACrE;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,0CAA0C,OAAO,MAAM;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,aAAa,CAAO,WAAoC;AACtD,UAAM,QAAQ,IAAI;AAClB,QAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa,CAAC,MAAM,kBAAkB,MAAM,UAAU;AACvF,cAAQ,MAAM,qFAAqF,MAAM;AACzG;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,iBAAiB,kCAAK,MAAM,iBAAmB,OAAO;AAE5D,YAAM,MAAM,eAAe,YAAY;AAAA,QACrC,MAAM,OAAO;AAAA,QACb,UAAU,OAAO,KAAK,cAAc,EAAE,SAAS,IAAI,iBAAiB;AAAA,MACtE,CAAC;AAED,UAAI,MAAM,KAAK;AACb,gBAAQ,MAAM,0CAA0C,MAAM;AAAA,MAChE;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,qCAAqC,OAAO,MAAM;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,iBAAiB,CAAO,WAAwF;AAC9G,UAAM,QAAQ,IAAI;AAClB,QAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa,CAAC,MAAM,kBAAkB,MAAM,UAAU;AACvF,cAAQ,MAAM,0FAA0F,MAAM;AAC9G;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,iBAAiB,kCAAK,MAAM,iBAAmB,OAAO;AAE5D,YAAM,MAAM,eAAe,gBAAgB;AAAA,QACzC,SAAS,OAAO;AAAA,QAChB,UAAU,OAAO;AAAA,QACjB,OAAO,OAAO;AAAA,QACd,UAAU,OAAO,KAAK,cAAc,EAAE,SAAS,IAAI,iBAAiB;AAAA,MACtE,CAAC;AAED,UAAI,MAAM,KAAK;AACb,gBAAQ,MAAM,+CAA+C,MAAM;AAAA,MACrE;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,0CAA0C,OAAO,MAAM;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,WAAW,CAAO,WAAkD;AAClE,UAAM,QAAQ,IAAI;AAClB,QAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa,CAAC,MAAM,kBAAkB,MAAM,UAAU;AACvF,cAAQ,MAAM,mFAAmF,MAAM;AACvG;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,iBAAiB,kCAAK,MAAM,iBAAmB,OAAO;AAE5D,YAAM,MAAM,eAAe,UAAU;AAAA,QACnC,MAAM,OAAO;AAAA,QACb,UAAU,OAAO,KAAK,cAAc,EAAE,SAAS,IAAI,iBAAiB;AAAA,MACtE,CAAC;AAED,UAAI,MAAM,KAAK;AACb,gBAAQ,MAAM,wCAAwC,MAAM;AAAA,MAC9D;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,mCAAmC,OAAO,MAAM;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,eAAe,CAAO,WAAsD;AAC1E,UAAM,QAAQ,IAAI;AAClB,QAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,aAAa,CAAC,MAAM,kBAAkB,MAAM,UAAU;AACvF,cAAQ,MAAM,uFAAuF,MAAM;AAC3G;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,iBAAiB,kCAAK,MAAM,iBAAmB,OAAO;AAE5D,YAAM,MAAM,eAAe,cAAc;AAAA,QACvC,UAAU,OAAO;AAAA,QACjB,UAAU,OAAO,KAAK,cAAc,EAAE,SAAS,IAAI,iBAAiB;AAAA,MACtE,CAAC;AAED,UAAI,MAAM,KAAK;AACb,gBAAQ,MAAM,4CAA4C,MAAM;AAAA,MAClE;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,uCAAuC,OAAO,MAAM;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,WAAW,CAAC,WAA0B;AACpC,UAAM,QAAQ,IAAI;AAGlB,QAAI,QAAQ;AACV,YAAM,kBAAkB,iCACnB,MAAM,iBADa;AAAA,QAEtB,KAAK;AAAA,MACP;AACA,UAAI;AAAA,QACF;AAAA,QACA,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH,OAAO;AAEL,YAAM,kBAAkB,MAAM,kBAAkB,CAAC;AACjD,UAAI,gBAAgB,KAAK;AACvB,cAAM,kBAAkB,mBAAK;AAC7B,eAAO,gBAAgB;AAEvB,YAAI;AAAA,UACF,QAAQ;AAAA,UACR,gBAAgB,OAAO,KAAK,eAAe,EAAE,SAAS,IAAI,kBAAkB;AAAA,QAC9E,CAAC;AAAA,MACH,OAAO;AACL,YAAI,EAAE,QAAQ,OAAU,CAAC;AAAA,MAC3B;AAAA,IACF;AAEA,QAAI,MAAM,KAAK;AACb,cAAQ,MAAM,iDAAiD,MAAM;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,oBAAoB,CAAC,IAAY,UAAkB;AACjD,UAAM,QAAQ,IAAI;AAClB,QAAI,CAAC,MAAM,gBAAgB;AACzB,UAAI,EAAE,gBAAgB,EAAE,CAAC,YAAY,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;AAAA,IACvD,OAAO;AACL,UAAI;AAAA,QACF,gBAAgB,iCACX,MAAM,iBADK;AAAA,UAEd,CAAC,YAAY,EAAE,EAAE,GAAG;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,MAAM,KAAK;AACb,cAAQ,MAAM,sDAAsD,EAAE,IAAI,MAAM,CAAC;AAAA,IACnF;AAAA,EACF;AAAA,EAEA,OAAO,MAAM;AACX,QAAI;AAAA,MACF,eAAe;AAAA,MACf,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,MACL,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,IAClB,CAAC;AAED,YAAQ,MAAM,qCAAqC;AAAA,EACrD;AACF,EAAE;;;AClWF,SAAS,UAAAC,eAAc;;;ACZvB,SAAS,UAAAC,eAAc;;;ACAhB,IAAM,kBAA6C;AAAA,EACxD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,KAAK;AAAA,EACL,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV,cAAc;AAAA,EACd,SAAS;AAAA,EACT,KAAK;AAAA,EACL,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAAA,EACd,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,eAAe;AAAA,EACf,cAAc;AAAA,EACd,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AACZ;AAEO,SAAS,yBAAyB,OAAqD;AAE5F,MAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,UAAU,gBAAgB,KAAK;AAAA,IACjC;AAAA,EACF;AAGA,QAAM,eAAe,OAAO,KAAK,eAAe,EAAE,KAAK,CAAC,QAAQ,IAAI,WAAW,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAEnG,MAAI,cAAc;AAChB,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,UAAU,gBAAgB,YAAY;AAAA,IACxC;AAAA,EACF;AAGA,QAAM,IAAI,MAAM,WAAW,KAAK,qBAAqB;AACvD;;;AD3MO,IAAM,KAAK,EAAE,QAAQ,MAAM,UAAU,KAAK;AAC1C,IAAM,KAAK,EAAE,QAAQ,MAAM,UAAU,KAAK;AAc1C,IAAM,iBAAiBC,QAAoB,CAAC,SAAS;AAAA,EAC1D,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EAEV,cAAc,CAAC,WAA+B;AAC5C,UAAM,YAAY,OAAO,WAAW,WAAW,yBAAyB,MAAM,IAAI;AAClF,QAAI;AAAA,MACF,WAAW;AAAA,MACX,QAAQ,UAAU;AAAA,MAClB,UAAU,UAAU;AAAA,IACtB,CAAC;AAAA,EACH;AACF,EAAE;;;AEnCF,OAAOC,UAAS,iBAAiB;;;ACAjC,OAAOC,kBAAiB,gBAAgB,iBAAiB;AACzD,OAAO,SAAS,eAAe,YAAY,gBAAgB;AA4CpD,IAAM,mBAAmB,cAAoC;AAAA,EAClE,eAAe;AAAA,EACf,WAAW;AAAA,EACX,SAAS;AAAA,IACP,YAAY,MAAM;AAAA,IAAC;AAAA,IACnB,mBAAmB,MAAM;AAAA,IAAC;AAAA,IAC1B,qBAAqB,MAAM;AAAA,IAAC;AAAA,IAC5B,eAAe,MAAY;AAAA,IAAC;AAAA,IAC5B,YAAY,MAAY;AAAA,IAAC;AAAA,IACzB,iBAAiB,MAAY;AAAA,IAAC;AAAA,IAC9B,aAAa,MAAY;AAAA,IAAC;AAAA,IAC1B,iBAAiB,MAAY;AAAA,IAAC;AAAA,IAC9B,WAAW,MAAY;AAAA,IAAC;AAAA,IACxB,eAAe,MAAY;AAAA,IAAC;AAAA,IAC5B,WAAW,MAAM;AAAA,IAAC;AAAA,IAClB,oBAAoB,MAAM;AAAA,IAAC;AAAA,IAC3B,OAAO,MAAM;AAAA,IAAC;AAAA,EAChB;AACF,CAAC;AAEM,SAAS,sBAAsB;AACpC,SAAO,WAAW,gBAAgB;AACpC;;;AD5DO,IAAM,kBAAkB,CAAC,UAAmB,eAA0B,CAAC,GAAG,mBAA8B;AAC7G,QAAM,EAAE,SAAS,eAAe,UAAU,IAAI,oBAAoB;AAElE,YAAU,MAAM;AACd,QAAI,iBAAiB,WAAW;AAC9B,cAAQ,gBAAgB;AAAA,QACtB,MAAM,aAAa,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW;AAAA,QAC9E,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,eAAe,WAAW,UAAU,gBAAgB,GAAG,YAAY,CAAC;AAC1E;AAKO,IAAM,eAAe,MAAM;AAChC,QAAM,EAAE,SAAS,eAAe,UAAU,IAAI,oBAAoB;AAElE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,QAAQ;AAAA,IACpB,iBAAiB,QAAQ;AAAA,IACzB,aAAa,QAAQ;AAAA,IACrB,eAAe,QAAQ;AAAA,IACvB,iBAAiB,QAAQ;AAAA,IACzB,WAAW,QAAQ;AAAA,IACnB,eAAe,QAAQ;AAAA,IACvB,WAAW,QAAQ;AAAA,IACnB,oBAAoB,QAAQ;AAAA,IAC5B,YAAY,QAAQ;AAAA,IACpB,mBAAmB,QAAQ;AAAA,IAC3B,qBAAqB,QAAQ;AAAA,EAC/B;AACF;AAKO,IAAM,oBAAoB,MAAM;AACrC,SAAO,kBAAkB;AAC3B;AAKO,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,EAK/B,iBAAiB,CAAO,aAAwB;AAC9C,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,CAAO,aAAwB;AAC3C,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,CAAO,aAAwB;AAC3C,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,CAAO,YAAoB,aAAwB;AAChE,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA;AAAA,QAEN,UAAU,iCACL,WADK;AAAA,UAER,YAAY;AAAA;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,CAAO,aAAwB;AAC/C,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,CAAO,YAAoB,WAAmB,MAAM,aAAwB;AACvF,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,CAAO,UAAkB,UAAmB,MAAM,aAAwB;AACpF,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN,UAAU,iCACL,WADK;AAAA,UAER,YAAY,UAAU,YAAY;AAAA,QACpC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,CAAO,SAAiB,aAAsB,WAAmB,UAAU,aAAwB;AACzG,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,gBAAgB;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,CAAO,QAAgB,WAAmB,OAAO,aAAsB,aAAwB;AACvG,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM,eAAe;AAAA,QACrB,OAAO;AAAA,QACP,UAAU,iCACL,WADK;AAAA,UAER,YAAY;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,CAAO,SAAiB,SAAS,aAAwB;AACzE,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM,gBAAgB,MAAM;AAAA,QAC5B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,CAAO,SAAiB,SAAS,aAAwB;AAClE,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM,SAAS,MAAM;AAAA,QACrB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,CAAO,WAAmB,cAAuB,aAAwB;AAC9E,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN,UAAU,iCACL,WADK;AAAA,UAER,YAAY;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,CAAO,MAAc,UAAkB,OAAgB,OAAgB,aAAwB;AACrG,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,iCACL,WADK;AAAA,UAER,YAAY;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAKO,IAAM,mBAAmB,CAC9B,WACA,UACA,mBAC2B;AAC3B,QAAM,mBAAmB,CAAC,UAAa;AACrC,oBAAgB,UAAU,CAAC,GAAG,cAAc;AAC5C,WAAOC,OAAM,cAAc,WAAW,KAAK;AAAA,EAC7C;AAGA,mBAAiB,cAAc,oBAAoB,UAAU,eAAe,UAAU,QAAQ,WAAW;AAEzG,SAAO;AACT;AAKO,IAAM,sBAAsB,CAAC,WAO9B;AACJ,QAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAM,WAAW,MAAM;AACzB;AAKO,IAAM,YAAY;AAAA;AAAA;AAAA;AAAA,EAIvB,MAAM,CAAC,WAOD;AACJ,UAAM,QAAQ,kBAAkB,SAAS;AACzC,UAAM,WAAW,MAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,CAAO,WAOb;AACJ,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,WAAW,MAAM;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,CAAO,MAAc,aAAwB;AAC5D,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAAA,IAChD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,CAAO,aAAwB;AAC5C,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,cAAc,QAAQ;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,CAAO,SAAiB,UAAmB,OAAgB,aAAwB;AAClG,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,gBAAgB,EAAE,SAAS,UAAU,OAAO,SAAS,CAAC;AAAA,IACpE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,CAAO,MAAc,aAAwB;AACtD,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,UAAU,EAAE,MAAM,SAAS,CAAC;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,CAAO,UAAkB,aAAwB;AAC9D,UAAM,QAAQ,kBAAkB,SAAS;AACzC,QAAI,MAAM,iBAAiB,MAAM,WAAW;AAC1C,YAAM,MAAM,cAAc,EAAE,UAAU,SAAS,CAAC;AAAA,IAClD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,CAAC,WAA0B;AACpC,UAAM,QAAQ,kBAAkB,SAAS;AACzC,UAAM,UAAU,MAAM;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,CAAC,IAAY,UAAkB;AACjD,UAAM,QAAQ,kBAAkB,SAAS;AACzC,UAAM,mBAAmB,IAAI,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,CAAC,aAAuB;AACzC,UAAM,QAAQ,kBAAkB,SAAS;AACzC,UAAM,kBAAkB,QAAQ;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB,MAAM;AACzB,UAAM,QAAQ,kBAAkB,SAAS;AACzC,UAAM,oBAAoB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,CAAC,YAAqB;AAChC,UAAM,QAAQ,kBAAkB,SAAS;AACzC,UAAM,WAAW,OAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM;AACX,UAAM,QAAQ,kBAAkB,SAAS;AACzC,UAAM,MAAM;AAAA,EACd;AACF;;;AE1bA,SAAS,aAAa,OAAwB;AAC5C,SAAO,6BAA6B,KAAK,KAAK;AAChD;;;ACFO,IAAM,eAAe;AAAA,EAC1B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AAAA,EACP,OAAO;AAAA,EACP,cAAc;AAAA,EACd,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,eAAe;AAAA,EACf,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,WAAW;AAAA,EACX,iBAAiB;AACnB;AAEO,IAAM,oBAAoB;AAAA,EAC/B,KAAK;AAAA,EACL,KAAK;AACP;AAEO,IAAM,wBAAwB;AAAA,EACnC,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,eAAe;AACjB;;;ACvBO,SAAS,sBAAsB,MAAkC;AAzBxE;AA0BE,QAAM,SAAQ,UAAK,SAAL,YAAa;AAC3B,QAAM,gBAAe,UAAK,iBAAL,YAAqB;AAC1C,QAAM,SAAQ,UAAK,iBAAL,YAAqB;AACnC,QAAM,gBAAe,UAAK,cAAL,YAAkB;AACvC,QAAM,aAAa,IAAI,OAAM,UAAK,sBAAL,YAA0B,KAAK,GAAI;AAEhE,MAAI,WAAW;AACf,MAAI,SAA6B;AAEjC,MAAI,KAAK,cAAc;AACrB,WAAO,EAAE,OAAO,cAAc,YAAY,OAAO,cAAc,UAAU,OAAO,SAAS,OAAO,QAAQ,OAAO;AAAA,EACjH;AAEA,MAAI,KAAK,aAAc,KAAK,YAAY,KAAK,YAAY,GAAI;AAC3D,WAAO,EAAE,OAAO,cAAc,YAAY,OAAO,cAAc,UAAU,OAAO,SAAS,MAAM,QAAQ,UAAU;AAAA,EACnH;AAEA,MAAI,KAAK,qBAAqB,KAAK,qBAAqB,KAAK,IAAI,IAAI,KAAM;AACzE,WAAO,EAAE,OAAO,cAAc,YAAY,OAAO,cAAc,UAAU,OAAO,SAAS,MAAM,QAAQ,UAAU;AAAA,EACnH;AAEA,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK,aAAa;AAAA,IAClB,KAAK,aAAa;AAChB,eAAS;AACT,iBAAW;AACX;AAAA,IACF,KAAK,aAAa;AAChB,UAAI,KAAK,WAAW;AAClB,iBAAS,KAAK,WAAW,aAAa;AAAA,MACxC,OAAO;AACL,iBAAS;AAAA,MACX;AACA;AAAA,EACJ;AAEA,MAAI,KAAK,WAAW;AAClB,eAAW;AACX,aAAS,KAAK,YAAY,YAAY;AAAA,EACxC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACF;AACF;;;AChEA,SAAS,UAAAC,eAAc;;;ACZvB,YAAY,WAAW;AACvB,OAAO,cAAc;AACrB,SAAS,MAAM,cAAc;AAG7B,IAAM,eAAe,IAAI,SAAS;AAElC,SAAS,+BAAuC;AAC9C,SAAO,OAAO;AAChB;AAEA,SAAS,MAAM,OAAwB;AACrC,SAAO,OAAO,UAAU,YAAY,MAAM,MAAM,GAAG,EAAE,WAAW;AAClE;AAEA,SAAS,4BACP,eACA,OACA,iBACA,gBACA,YACA,wBAAsC,8BACtC;AACA,gBAAc,aAAa,QAAQ;AAAA,IACjC,CAAO,WAAW;AAChB,aAAO,QAAQ,IAAI,UAAU,KAAK;AAElC,UAAI,iBAAiB;AACnB,eAAO,QAAQ,IAAI,6BAA6B,eAAe;AAAA,MACjE;AAEA,UAAI,YAAY;AACd,eAAO,QAAQ,IAAI,eAAe,UAAU;AAAA,MAC9C;AAEA,aAAO,QAAQ,IAAI,mBAAmB,sBAAsB,CAAC;AAC7D,YAAM,QAAQ,MAAM,eAAe,SAAS;AAE5C,UAAI,OAAO;AACT,YAAI,MAAM,KAAK,GAAG;AAChB,iBAAO,QAAQ,IAAI,iBAAiB,UAAU,KAAK,EAAE;AAAA,QACvD,OAAO;AACL,iBAAO,QAAQ,IAAI,iBAAiB,SAAS,KAAK,EAAE;AAAA,QACtD;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,UAAU;AACT,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AACA,gBAAc,aAAa,SAAS;AAAA,IAClC,CAAC,aAAa;AACZ,YAAM,eAAe,SAAS;AAC9B,YAAM,eAAe,aAAa;AAClC,UAAI,cAAc;AAChB,cAAM,SAAS,aAAa;AAC5B,cAAM,SAAS,aAAa;AAE5B,YAAI,OAAO,WAAW,UAAU;AAC9B,uBAAa,KAAK,cAAc,YAAY;AAAA,QAC9C;AAEA,YAAI,QAAQ;AACV,uBAAa,KAAK,cAAc,MAAM;AAAA,QACxC;AAAA,MACF;AAEA,UAAI,aAAa,OAAO;AACtB,cAAM,KAAK,aAAa,MAAM;AAC9B,cAAM,OAAO,aAAa,MAAM;AAEhC,YAAI,SAAS,QAAQ,OAAO,QAAQ,OAAO,OAAO;AAChD,uBAAa,KAAK,mBAAmB,aAAa,KAAK;AAAA,QACzD;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,UAAU;AACT,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AACF;AAEA,SAAS,uBAA+B;AACtC,SAAO,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE;AACnD;AAEA,SAAS,UAAU,SAAiB,OAAe,QAAgB,OAAsB;AACvF,QAAM,MACJ,GAAG,OAAO,YAAY,MAAM,sBAAsB,KAAK,IAAI,CAAC,cACzD,UAAU,OAAO,KAAK,UAAU,KAAK,kBAAkB,KAAK,EAAE;AACnE,UAAQ,IAAI,GAAG;AACf,SAAO;AACT;AAEA,SAAS,WAAW,KAAa;AAC/B,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,SAAS,IAAI,QAAQ,KAAK,SAAS;AACzC,SAAO;AACT;AAEA,SAAe,WAAW,aAA4B,UAAkB;AAAA;AACtE,QAAI;AACF,YAAM,WAAW,MAAM,YAAY,IAAI,UAAU,EAAE,cAAc,OAAO,CAAC;AACzE,aAAO,SAAS;AAAA,IAClB,SAAS,OAAO;AACd,cAAQ,MAAM,yBAAyB,KAAK;AAAA,IAC9C;AAAA,EACF;AAAA;AAEA,SAAS,0BACP,KACA,OACA,YAAoB,IACpB,QACQ;AACR,MAAI,OAAO;AACT,aAAS;AAAA,MACP,OAAO,qBAAqB,KAAK;AAAA,MACjC,YAAY;AAAA,OACT;AAAA,EAEP;AACA,QAAM,eAAe,IAAI,gBAAgB,MAAM,EAAE,SAAS;AAC1D,QAAM,SAAS,IAAI,SAAS,GAAG,IAAI,GAAG,GAAG,IAAI,YAAY,KAAK,GAAG,GAAG,IAAI,YAAY;AACpF,SAAO;AACT;AAEA,SAAS,qBAAqB,OAAuB;AACnD,MAAI,MAAM,UAAU,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,MAAM,UAAU,GAAG,CAAC;AACtC,QAAM,aAAa,MAAM,UAAU,MAAM,SAAS,CAAC;AACnD,QAAM,iBAAiB,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC;AAE1D,SAAO,cAAc,MAAM,GAAG,UAAU,GAAG,cAAc,KAAK;AAChE;AAEA,SAAS,cAAc,SAAiB,SAAiB,WAAmB,QAAiC;AAC3G,QAAM,SAAS,QAAQ,SAAS,GAAG,IAAI,GAAG,OAAO,WAAW,OAAO,KAAK,GAAG,OAAO,YAAY,OAAO;AACrG,QAAM,YAAY;AAAA,IAChB,YAAY;AAAA,IACZ,gBAAgB;AAAA,KACb;AAEL,QAAM,eAAe,IAAI,gBAAgB,SAAS,EAAE,SAAS;AAC7D,SAAO,eAAe,GAAG,MAAM,IAAI,YAAY,KAAK;AACtD;AAEA,SAAS,4BAA4B,MAAc,KAAa,SAA8B;AAC5F,QAAM,WAAW,QAAQ,OAAO,GAAG;AACnC,SAAa,iBAAW,MAAM,UAAU,EAAE;AAC5C;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM,oBAAI,KAAK;AACjB,GAMG;AACD,QAAM,WAAW,IAAI,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI;AACnD,QAAM,YAAY,KAAK,MAAM,IAAI,QAAQ,IAAI,GAAI;AACjD,QAAM,OAAO,GAAG,KAAK,IAAI,aAAa,IAAI,OAAO,IAAI,QAAQ;AAC7D,QAAM,YAAY,4BAA4B,MAAM,OAAO,OAAO;AAClE,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,WAAW;AAAA,EACb;AACF;AAEA,SAAS,iCACP,eACA,OACA,SACA,qBAAiC,MAAM,oBAAI,KAAK,GAChD;AACA,gBAAc,aAAa,QAAQ,IAAI,CAAC,WAAW;AAEjD,QAAI,MAAM,KAAK,CAAC,SAAS,OAAO,OAAO,OAAO,IAAI,SAAS,IAAI,CAAC,GAAG;AAEjE,YAAM,WAAW,CAAC,QAAgB;AAEhC,YAAI,OAAO,UAAU,OAAO,OAAO,GAAG,EAAG,QAAO,OAAO,OAAO,GAAG;AAEjE,YAAI,OAAO,QAAQ,OAAO,OAAO,SAAS,YAAY,OAAO,KAAK,GAAG,EAAG,QAAO,OAAO,KAAK,GAAG;AAC9F,eAAO;AAAA,MACT;AACA,YAAM,QAAQ,SAAS,QAAQ;AAC/B,YAAM,gBAAgB,SAAS,gBAAgB;AAC/C,YAAM,UAAU,SAAS,SAAS;AAClC,UAAI,SAAS,iBAAiB,SAAS;AACrC,cAAM,MAAM,mBAAmB;AAC/B,cAAM,UAAU,uBAAuB,EAAE,OAAO,eAAe,SAAS,KAAK,QAAQ,CAAC;AACtF,eAAO,QAAQ,IAAI,iBAAiB,QAAQ,eAAe,CAAC;AAC5D,eAAO,QAAQ,IAAI,aAAa,QAAQ,WAAW,CAAC;AAAA,MACtD;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AACH;;;ADxGO,IAAM,eAAeC,QAAkB,CAAC,KAAK,QAAQ;AAC1D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB,CAAC;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,IACP,WAAW,CAAC;AAAA,IACZ,WAAW,CAAC;AAAA,IAEZ,WAAW,MAAY;AACrB,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAI,CAAC,aAAa;AAChB,YAAI,EAAE,WAAW,OAAO,OAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,EAAmB,CAAC;AAC7G,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AACA,YAAM,WAAW,MAAM,YAAY,WAAW,QAAQ;AACtD,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,MAAM,SAAS,OAAO,OAAO,KAAK,CAAC;AAAA,MAC3C,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,YAAY,MAAY;AA3I5B;AA4IM,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAI,CAAC,aAAa;AAChB,YAAI,EAAE,WAAW,OAAO,OAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,EAAmB,CAAC;AAC7G,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AACA,YAAM,WAAW,MAAM,YAAY,WAAW,OAAO;AACrD,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,SAAQ,cAAS,MAAM,WAAf,YAAyB,GAAG,OAAO,KAAK,CAAC;AAAA,MACzD,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,qBAAqB,MAAY;AA5JrC;AA6JM,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAI,CAAC,aAAa;AAChB,YAAI,EAAE,WAAW,OAAO,OAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,EAAmB,CAAC;AAC7G,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AACA,YAAM,WAAW,MAAM,YAAY,WAAW,eAAe;AAC7D,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,iBAAgB,cAAS,MAAM,oBAAf,YAAkC,CAAC,GAAG,OAAO,KAAK,CAAC;AAAA,MAC3E,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,gBAAgB,MAAY;AA7KhC;AA8KM,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAI,CAAC,aAAa;AAChB,YAAI,EAAE,WAAW,OAAO,OAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,EAAmB,CAAC;AAC7G,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AACA,YAAM,WAAW,MAAM,YAAY,QAAQ,UAAU;AACrD,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,YAAW,cAAS,MAAM,eAAf,YAA6B,GAAG,OAAO,KAAK,CAAC;AAAA,MAChE,OAAO;AACL,YAAI,EAAE,OAAO,UAAU,WAAW,EAAE,CAAC;AAAA,MACvC;AACA,aAAO;AAAA,IACT;AAAA,IAEA,UAAU,CAAO,SAA8B;AAC7C,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAI,CAAC,aAAa;AAChB,YAAI,EAAE,WAAW,OAAO,OAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,EAAmB,CAAC;AAC7G,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AACA,YAAM,WAAW,MAAM,YAAY,WAAW,cAAc,IAAI;AAChE,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,MAAM,SAAS,OAAO,OAAO,KAAK,CAAC;AAEzC,cAAM,EAAE,gBAAgB,UAAU,IAAI,qBAAqB,SAAS;AACpE,cAAM,QAAQ,cAAc,QAAQ,SAAS,MAAM,MAAM,SAAS,MAAM;AACxE,YAAI,SAAS,gBAAgB;AAC3B,yBAAe,SAAS,KAAK;AAAA,QAC/B;AAAA,MACF,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,gBAAgB,CAAO,aAAqB,gBAAwB;AAClE,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAI,CAAC,aAAa;AAChB,YAAI,EAAE,WAAW,OAAO,OAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,EAAmB,CAAC;AAC7G,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AACA,YAAM,WAAW,MAAM,YAAY,WAAW,eAAe,EAAE,SAAS,aAAa,QAAQ,YAAY,CAAC;AAC1G,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,OAAO,KAAK,CAAC;AAAA,MACrB,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,qBAAqB,CAAO,eAAuB,KAAa,YAAoB;AAClF,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAI,CAAC,aAAa;AAChB,YAAI,EAAE,WAAW,OAAO,OAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,EAAmB,CAAC;AAC7G,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AACA,YAAM,WAAW,MAAM,YAAY,WAAW,oBAAoB,EAAE,eAAe,KAAK,QAAQ,CAAC;AACjG,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,OAAO,KAAK,CAAC;AAAA,MACrB,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,cAAc,CAAO,WAAiB;AACpC,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAI,CAAC,aAAa;AAChB,YAAI,EAAE,WAAW,OAAO,OAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,EAAmB,CAAC;AAC7G,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AACA,YAAM,WAAW,MAAM,YAAY,WAAW,cAAc,EAAE,cAAc,OAAO,CAAC;AACpF,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,MAAM,SAAS,OAAO,OAAO,KAAK,CAAC;AAAA,MAC3C,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,qBAAqB,MAAM;AACzB,UAAI,EAAE,cAAc,EAAE,CAAC;AAAA,IACzB;AAAA,IAEA,oBAAoB,MAAM;AACxB,YAAM,EAAE,UAAU,IAAI,IAAI;AAC1B,UAAI,EAAE,aAAa,KAAK,CAAC;AACzB,UAAI,UAAU,SAAS,GAAG;AACxB,cAAM,OAAO,UAAU,CAAC;AACxB,cAAM,kBAAkB,UAAU,MAAM,CAAC;AACzC,YAAI,EAAE,aAAa,MAAM,WAAW,gBAAgB,CAAC;AAAA,MACvD;AAAA,IACF;AAAA,IAEA,oBAAoB,MAAM;AACxB,YAAM,EAAE,UAAU,IAAI,IAAI;AAC1B,UAAI,EAAE,aAAa,KAAK,CAAC;AACzB,UAAI,UAAU,SAAS,GAAG;AACxB,cAAM,OAAO,UAAU,CAAC;AACxB,cAAM,kBAAkB,UAAU,MAAM,CAAC;AACzC,YAAI,EAAE,aAAa,MAAM,WAAW,gBAAgB,CAAC;AAAA,MACvD;AAAA,IACF;AAAA,IAEA,YAAY,MAAY;AACtB,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAI,CAAC,aAAa;AAChB,YAAI,EAAE,WAAW,OAAO,OAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB,EAAmB,CAAC;AAC7G,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AACA,YAAM,WAAW,MAAM,YAAY,WAAW,WAAW;AACzD,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,MAAM;AAAA,MACd,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,UAAU,CAAC,UAAgC;AACzC,UAAI,EAAE,MAAM,CAAC;AAAA,IACf;AAAA,IAEA,OAAO,MAAM;AACX,UAAI;AAAA,QACF,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,gBAAgB,CAAC;AAAA,QACjB,aAAa;AAAA,QACb,aAAa;AAAA,QACb,WAAW;AAAA,QACX,WAAW;AAAA,QACX,OAAO;AAAA,QACP,WAAW,CAAC;AAAA,QACZ,WAAW,CAAC;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,qBAAqB,MAAM;AACzB,mBAAa,GAAG,cAAc,CAAC,cAAyB;AACtD,gBAAQ,IAAI,cAAc,SAAS;AACnC,cAAM,SAAS,UAAU;AACzB,YAAI,QAAQ;AACV,cAAI,EAAE,cAAc,OAAO,CAAC;AAAA,QAC9B;AAEA,cAAM,SAAS,UAAU;AACzB,YAAI,QAAQ;AACV,cAAI,OAAO,SAAS,GAAG;AACrB,kBAAM,QAAQ,OAAO,CAAC;AACtB,kBAAM,kBAAkB,OAAO,MAAM,CAAC;AACtC,gBAAI,EAAE,aAAa,OAAO,WAAW,gBAAgB,CAAC;AAAA,UACxD;AAAA,QACF;AAAA,MACF,CAAC;AAED,mBAAa,GAAG,cAAc,CAAC,WAAoB;AACjD,YAAI,OAAO,SAAS,GAAG;AACrB,gBAAM,QAAQ,OAAO,CAAC;AACtB,gBAAM,kBAAkB,OAAO,MAAM,CAAC;AACtC,cAAI,EAAE,aAAa,OAAO,WAAW,gBAAgB,CAAC;AAAA,QACxD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,uBAAuB,MAAM;AAC3B,cAAQ,IAAI,mBAAmB;AAC/B,mBAAa,eAAe,CAAC,cAAc,YAAY,CAAC;AAAA,IAC1D;AAAA,EACF;AACF,CAAC;;;AR9RM,IAAM,eAAeC,QAAkB,CAAC,QAAQ;AAErD,QAAM,cAAc,CAAO,OAA6E,eAA7E,KAA6E,WAA7E,EAAE,QAAQ,GAAmE;AAzE1G;AA0EI,UAAM,EAAE,aAAa,gBAAgB,UAAU,IAAI,qBAAqB,SAAS;AAEjF,QAAI,CAAC,eAAe,CAAC,gBAAgB;AACnC,aAAO,EAAE,MAAM,gBAAgB,SAAS,6CAA6C;AAAA,IACvF;AAEA,QAAI,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpC,UAAM,WAAW,MAAM,QAAQ;AAC/B,QAAI,EAAE,WAAW,MAAM,CAAC;AAExB,QAAI,SAAS,SAAS,WAAW;AAC/B,YAAM,QAAQ,cAAc,QAAQ,SAAS,MAAM,MAAM,SAAS,MAAM;AACxE,qBAAe,SAAS,KAAK;AAE7B,UAAI;AAAA,QACF,MAAM,SAAS;AAAA,QACf,OAAO,SAAS,MAAM;AAAA,QACtB,YAAY;AAAA,QACZ,OAAO;AAAA,MACT,CAAC;AACD,wBAAkB,SAAS,EAAE,UAAU,SAAS,MAAM,MAAM;AAC5D,wBAAkB,SAAS,EAAE,mBAAmB,GAAG,qBAAqB,SAAS,EAAE,aAAa;AAChG,wBAAkB,SAAS,EAAE,mBAAmB,GAAG,qBAAqB,SAAS,EAAE,KAAK;AAExF,YAAM,eAAe,MAAM,aAAa,SAAS,EAAE,UAAU;AAC7D,UAAI,aAAa,SAAS,WAAW;AACnC,0BAAkB,SAAS,EAAE,mBAAmB,IAAG,kBAAa,MAAM,mBAAnB,YAAqC,EAAE;AAC1F,0BAAkB,SAAS,EAAE,mBAAmB,IAAG,kBAAa,MAAM,UAAnB,YAA4B,EAAE;AAAA,MACnF;AAEA,wBAAkB,aAAa;AAAA,IACjC,OAAO;AACL,UAAI,EAAE,OAAO,SAAS,CAAC;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,eAAe;AAAA,IACf,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,MAAM;AAAA,IACN,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,IAEZ,cAAc,CAAC,cAAuB,IAAI,EAAE,UAAU,CAAC;AAAA,IACvD,mBAAmB,CAAC,mBAA4B,IAAI,EAAE,eAAe,CAAC;AAAA,IACtE,UAAU,CAAC,UAAgC,IAAI,EAAE,MAAM,CAAC;AAAA,IAExD,eAAe,MAAY;AACzB,YAAM,EAAE,eAAe,IAAI,qBAAqB,SAAS;AACzD,UAAI,CAAC,gBAAgB;AACnB,YAAI,EAAE,YAAY,OAAO,eAAe,KAAK,CAAC;AAC9C;AAAA,MACF;AAEA,UAAI;AACF,YAAI,EAAE,gBAAgB,KAAK,CAAC;AAC5B,cAAM,QAAQ,MAAM,eAAe,SAAS;AAC5C,YAAI,OAAO;AACT,cAAI,EAAE,YAAY,MAAM,MAAM,CAAC;AAAA,QACjC,OAAO;AACL,cAAI,EAAE,YAAY,OAAO,OAAO,KAAK,CAAC;AAAA,QACxC;AAAA,MACF,SAAS,OAAO;AACd,YAAI,EAAE,YAAY,OAAO,OAAO,KAAK,CAAC;AAAA,MACxC,UAAE;AACA,YAAI,EAAE,gBAAgB,OAAO,eAAe,KAAK,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,IAEA,2BAA2B,CAAO,UAAkB,aAAqB;AACvE,YAAM,EAAE,OAAO,MAAM,IAAI,UAAU,2BAA2B,eAAe,SAAS,IACpF,qBAAqB,SAAS;AAChC,YAAM,WAAW,eAAe,SAAS,EAAE;AAC3C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,aAAO,YAAY;AAAA,QACjB,SAAS,MACP,YAAY,QAAQ,sBAAsB;AAAA,UACxC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc,SAAS,SAAS;AAAA,UAChC;AAAA,QACF,CAAC;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IAEA,iBAAiB,CAAO,UAAkB;AACxC,YAAM,EAAE,OAAO,MAAM,IAAI,UAAU,2BAA2B,eAAe,SAAS,IACpF,qBAAqB,SAAS;AAChC,YAAM,WAAW,eAAe,SAAS,EAAE;AAC3C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,aAAO,YAAY;AAAA,QACjB,SAAS,MACP,YAAY,QAAQ,YAAY;AAAA,UAC9B,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc,SAAS,SAAS;AAAA,UAChC;AAAA,QACF,CAAC;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IAEA,mBAAmB,CAAO,UAAkB;AAC1C,YAAM,EAAE,OAAO,MAAM,IAAI,UAAU,2BAA2B,eAAe,SAAS,IACpF,qBAAqB,SAAS;AAChC,YAAM,WAAW,eAAe,SAAS,EAAE;AAC3C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,aAAO,YAAY;AAAA,QACjB,SAAS,MACP,YAAY,QAAQ,cAAc;AAAA,UAChC,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc,SAAS,SAAS;AAAA,UAChC;AAAA,QACF,CAAC;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IAEA,gBAAgB,CAAO,OAAe,iBAAyB;AAC7D,YAAM,EAAE,OAAO,MAAM,IAAI,UAAU,2BAA2B,eAAe,SAAS,IACpF,qBAAqB,SAAS;AAChC,YAAM,WAAW,eAAe,SAAS,EAAE;AAC3C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,aAAO,YAAY;AAAA,QACjB,SAAS,MACP,YAAY,QAAQ,WAAW;AAAA,UAC7B,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc,SAAS,SAAS;AAAA,UAChC;AAAA,QACF,CAAC;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IAEA,eAAe,MAAY;AACzB,YAAM,EAAE,OAAO,MAAM,IAAI,UAAU,2BAA2B,eAAe,SAAS,IACpF,qBAAqB,SAAS;AAChC,YAAM,WAAW,eAAe,SAAS,EAAE;AAC3C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,aAAO,YAAY;AAAA,QACjB,SAAS,MACP,YAAY,QAAQ,YAAY;AAAA,UAC9B;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc,SAAS,SAAS;AAAA,UAChC;AAAA,QACF,CAAC;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ,MAAY;AAClB,YAAM,EAAE,eAAe,IAAI,qBAAqB,SAAS;AACzD,YAAM,OAAO,qBAAqB,SAAS,EAAE;AAC7C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,eAAe,CAAC,gBAAgB;AACnC,eAAO,EAAE,MAAM,gBAAgB,SAAS,6CAA6C;AAAA,MACvF;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,OAAO,EAAE,KAAK,CAAC;AAC1D,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,qBAAe,YAAY;AAC3B,UAAI;AAAA,QACF,MAAM;AAAA,QACN,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,OAAO;AAAA,MACT,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IAEA,gBAAgB,CAAO,SAAiB,SAAqC;AAC3E,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,eAAe,EAAE,SAAS,KAAK,CAAC;AAC3E,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,aAAO;AAAA,IACT;AAAA,IAEA,eAAe,CAAO,SAAiB,KAAa,SAAiB,aAAqB;AACxF,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,cAAc;AAAA,QACvD;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa;AAAA,MACf,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,aAAO;AAAA,IACT;AAAA,IAEA,SAAS,CAAO,SAAiB,YAAoB;AACnD,YAAM,OAAO,qBAAqB,SAAS,EAAE;AAC7C,YAAM,QAAQ,qBAAqB,SAAS,EAAE;AAC9C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,IAAI;AAAA,QAC7C;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf;AAAA,MACF,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,aAAO;AAAA,IACT;AAAA,IAEA,aAAa,CAAO,KAAa,SAAiB,SAAiB,YAAoB;AACrF,YAAM,QAAQ,qBAAqB,SAAS,EAAE;AAC9C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,YAAY;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf,KAAK;AAAA,QACL;AAAA,MACF,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,aAAO;AAAA,IACT;AAAA,IAEA,YAAY,CAAO,KAAa,SAAiB,YAAoB;AACnE,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,WAAW;AAAA,QACpD;AAAA,QACA;AAAA,QACA,eAAe;AAAA,MACjB,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AACxB,aAAO;AAAA,IACT;AAAA,IAEA,QAAQ,CAAO,kBAA0B;AACvC,YAAM,EAAE,MAAM,OAAO,SAAS,IAAI,qBAAqB,SAAS;AAChE,YAAM,EAAE,gBAAgB,UAAU,IAAI,qBAAqB,SAAS;AACpE,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,eAAe,CAAC,gBAAgB;AACnC,eAAO,EAAE,MAAM,gBAAgB,SAAS,6CAA6C;AAAA,MACvF;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,OAAO;AAAA,QAChD;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa;AAAA,MACf,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,cAAM,QAAQ,cAAc,QAAQ,SAAS,MAAM,MAAO,SAAS,MAAM;AACzE,uBAAe,SAAS,KAAK;AAC7B,YAAI;AAAA,UACF,MAAM,SAAS;AAAA,UACf,OAAO;AAAA,QACT,CAAC;AAAA,MACH,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,SAAS,CAAO,kBAA0B;AACxC,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,WAAW,aAAa;AACnE,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,aAAa,SAAS,OAAO,gBAAgB,SAAS,MAAM,CAAC;AAAA,MACrE;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,MAAM;AACX,UAAI;AAAA,QACF,MAAM;AAAA,QACN,aAAa;AAAA,QACb,WAAW;AAAA,QACX,OAAO;AAAA,QACP,OAAO;AAAA,QACP,YAAY;AAAA,MACd,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;;;AU5bD,SAAS,UAAAC,eAAuC;AAqFzC,IAAM,4BAA4B,MAAoD;AAC3F,SAAOC,QAA4B,CAAC,KAAK,QAAQ;AAC/C,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,UAAU;AAAA,MACV,aAAa,EAAE,SAAS,OAAO,MAAM,UAAU,SAAS,MAAM;AAAA,MAC9D,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB,WAAW;AAAA,MACX,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU,CAAC;AAAA,MACX,eAAe;AAAA,MAEf,UAAU,CAAC,UAAyB,IAAI,EAAE,MAAM,CAAC;AAAA,MAEjD,WAAW,CAAO,OAAe;AArHvC;AAsHQ,YAAI,EAAE,WAAW,MAAM,YAAY,GAAG,CAAC;AACvC,cAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAI,CAAC,aAAa;AAChB,gBAAM,gBAAgB,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAChF,cAAI,EAAE,OAAO,eAAe,WAAW,MAAM,CAAC;AAC9C,iBAAO;AAAA,QACT;AAEA,YAAI;AACF,gBAAM,aAAa,SAAS,EAAE,UAAU;AACxC,gBAAM,aAAa,SAAS,EAAE,WAAW;AACzC,gBAAM,aAAa,SAAS,EAAE,eAAe;AAE7C,gBAAM,WAAW,MAAM,YAAY,YAAY,gBAAgB,EAAE,GAAG,CAAC;AACrE,cAAI,SAAS,SAAS,WAAW;AAC/B,kBAAM,YAAW,oBAAS,MAAM,aAAf,mBAAyB,IAAI,CAAC,YAAS;AArIpE,kBAAAC;AAqIuE,iCAAWA,MAAA,QAAQ,iBAAR,OAAAA,MAAwB,EAAE;AAAA,mBAA/E,YAAqF,CAAC;AACvG,gBAAI,SAAS,WAAW,GAAG;AACzB,uBAAS,KAAK,YAAW,cAAS,MAAM,iBAAf,YAA+B,EAAE,CAAC;AAAA,YAC7D;AACA,gBAAI;AAAA,cACF,MAAM,SAAS;AAAA,cACf,OAAO;AAAA,cACP,WAAW;AAAA,cACX;AAAA,cACA,gBAAe,cAAS,MAAM,kBAAf,YAAgC;AAAA,YACjD,CAAC;AACD,8BAAkB,aAAa;AAE/B,gBAAI,EAAE,eAAe;AACrB,gBAAI,EAAE,kBAAkB;AACxB,gBAAI,EAAE,eAAe;AAAA,UACvB,OAAO;AACL,gBAAI,EAAE,OAAO,UAAU,WAAW,MAAM,CAAC;AAAA,UAC3C;AACA,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAM,gBAAgB,EAAE,MAAM,gBAAgB,SAAS,gBAAgB;AACvE,cAAI,EAAE,OAAO,eAAe,WAAW,MAAM,CAAC;AAC9C,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,QAAQ,CAAO,iBAA2B,YAAyC;AAhKzF;AAiKQ,cAAM,EAAE,YAAY,OAAO,UAAU,iBAAiB,KAAK,IAAI,IAAI;AAEnE,cAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAI,CAAC,aAAa;AAChB,iBAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,QACnE;AAEA,YAAI,EAAE,WAAW,KAAK,CAAC;AACvB,cAAM,WAAW,MAAM,YAAY,YAAY,OAAO;AAAA,UACpD,KAAI,gDAAU,eAAV,YAAwB,+BAAO,eAA/B,YAA6C;AAAA,UACjD,aAAY,wDAAiB,WAAjB,YAA2B,mDAAiB;AAAA,UACxD,gBAAe,wDAAiB,kBAAjB,YAAkC,mDAAiB;AAAA,UAClE;AAAA,QACF,CAAC;AACD,YAAI,EAAE,WAAW,MAAM,CAAC;AAExB,YAAI,SAAS,SAAS,WAAW;AAC/B,cAAI,cAAsC;AAE1C,cAAI,SAAS,MAAM,cAAc,kBAAkB,KAAK;AACtD,gBAAI,6BAAM,WAAW;AACnB,4BAAc;AAAA,YAChB,YAAW,6BAAM,UAAS,aAAa,MAAM;AAC3C,4BAAc;AAAA,YAChB;AAAA,UACF,WAAW,SAAS,MAAM,cAAc,kBAAkB,KAAK;AAC7D,0BAAc;AAAA,UAChB;AAEA,cAAI;AAAA,YACF,aAAa;AAAA,cACX,YAAY,SAAS;AAAA,cACrB,OAAO,MAAM,IAAI,EAAE,aAAa,KAAK,CAAC;AAAA,cACtC;AAAA,YACF;AAAA,YACA,OAAO;AAAA,UACT,CAAC;AACD,4BAAkB,cAAc,kCAAc,EAAE;AAEhD,cAAI,EAAE,UAAU,UAAW;AAAA,QAC7B,OAAO;AACL,cAAI,EAAE,OAAO,SAAS,CAAC;AAAA,QACzB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,MAAY;AACf,cAAM,EAAE,aAAa,WAAW,IAAI,IAAI;AAExC,YAAI,EAAC,2CAAa,eAAc,CAAC,YAAY,WAAW,WAAW;AACjE,iBAAO,EAAE,MAAM,gBAAgB,SAAS,iBAAiB;AAAA,QAC3D;AAEA,cAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAI,CAAC,aAAa;AAChB,iBAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,QACnE;AAEA,YAAI,EAAE,WAAW,KAAK,CAAC;AACvB,cAAM,WAAW,MAAM,YAAY,WAAW,IAAI;AAAA,UAChD,WAAW,YAAY,WAAW;AAAA,QACpC,CAAC;AACD,YAAI,EAAE,WAAW,MAAM,CAAC;AAExB,YAAI,SAAS,SAAS,WAAW;AAC/B,cAAI;AAAA,YACF,UAAU;AAAA,cACR,SAAS,SAAS;AAAA,cAClB,OAAO,MAAM,IAAI,EAAE,aAAa,MAAM,UAAU,KAAK,CAAC;AAAA,YACxD;AAAA,YACA,OAAO;AAAA,UACT,CAAC;AAED,cAAI,YAAY;AACd,gBAAI,EAAE,UAAU,UAAU;AAAA,UAC5B;AAAA,QACF,OAAO;AACL,cAAI,EAAE,OAAO,SAAS,CAAC;AAAA,QACzB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,eAAe,MAAY;AACzB,cAAM,EAAE,WAAW,IAAI,IAAI;AAC3B,cAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAI,CAAC,eAAe,CAAC,YAAY;AAC/B,iBAAO,EAAE,MAAM,gBAAgB,SAAS,iDAAiD;AAAA,QAC3F;AAEA,YAAI,EAAE,WAAW,KAAK,CAAC;AACvB,cAAM,WAAW,MAAM,YAAY,YAAY,cAAc,UAAU;AACvE,YAAI,EAAE,WAAW,MAAM,CAAC;AAExB,YAAI,SAAS,SAAS,WAAW;AAC/B,cAAI,EAAE,OAAO,KAAK,CAAC;AACnB,cAAI,EAAE,UAAU,UAAU;AAAA,QAC5B,OAAO;AACL,cAAI,EAAE,OAAO,SAAS,CAAC;AAAA,QACzB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,oBAAoB,MAAY;AAC9B,cAAM,EAAE,WAAW,IAAI,IAAI;AAC3B,cAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAI,CAAC,eAAe,CAAC,YAAY;AAC/B,iBAAO,EAAE,MAAM,gBAAgB,SAAS,iDAAiD;AAAA,QAC3F;AAEA,YAAI,EAAE,WAAW,KAAK,CAAC;AACvB,cAAM,WAAW,MAAM,YAAY,YAAY,mBAAmB,EAAE,IAAI,WAAW,CAAC;AACpF,YAAI,EAAE,WAAW,MAAM,CAAC;AAExB,YAAI,SAAS,SAAS,WAAW;AAC/B,cAAI,EAAE,OAAO,KAAK,CAAC;AACnB,cAAI,EAAE,UAAU,UAAU;AAAA,QAC5B,OAAO;AACL,cAAI,EAAE,OAAO,SAAS,CAAC;AAAA,QACzB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,UAAU,CAAC,UAAiB;AAC1B,YAAI,EAAE,MAAM,CAAC;AACb,YAAI,EAAE,eAAe;AACrB,YAAI,EAAE,kBAAkB;AAAA,MAC1B;AAAA,MAEA,aAAa,CAAC,UAAiB;AAC7B,YAAI,EAAE,UAAU,MAAM,CAAC;AACvB,YAAI,EAAE,eAAe;AACrB,YAAI,EAAE,kBAAkB;AAAA,MAC1B;AAAA,MAEA,aAAa,CAAC,aAAqB;AACjC,YAAI,EAAE,SAAS,CAAC;AAChB,YAAI,EAAE,eAAe;AACrB,YAAI,EAAE,kBAAkB;AAAA,MAC1B;AAAA,MAEA,oBAAoB,CAAC,YAAqB;AACxC,YAAI,EAAE,iBAAiB,QAAQ,CAAC;AAAA,MAClC;AAAA,MAEA,WAAW,MAAY;AArT7B;AAsTQ,cAAM,EAAE,YAAY,OAAO,UAAU,MAAM,SAAS,IAAI,IAAI;AAE5D,YAAI,CAAC,MAAM;AACT,iBAAO,EAAE,MAAM,gBAAgB,SAAS,UAAU;AAAA,QACpD;AAEA,cAAM,QAAO,UAAK,SAAL,YAAa;AAC1B,YAAI,SAAS,aAAa,KAAK;AAC7B,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,SAAS;AAAA,UACX;AAAA,QACF;AAEA,cAAM,MAAK,gDAAU,eAAV,YAAwB,+BAAO,eAA/B,aAA6C,UAAK,OAAL,mBAAS;AACjE,YAAI,CAAC,IAAI;AACP,iBAAO,EAAE,MAAM,gBAAgB,SAAS,iBAAiB;AAAA,QAC3D;AAEA,cAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAI,CAAC,aAAa;AAChB,iBAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,QACnE;AAEA,cAAM,WAAW,MAAM,YAAY,QAAQ,QAAQ;AAAA,UACjD;AAAA,UACA,MAAM;AAAA,UACN,KAAK;AAAA,QACP,CAAC;AAED,YAAI,SAAS,SAAS,WAAW;AAC/B,cAAI,EAAE,OAAO,KAAK,CAAC;AACnB,cAAI,YAAY;AACd,gBAAI,EAAE,UAAU,UAAU;AAAA,UAC5B;AAAA,QACF,OAAO;AACL,cAAI,EAAE,OAAO,SAAS,CAAC;AAAA,QACzB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,MAAM;AACX,YAAI;AAAA,UACF,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,iBAAiB;AAAA,UACjB,aAAa;AAAA,UACb,UAAU;AAAA,UACV,aAAa,EAAE,SAAS,OAAO,MAAM,UAAU,SAAS,MAAM;AAAA,UAC9D,eAAe;AAAA,UACf,kBAAkB;AAAA,UAClB,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AAAA,MAEA,mBAAmB,MAAM;AAnX/B;AAoXQ,cAAM,EAAE,MAAM,OAAO,SAAS,IAAI,IAAI;AACtC,cAAM,aAAa,aAAa,SAAS,EAAE;AAE3C,YAAI,CAAC,MAAM;AACT,cAAI,EAAE,aAAa,EAAE,SAAS,OAAO,MAAM,UAAU,SAAS,MAAM,EAAE,CAAC;AACvE;AAAA,QACF;AAEA,cAAM,QAAO,UAAK,SAAL,YAAa,aAAa;AACvC,cAAM,aAAY,UAAK,cAAL,YAAkB,kBAAkB;AAEtD,cAAM,gBAAe,UAAK,iBAAL,YAAqB;AAC1C,YAAI,cAAc;AAElB,YAAI,cAAc,kBAAkB,OAAO,eAAe,YAAY;AACpE,wBAAc;AAAA,QAChB;AAEA,YAAI,aAAiC;AACrC,YAAI,UAAU;AACd,YAAI,eAAe;AAEnB,cAAM,gBAAgB,CAAC,aAAa,OAAO,aAAa,OAAO,aAAa,IAAI;AAEhF,gBAAQ,MAAM;AAAA,UACZ,KAAK,aAAa;AAChB,yBAAa;AAEb,iBAAI,UAAK,sBAAL,mBAAwB,UAAU;AACpC,kBAAI,CAAC,WAAU,WAAM,aAAN,mBAAgB,WAAU,CAAC,UAAW;AACnD,+BAAe;AAAA,cACjB;AAAA,YACF;AACA;AAAA,UACF,KAAK,aAAa;AAChB,oBAAQ,KAAK,kBAAkB;AAAA,cAC7B,KAAK,sBAAsB;AAAA,cAC3B,KAAK,sBAAsB;AACzB,6BAAa;AACb;AAAA,cACF;AACE,6BAAa;AACb;AAAA,YACJ;AACA,gBAAI,EAAE,mBAAkB,UAAK,YAAL,YAAgB,KAAK,CAAC;AAC9C;AAAA,UACF,KAAK,aAAa;AAChB,gBAAI,KAAK,WAAW;AAClB,2BAAa;AAAA,YACf,OAAO;AACL,2BAAa;AAAA,YACf;AACA;AAAA,UACF,KAAK,aAAa;AAChB,gBAAI,KAAK,WAAW;AAClB,2BAAa;AAAA,YACf,OAAO;AACL,2BAAa;AAAA,YACf;AACA;AAAA,UACF;AACE,yBAAa,cAAc,kBAAkB,MAAM,WAAW;AAC9D,gBAAI,KAAK,WAAW;AAClB,2BAAa;AAAA,YACf;AACA,sBAAU,CAAC,cAAc,SAAS,IAAI;AACtC;AAAA,QACJ;AAEA,YAAI;AAAA,UACF,aAAa;AAAA,YACX,SAAS,eAAe;AAAA,YACxB,MAAM;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MAEA,gBAAgB,MAAM;AACpB,cAAM,EAAE,KAAK,IAAI,IAAI;AACrB,cAAM,aAAa,aAAa,SAAS,EAAE;AAE3C,YAAI,CAAC,MAAM;AACT;AAAA,QACF;AAEA,YAAI,QAAuB;AAE3B,cAAM,QAAQ,oBAAI,KAAK;AACvB,cAAM,wBAAwB,MAAM,kBAAkB;AACtD,cAAM,mBAAmB,KAAK,OAAO,KAAK,IAAI,IAAI,wBAAwB,KAAK,OAAQ,GAAI;AAE3F,YACE,KAAK,SAAS,aAAa,OAC3B,KAAK,cAAc,kBAAkB,OACrC,KAAK,gBACL,aAAa,KAAK,cAClB;AACA,kBAAQ;AAAA,QACV,WAAW,KAAK,iBAAiB,KAAK,YAAY,KAAK,iBAAiB,KAAK,UAAU;AACrF,kBAAQ;AAAA,QACV,WAAW,KAAK,uBAAuB,KAAK,eAAe,KAAK,eAAe,KAAK,qBAAqB;AACvG,kBAAQ;AAAA,QACV,WAAW,KAAK,qBAAqB,GAAG;AACtC,kBAAQ;AAAA,QACV,WAAW,KAAK,kBAAkB,KAAK,iBAAiB,kBAAkB;AACxE,kBAAQ;AAAA,QACV,WAAW,KAAK,cAAc,KAAK,aAAa,kBAAkB;AAChE,kBAAQ;AAAA,QACV,WAAW,KAAK,oBAAoB,OAAO;AACzC,kBAAQ;AAAA,QACV;AAEA,YAAI,EAAE,eAAe,MAAM,CAAC;AAAA,MAC9B;AAAA,MAEA,gBAAgB,MAAM;AAxe5B;AAyeQ,cAAM,EAAE,MAAM,OAAO,UAAU,SAAS,IAAI,IAAI;AAChD,YAAI,CAAC,MAAM;AACT,cAAI,EAAE,YAAY,EAAE,CAAC;AACrB;AAAA,QACF;AAEA,cAAM,aAAY,sDAAU,UAAV,YAAmB,+BAAO,UAA1B,YAAmC,6BAAM,iBAAzC,YAAyD;AAC3E,YAAI,EAAE,YAAY,YAAY,SAAS,CAAC;AAAA,MAC1C;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACnfA,SAAS,UAAAC,eAAc;AA+BhB,IAAM,uBAAuB,CAAC,kBAAmC;AACtE,SAAOC,QAAuB,CAAC,KAAK,SAAS;AAAA,IAC3C,MAAM,CAAC;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ,iCACH,gBADG;AAAA,MAEN,cAAc,cAAc,gBAAgB;AAAA,IAC9C;AAAA,IACA,SAAS,CAAC;AAAA,IAEV,cAAc,CAAC,cAAwC;AACrD,UAAI,CAAC,WAAW;AAAA,QACd,QAAQ,kCAAK,MAAM,SAAW;AAAA,MAChC,EAAE;AAAA,IACJ;AAAA,IAEA,WAAW,CAAO,YAAqB,YAAyC;AAC9E,YAAM,EAAE,OAAO,IAAI,IAAI;AACvB,YAAM,WAAW,eAAe,SAAS,EAAE;AAC3C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,eAAe,CAAC,OAAO,uBAAuB;AACjD,eAAO,EAAE,MAAM,gBAAgB,SAAS,2CAA2C;AAAA,MACrF;AAEA,UAAI;AAAA,QACF,aAAa;AAAA,QACb,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,QACP,WAAW;AAAA,QACX,YAAY,cAAc;AAAA,QAC1B,SAAS,WAAW,CAAC;AAAA,MACvB,CAAC;AAED,YAAM,WAAW,MAAM,YAAY,YAAY,UAAU;AAAA,QACvD,QAAQ,OAAO;AAAA,QACf,cAAc;AAAA,QACd,KAAK,OAAO;AAAA,QACZ,MAAM;AAAA,QACN,UAAU;AAAA,QACV,KAAK;AAAA,SACF,QACJ;AAED,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI;AAAA,UACF,MAAM,SAAS;AAAA,UACf,SAAS,SAAS,MAAM,WAAW,OAAO;AAAA,UAC1C,WAAW;AAAA,UACX,OAAO;AAAA,UACP,aAAa,IAAI,EAAE,cAAc;AAAA,QACnC,CAAC;AAAA,MACH,OAAO;AACL,YAAI,EAAE,OAAO,UAAU,WAAW,MAAM,CAAC;AAAA,MAC3C;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,UAAU,MAAY;AACpB,YAAM,EAAE,QAAQ,MAAM,SAAS,aAAa,YAAY,QAAQ,IAAI,IAAI;AACxE,YAAM,WAAW,eAAe,SAAS,EAAE;AAC3C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,eAAe,CAAC,OAAO,yBAAyB,CAAC,SAAS;AAC7D,eAAO,EAAE,MAAM,gBAAgB,SAAS,2CAA2C;AAAA,MACrF;AAEA,UAAI,CAAC,SAAS;AACZ,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpC,YAAM,WAAW,MAAM,YAAY,YAAY,UAAU;AAAA,QACvD,QAAQ,OAAO;AAAA,QACf,cAAc;AAAA,QACd,KAAK,OAAO;AAAA,QACZ,MAAM,eAAe,OAAO,gBAAgB;AAAA,QAC5C,UAAU;AAAA,QACV,KAAK,cAAc;AAAA,SAChB,QACJ;AAED,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI;AAAA,UACF,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,KAAK;AAAA,UACjC,SAAS,SAAS,MAAM,WAAW,OAAO;AAAA,UAC1C,aAAa,cAAc;AAAA,UAC3B,WAAW;AAAA,UACX,OAAO;AAAA,QACT,CAAC;AAAA,MACH,OAAO;AACL,YAAI,EAAE,OAAO,UAAU,WAAW,MAAM,CAAC;AAAA,MAC3C;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,MAAM;AACX,UAAI;AAAA,QACF,MAAM,CAAC;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,QACP,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF,EAAE;AACJ;;;AChJA,SAAS,UAAAC,gBAAc;AAiBhB,IAAM,eAAeC,SAAkB,CAAC,QAAQ;AACrD,SAAO;AAAA,IACL,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IAEP,YAAY,MAAY;AACtB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpC,YAAM,WAAW,MAAM,YAAY,QAAQ,UAAU;AAAA,QACnD,cAAc,eAAe,SAAS,EAAE;AAAA,MAC1C,CAAC;AACD,UAAI,EAAE,WAAW,OAAO,OAAO,KAAK,CAAC;AAErC,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,OAAO,SAAS,MAAM,WAAW,CAAC;AAAA,MAC1C,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,MAAM;AACX,UAAI;AAAA,QACF,OAAO;AAAA,QACP,WAAW;AAAA,QACX,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;;;ACrDD,SAAS,UAAAC,gBAAc;AAuBhB,IAAM,wBAAwB,CAAC,kBAAoC;AACxE,SAAOC,SAAwB,CAAC,KAAK,QAAQ;AAC3C,WAAO;AAAA,MACL,MAAM,CAAC;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,MACP,QAAQ;AAAA,MAER,cAAc,CAAC,cAAyC;AACtD,YAAI,CAAC,WAAW;AAAA,UACd,QAAQ,kCAAK,MAAM,SAAW;AAAA,QAChC,EAAE;AAAA,MACJ;AAAA,MAEA,WAAW,MAAY;AACrB,cAAM,EAAE,OAAO,IAAI,IAAI;AACvB,cAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,YAAI,CAAC,eAAe,CAAC,OAAO,mBAAmB;AAC7C,iBAAO,EAAE,MAAM,gBAAgB,SAAS,2CAA2C;AAAA,QACrF;AAEA,YAAI,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpC,cAAM,WAAW,MAAM,YAAY,YAAY,WAAW;AAAA,UACxD,QAAQ,OAAO;AAAA,UACf,UAAU;AAAA,UACV,SAAS;AAAA,YACP,eAAe,eAAe,SAAS,EAAE;AAAA,UAC3C;AAAA,QACF,CAAC;AACD,YAAI,EAAE,WAAW,OAAO,OAAO,KAAK,CAAC;AAErC,YAAI,SAAS,SAAS,WAAW;AAC/B,cAAI,EAAE,MAAM,SAAS,MAAM,CAAC;AAAA,QAC9B,OAAO;AACL,cAAI,EAAE,OAAO,SAAS,CAAC;AAAA,QACzB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,MAAM;AACX,YAAI;AAAA,UACF,MAAM,CAAC;AAAA,UACP,WAAW;AAAA,UACX,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC1EA,SAAS,UAAAC,gBAAc;AAuBhB,IAAM,kBAAkBA,SAAqB,CAAC,SAAS;AAAA;AAAA,EAE5D,QAAQ;AAAA,EACR,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA;AAAA,EAGA,aAAa,CAAC,YAA4B;AACxC,QAAI,EAAE,gBAAgB,SAAS,QAAQ,KAAK,CAAC;AAAA,EAC/C;AAAA,EAEA,cAAc,MAAM;AAClB,QAAI,EAAE,QAAQ,MAAM,CAAC;AAAA,EACvB;AACF,EAAE;;;ACtCF,SAAS,UAAAC,gBAAc;AAwChB,IAAM,kBAAkBC,SAAqB,CAAC,QAAQ;AAC3D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,IAEP,WAAW,MAAY;AACrB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpC,YAAM,WAAW,MAAM,YAAY,WAAW,QAAQ;AAAA,QACpD,SAAS;AAAA,UACP,eAAe,eAAe,SAAS,EAAE;AAAA,QAC3C;AAAA,MACF,CAAC;AACD,UAAI,EAAE,WAAW,OAAO,OAAO,KAAK,CAAC;AAErC,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,MAAM,SAAS,MAAM,CAAC;AAAA,MAC9B,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,eAAe,CAAO,YAAiC;AACrD,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpC,YAAM,WAAW,MAAM,YAAY,WAAW,cAAc,OAAO;AACnE,UAAI,EAAE,WAAW,OAAO,OAAO,KAAK,CAAC;AAErC,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,MAAM,SAAS,MAAM,CAAC;AAC5B,YACE,SAAS,MAAM,kBAAkB,KACjC,SAAS,MAAM,gBAAgB,KAC/B,SAAS,MAAM,yBAAyB,KACxC,SAAS,MAAM,iBAAiB,GAChC;AACA,4BAAkB,iBAAiB;AAAA,QACrC;AAAA,MACF,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,MAAM;AACX,UAAI;AAAA,QACF,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;;;AC1GD,SAAS,UAAAC,gBAAc;AAiBhB,IAAM,iBAAiBC,SAAoB,CAAC,SAAS;AAAA,EAC1D,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EAEP,cAAc,CAAO,UAAoB;AACvC,UAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,QAAI,CAAC,aAAa;AAChB,aAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,IACnE;AAEA,QAAI,EAAE,WAAW,KAAK,CAAC;AACvB,UAAM,WAAW,MAAM,YAAY,UAAU,aAAa,EAAE,OAAO,MAAM,KAAK,GAAG,GAAG,SAAS,EAAE,eAAe,eAAe,SAAS,EAAE,SAAS,EAAE,CAAC;AACpJ,QAAI,EAAE,WAAW,MAAM,CAAC;AAExB,QAAI,SAAS,SAAS,WAAW;AAC/B,UAAI;AAAA,QACF,MAAM,SAAS;AAAA,QACf,OAAO;AAAA,MACT,CAAC;AAAA,IACH,OAAO;AACL,UAAI,EAAE,OAAO,SAAS,CAAC;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAM;AACX,QAAI;AAAA,MACF,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF,EAAE;;;ACnDF,SAAS,UAAAC,gBAAc;AA8BhB,IAAM,uBAAuB,CAAC,kBAAmC;AACtE,SAAOC,SAAuB,CAAC,KAAK,QAAQ;AAC1C,WAAO;AAAA,MACL,MAAM,CAAC;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MAEV,cAAc,CAAC,cAAuB,IAAI,EAAE,UAAU,CAAC;AAAA,MACvD,UAAU,CAAC,UAAyB,IAAI,EAAE,MAAM,CAAC;AAAA,MAEjD,cAAc,CAAC,cAAwC;AACrD,YAAI,CAAC,WAAW;AAAA,UACd,QAAQ,kCAAK,MAAM,SAAW;AAAA,QAChC,EAAE;AAAA,MACJ;AAAA,MAEA,WAAW,CAAO,YAAyC;AACzD,cAAM,EAAE,OAAO,IAAI,IAAI;AACvB,cAAM,EAAE,sBAAsB,wBAAwB,MAAM,IAAI;AAChE,cAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,cAAM,WAAW,eAAe,SAAS,EAAE;AAE3C,YAAI,CAAC,aAAa;AAChB,iBAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,QACnE;AAEA,YAAI,EAAE,SAAS,WAAW,CAAC,EAAE,CAAC;AAE9B,YAAI,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpC,YAAI;AACJ,YAAI,yBAAyB,QAAQ;AACnC,cAAI,CAAC,OAAO;AACV,mBAAO,EAAE,MAAM,gBAAgB,SAAS,wBAAwB;AAAA,UAClE;AACA,qBAAW,MAAM,YAAY,aAAa,cAAc;AAAA,YACtD,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,SAAS,iBAAE,eAAe,YAAa;AAAA,UACzC,CAAC;AAAA,QACH,WAAW,yBAAyB,SAAS,wBAAwB;AACnE,qBAAW,MAAM,YAAY,aAAa,aAAa;AAAA,YACrD,eAAe;AAAA,YACf,QAAQ;AAAA,YACR,SAAS,iBAAE,eAAe,YAAa;AAAA,UACzC,CAAC;AAAA,QACH,OAAO;AACL,cAAI,CAAC,wBAAwB;AAC3B,mBAAO,EAAE,MAAM,gBAAgB,SAAS,kCAAkC;AAAA,UAC5E;AACA,qBAAW,MAAM,YAAY,aAAa,aAAa;AAAA,YACrD,eAAe;AAAA,YACf,QAAQ;AAAA,YACR,SAAS,iBAAE,eAAe,YAAa;AAAA,UACzC,CAAC;AAAA,QACH;AACA,YAAI,EAAE,WAAW,OAAO,OAAO,KAAK,CAAC;AAErC,YAAI,SAAS,SAAS,WAAW;AAC/B,cAAI,EAAE,MAAM,SAAS,MAAM,CAAC;AAAA,QAC9B,OAAO;AACL,cAAI,EAAE,OAAO,SAAS,CAAC;AAAA,QACzB;AACA,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,MAAM;AACX,YAAI;AAAA,UACF,MAAM,CAAC;AAAA,UACP,WAAW;AAAA,UACX,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC3GA,OAAOC,YAAW;AAClB,SAAS,UAAAC,gBAAc;AAahB,IAAM,2BAA2BA,SAA8B,CAAC,SAAS;AAAA,EAC9E,SAAS;AAAA,EAET,MAAM,MAAM,IAAI,EAAE,SAAS,KAAK,CAAC;AAAA,EACjC,MAAM,MAAM,IAAI,EAAE,SAAS,MAAM,CAAC;AACpC,EAAE;AAEK,IAAM,aAAa,CAAC,cAAuB;AAChD,QAAM,EAAE,MAAM,KAAK,IAAI,yBAAyB;AAEhD,EAAAD,OAAM,UAAU,MAAM;AACpB,QAAI,WAAW;AACb,WAAK;AAAA,IACP,OAAO;AACL,WAAK;AAAA,IACP;AAAA,EACF,GAAG,CAAC,WAAW,MAAM,IAAI,CAAC;AAC5B;;;AC9BA,SAAS,UAAAE,gBAAc;AAchB,IAAM,sBAAsBC,SAAyB,CAAC,SAAS;AAAA,EACpE,eAAe;AAAA,EACf,iBAAiB;AAAA,EAEjB,kBAAkB,MAAY;AAC5B,UAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAM,QAAQ,qBAAqB,SAAS,EAAE;AAE9C,QAAI,CAAC,eAAe,CAAC,OAAO;AAC1B;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,YAAY,KAAK,YAAY,KAAK;AACvD,QAAI,OAAO,SAAS,WAAW;AAC7B,UAAI,OAAO,MAAM,YAAY,MAAM;AACjC,YAAI;AAAA,UACF,eAAe;AAAA,UACf,iBAAiB,OAAO;AAAA,QAC1B,CAAC;AAAA,MACH,OAAO;AACL,YAAI;AAAA,UACF,eAAe;AAAA,UACf,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,UAAI;AAAA,QACF,eAAe;AAAA,QACf,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,EACF;AACF,EAAE;;;AC9CF,SAAS,UAAAC,gBAAc;AAyBhB,IAAM,uBAAuBC,SAA0B,CAAC,KAAK,QAAQ;AAC1E,SAAO;AAAA,IACL,MAAM,CAAC;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IACP,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA,IACb,UAAU;AAAA;AAAA,IAGV,WAAW,MAAY;AACrB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,YAAM,WAAW,eAAe,SAAS,EAAE;AAC3C,YAAM,EAAE,SAAS,IAAI,IAAI;AAEzB,UAAI,EAAE,WAAW,MAAM,OAAO,MAAM,aAAa,GAAG,SAAS,MAAM,MAAM,CAAC,EAAE,CAAC;AAC7E,YAAM,WAAW,MAAM,YAAY,gBAAgB,cAAc;AAAA,QAC/D,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,MAAM;AAAA,QACN,SAAS,EAAE,eAAe,SAAS;AAAA,MACrC,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,cAAM,cAAc,SAAS,MAAM,OAAO,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE;AACpE,YAAI;AAAA,UACF,MAAM,SAAS;AAAA,UACf;AAAA,UACA,SAAS,SAAS,MAAM,WAAW;AAAA,UACnC,aAAa;AAAA,UACb,OAAO;AAAA,QACT,CAAC;AAAA,MACH,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,UAAU,MAAY;AACpB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,YAAM,EAAE,SAAS,aAAa,UAAU,KAAK,IAAI,IAAI;AACrD,YAAM,WAAW,eAAe,SAAS,EAAE;AAE3C,UAAI,CAAC,SAAS;AACZ,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpC,YAAM,WAAW,MAAM,YAAY,gBAAgB,cAAc;AAAA,QAC/D,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,MAAM,cAAc;AAAA,QACpB,SAAS,EAAE,eAAe,SAAS;AAAA,MACrC,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,cAAM,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,KAAK;AAC1C,cAAM,cAAc,OAAO,OAAO,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE;AAC5D,YAAI;AAAA,UACF,MAAM;AAAA,UACN;AAAA,UACA,SAAS,SAAS,MAAM,WAAW;AAAA,UACnC,aAAa,cAAc;AAAA,UAC3B,OAAO;AAAA,QACT,CAAC;AAAA,MACH,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,YAAY,CAAO,QAAkB;AACnC,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,YAAM,WAAW,MAAM,YAAY,gBAAgB,KAAK;AAAA,QACtD,KAAK,IAAI,KAAK,GAAG;AAAA,QACjB,SAAS,EAAE,eAAe,eAAe,SAAS,EAAE,SAAS;AAAA,MAC/D,CAAC;AACD,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,MAAM,IAAI,EAAE,KAAK,IAAI,CAAC,MAAO,IAAI,SAAS,EAAE,UAAU,EAAE,IAAI,iCAAK,IAAL,EAAQ,QAAQ,KAAK,KAAI,CAAE,EAAE,CAAC;AAChG,cAAM,cAAc,IAAI,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE;AAChE,YAAI,EAAE,YAAY,CAAC;AAAA,MACrB,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,gBAAgB,CAAC,UAAkB;AACjC,UAAI,EAAE,aAAa,MAAM,CAAC;AAAA,IAC5B;AAAA,IAEA,aAAa,CAAC,SAAiB;AAC7B,YAAM,OAAO,OAAO,IAAI,OAAO;AAC/B,UAAI,EAAE,UAAU,KAAK,CAAC;AAAA,IACxB;AAAA,IAEA,OAAO,MAAM;AACX,UAAI;AAAA,QACF,MAAM,CAAC;AAAA,QACP,WAAW;AAAA,QACX,OAAO;AAAA,QACP,aAAa;AAAA,QACb,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;;;AC3JD,SAAS,UAAAC,gBAAc;AA4BhB,IAAM,sBAAsB,CAAC,kBAAkC;AACpE,SAAOC,SAAsB,CAAC,KAAK,SAAS;AAAA,IAC1C,MAAM,CAAC;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ,iCACH,gBADG;AAAA,MAEN,iBAAiB,cAAc,mBAAmB;AAAA,IACpD;AAAA,IAEA,cAAc,CAAC,cAAuC;AACpD,UAAI,CAAC,WAAW;AAAA,QACd,QAAQ,kCAAK,MAAM,SAAW;AAAA,MAChC,EAAE;AAAA,IACJ;AAAA,IAEA,WAAW,CAAO,UAAmB;AACnC,YAAM,EAAE,OAAO,IAAI,IAAI;AACvB,YAAM,WAAW,eAAe,SAAS,EAAE;AAC3C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,YAAM,cAAc,UAAS,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AAElE,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,YAAY,YAAY;AAAA,QACzD,OAAO;AAAA,QACP,MAAM,OAAO;AAAA,QACb,KAAK,OAAO;AAAA,QACZ,SAAS,EAAE,eAAe,SAAS;AAAA,MACrC,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,cAAM,WAAW,SAAS,MAAM,SAAS,MAAM,SAAS,CAAC;AACzD,YAAI;AAAA,UACF,MAAM,SAAS;AAAA,UACf,SAAS,SAAS,MAAM,WAAW,OAAO;AAAA,UAC1C,OAAO;AAAA,UACP,YAAY,qCAAU;AAAA,UACtB,cAAc;AAAA,QAChB,CAAC;AAAA,MACH,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,UAAU,MAAY;AACpB,YAAM,EAAE,QAAQ,MAAM,YAAY,aAAa,IAAI,IAAI;AACvD,YAAM,WAAW,eAAe,SAAS,EAAE;AAC3C,YAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,CAAC,YAAY;AACf,eAAO,EAAE,MAAM,gBAAgB,SAAS,uBAAuB;AAAA,MACjE;AAEA,UAAI,CAAC,cAAc;AACjB,eAAO,EAAE,MAAM,gBAAgB,SAAS,2CAA2C;AAAA,MACrF;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,YAAY,YAAY;AAAA,QACzD,OAAO;AAAA,QACP,MAAM,OAAO;AAAA,QACb,KAAK,OAAO;AAAA,QACZ;AAAA,QACA,SAAS,EAAE,eAAe,SAAS;AAAA,MACrC,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,cAAM,WAAW,SAAS,MAAM,SAAS,MAAM,SAAS,CAAC;AACzD,YAAI;AAAA,UACF,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,KAAK;AAAA,UACjC,SAAS,SAAS,MAAM,WAAW,OAAO;AAAA,UAC1C,OAAO;AAAA,UACP,YAAY,qCAAU;AAAA,QACxB,CAAC;AAAA,MACH,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,MAAM;AACX,UAAI;AAAA,QACF,MAAM,CAAC;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,EACF,EAAE;AACJ;;;ACzIA,SAAS,UAAAC,gBAAc;AAsBhB,IAAM,gBAAgBA,SAAmB,CAAC,KAAK,SAAS;AAAA,EAC7D,QAAQ;AAAA,EACR,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EAEA,WAAW,CAAC,YAA0B;AACpC,QAAI,EAAE,cAAc,SAAS,QAAQ,KAAK,CAAC;AAAA,EAC7C;AAAA,EAEA,YAAY,MAAM;AAChB,UAAM,EAAE,aAAa,IAAI,IAAI;AAC7B,QAAI,aAAa,SAAS;AACxB,mBAAa,QAAQ;AAAA,IACvB;AACA,QAAI,EAAE,QAAQ,MAAM,CAAC;AAAA,EACvB;AACF,EAAE;;;ACvCF,SAAS,UAAAC,gBAAc;AA6BhB,IAAM,sBAAsB,CAAC,kBAAkC;AACpE,SAAOC,SAAsB,CAAC,KAAK,QAAQ;AACzC,WAAO;AAAA,MACL,MAAM,CAAC;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ,iCACH,gBADG;AAAA,QAEN,iBAAiB,cAAc,mBAAmB;AAAA,MACpD;AAAA,MAEA,cAAc,CAAC,cAAuC;AACpD,YAAI,CAAC,WAAW;AAAA,UACd,QAAQ,gDACH,MAAM,SACN,YAFG;AAAA,YAGN,iBAAiB,UAAU,mBAAmB,MAAM,OAAO;AAAA,UAC7D;AAAA,QACF,EAAE;AAAA,MACJ;AAAA,MAEA,WAAW,CAAO,WAAoB,YAAqB;AACzD,cAAM,EAAE,OAAO,IAAI,IAAI;AACvB,cAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,YAAI,CAAC,aAAa;AAChB,iBAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,QACnE;AAGA,YAAI;AAAA,UACF,aAAa;AAAA,UACb,MAAM,CAAC;AAAA,UACP,SAAS;AAAA,UACT,OAAO;AAAA,UACP,WAAW;AAAA,UACX;AAAA,UACA;AAAA,QACF,CAAC;AAED,cAAM,WAAW,MAAM,YAAY,WAAW,gBAAgB;AAAA,UAC5D,UAAU;AAAA,UACV,QAAQ,OAAO,iBAAiB;AAAA,UAChC,MAAM;AAAA,UACN,KAAK,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA,SAAS,EAAE,eAAe,eAAe,SAAS,EAAE,SAAS;AAAA,QAC/D,CAAC;AAED,YAAI,SAAS,SAAS,WAAW;AAC/B,cAAI;AAAA,YACF,MAAM,SAAS;AAAA,YACf,SAAS,SAAS,MAAM,WAAW,OAAO;AAAA,YAC1C,WAAW;AAAA,YACX,OAAO;AAAA,UACT,CAAC;AAAA,QACH,OAAO;AACL,cAAI,EAAE,OAAO,UAAU,WAAW,MAAM,CAAC;AAAA,QAC3C;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,UAAU,MAAY;AACpB,cAAM,EAAE,QAAQ,MAAM,aAAa,SAAS,WAAW,QAAQ,IAAI,IAAI;AACvE,cAAM,cAAc,qBAAqB,SAAS,EAAE;AAEpD,YAAI,CAAC,aAAa;AAChB,iBAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,QACnE;AAEA,YAAI,CAAC,SAAS;AACZ,iBAAO,EAAE,MAAM,gBAAgB,SAAS,uBAAuB;AAAA,QACjE;AAEA,YAAI,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAEpC,cAAM,WAAW,MAAM,YAAY,WAAW,gBAAgB;AAAA,UAC5D,UAAU;AAAA,UACV,QAAQ,OAAO,iBAAiB;AAAA,UAChC,MAAM,cAAc,OAAO;AAAA,UAC3B,KAAK,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA,SAAS,EAAE,eAAe,eAAe,SAAS,EAAE,SAAS;AAAA,QAC/D,CAAC;AAED,YAAI,SAAS,SAAS,WAAW;AAC/B,cAAI;AAAA,YACF,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,KAAK;AAAA,YACjC,SAAS,SAAS,MAAM,WAAW,OAAO;AAAA,YAC1C,aAAa,cAAc;AAAA,YAC3B,WAAW;AAAA,YACX,OAAO;AAAA,UACT,CAAC;AAAA,QACH,OAAO;AACL,cAAI,EAAE,OAAO,UAAU,WAAW,MAAM,CAAC;AAAA,QAC3C;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,MAAM;AACX,YAAI;AAAA,UACF,MAAM,CAAC;AAAA,UACP,WAAW;AAAA,UACX,OAAO;AAAA,UACP,aAAa;AAAA,UACb,SAAS;AAAA,UACT,WAAW;AAAA,UACX,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACrJA,SAAS,UAAAC,gBAAc;AAuEhB,IAAM,uBAAuBC,SAA0B,CAAC,KAAK,QAAQ;AAE1E,SAAO;AAAA,IACL,UAAU;AAAA,IACV,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,WAAW;AAAA,IACX,UAAU;AAAA,IACV,KAAK;AAAA,IACL,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,OAAO;AAAA,IACP,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,0BAA0B;AAAA,IAC1B,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,+BAA+B;AAAA,IAC/B,uBAAuB;AAAA,IACvB,wBAAwB;AAAA,IACxB,WAAW;AAAA,IACX,OAAO;AAAA,IAEP,aAAa,CAAC,UAAkB,IAAI,EAAE,UAAU,MAAM,CAAC;AAAA,IACvD,aAAa,CAAC,UAAkB,IAAI,EAAE,UAAU,MAAM,CAAC;AAAA,IACvD,oBAAoB,CAAC,UAAkB,IAAI,EAAE,iBAAiB,MAAM,CAAC;AAAA,IACrE,kBAAkB,CAAC,UAAkB,IAAI,EAAE,eAAe,MAAM,CAAC;AAAA,IACjE,cAAc,CAAC,UAAkB,IAAI,EAAE,WAAW,MAAM,CAAC;AAAA,IACzD,aAAa,CAAC,UAAkB,IAAI,EAAE,UAAU,MAAM,CAAC;AAAA,IACvD,QAAQ,CAAC,UAAkB,IAAI,EAAE,KAAK,MAAM,CAAC;AAAA,IAC7C,YAAY,CAAC,UAAkB,IAAI,EAAE,SAAS,MAAM,CAAC;AAAA,IACrD,YAAY,CAAC,UAAkB,IAAI,EAAE,SAAS,MAAM,CAAC;AAAA,IACrD,WAAW,CAAC,UAAkB,IAAI,EAAE,QAAQ,MAAM,CAAC;AAAA,IACnD,cAAc,CAAC,UAAkB,IAAI,EAAE,WAAW,MAAM,CAAC;AAAA,IACzD,UAAU,CAAC,UAAkB,IAAI,EAAE,OAAO,MAAM,CAAC;AAAA,IACjD,gBAAgB,CAAC,UAAkB,IAAI,EAAE,aAAa,MAAM,CAAC;AAAA,IAC7D,6BAA6B,CAAC,UAAmB,IAAI,EAAE,0BAA0B,MAAM,CAAC;AAAA,IACxF,wBAAwB,CAAC,UAAmB,IAAI,EAAE,qBAAqB,MAAM,CAAC;AAAA,IAC9E,sBAAsB,CAAC,UAAmB;AACxC,UAAI,EAAE,mBAAmB,MAAM,CAAC;AAChC,UAAI,CAAC,OAAO;AACV,YAAI;AAAA,UACF,wBAAwB;AAAA,UACxB,sBAAsB;AAAA,UACtB,+BAA+B;AAAA,UAC/B,uBAAuB;AAAA,UACvB,wBAAwB;AAAA,QAC1B,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,2BAA2B,CAAC,UAAmB,IAAI,EAAE,wBAAwB,MAAM,CAAC;AAAA,IACpF,yBAAyB,CAAC,UAAmB,IAAI,EAAE,sBAAsB,MAAM,CAAC;AAAA,IAChF,kCAAkC,CAAC,UAAmB,IAAI,EAAE,+BAA+B,MAAM,CAAC;AAAA,IAClG,0BAA0B,CAAC,UAAmB,IAAI,EAAE,uBAAuB,MAAM,CAAC;AAAA,IAClF,2BAA2B,CAAC,UAAmB,IAAI,EAAE,wBAAwB,MAAM,CAAC;AAAA,IACpF,UAAU,CAAC,UAAgC,IAAI,EAAE,OAAO,MAAM,CAAC;AAAA,IAE/D,mBAAmB,CAAC,kBAA0B,aAAqB,qBAA6B;AAC9F,UAAI;AAAA,QACF,gBAAgB;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,WAAW,MAAM;AACf,UAAI;AAAA,QACF,UAAU;AAAA,QACV,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,eAAe;AAAA,QACf,WAAW;AAAA,QACX,UAAU;AAAA,QACV,KAAK;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,OAAO;AAAA,QACP,aAAa;AAAA,QACb,gBAAgB;AAAA,QAChB,0BAA0B;AAAA,QAC1B,qBAAqB;AAAA,QACrB,mBAAmB;AAAA,QACnB,wBAAwB;AAAA,QACxB,sBAAsB;AAAA,QACtB,+BAA+B;AAAA,QAC/B,uBAAuB;AAAA,QACvB,wBAAwB;AAAA,QACxB,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IAEA,SAAS,MAAY;AA5KzB;AA6KM,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAM,OAAO,qBAAqB,SAAS,EAAE;AAC7C,YAAM,QAAQ,qBAAqB,SAAS,EAAE;AAC9C,YAAM,gBAAgB,IAAI,EAAE;AAE5B,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,IAAI;AAAA,QAC7C;AAAA,QACA;AAAA,QACA,eAAe,cAAc,QAAQ,MAAM,EAAE;AAAA,QAC7C,SAAS;AAAA,MACX,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,UAAS,cAAS,MAAM,YAAf,YAA0B,IAAI,OAAO,KAAK,CAAC;AAAA,MAC5D,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,aAAa,MAAY;AACvB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAM,QAAQ,qBAAqB,SAAS,EAAE;AAC9C,YAAM,MAAM,IAAI,EAAE;AAClB,YAAM,UAAU,IAAI,EAAE;AACtB,YAAM,gBAAgB,IAAI,EAAE;AAE5B,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,YAAY;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe,cAAc,QAAQ,MAAM,EAAE;AAAA,QAC7C,KAAK;AAAA,QACL,SAAS;AAAA,MACX,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,OAAO,KAAK,CAAC;AAAA,MACrB,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,UAAU,MAAY;AAvO1B;AAwOM,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAM,OAAO,qBAAqB,SAAS,EAAE;AAC7C,YAAM,QAAQ,qBAAqB,SAAS,EAAE;AAC9C,YAAM,aAAa,qBAAqB,SAAS,EAAE;AACnD,YAAM,KAAK,qBAAqB,SAAS,EAAE;AAC3C,YAAM,WAAW,qBAAqB,SAAS,EAAE;AACjD,YAAM,gBAAgB,qBAAqB,SAAS,EAAE;AACtD,YAAM,2BAA2B,qBAAqB,SAAS,EAAE;AACjE,YAAM,gBAAgB,IAAI,EAAE;AAE5B,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,YAAY,SAAS;AAAA,QACtD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,IAAI,EAAE;AAAA,QAChB,UAAU,IAAI,EAAE;AAAA,QAChB,iBAAiB,IAAI,EAAE;AAAA,QACvB,WAAW,IAAI,EAAE;AAAA,QACjB,UAAU,IAAI,EAAE;AAAA,QAChB,eAAe,cAAc,QAAQ,MAAM,EAAE;AAAA,QAC7C,KAAK,IAAI,EAAE;AAAA,QACX,SAAS,IAAI,EAAE;AAAA,QACf,0BAAyB,SAAI,EAAE,mBAAN,mBAAsB;AAAA,QAC/C,qBAAoB,SAAI,EAAE,mBAAN,mBAAsB;AAAA,QAC1C,0BAAyB,SAAI,EAAE,mBAAN,mBAAsB;AAAA,QAC/C,gBAAgB,IAAI,EAAE,yBAAyB,MAAM;AAAA,QACrD,cAAc,IAAI,EAAE,uBAAuB,MAAM;AAAA,QACjD,uBAAuB,IAAI,EAAE,gCAAgC,MAAM;AAAA,QACnE,eAAe,IAAI,EAAE,wBAAwB,MAAM;AAAA,QACnD,gBAAgB,IAAI,EAAE,yBAAyB,MAAM;AAAA,QACrD,SAAS,EAAE,eAAe,eAAe,SAAS,EAAE,SAAS;AAAA,MAC/D,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,OAAO,KAAK,CAAC;AACnB,0BAAkB,gBAAgB;AAAA,MACpC,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,YAAY,MAAY;AACtB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAM,OAAO,qBAAqB,SAAS,EAAE;AAC7C,YAAM,QAAQ,qBAAqB,SAAS,EAAE;AAE9C,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,IAAI;AAAA,QAC7C;AAAA,QACA;AAAA,QACA,eAAe,IAAI,EAAE,cAAc,QAAQ,MAAM,EAAE;AAAA,QACnD,SAAS;AAAA,MACX,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,OAAO,KAAK,CAAC;AAAA,MACrB,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,WAAW,MAAY;AACrB,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,YAAM,QAAQ,qBAAqB,SAAS,EAAE;AAC9C,YAAM,UAAU,IAAI,EAAE;AAEtB,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AAEA,UAAI,EAAE,WAAW,KAAK,CAAC;AACvB,YAAM,WAAW,MAAM,YAAY,QAAQ,YAAY;AAAA,QACrD;AAAA,QACA,KAAK,IAAI,EAAE;AAAA,QACX;AAAA,QACA,eAAe,IAAI,EAAE;AAAA,QACrB,KAAK;AAAA,QACL,SAAS;AAAA,MACX,CAAC;AACD,UAAI,EAAE,WAAW,MAAM,CAAC;AAExB,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,OAAO,KAAK,CAAC;AAAA,MACrB,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,MAAM;AACX,UAAI;AAAA,QACF,WAAW;AAAA,QACX,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;;;AC3VD,SAAS,UAAAC,gBAAc;AAgBhB,IAAM,kBAAkBC,SAAqB,CAAC,QAAQ;AAC3D,SAAO;AAAA,IACH,MAAM,CAAC;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,IAEP,WAAW,CAAO,YAAoB;AACpC,YAAM,cAAc,qBAAqB,SAAS,EAAE;AACpD,UAAI,CAAC,aAAa;AAChB,eAAO,EAAE,MAAM,gBAAgB,SAAS,yBAAyB;AAAA,MACnE;AACA,YAAM,WAAW,MAAM,YAAY,WAAW,SAAS,EAAE,SAAS,QAAQ,CAAC;AAC3E,UAAI,SAAS,SAAS,WAAW;AAC/B,YAAI,EAAE,MAAM,SAAS,MAAM,CAAC;AAAA,MAC9B,OAAO;AACL,YAAI,EAAE,OAAO,SAAS,CAAC;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,MAAM;AACX,UAAI;AAAA,QACF,MAAM,CAAC;AAAA,QACP,WAAW;AAAA,QACX,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;","names":["create","create","create","create","create","create","create","create","React","MatomoTracker","React","create","create","create","create","create","_a","create","create","create","create","create","create","create","create","create","create","create","create","create","React","create","create","create","create","create","create","create","create","create","create","create","create","create","create"]}